fix(timeline): hide audio and notification tabs without subscriptions

This commit is contained in:
DIYgod 2025-10-25 17:36:50 +08:00
parent d1f0ce3c10
commit f23b0e4638
1 changed files with 27 additions and 8 deletions

View File

@ -1,20 +1,26 @@
import { FeedViewType, getViewList } from "@follow/constants"
import { useSubscriptionStore } from "@follow/store/subscription/store"
import { useMemo } from "react"
import { useUISettingKey } from "~/atoms/settings/ui"
import { ROUTE_TIMELINE_OF_VIEW, ROUTE_VIEW_ALL } from "~/constants/app"
const DEFAULT_HIDDEN_TIMELINE_IDS = new Set<string>([
`${ROUTE_TIMELINE_OF_VIEW}${FeedViewType.Audios}`,
`${ROUTE_TIMELINE_OF_VIEW}${FeedViewType.Notifications}`,
])
export const useTimelineList = (options?: {
visible?: boolean
hidden?: boolean
withAll?: boolean
}) => {
const timelineTabs = useUISettingKey("timelineTabs")
const hasAudiosSubscription = useSubscriptionStore(
(state) =>
state.feedIdByView[FeedViewType.Audios].size > 0 ||
state.listIdByView[FeedViewType.Audios].size > 0,
)
const hasNotificationsSubscription = useSubscriptionStore(
(state) =>
state.feedIdByView[FeedViewType.Notifications].size > 0 ||
state.listIdByView[FeedViewType.Notifications].size > 0,
)
const allTimelineIds = useMemo(() => {
return getViewList({ includeAll: true }).map((view) =>
@ -31,8 +37,15 @@ export const useTimelineList = (options?: {
let nextVisible = [...savedVisible]
let nextHidden = [...savedHidden]
const extraVisible = extras.filter((id) => !DEFAULT_HIDDEN_TIMELINE_IDS.has(id))
const extraHidden = extras.filter((id) => DEFAULT_HIDDEN_TIMELINE_IDS.has(id))
const isDefaultHidden = (id: string) => {
if (id === `${ROUTE_TIMELINE_OF_VIEW}${FeedViewType.Audios}`) return !hasAudiosSubscription
if (id === `${ROUTE_TIMELINE_OF_VIEW}${FeedViewType.Notifications}`)
return !hasNotificationsSubscription
return false
}
const extraVisible = extras.filter((id) => !isDefaultHidden(id))
const extraHidden = extras.filter((id) => isDefaultHidden(id))
const allConfigured =
savedVisible.includes(ROUTE_VIEW_ALL) || savedHidden.includes(ROUTE_VIEW_ALL)
@ -46,7 +59,13 @@ export const useTimelineList = (options?: {
nextHidden = [...nextHidden, ...extraHidden].filter((id) => !nextVisible.includes(id))
return { visible: nextVisible, hidden: nextHidden }
}, [allTimelineIds, timelineTabs?.hidden, timelineTabs?.visible])
}, [
allTimelineIds,
hasAudiosSubscription,
hasNotificationsSubscription,
timelineTabs?.hidden,
timelineTabs?.visible,
])
return useMemo(() => {
let result: string[]