|
16 | 16 |
|
17 | 17 | import { ROUTES } from '@Common/Constants' |
18 | 18 | import { get, getUrlWithSearchParams, patch, showError } from '@Common/index' |
| 19 | +import { ResourceKindType } from '@Shared/index' |
19 | 20 | import { THEME_PREFERENCE_MAP } from '@Shared/Providers/ThemeProvider/types' |
20 | 21 |
|
21 | 22 | import { USER_PREFERENCES_ATTRIBUTE_KEY } from './constants' |
@@ -177,27 +178,56 @@ export const updateUserPreferences = async ({ |
177 | 178 | } |
178 | 179 | } |
179 | 180 |
|
| 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 | + |
180 | 208 | /** |
181 | 209 | * Optimized function to get updated user preferences with resource filtering |
182 | 210 | * Can work with provided userPreferences or fetch from server/localStorage |
183 | 211 | * Centralizes all resource updating logic |
184 | 212 | */ |
185 | | -export const getUpdatedUserPreferences = async ({ |
| 213 | +const getUpdatedUserPreferences = async ({ |
186 | 214 | id, |
187 | 215 | name, |
188 | 216 | resourceKind, |
189 | 217 | userPreferencesResponse, |
190 | 218 | }: UserPreferenceFilteredListTypes & { |
191 | 219 | userPreferencesResponse?: UserPreferencesType |
192 | 220 | }): Promise<UserPreferencesType> => { |
| 221 | + await migrateUserPreferences() |
| 222 | + |
193 | 223 | // Get base user preferences from multiple sources (priority: provided > localStorage > server) |
194 | 224 | let baseUserPreferences: UserPreferencesType |
195 | 225 |
|
196 | 226 | if (userPreferencesResponse) { |
197 | 227 | baseUserPreferences = userPreferencesResponse |
198 | 228 | } else { |
199 | 229 | try { |
200 | | - const localStorageData = localStorage.getItem('userPreferences') |
| 230 | + const localStorageData = localStorage.getItem(USER_PREFERENCES_ATTRIBUTE_KEY) |
201 | 231 | if (localStorageData) { |
202 | 232 | baseUserPreferences = JSON.parse(localStorageData) |
203 | 233 | } else { |
@@ -257,7 +287,7 @@ export const updateAndPersistUserPreferences = async ({ |
257 | 287 |
|
258 | 288 | // Update localStorage if requested |
259 | 289 | if (updateLocalStorage) { |
260 | | - localStorage.setItem('userPreferences', JSON.stringify(updatedPreferences)) |
| 290 | + localStorage.setItem(USER_PREFERENCES_ATTRIBUTE_KEY, JSON.stringify(updatedPreferences)) |
261 | 291 | } |
262 | 292 |
|
263 | 293 | // Update server with the new resource list if resourceKind is provided |
|
0 commit comments