diff --git a/src/components/Views/Feed/Feed.tsx b/src/components/Views/Feed/Feed.tsx
index 69d32729..21a4643a 100644
--- a/src/components/Views/Feed/Feed.tsx
+++ b/src/components/Views/Feed/Feed.tsx
@@ -8,7 +8,6 @@ import { InviteMembers } from '~/components/_shared/InviteMembers'
import { Loading } from '~/components/_shared/Loading'
import { ShareModal } from '~/components/_shared/ShareModal'
import { useAuthors } from '~/context/authors'
-import { useFeed } from '~/context/feed'
import { useGraphQL } from '~/context/graphql'
import { useLocalize } from '~/context/localize'
import { useReactions } from '~/context/reactions'
@@ -35,8 +34,9 @@ export const FEED_PAGE_SIZE = 20
export type PeriodType = 'week' | 'month' | 'year'
export type FeedProps = {
- shouts?: Shout[]
- mode?: '' | 'likes' | 'hot'
+ shouts: Shout[]
+ mode?: 'followed' | 'discussed' | 'coauthored' | 'unrated'
+ order?: '' | 'likes' | 'hot'
}
export const FeedView = (props: FeedProps) => {
@@ -54,7 +54,6 @@ export const FeedView = (props: FeedProps) => {
const [isLoading, setIsLoading] = createSignal(false)
const [isRightColumnLoaded, setIsRightColumnLoaded] = createSignal(false)
const { session } = useSession()
- const { feed, setFeed } = useFeed()
const { loadReactionsBy } = useReactions()
const { topTopics } = useTopics()
const { topAuthors } = useAuthors()
@@ -68,13 +67,13 @@ export const FeedView = (props: FeedProps) => {
setTopComments(comments.sort(byCreated).reverse())
}
+ // post-load
createEffect(
on(
- feed,
+ () => props.shouts,
(sss?: Shout[]) => {
if (sss && Array.isArray(sss)) {
setIsLoading(true)
- setFeed((prev) => [...prev, ...sss])
Promise.all([
loadTopComments(),
loadReactionsBy({ by: { shouts: sss.map((s: Shout) => s.slug) } })
@@ -107,15 +106,15 @@ export const FeedView = (props: FeedProps) => {
-
+
}>
- 0}>
-
+ 0}>
+
{(article) => (
handleShare(shared)}
@@ -186,7 +185,7 @@ export const FeedView = (props: FeedProps) => {
-
+
{(article) => (
)}
diff --git a/src/routes/(main).tsx b/src/routes/(main).tsx
index abaf23c0..6eb9bb6d 100644
--- a/src/routes/(main).tsx
+++ b/src/routes/(main).tsx
@@ -113,7 +113,7 @@ export default function HomePage(props: RouteSectionProps) {
0} fallback={}>
) => {
const [searchParams] = useSearchParams() // ?period=month
const { t } = useLocalize()
- const { setFeed } = useFeed()
+ const { feed, setFeed } = useFeed()
// preload all topics
const { addTopics, sortedTopics } = useTopics()
@@ -106,6 +107,17 @@ export default (props: RouteSectionProps<{ shouts: Shout[]; topics: Topic[] }>)
return (await loadMoreFeed()) as Shout[]
})
+ const order = createMemo(() => {
+ const paramOrderPattern = /^(hot|likes)$/
+ return (
+ (paramOrderPattern.test(props.params.order)
+ ? props.params.order === 'hot'
+ ? 'last_comment'
+ : props.params.order
+ : 'created_at') || 'created_at'
+ )
+ })
+
return (
)
>
-
+
diff --git a/src/routes/feed/my/[...mode]/[...order].tsx b/src/routes/feed/my/[...mode]/[...order].tsx
index 91cf0e10..a8da2159 100644
--- a/src/routes/feed/my/[...mode]/[...order].tsx
+++ b/src/routes/feed/my/[...mode]/[...order].tsx
@@ -1,7 +1,8 @@
import { RouteSectionProps, useSearchParams } from '@solidjs/router'
-import { createEffect } from 'solid-js'
+import { createEffect, createMemo } from 'solid-js'
import { AUTHORS_PER_PAGE } from '~/components/Views/AllAuthors/AllAuthors'
import { Feed } from '~/components/Views/Feed'
+import { FeedProps } from '~/components/Views/Feed/Feed'
import { LoadMoreItems, LoadMoreWrapper } from '~/components/_shared/LoadMoreWrapper'
import { PageLayout } from '~/components/_shared/PageLayout'
import { useFeed } from '~/context/feed'
@@ -52,7 +53,7 @@ const getFromDate = (period: FeedPeriod): number => {
export default (props: RouteSectionProps<{ shouts: Shout[]; topics: Topic[] }>) => {
const [searchParams] = useSearchParams() // ?period=month
const { t } = useLocalize()
- const { setFeed } = useFeed()
+ const { setFeed, feed } = useFeed()
// TODO: use const { requireAuthentication } = useSession()
const client = useGraphQL()
@@ -62,27 +63,32 @@ export default (props: RouteSectionProps<{ shouts: Shout[]; topics: Topic[] }>)
!sortedTopics() && props.data.topics && addTopics(props.data.topics)
})
- // load more my feed
- const loadMoreMyFeed = async (offset?: number) => {
- // /feed/my/:mode:
+ // /feed/my/:mode:
+ const mode = createMemo(() => {
const paramModePattern = /^(followed|discussed|liked|coauthored|unrated)$/
- const mode =
- props.params.mode && paramModePattern.test(props.params.mode) ? props.params.mode : 'followed'
- const gqlHandler = feeds[mode as keyof typeof feeds]
+ return props.params.mode && paramModePattern.test(props.params.mode) ? props.params.mode : 'followed'
+ })
- // /feed/my/:mode:/:order: - select order setting
+ const order = createMemo(() => {
const paramOrderPattern = /^(hot|likes)$/
- const order =
+ return (
(paramOrderPattern.test(props.params.order)
? props.params.order === 'hot'
? 'last_comment'
: props.params.order
: 'created_at') || 'created_at'
+ )
+ })
+ // load more my feed
+ const loadMoreMyFeed = async (offset?: number) => {
+ const gqlHandler = feeds[mode() as keyof typeof feeds]
+
+ // /feed/my/:mode:/:order: - select order setting
const options: LoadShoutsOptions = {
limit: 20,
offset,
- order_by: order
+ order_by: order()
}
// ?period=month - time period filter
@@ -106,7 +112,11 @@ export default (props: RouteSectionProps<{ shouts: Shout[]; topics: Topic[] }>)
>
-
+