Skip to content

Commit 6898c23

Browse files
committed
fix: implement user preferences migration logic to ensure compatibility with versioning
1 parent 4fade82 commit 6898c23

1 file changed

Lines changed: 29 additions & 29 deletions

File tree

src/Shared/Hooks/useUserPreferences/service.ts

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,33 @@ export const updateUserPreferences = async ({
178178
}
179179
}
180180

181+
const migrateUserPreferences = async () => {
182+
try {
183+
const userPreferences: UserPreferencesType = await JSON.parse(
184+
localStorage.getItem(USER_PREFERENCES_ATTRIBUTE_KEY),
185+
)
186+
if (userPreferences && userPreferences.version !== 'v1') {
187+
const migratedPreferences: UserPreferencesType = {
188+
...userPreferences,
189+
resources: {
190+
...userPreferences.resources,
191+
[ResourceKindType.devtronApplication]: {
192+
[UserPreferenceResourceActions.RECENTLY_VISITED]: (
193+
userPreferences.resources?.[ResourceKindType.devtronApplication]?.[
194+
UserPreferenceResourceActions.RECENTLY_VISITED
195+
] || []
196+
).map(({ id, name }) => ({ id: +id, name })),
197+
},
198+
},
199+
version: 'v1',
200+
}
201+
localStorage.setItem(USER_PREFERENCES_ATTRIBUTE_KEY, JSON.stringify(migratedPreferences))
202+
}
203+
} catch {
204+
// do nothing
205+
}
206+
}
207+
181208
/**
182209
* Optimized function to get updated user preferences with resource filtering
183210
* Can work with provided userPreferences or fetch from server/localStorage
@@ -191,6 +218,8 @@ const getUpdatedUserPreferences = async ({
191218
}: UserPreferenceFilteredListTypes & {
192219
userPreferencesResponse?: UserPreferencesType
193220
}): Promise<UserPreferencesType> => {
221+
await migrateUserPreferences()
222+
194223
// Get base user preferences from multiple sources (priority: provided > localStorage > server)
195224
let baseUserPreferences: UserPreferencesType
196225

@@ -231,33 +260,6 @@ const getUpdatedUserPreferences = async ({
231260
}
232261
}
233262

234-
const migrateUserPreferences = async () => {
235-
try {
236-
const userPreferences: UserPreferencesType = await JSON.parse(
237-
localStorage.getItem(USER_PREFERENCES_ATTRIBUTE_KEY),
238-
)
239-
if (userPreferences && userPreferences.version !== 'v1') {
240-
const migratedPreferences: UserPreferencesType = {
241-
...userPreferences,
242-
resources: {
243-
...userPreferences.resources,
244-
[ResourceKindType.devtronApplication]: {
245-
[UserPreferenceResourceActions.RECENTLY_VISITED]: (
246-
userPreferences.resources?.[ResourceKindType.devtronApplication]?.[
247-
UserPreferenceResourceActions.RECENTLY_VISITED
248-
] || []
249-
).map(({ id, name }) => ({ id: +id, name })),
250-
},
251-
},
252-
version: userPreferences.version ?? 'v1',
253-
}
254-
localStorage.setItem(USER_PREFERENCES_ATTRIBUTE_KEY, JSON.stringify(migratedPreferences))
255-
}
256-
} catch {
257-
// do nothing
258-
}
259-
}
260-
261263
/**
262264
* Centralized function to update and persist user preferences
263265
* Handles both local state and server updates automatically
@@ -283,8 +285,6 @@ export const updateAndPersistUserPreferences = async ({
283285
resourceKind,
284286
})
285287

286-
await migrateUserPreferences()
287-
288288
// Update localStorage if requested
289289
if (updateLocalStorage) {
290290
localStorage.setItem(USER_PREFERENCES_ATTRIBUTE_KEY, JSON.stringify(updatedPreferences))

0 commit comments

Comments
 (0)