@@ -34,15 +34,16 @@ type ExtensionSettings = {
34
34
cacheRetention : CacheRetentionState ;
35
35
enabledRoutes : RouteDictionary ;
36
36
restoreRoute : boolean ;
37
- progressTab : boolean ;
38
- logLevel : string ;
37
+ restorePanel : boolean ;
39
38
} ;
40
39
41
40
export const useExtensionSettingsStore = defineStore ( 'settings.extension' , ( ) => {
42
41
const cacheRetention = reactive < CacheRetentionState > ( DefaultCacheRetention ) ;
43
42
const routeDictionary = reactive < RouteDictionary > ( DefaultRoutes ) ;
44
43
const restoreRoute = ref ( true ) ;
45
- // todo: use each store value instead in settings page
44
+ const restorePanel = ref ( false ) ;
45
+ const defaultTab = ref ( Route . Calendar ) ;
46
+ const initialized = ref < Promise < boolean > > ( ) ;
46
47
47
48
const clearState = ( ) => {
48
49
Object . assign ( cacheRetention , DefaultCacheRetention ) ;
@@ -56,8 +57,9 @@ export const useExtensionSettingsStore = defineStore('settings.extension', () =>
56
57
cacheRetention : toRaw ( cacheRetention ) ,
57
58
enabledRoutes : toRaw ( routeDictionary ) ,
58
59
restoreRoute : restoreRoute . value ,
60
+ restorePanel : restorePanel . value ,
59
61
} ) ,
60
- 1000 ,
62
+ 500 ,
61
63
) ;
62
64
63
65
const setRetention = ( retention : Partial < CacheRetentionState > , persist = true ) => {
@@ -74,25 +76,61 @@ export const useExtensionSettingsStore = defineStore('settings.extension', () =>
74
76
if ( restored ?. cacheRetention !== undefined ) setRetention ( restored . cacheRetention , false ) ;
75
77
if ( restored ?. enabledRoutes !== undefined ) Object . assign ( routeDictionary , restored . enabledRoutes ) ;
76
78
if ( restored ?. restoreRoute !== undefined ) restoreRoute . value = restored . restoreRoute ;
79
+ if ( restored ?. restorePanel !== undefined ) restorePanel . value = restored . restorePanel ;
80
+ } ;
81
+
82
+ const saveDefaultTab = debounce ( ( ) => storage . sync . set ( 'settings.extension.default-tab' , defaultTab . value ) , 500 ) ;
83
+
84
+ const restoreDefaultTab = async ( ) => {
85
+ const restored = await storage . sync . get < Route > ( 'settings.extension.default-tab' ) ;
86
+ if ( restored ) defaultTab . value = restored ;
77
87
} ;
78
88
79
89
const initExtensionSettingsStore = async ( ) => {
80
- await restoreState ( ) ;
90
+ if ( ! initialized . value ) initialized . value = Promise . all ( [ restoreState ( ) , restoreDefaultTab ( ) ] ) . then ( ( ) => true ) ;
91
+ return initialized . value ;
92
+ } ;
93
+
94
+ const setDefaultTab = ( value ?: Route ) => {
95
+ if ( ! value ) return ;
96
+ defaultTab . value = value ;
97
+ saveDefaultTab ( ) . catch ( err => logger . error ( 'Failed to save default tab in extension settings' , { value, err } ) ) ;
81
98
} ;
82
99
83
100
const toggleTab = ( tab : Route ) => {
84
101
routeDictionary [ tab ] = ! routeDictionary [ tab ] ;
85
- saveState ( ) . catch ( err => logger . error ( 'Failed to save extension settings' , { tab, err } ) ) ;
102
+ if ( defaultTab . value === tab && ! routeDictionary [ tab ] ) {
103
+ setDefaultTab ( ( Object . keys ( routeDictionary ) as Route [ ] ) . find ( key => routeDictionary [ key ] ) ) ;
104
+ }
105
+ saveState ( ) . catch ( err => logger . error ( 'Failed to save enabled tab extension settings' , { tab, err } ) ) ;
86
106
} ;
87
107
88
108
return {
89
109
initExtensionSettingsStore,
110
+ restoreDefaultTab,
90
111
saveState,
91
112
clearState,
92
- restoreRoute,
113
+ restoreRoute : computed ( {
114
+ get : ( ) => restoreRoute . value ,
115
+ set : ( value : boolean ) => {
116
+ restoreRoute . value = value ;
117
+ saveState ( ) . catch ( err => logger . error ( 'Failed to save restore route extension settings' , { value, err } ) ) ;
118
+ } ,
119
+ } ) ,
120
+ restorePanel : computed ( {
121
+ get : ( ) => restorePanel . value ,
122
+ set : ( value : boolean ) => {
123
+ restorePanel . value = value ;
124
+ saveState ( ) . catch ( err => logger . error ( 'Failed to save restore panel extension settings' , { value, err } ) ) ;
125
+ } ,
126
+ } ) ,
93
127
toggleTab,
94
128
routeDictionary,
95
- enabledTabs : computed ( ( ) => Object . entries ( routeDictionary ) . filter ( ( [ r ] ) => r !== Route . Calendar ) as [ Route , boolean ] [ ] ) ,
129
+ defaultTab : computed ( {
130
+ get : ( ) => defaultTab . value ,
131
+ set : setDefaultTab ,
132
+ } ) ,
133
+ enabledTabs : computed ( ( ) => Object . entries ( routeDictionary ) as [ Route , boolean ] [ ] ) ,
96
134
enabledRoutes : computed ( ( ) =>
97
135
Object . entries ( routeDictionary )
98
136
. filter ( ( [ , value ] ) => value )
0 commit comments