1- import { Box , Button } from '@chakra-ui/react'
1+ import { Box , Button , VStack } from '@chakra-ui/react'
22import React , { useEffect , useState } from 'react'
33import { NativeSelectField , NativeSelectRoot } from '@/components/ui/native-select'
44import { Result } from '@/type'
@@ -11,6 +11,7 @@ import {
1111 DialogRoot ,
1212 DialogTitle
1313} from '@/components/ui/dialog'
14+ import { ChevronDownIcon } from 'lucide-react'
1415
1516type Props = {
1617 result : Result
@@ -25,20 +26,28 @@ export function FilterSettingDialog({result, isOpen, onClose, onChangeFilter}: P
2526 const [ level3 , setLevel3 ] = useState < string > ( '0' )
2627 const [ level4 , setLevel4 ] = useState < string > ( '0' )
2728
28- useEffect ( ( ) => {
29- if ( level1 === '0' ) {
30- setLevel2 ( '0' )
31- setLevel3 ( '0' )
32- setLevel4 ( '0' )
29+ function onChangeLevel ( level : number , id : string ) {
30+ switch ( level ) {
31+ case 1 :
32+ setLevel1 ( id )
33+ setLevel2 ( '0' )
34+ setLevel3 ( '0' )
35+ setLevel4 ( '0' )
36+ break
37+ case 2 :
38+ setLevel2 ( id )
39+ setLevel3 ( '0' )
40+ setLevel4 ( '0' )
41+ break
42+ case 3 :
43+ setLevel3 ( id )
44+ setLevel4 ( '0' )
45+ break
46+ case 4 :
47+ setLevel4 ( id )
48+ break
3349 }
34- if ( level2 === '0' ) {
35- setLevel3 ( '0' )
36- setLevel4 ( '0' )
37- }
38- if ( level3 === '0' ) {
39- setLevel4 ( '0' )
40- }
41- } , [ level1 , level2 , level3 , level4 ] )
50+ }
4251
4352 function onApply ( ) {
4453 onChangeFilter ( level1 , level2 , level3 , level4 )
@@ -52,11 +61,11 @@ export function FilterSettingDialog({result, isOpen, onClose, onChangeFilter}: P
5261 < DialogTitle > 表示クラスター設定</ DialogTitle >
5362 </ DialogHeader >
5463 < DialogBody >
55- < Box mb = { 2 } >
64+ < Box >
5665 < NativeSelectRoot >
5766 < NativeSelectField
5867 value = { level1 }
59- onChange = { ( e ) => setLevel1 ( e . target . value ) }
68+ onChange = { ( e ) => onChangeLevel ( 1 , e . target . value ) }
6069 >
6170 < option value = { '0' } > 全て</ option >
6271 { result . clusters . filter ( c => c . level === 1 ) . map ( c => (
@@ -66,49 +75,52 @@ export function FilterSettingDialog({result, isOpen, onClose, onChangeFilter}: P
6675 </ NativeSelectRoot >
6776 </ Box >
6877 { level1 !== '0' && (
69- < Box mb = { 2 } >
78+ < VStack mt = { 2 } >
79+ < ChevronDownIcon />
7080 < NativeSelectRoot >
7181 < NativeSelectField
7282 value = { level2 }
73- onChange = { ( e ) => setLevel2 ( e . target . value ) }
83+ onChange = { ( e ) => onChangeLevel ( 2 , e . target . value ) }
7484 >
7585 < option value = { '0' } > 全て</ option >
7686 { result . clusters . filter ( c => c . parent === level1 ) . map ( c => (
7787 < option key = { c . id } value = { c . id } > { c . label } </ option >
7888 ) ) }
7989 </ NativeSelectField >
8090 </ NativeSelectRoot >
81- </ Box >
91+ </ VStack >
8292 ) }
8393 { level2 !== '0' && (
84- < Box mb = { 2 } >
94+ < VStack mt = { 2 } >
95+ < ChevronDownIcon />
8596 < NativeSelectRoot >
8697 < NativeSelectField
8798 value = { level3 }
88- onChange = { ( e ) => setLevel3 ( e . target . value ) }
99+ onChange = { ( e ) => onChangeLevel ( 3 , e . target . value ) }
89100 >
90101 < option value = { '0' } > 全て</ option >
91102 { result . clusters . filter ( c => c . parent === level2 ) . map ( c => (
92103 < option key = { c . id } value = { c . id } > { c . label } </ option >
93104 ) ) }
94105 </ NativeSelectField >
95106 </ NativeSelectRoot >
96- </ Box >
107+ </ VStack >
97108 ) }
98109 { level3 !== '0' && (
99- < Box mb = { 2 } >
110+ < VStack mt = { 2 } >
111+ < ChevronDownIcon />
100112 < NativeSelectRoot >
101113 < NativeSelectField
102114 value = { level4 }
103- onChange = { ( e ) => setLevel4 ( e . target . value ) }
115+ onChange = { ( e ) => onChangeLevel ( 4 , e . target . value ) }
104116 >
105117 < option value = { '0' } > 全て</ option >
106118 { result . clusters . filter ( c => c . parent === level3 ) . map ( c => (
107119 < option key = { c . id } value = { c . id } > { c . label } </ option >
108120 ) ) }
109121 </ NativeSelectField >
110122 </ NativeSelectRoot >
111- </ Box >
123+ </ VStack >
112124 ) }
113125 </ DialogBody >
114126 < DialogFooter >
0 commit comments