@@ -68,17 +68,40 @@ export function useTenantPage() {
6868
6969 const handleTenantPageChange = React . useCallback (
7070 ( value ?: TenantPage ) => {
71- setInitialTenantPage ( value ) ;
7271 setQueryParams ( { tenantPage : value } ) ;
72+ setInitialTenantPage ( value ) ;
7373 } ,
7474 [ setInitialTenantPage , setQueryParams ] ,
7575 ) ;
7676
77- const parsedInitialPage = tenantPageSchema
78- . catch ( DEFAULT_USER_SETTINGS [ SETTING_KEYS . TENANT_INITIAL_PAGE ] )
79- . parse ( initialTenantPage ) ;
77+ const parsedInitialPage = React . useMemo (
78+ ( ) =>
79+ tenantPageSchema
80+ . catch ( DEFAULT_USER_SETTINGS [ SETTING_KEYS . TENANT_INITIAL_PAGE ] )
81+ . parse ( initialTenantPage ) ,
82+ [ initialTenantPage ] ,
83+ ) ;
84+
85+ const tenantPage = React . useMemo (
86+ ( ) => tenantPageSchema . catch ( parsedInitialPage ) . parse ( tenantPageFromQuery ) ,
87+ [ tenantPageFromQuery , parsedInitialPage ] ,
88+ ) ;
8089
81- const tenantPage = tenantPageSchema . catch ( parsedInitialPage ) . parse ( tenantPageFromQuery ) ;
90+ React . useEffect ( ( ) => {
91+ try {
92+ // Check whether query has valid tenantPage param
93+ const parsedQueryPage = tenantPageSchema . parse ( tenantPageFromQuery ) ;
94+
95+ // Save query page as initial if they differ
96+ if ( parsedQueryPage !== parsedInitialPage ) {
97+ setInitialTenantPage ( parsedQueryPage ) ;
98+ }
99+ } catch {
100+ // If query page is not valid, set saved page to query
101+ // `replaceIn` to not create new history entry when applying previously saved tab
102+ setQueryParams ( { tenantPage : parsedInitialPage } , 'replaceIn' ) ;
103+ }
104+ } , [ tenantPageFromQuery , parsedInitialPage , setQueryParams , setInitialTenantPage ] ) ;
82105
83106 return { tenantPage, handleTenantPageChange} as const ;
84107}
0 commit comments