import { For, Show, createMemo, createEffect, createSignal } from 'solid-js' import type { Shout, Topic } from '../../graphql/types.gen' import Row3 from '../Feed/Row3' import Row2 from '../Feed/Row2' import Beside from '../Feed/Beside' import { ArticleCard } from '../Feed/Card' import '../../styles/Topic.scss' import { FullTopic } from '../Topic/Full' import { t } from '../../utils/intl' import { params } from '../../stores/router' import { useArticlesStore } from '../../stores/zine/articles' import { useStore } from '@nanostores/solid' import { unique } from '../../utils' import { useTopicsStore } from '../../stores/zine/topics' import { byCreated, sortBy } from '../../utils/sortby' interface TopicProps { topic: Topic topicArticles: Shout[] } export const TopicPage = (props: TopicProps) => { const args = useStore(params) const { getArticlesByTopics } = useArticlesStore({ sortedArticles: props.topicArticles }) const [topicAuthors, setTopicAuthors] = createSignal([]) const sortedArticles = createMemo(() => { const aaa = getArticlesByTopics()[props.topic.slug] || [] aaa.forEach((a: Shout) => { a.topics?.forEach((t: Topic) => { if (props.topic.slug === t.slug) { setTopicAuthors((aaa) => [...aaa, a]) } }) }) return args()['by'] ? sortBy(aaa, args()['by']) : sortBy(aaa, byCreated) }) const { getTopicEntities } = useTopicsStore({ topics: [props.topic] }) const topic = createMemo(() => getTopicEntities()[props.topic.slug] || props.topic) const title = createMemo(() => { const m = args()['by'] if (m === 'viewed') return t('Top viewed') if (m === 'rating') return t('Top rated') if (m === 'commented') return t('Top discussed') return t('Top recent') }) return (
{`${t('Show')} `} {t('All posts')}

{title()}

{(a: Shout) => (
)}
5}>
) }