import { createEffect, createSignal, For, onMount, Show } from 'solid-js' import '../../styles/Feed.scss' import stylesBeside from '../../components/Feed/Beside.module.scss' import { Icon } from '../_shared/Icon' import { TopicCard } from '../Topic/Card' import { ArticleCard } from '../Feed/Card' import { AuthorCard } from '../Author/Card' import { t } from '../../utils/intl' import { FeedSidebar } from '../Feed/Sidebar' import CommentCard from '../Article/Comment' import { loadShouts, useArticlesStore } from '../../stores/zine/articles' import { useReactionsStore } from '../../stores/zine/reactions' import { useAuthorsStore } from '../../stores/zine/authors' import { useTopicsStore } from '../../stores/zine/topics' import { useTopAuthorsStore } from '../../stores/zine/topAuthors' import { useSession } from '../../context/session' import { Collab, ReactionKind, Shout } from '../../graphql/types.gen' import { collabs, setCollabs } from '../../stores/editor' const AUTHORSHIP_REACTIONS = [ ReactionKind.Accept, ReactionKind.Reject, ReactionKind.Propose, ReactionKind.Ask ] export const FEED_PAGE_SIZE = 20 export const FeedView = () => { // state const { sortedArticles } = useArticlesStore() const { sortedReactions: topComments, loadReactionsBy } = useReactionsStore({}) const { sortedAuthors } = useAuthorsStore() const { topTopics } = useTopicsStore() const { topAuthors } = useTopAuthorsStore() const { session } = useSession() const [isLoadMoreButtonVisible, setIsLoadMoreButtonVisible] = createSignal(false) const loadMore = async () => { const { hasMore } = await loadShouts({ filters: { visibility: 'community' }, limit: FEED_PAGE_SIZE, offset: sortedArticles().length }) setIsLoadMoreButtonVisible(hasMore) } onMount(async () => { // load 5 recent comments overall await loadReactionsBy({ by: {}, limit: 5, offset: 0 }) // load recent shouts not only published ( visibility = community ) await loadMore() // TODO: load collabs // await loadCollabs() // load recent editing shouts ( visibility = authors ) const userslug = session().user.slug await loadShouts({ filters: { author: userslug, visibility: 'authors' }, limit: 15, offset: 0 }) const collaborativeShouts = sortedArticles().filter((s: Shout, n: number, arr: Shout[]) => { if (s.visibility !== 'authors') { arr.splice(n, 1) return arr } }) // load recent reactions on collabs await loadReactionsBy({ by: { shouts: [...collaborativeShouts], body: true }, limit: 5, offset: 0 }) }) return ( <>