@@ -10,6 +10,7 @@ import {LoadingBar} from '@/components/LoadingBar'
1010import { FilterSettingDialog } from '@/components/FilterSettingDialog'
1111import { ClusterOverview } from '@/components/ClusterOverview'
1212import { SelectChartButton } from '@/components/charts/SelectChartButton'
13+ import { ClusterBreadcrumb } from '@/components/ClusterBreadcrumb'
1314
1415type Props = {
1516 resultSize : number
@@ -28,6 +29,7 @@ export function ClientContainer({resultSize, meta, children}: PropsWithChildren<
2829 const [ result , setResult ] = useState < Result > ( )
2930 const [ rootLevel , setRootLevel ] = useState ( 0 )
3031 const [ filteredResult , setFilteredResult ] = useState < Result > ( )
32+ const [ selectedClusters , setSelectedClusters ] = useState < Cluster [ ] > ( [ ] )
3133 const [ openFilterSetting , setOpenFilterSetting ] = useState ( false )
3234 const [ selectedChart , setSelectedChart ] = useState ( 'scatter' )
3335
@@ -37,11 +39,11 @@ export function ClientContainer({resultSize, meta, children}: PropsWithChildren<
3739
3840 function onChangeFilter ( lv1 : string , lv2 : string , lv3 : string , lv4 : string ) {
3941 if ( ! result ) return
40- const filteredClusters = getFilteredClusters ( result . clusters || [ ] , lv1 , lv2 , lv3 , lv4 )
4142 setRootLevel ( getRootLevel ( lv1 , lv2 , lv3 , lv4 ) )
43+ setSelectedClusters ( getSelectedClusters ( result . clusters || [ ] , lv1 , lv2 , lv3 , lv4 ) )
4244 setFilteredResult ( {
4345 ...result ,
44- clusters : filteredClusters
46+ clusters : getFilteredClusters ( result . clusters || [ ] , lv1 , lv2 , lv3 , lv4 )
4547 } )
4648 }
4749
@@ -83,12 +85,14 @@ export function ClientContainer({resultSize, meta, children}: PropsWithChildren<
8385 }
8486 return (
8587 < >
86- < FilterSettingDialog
87- result = { result }
88- isOpen = { openFilterSetting }
89- onClose = { ( ) => { setOpenFilterSetting ( false ) } }
90- onChangeFilter = { onChangeFilter }
91- />
88+ { openFilterSetting && (
89+ < FilterSettingDialog
90+ result = { result }
91+ selectedClusters = { selectedClusters }
92+ onClose = { ( ) => { setOpenFilterSetting ( false ) } }
93+ onChangeFilter = { onChangeFilter }
94+ />
95+ ) }
9296 < Chart
9397 result = { filteredResult }
9498 rootLevel = { rootLevel }
@@ -100,6 +104,10 @@ export function ClientContainer({resultSize, meta, children}: PropsWithChildren<
100104 onClickSetting = { ( ) => { setOpenFilterSetting ( true ) } }
101105 isApplyFilter = { result . clusters . length !== filteredResult . clusters . length }
102106 />
107+ < ClusterBreadcrumb
108+ selectedClusters = { selectedClusters }
109+ onChangeFilter = { onChangeFilter }
110+ />
103111 { rootLevel === 0 && children }
104112 { rootLevel !== 0 && (
105113 filteredResult . clusters . filter ( c => c . level === rootLevel + 1 ) . map ( c => (
@@ -120,6 +128,15 @@ function getRootLevel(level1Id:string, level2Id:string, level3Id:string, level4I
120128 return 0
121129}
122130
131+ function getSelectedClusters ( clusters : Cluster [ ] , level1Id :string , level2Id :string , level3Id :string , level4Id :string ) : Cluster [ ] {
132+ const results : Cluster [ ] = [ ]
133+ if ( level1Id !== '0' ) results . push ( clusters . find ( c => c . id === level1Id ) ! )
134+ if ( level2Id !== '0' ) results . push ( clusters . find ( c => c . id === level2Id ) ! )
135+ if ( level3Id !== '0' ) results . push ( clusters . find ( c => c . id === level3Id ) ! )
136+ if ( level4Id !== '0' ) results . push ( clusters . find ( c => c . id === level4Id ) ! )
137+ return results
138+ }
139+
123140function getFilteredClusters ( clusters : Cluster [ ] , level1Id :string , level2Id :string , level3Id :string , level4Id :string ) : Cluster [ ] {
124141 if ( level4Id !== '0' ) {
125142 const lv1cluster = clusters . find ( c => c . id === level1Id ) !
0 commit comments