diff --git a/apps/renderer/src/atoms/settings/general.ts b/apps/renderer/src/atoms/settings/general.ts index 66323ee14..1e7552015 100644 --- a/apps/renderer/src/atoms/settings/general.ts +++ b/apps/renderer/src/atoms/settings/general.ts @@ -15,6 +15,7 @@ const createDefaultSettings = (): GeneralSettings => ({ dataPersist: true, sendAnonymousData: true, reduceRefetch: true, + showQuickTimeline: true, autoGroup: true, diff --git a/apps/renderer/src/atoms/settings/ui.ts b/apps/renderer/src/atoms/settings/ui.ts index ed8b83b23..fd8407123 100644 --- a/apps/renderer/src/atoms/settings/ui.ts +++ b/apps/renderer/src/atoms/settings/ui.ts @@ -60,7 +60,7 @@ export const uiServerSyncWhiteListKeys: (keyof UISettings)[] = [ "uiFontFamily", "readerFontFamily", "opaqueSidebar", - "customCSS", + // "customCSS", ] export const useIsZenMode = () => useAtomValue(zenModeAtom) diff --git a/apps/renderer/src/modules/entry-column/layouts/EntryListHeader.mobile.tsx b/apps/renderer/src/modules/entry-column/layouts/EntryListHeader.mobile.tsx index a6d33475d..4a10e5874 100644 --- a/apps/renderer/src/modules/entry-column/layouts/EntryListHeader.mobile.tsx +++ b/apps/renderer/src/modules/entry-column/layouts/EntryListHeader.mobile.tsx @@ -64,6 +64,7 @@ export const EntryListHeader: FC = ({ refetch, isRefreshin const feed = useFeedById(feedId) const isList = !!listId + const showQuickTimeline = useGeneralSettingKey("showQuickTimeline") const containerRef = React.useRef(null) return ( @@ -152,7 +153,7 @@ export const EntryListHeader: FC = ({ refetch, isRefreshin - + {showQuickTimeline && } ) } diff --git a/apps/renderer/src/modules/entry-column/layouts/TimelineTabs.tsx b/apps/renderer/src/modules/entry-column/layouts/TimelineTabs.tsx index 01c231629..8de4a8bdd 100644 --- a/apps/renderer/src/modules/entry-column/layouts/TimelineTabs.tsx +++ b/apps/renderer/src/modules/entry-column/layouts/TimelineTabs.tsx @@ -8,7 +8,7 @@ import { useSubscriptionStore } from "~/store/subscription" export const TimelineTabs = () => { const routerParams = useRouteParams() - const { view, listId, inboxId } = routerParams + const { view, listId, inboxId, folderName } = routerParams const listsData = useSubscriptionStore( useCallback( @@ -22,9 +22,24 @@ export const TimelineTabs = () => { [view], ), ) + const categoriesData = useSubscriptionStore( + useCallback( + (state) => { + const categoryNames = new Set() + for (const subId of state.feedIdByView[view]) { + const sub = state.data[subId] + if (sub.category) { + categoryNames.add(sub.category) + } + } + return Array.from(categoryNames) + }, + [view], + ), + ) const hasData = listsData.length > 0 || inboxData.length > 0 - const timeline = listId || inboxId || "" + const timeline = listId || inboxId || folderName || "" const navigate = useNavigateEntry() if (!hasData) return null @@ -57,6 +72,23 @@ export const TimelineTabs = () => { /> ))} + {categoriesData.map((s) => ( + { + navigate({ + folderName: s, + }) + }} + > + + + {s} + + + ))} {inboxData.map((s) => ( { label: t("general.group_by_date.label"), description: t("general.group_by_date.description"), }), + isMobile && + defineSettingItem("showQuickTimeline", { + label: t("general.show_quick_timeline.label"), + description: t("general.show_quick_timeline.description"), + }), defineSettingItem("reduceRefetch", { label: t("general.reduce_refetch.label"), @@ -252,7 +257,7 @@ const TranslateLanguageSelector = () => { const translationLanguage = useGeneralSettingKey("translationLanguage") return ( -
+
{t("general.translation_language")}