import { createMemo, For, onMount, Show } from 'solid-js' import Banner from '../Discours/Banner' import { NavTopics } from '../Nav/Topics' import { Row5 } from '../Feed/Row5' import Row3 from '../Feed/Row3' import Row2 from '../Feed/Row2' import Row1 from '../Feed/Row1' import Hero from '../Discours/Hero' import Beside from '../Feed/Beside' import RowShort from '../Feed/RowShort' import Slider from '../Feed/Slider' import Group from '../Feed/Group' import { getLogger } from '../../utils/logger' import type { Shout, Topic } from '../../graphql/types.gen' import { Icon } from '../Nav/Icon' import { t } from '../../utils/intl' import { useTopicsStore } from '../../stores/zine/topics' import { loadPublishedArticles, loadTopArticles, loadTopMonthArticles, useArticlesStore } from '../../stores/zine/articles' import { useTopAuthorsStore } from '../../stores/zine/topAuthors' import { locale } from '../../stores/ui' const log = getLogger('home view') type HomeProps = { randomTopics: Topic[] recentPublishedArticles: Shout[] } const CLIENT_LOAD_ARTICLES_COUNT = 30 const LOAD_MORE_ARTICLES_COUNT = 30 export const HomeView = (props: HomeProps) => { const { getSortedArticles, getTopArticles, getTopMonthArticles, getTopViewedArticles, getTopCommentedArticles, getArticlesByLayout } = useArticlesStore({ sortedArticles: props.recentPublishedArticles }) const { getRandomTopics, getTopTopics } = useTopicsStore({ randomTopics: props.randomTopics }) const { getTopAuthors } = useTopAuthorsStore() onMount(() => { loadTopArticles() loadTopMonthArticles() loadPublishedArticles({ limit: CLIENT_LOAD_ARTICLES_COUNT, offset: getSortedArticles().length }) }) const randomLayout = createMemo(() => { const articlesByLayout = getArticlesByLayout() const filledLayouts = Object.keys(articlesByLayout).filter( // FIXME: is 7 ok? or more complex logic needed? (layout) => articlesByLayout[layout].length > 7 ) const randomLayout = filledLayouts.length > 0 ? filledLayouts[Math.floor(Math.random() * filledLayouts.length)] : '' return ( } /> ) }) const loadMore = () => { loadPublishedArticles({ limit: LOAD_MORE_ARTICLES_COUNT, offset: getSortedArticles().length }) } return ( {/*FIXME: ?*/} {t('Top commented')}} /> {randomLayout()} {(article) => }

) }