import { For, Show, createMemo, onMount, createSignal } from 'solid-js' import type { Shout } from '../../graphql/types.gen' import { Row3 } from '../Feed/Row3' import { Row2 } from '../Feed/Row2' import { Beside } from '../Feed/Beside' import styles from '../../styles/Topic.module.scss' import { t } from '../../utils/intl' import { useRouter } from '../../stores/router' import { useArticlesStore } from '../../stores/zine/articles' import { restoreScrollPosition, saveScrollPosition } from '../../utils/scroll' import { splitToPages } from '../../utils/splitToPages' import { clsx } from 'clsx' import Slider from '../Feed/Slider' import { Row1 } from '../Feed/Row1' import { loadLayoutShouts } from '../../stores/zine/layouts' type LayoutPageSearchParams = { layout: 'audio' | 'video' | 'artworks' | 'literature' } interface LayoutProps { layout: string shouts: Shout[] } export const PRERENDERED_ARTICLES_COUNT = 21 const LOAD_MORE_PAGE_SIZE = 9 // Row3 + Row3 + Row3 export const LayoutView = (props: LayoutProps) => { const { searchParams, changeSearchParam } = useRouter() const [isLoadMoreButtonVisible, setIsLoadMoreButtonVisible] = createSignal(false) const { sortedArticles } = useArticlesStore({ sortedArticles: props.shouts }) const layout = createMemo(() => props.layout) const loadMoreLayout = async (layout: string) => { saveScrollPosition() const { hasMore } = await loadLayoutShouts({ layout, amount: LOAD_MORE_PAGE_SIZE, offset: sortedArticles().length }) setIsLoadMoreButtonVisible(hasMore) restoreScrollPosition() } onMount(async () => { if (sortedArticles().length === PRERENDERED_ARTICLES_COUNT) { loadMoreLayout(searchParams().layout) } }) const title = createMemo(() => { const l = searchParams().layout if (l === 'audio') return t('Audio') if (l === 'video') return t('Video') if (l === 'artworks') return t('Artworks') return t('Literature') }) const pages = createMemo(() => splitToPages(sortedArticles(), PRERENDERED_ARTICLES_COUNT, LOAD_MORE_PAGE_SIZE) ) const ModeSwitcher = () => (
{`${t('Show')} `} {t('All posts')}
) return (

{title()}

5}> {(page) => ( <> )}

) }