@@ -19,6 +19,7 @@ import dayjs from 'dayjs'
1919import { noop , InitTabType , DynamicTabType } from '@devtron-labs/devtron-fe-common-lib'
2020import { AddTabParamsType , ParsedTabsData , PopulateTabDataPropsType , UseTabsReturnType } from './types'
2121import { FALLBACK_TAB , TAB_DATA_LOCAL_STORAGE_KEY , TAB_DATA_VERSION } from './constants'
22+ import { convertV1TabsDataToV2 } from './utils'
2223
2324export function useTabs ( persistenceKey : string , fallbackTabIndex = FALLBACK_TAB ) : UseTabsReturnType {
2425 const [ tabs , setTabs ] = useState < DynamicTabType [ ] > ( [ ] )
@@ -104,17 +105,15 @@ export function useTabs(persistenceKey: string, fallbackTabIndex = FALLBACK_TAB)
104105 } else {
105106 const persistedTabsData = getTabDataFromLocalStorage ( )
106107 try {
107- _parsedTabsData = JSON . parse ( persistedTabsData )
108+ _parsedTabsData = convertV1TabsDataToV2 ( JSON . parse ( persistedTabsData ) )
108109 } catch {
109110 noop ( )
110111 }
111112 }
112113
113114 return JSON . stringify ( {
114- ..._parsedTabsData ,
115- key : persistenceKey ,
116115 version : TAB_DATA_VERSION ,
117- data : _tabs ,
116+ data : { ... _parsedTabsData ?. data , [ persistenceKey ] : _tabs } ,
118117 } )
119118 }
120119
@@ -170,46 +169,27 @@ export function useTabs(persistenceKey: string, fallbackTabIndex = FALLBACK_TAB)
170169 overrideSelectionStatus = false ,
171170 ) => {
172171 let _tabs : DynamicTabType [ ] = [ ]
173- let tabDataVersion = TAB_DATA_VERSION
174172 let parsedTabsData : ParsedTabsData
175173
176174 setTabs ( ( prevTabs ) => {
177175 if ( ! reInit ) {
178176 const persistedTabsData = getTabDataFromLocalStorage ( )
179177 try {
180- parsedTabsData = JSON . parse ( persistedTabsData )
181- _tabs = persistedTabsData ? parsedTabsData . data : prevTabs
182- tabDataVersion = parsedTabsData ?. version
178+ parsedTabsData = convertV1TabsDataToV2 ( JSON . parse ( persistedTabsData ) )
179+ _tabs = parsedTabsData ? parsedTabsData . data [ persistenceKey ] : prevTabs
183180 } catch {
184181 _tabs = prevTabs
185182 }
186183 }
187184 if ( _tabs . length > 0 ) {
188- _tabs = _tabs . map ( ( _tab ) => {
189- // Backward compatibility with position
190- const type =
191- _tab . type ??
192- ( 'position' in _tab && _tab . position === Number . MAX_SAFE_INTEGER ? 'dynamic' : 'fixed' )
193-
194- return {
195- ..._tab ,
196- // NOTE: if reInit && overrideSelectionStatus is false, we need to retain the current selection
197- // if reInit is true, we need to remove old selection and use the provided initTabs' selection
198- // or fallback if user has sent all initTabs with isSelected false
199- ...( reInit || overrideSelectionStatus ? { isSelected : false } : { } ) ,
200- /* NOTE: following lines migrate old tab data to new */
201- lastSyncMoment : dayjs ( ) ,
202- ...( _tab . componentKey
203- ? { componentKey : _tab . componentKey }
204- : { componentKey : getNewTabComponentKey ( _tab . id ) } ) ,
205- ...( _tab . isAlive ? { isAlive : _tab . isAlive } : { isAlive : false } ) ,
206- type,
207- id :
208- tabDataVersion !== TAB_DATA_VERSION && type === 'fixed' && _tab . id
209- ? _tab . id . split ( '-' ) [ 0 ]
210- : _tab . id ,
211- }
212- } )
185+ _tabs = _tabs . map ( ( _tab ) => ( {
186+ ..._tab ,
187+ // NOTE: if reInit && overrideSelectionStatus is false, we need to retain the current selection
188+ // if reInit is true, we need to remove old selection and use the provided initTabs' selection
189+ // or fallback if user has sent all initTabs with isSelected false
190+ ...( reInit || overrideSelectionStatus ? { isSelected : false } : { } ) ,
191+ lastSyncMoment : dayjs ( ) ,
192+ } ) )
213193 if ( tabsToRemove ?. length ) {
214194 _tabs = _tabs . filter ( ( _tab ) => tabsToRemove . indexOf ( _tab . id ) === - 1 )
215195 }
0 commit comments