1
1
import { FC , ReactEventHandler , useCallback , useMemo } from 'react'
2
2
import { useDispatch , useSelector } from 'react-redux'
3
+ import { ActionCreatorWithPayload } from '@reduxjs/toolkit/dist/createAction'
3
4
4
5
import {
5
6
changeAlgorithm ,
@@ -9,11 +10,12 @@ import {
9
10
} from '@/store/slice/sorting'
10
11
import { RootState } from '@/store'
11
12
12
- import { Header , Dropdown } from '@/components/shared'
13
+ import { Dropdown } from '@/components/shared'
13
14
14
15
const SizeOption = 'Size'
15
16
const AlgorithmOption = 'Algorithm'
16
- const ModeOption = 'Color mode'
17
+ const ModeOption = 'Color Mode'
18
+ const SpeedOption = 'Speed'
17
19
18
20
const getMenuOptions = ( allAlgorithms : string [ ] ) => [
19
21
{
@@ -38,7 +40,7 @@ const getMenuOptions = (allAlgorithms: string[]) => [
38
40
]
39
41
} ,
40
42
{
41
- name : 'Speed' ,
43
+ name : SpeedOption ,
42
44
value : [
43
45
{
44
46
key : '1x' ,
@@ -58,34 +60,34 @@ const getMenuOptions = (allAlgorithms: string[]) => [
58
60
name : ModeOption ,
59
61
value : [
60
62
{
61
- key : 'True ' ,
63
+ key : 'On ' ,
62
64
value : true . toString ( )
63
65
} ,
64
66
{
65
- key : 'False ' ,
67
+ key : 'Off ' ,
66
68
value : false . toString ( )
67
69
}
68
70
]
69
71
}
70
72
]
71
73
74
+ const OptionHandlerMap : {
75
+ [ key : string ] : ActionCreatorWithPayload < any , string >
76
+ } = {
77
+ [ SizeOption ] : changeArraySize ,
78
+ [ AlgorithmOption ] : changeAlgorithm ,
79
+ [ ModeOption ] : changeColorMode ,
80
+ [ SpeedOption ] : changeAnimationSpeed
81
+ }
82
+
72
83
const OptionContainer : FC = ( ) => {
73
84
const { allAlgorithms } = useSelector ( ( state : RootState ) => state . sorting )
74
85
const dispatch = useDispatch ( )
75
86
76
87
const handleChangeEvent : ReactEventHandler < HTMLSelectElement > = useCallback (
77
88
event => {
78
89
const { name, value } = event . currentTarget
79
- if ( name === SizeOption ) {
80
- dispatch ( changeArraySize ( value ) )
81
- } else if ( name === AlgorithmOption ) {
82
- dispatch ( changeAlgorithm ( value ) )
83
- } else if ( name === ModeOption ) {
84
- // console.log(value)
85
- dispatch ( changeColorMode ( value ) )
86
- } else {
87
- dispatch ( changeAnimationSpeed ( value ) )
88
- }
90
+ dispatch ( OptionHandlerMap [ name ] ( value ) )
89
91
} ,
90
92
[ dispatch ]
91
93
)
@@ -97,16 +99,13 @@ const OptionContainer: FC = () => {
97
99
return useMemo ( ( ) => {
98
100
return (
99
101
< div className = 'optionContainer' >
100
- { options . map ( op => (
101
- < Header className = 'panelHeader' key = { op . name } >
102
- < span > { op . name } : </ span >
103
- < Dropdown
104
- name = { op . name }
105
- options = { op . value }
106
- onChange = { handleChangeEvent }
107
- value = { op . value [ 1 ] . value }
108
- />
109
- </ Header >
102
+ { options . map ( ( { name, value } ) => (
103
+ < Dropdown
104
+ name = { name }
105
+ options = { value }
106
+ onChange = { handleChangeEvent }
107
+ value = { value [ 1 ] . value }
108
+ />
110
109
) ) }
111
110
</ div >
112
111
)
0 commit comments