11import { FC , ReactEventHandler , useCallback , useMemo } from 'react'
22import { useDispatch , useSelector } from 'react-redux'
3+ import { ActionCreatorWithPayload } from '@reduxjs/toolkit/dist/createAction'
34
45import {
56 changeAlgorithm ,
@@ -9,11 +10,12 @@ import {
910} from '@/store/slice/sorting'
1011import { RootState } from '@/store'
1112
12- import { Header , Dropdown } from '@/components/shared'
13+ import { Dropdown } from '@/components/shared'
1314
1415const SizeOption = 'Size'
1516const AlgorithmOption = 'Algorithm'
16- const ModeOption = 'Color mode'
17+ const ModeOption = 'Color Mode'
18+ const SpeedOption = 'Speed'
1719
1820const getMenuOptions = ( allAlgorithms : string [ ] ) => [
1921 {
@@ -38,7 +40,7 @@ const getMenuOptions = (allAlgorithms: string[]) => [
3840 ]
3941 } ,
4042 {
41- name : 'Speed' ,
43+ name : SpeedOption ,
4244 value : [
4345 {
4446 key : '1x' ,
@@ -58,34 +60,34 @@ const getMenuOptions = (allAlgorithms: string[]) => [
5860 name : ModeOption ,
5961 value : [
6062 {
61- key : 'True ' ,
63+ key : 'On ' ,
6264 value : true . toString ( )
6365 } ,
6466 {
65- key : 'False ' ,
67+ key : 'Off ' ,
6668 value : false . toString ( )
6769 }
6870 ]
6971 }
7072]
7173
74+ const OptionHandlerMap : {
75+ [ key : string ] : ActionCreatorWithPayload < any , string >
76+ } = {
77+ [ SizeOption ] : changeArraySize ,
78+ [ AlgorithmOption ] : changeAlgorithm ,
79+ [ ModeOption ] : changeColorMode ,
80+ [ SpeedOption ] : changeAnimationSpeed
81+ }
82+
7283const OptionContainer : FC = ( ) => {
7384 const { allAlgorithms } = useSelector ( ( state : RootState ) => state . sorting )
7485 const dispatch = useDispatch ( )
7586
7687 const handleChangeEvent : ReactEventHandler < HTMLSelectElement > = useCallback (
7788 event => {
7889 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 ) )
8991 } ,
9092 [ dispatch ]
9193 )
@@ -97,16 +99,13 @@ const OptionContainer: FC = () => {
9799 return useMemo ( ( ) => {
98100 return (
99101 < 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+ />
110109 ) ) }
111110 </ div >
112111 )
0 commit comments