1
- import { Link , Outlet , useParams } from "react-router-dom" ;
1
+ import { Link , useParams } from "react-router-dom" ;
2
2
import { useEffect , useMemo , useState } from "react" ;
3
3
import { Tabs } from "src/examples/basic/components/Tabs/Tabs.tsx" ;
4
- import { RouterTabModel , useRouterTabs } from "src/lib/tabs/useRouterTabs.tsx" ;
4
+ import { RouterTabPath , useRouterTabs } from "src/lib/tabs/useRouterTabs.tsx" ;
5
5
6
6
import { TabModel } from "src/lib/tabs-ui/tabs-ui.types.ts" ;
7
7
import { usePersistTabs } from "src/lib/tabs/persist.tsx" ;
8
8
import { localStorageDriver } from "src/lib/storage/local-storage.ts" ;
9
- import { validateTabs } from "src/lib/tabs" ;
9
+ import { validateTabPaths } from "src/lib/tabs/validateTabPaths.ts " ;
10
10
import { useDataRouterContext } from "src/hooks/useDataRouterContext.tsx" ;
11
11
import {
12
12
homeRoute ,
@@ -29,15 +29,15 @@ export function CategoriesRoute() {
29
29
storage : localStorageDriver ,
30
30
} ) ;
31
31
32
- const defaultTabs : RouterTabModel [ ] = [ categoriesListRoute ] ;
32
+ const defaultTabs : RouterTabPath [ ] = [ categoriesListRoute ] ;
33
33
34
- const [ tabs , setTabs ] = useState < RouterTabModel [ ] > ( ( ) =>
35
- validateTabs ( getTabsFromStorage ( ) || defaultTabs , router ) ,
34
+ const [ paths , setPaths ] = useState < RouterTabPath [ ] > ( ( ) =>
35
+ validateTabPaths ( getTabsFromStorage ( ) || defaultTabs , router ) ,
36
36
) ;
37
37
38
38
useEffect ( ( ) => {
39
- return persistTabs ( tabs ) ;
40
- } , [ tabs , persistTabs ] ) ;
39
+ return persistTabs ( paths ) ;
40
+ } , [ paths , persistTabs ] ) ;
41
41
42
42
const config = useMemo (
43
43
( ) =>
@@ -48,35 +48,37 @@ export function CategoriesRoute() {
48
48
[ router ] ,
49
49
) ;
50
50
51
- const { activeTabId, setActiveTabId, getTabPropertiesByTabPath } =
52
- useRouterTabs ( {
53
- router,
54
- config : config ,
55
- fallbackPath : homeRoute ,
56
- tabs,
57
- onTabsChange : setTabs ,
58
- } ) ;
59
-
60
- const uiTabs : TabModel [ ] = tabs . map ( ( tab ) => {
61
- return {
62
- id : tab ,
63
- content : < Outlet /> ,
64
- title : getTabPropertiesByTabPath ( tab ) ! . title ,
65
- isClosable : false ,
66
- } ;
51
+ const { tabs, activeTab } = useRouterTabs ( {
52
+ router,
53
+ config,
54
+ paths,
55
+ onPathsChange : setPaths ,
67
56
} ) ;
68
57
69
- const setUiTabs = ( uiTabs : TabModel [ ] ) => {
70
- setTabs ( uiTabs . map ( ( uiTab ) => uiTab . id ) ) ;
58
+ const setTabs = ( tabs : TabModel [ ] ) => {
59
+ setPaths ( tabs . map ( ( tab ) => tab . id ) ) ;
60
+ } ;
61
+
62
+ const setActiveTabId = ( id : string | undefined ) => {
63
+ setTimeout ( ( ) => {
64
+ const [ pathname , search ] = ( id || homeRoute ) . split ( "?" ) ;
65
+ router . navigate ( {
66
+ pathname,
67
+ search,
68
+ } ) ;
69
+ } ) ;
71
70
} ;
72
71
72
+ const activeTabId = activeTab ?. id ;
73
+
73
74
return (
74
75
< div >
75
76
< Tabs
76
77
activeTabId = { activeTabId }
77
78
onActiveTabIdChange = { setActiveTabId }
78
- tabs = { uiTabs }
79
- onTabsChange = { setUiTabs }
79
+ tabs = { tabs }
80
+ initialTabs = { tabs }
81
+ onTabsChange = { setTabs }
80
82
hasControlledActiveTabId
81
83
/>
82
84
</ div >
0 commit comments