11import { Tabs } from 'antd'
2- import { memo } from 'react'
2+ import { memo , useEffect , useMemo } from 'react'
33import { useNavigate , useParams } from 'react-router-dom'
44
5+ import { MODULES_TAB_KEYS } from '@constants/modules.ts'
6+
57import ModuleTabContent from '@widgets/ModuleTabContent'
68
79import { ModuleTabsPropsType } from '@components/ModuleTabs/module-tabs.type.ts'
810
911const secondColumnItems = [
10- {
11- key : 'configurations' ,
12- name : 'Конфигурации'
13- } ,
14- { key : 'connections' , name : 'Подключения' }
15- ]
12+ { key : 'configurations' , name : 'Конфигурации' } ,
13+ { key : 'connections' , name : 'Подключения' } ,
14+ { key : 'swagger' , name : 'Swagger' }
15+ ] as const
1616
1717const ModuleTabs = ( {
1818 activeTab,
@@ -22,37 +22,66 @@ const ModuleTabs = ({
2222} : ModuleTabsPropsType ) => {
2323 const navigate = useNavigate ( )
2424 const { id : selectedItemId = '' } = useParams ( )
25+
26+ const hasSwagger = useMemo (
27+ ( ) =>
28+ currentModule ?. status ?. some ( ( status ) =>
29+ status . endpoints ?. some ( ( e ) => e . path . includes ( 'swagger' ) )
30+ ) ,
31+ [ currentModule ]
32+ )
33+
34+ const resolvedActiveTab = useMemo ( ( ) => {
35+ return activeTab === MODULES_TAB_KEYS . swagger && ! hasSwagger
36+ ? 'configurations'
37+ : activeTab
38+ } , [ activeTab , hasSwagger ] )
39+
40+ const navigateToTab = ( tabKey : string ) => {
41+ const params = new URLSearchParams ( searchParams )
42+ navigate (
43+ {
44+ pathname : `${ selectedItemId } /${ tabKey } ` ,
45+ search : params . toString ( )
46+ } ,
47+ { replace : true }
48+ )
49+ }
50+
51+ useEffect ( ( ) => {
52+ if ( resolvedActiveTab !== activeTab ) {
53+ setActiveTab ( resolvedActiveTab )
54+ navigateToTab ( resolvedActiveTab )
55+ }
56+ } , [ resolvedActiveTab ] )
57+
58+ const items = useMemo (
59+ ( ) =>
60+ secondColumnItems . filter ( ( { key } ) => key !== 'swagger' || hasSwagger ) ,
61+ [ hasSwagger ]
62+ )
63+
2564 return (
2665 < Tabs
27- activeKey = { activeTab }
28- onChange = { ( activeKey ) => {
29- setActiveTab ( activeKey )
30- const params = new URLSearchParams ( searchParams )
31- const path = `${ selectedItemId } /${ activeKey } `
32- navigate (
33- {
34- pathname : path ,
35- search : params . toString ( )
36- } ,
37- { replace : true }
38- )
39- } }
66+ activeKey = { resolvedActiveTab }
4067 className = "modules-page__tabs"
41- items = { secondColumnItems . map ( ( item ) => {
42- return {
43- disabled : selectedItemId === '' ,
44- label : item . name ,
45- key : item . key ,
46- children : (
47- < div className = "modules-page__content" >
48- < ModuleTabContent
49- selectedItemId = { selectedItemId }
50- currentModule = { currentModule }
51- />
52- </ div >
53- )
54- }
55- } ) }
68+ onChange = { ( key ) => {
69+ setActiveTab ( key )
70+ navigateToTab ( key )
71+ } }
72+ items = { items . map ( ( { key, name } ) => ( {
73+ key,
74+ label : name ,
75+ disabled : ! selectedItemId ,
76+ children : (
77+ < div className = "modules-page__content" >
78+ < ModuleTabContent
79+ selectedItemId = { selectedItemId }
80+ currentModule = { currentModule }
81+ />
82+ </ div >
83+ )
84+ } ) ) }
5685 />
5786 )
5887}
0 commit comments