From 92e338ea1e6b1a5a784dcc0b738c17d0476aae09 Mon Sep 17 00:00:00 2001 From: codytseng Date: Thu, 9 Jan 2025 21:59:26 +0800 Subject: [PATCH] feat: store last feed type --- src/constants.ts | 1 + src/providers/FeedProvider.tsx | 9 +++++++-- src/services/storage.service.ts | 14 +++++++++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/constants.ts b/src/constants.ts index 3bb1820..9b36036 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -2,6 +2,7 @@ export const StorageKey = { THEME_SETTING: 'themeSetting', RELAY_SETS: 'relaySets', ACTIVE_RELAY_SET_ID: 'activeRelaySetId', + FEED_TYPE: 'feedType', ACCOUNTS: 'accounts', CURRENT_ACCOUNT: 'currentAccount', ADD_CLIENT_TAG: 'addClientTag' diff --git a/src/providers/FeedProvider.tsx b/src/providers/FeedProvider.tsx index b2b5753..0932637 100644 --- a/src/providers/FeedProvider.tsx +++ b/src/providers/FeedProvider.tsx @@ -30,12 +30,12 @@ export const useFeed = () => { export function FeedProvider({ children }: { children: React.ReactNode }) { const { pubkey } = useNostr() const { relaySets } = useRelaySets() - const [feedType, setFeedType] = useState('relays') + const [feedType, setFeedType] = useState(storage.getFeedType()) const [relayUrls, setRelayUrls] = useState([]) const [temporaryRelayUrls, setTemporaryRelayUrls] = useState([]) const [filter, setFilter] = useState({}) const [isReady, setIsReady] = useState(false) - const [activeRelaySetId, setActiveRelaySetId] = useState(() => + const [activeRelaySetId, setActiveRelaySetId] = useState( storage.getActiveRelaySetId() ) @@ -55,6 +55,9 @@ export function FeedProvider({ children }: { children: React.ReactNode }) { return await switchFeed('temporary') } + if (feedType === 'following') { + return await switchFeed('following') + } await switchFeed('relays', { activeRelaySetId }) } @@ -95,6 +98,7 @@ export function FeedProvider({ children }: { children: React.ReactNode }) { setFilter({}) setIsReady(true) storage.setActiveRelaySetId(relaySet.id) + storage.setFeedType(feedType) } return } @@ -109,6 +113,7 @@ export function FeedProvider({ children }: { children: React.ReactNode }) { setRelayUrls(relayList.read.slice(0, 4)) setFilter({ authors: followings.includes(pubkey) ? followings : [...followings, pubkey] }) setIsReady(true) + storage.setFeedType(feedType) return } if (feedType === 'temporary') { diff --git a/src/services/storage.service.ts b/src/services/storage.service.ts index e951ef9..6c5b035 100644 --- a/src/services/storage.service.ts +++ b/src/services/storage.service.ts @@ -1,7 +1,7 @@ import { StorageKey } from '@/constants' import { isSameAccount } from '@/lib/account' import { randomString } from '@/lib/random' -import { TAccount, TAccountPointer, TRelaySet, TThemeSetting } from '@/types' +import { TAccount, TAccountPointer, TFeedType, TRelaySet, TThemeSetting } from '@/types' const DEFAULT_RELAY_SETS: TRelaySet[] = [ { @@ -21,6 +21,7 @@ class StorageService { private relaySets: TRelaySet[] = [] private activeRelaySetId: string | null = null + private feedType: TFeedType = 'relays' private themeSetting: TThemeSetting = 'system' private accounts: TAccount[] = [] private currentAccount: TAccount | null = null @@ -40,6 +41,8 @@ class StorageService { this.accounts = accountsStr ? JSON.parse(accountsStr) : [] const currentAccountStr = window.localStorage.getItem(StorageKey.CURRENT_ACCOUNT) this.currentAccount = currentAccountStr ? JSON.parse(currentAccountStr) : null + const feedTypeStr = window.localStorage.getItem(StorageKey.FEED_TYPE) + this.feedType = feedTypeStr ? JSON.parse(feedTypeStr) : 'relays' const relaySetsStr = window.localStorage.getItem(StorageKey.RELAY_SETS) if (!relaySetsStr) { @@ -94,6 +97,15 @@ class StorageService { } } + getFeedType() { + return this.feedType + } + + setFeedType(feedType: TFeedType) { + this.feedType = feedType + window.localStorage.setItem(StorageKey.FEED_TYPE, JSON.stringify(this.feedType)) + } + getThemeSetting() { return this.themeSetting }