Skip to content

Commit 3c336ee

Browse files
committed
fix: migrate userSelectedTags to enhance tag compatibility and update storage handling
1 parent 75ddc98 commit 3c336ee

1 file changed

Lines changed: 35 additions & 29 deletions

File tree

src/stores/preferences.ts

Lines changed: 35 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,29 @@ const defaultStorage: StateStorage = {
7272
state: UserPreferencesState
7373
} = JSON.parse(item)
7474

75-
const remoteConfigStore = useRemoteConfigStore.getState()
76-
7775
const newState = {
7876
...state,
79-
userSelectedTags: enhanceTags(
80-
remoteConfigStore,
81-
state.userSelectedTags as unknown as string[]
82-
),
77+
}
78+
if (version == 0) {
79+
const MAP_OLD_TAGS: Record<string, string> = {
80+
'artificial-intelligence': 'artificial intelligence',
81+
'machine-learning': 'machine learning',
82+
c: 'clang',
83+
cpp: 'c++',
84+
csharp: 'c#',
85+
'data-science': 'data science',
86+
go: 'golang',
87+
'objective-c': 'objectivec',
88+
}
89+
90+
const stateTags = state.userSelectedTags as unknown as string[]
91+
const newTags = stateTags.map((tag) => {
92+
if (MAP_OLD_TAGS[tag]) {
93+
return MAP_OLD_TAGS[tag]
94+
}
95+
return tag
96+
})
97+
newState.userSelectedTags = enhanceTags(useRemoteConfigStore.getState(), newTags)
8398
}
8499

85100
return JSON.stringify({ state: newState, version })
@@ -89,21 +104,7 @@ const defaultStorage: StateStorage = {
89104
},
90105
setItem: (name: string, value: string) => {
91106
try {
92-
let {
93-
state,
94-
version,
95-
}: {
96-
version: number
97-
state: UserPreferencesState
98-
} = JSON.parse(value)
99-
100-
const newState = {
101-
...state,
102-
userSelectedTags: state.userSelectedTags.map((tag) => tag.value),
103-
}
104-
105-
const newValue = JSON.stringify({ state: newState, version })
106-
window.localStorage.setItem(name, newValue)
107+
window.localStorage.setItem(name, value)
107108
} catch (e) {
108109
window.localStorage.setItem(name, '')
109110
}
@@ -142,15 +143,14 @@ export const useUserPreferences = create(
142143
userCustomCards: [],
143144
DNDDuration: 'never',
144145
advStatus: false,
145-
setLayout: (layout) => set({ layout: layout }),
146-
setPromptEngine: (promptEngine: string) => set({ promptEngine: promptEngine }),
147-
setListingMode: (listingMode: ListingMode) => set({ listingMode: listingMode }),
148-
setTheme: (theme: Theme) => set({ theme: theme }),
149-
setOpenLinksNewTab: (openLinksNewTab: boolean) => set({ openLinksNewTab: openLinksNewTab }),
146+
setLayout: (layout) => set({ layout }),
147+
setPromptEngine: (promptEngine: string) => set({ promptEngine }),
148+
setListingMode: (listingMode: ListingMode) => set({ listingMode }),
149+
setTheme: (theme: Theme) => set({ theme }),
150+
setOpenLinksNewTab: (openLinksNewTab: boolean) => set({ openLinksNewTab }),
150151
setCards: (selectedCards: SelectedCard[]) => set({ cards: selectedCards }),
151152
setTags: (selectedTags: Tag[]) => set({ userSelectedTags: selectedTags }),
152-
setMaxVisibleCards: (maxVisibleCards: number) => set({ maxVisibleCards: maxVisibleCards }),
153-
153+
setMaxVisibleCards: (maxVisibleCards: number) => set({ maxVisibleCards }),
154154
setCardSettings: (card: string, settings: CardSettingsType) =>
155155
set((state) => ({
156156
cardsSettings: {
@@ -218,7 +218,7 @@ export const useUserPreferences = create(
218218
set((state) => {
219219
const exists = state.userSelectedTags.find((t) => t.value === tag.value)
220220
if (exists) {
221-
return state // No change if tag already followed
221+
return state
222222
}
223223
return {
224224
userSelectedTags: [...state.userSelectedTags, tag],
@@ -233,7 +233,13 @@ export const useUserPreferences = create(
233233
}),
234234
{
235235
name: 'preferences_storage',
236+
version: 1,
236237
storage: createJSONStorage(() => defaultStorage),
238+
migrate: (persistedState) => {
239+
const state = persistedState as unknown as UserPreferencesState &
240+
UserPreferencesStoreActions
241+
return state
242+
},
237243
}
238244
)
239245
)

0 commit comments

Comments
 (0)