@@ -27,6 +27,10 @@ import {
27
27
shuffleArray ,
28
28
} from './helpers/ParamHelper' ;
29
29
30
+ import PropTypes from 'prop-types' ; // Import this for URL Param
31
+ import { withAlgorithmParams } from './helpers/urlHelpers' // Import this for URL Param
32
+ import { URLContext } from '../../context/urlState' ;
33
+
30
34
const DEFAULT_NODES = genRandNumList ( 10 , 1 , 100 ) ;
31
35
const DEFAULT_TARGET = '2' ;
32
36
const INSERTION = 'insertion' ;
@@ -49,26 +53,34 @@ const BlueRadio = withStyles({
49
53
checked : { } ,
50
54
} ) ( ( props ) => < Radio { ...props } /> ) ;
51
55
52
- function AVLTreeParam ( ) {
56
+ function AVLTreeParam ( { mode , list , value } ) {
53
57
const { algorithm, dispatch } = useContext ( GlobalContext ) ;
54
58
const [ message , setMessage ] = useState ( null ) ;
55
- const [ nodes , setNodes ] = useState ( DEFAULT_NODES ) ;
59
+ const [ localNodes , setlocalNodes ] = useState ( list || DEFAULT_NODES ) ;
60
+ const { setNodes, setSearchValue } = useContext ( URLContext ) ;
56
61
const [ avlCase , setAVLCase ] = useState ( {
57
62
random : true ,
58
63
sorted : false ,
59
64
balanced : false ,
60
65
} ) ;
61
66
67
+ const [ localValue , setLocalValue ] = useState ( DEFAULT_TARGET ) ;
68
+
69
+ useEffect ( ( ) => {
70
+ setNodes ( localNodes ) ;
71
+ setSearchValue ( localValue ) ;
72
+ } , [ localNodes , localValue , setNodes , setSearchValue ] ) ;
73
+
62
74
const handleChange = ( e ) => {
63
75
switch ( e . target . name ) {
64
76
case 'random' :
65
- setNodes ( shuffleArray ( nodes ) ) ;
77
+ setlocalNodes ( shuffleArray ( localNodes ) ) ;
66
78
break ;
67
79
case 'sorted' :
68
- setNodes ( [ ...nodes ] . sort ( ( a , b ) => a - b ) ) ;
80
+ setlocalNodes ( [ ...localNodes ] . sort ( ( a , b ) => a - b ) ) ;
69
81
break ;
70
82
case 'balanced' :
71
- setNodes ( balanceBSTArray ( [ ...nodes ] . sort ( ( a , b ) => a - b ) ) ) ;
83
+ setlocalNodes ( balanceBSTArray ( [ ...localNodes ] . sort ( ( a , b ) => a - b ) ) ) ;
72
84
break ;
73
85
default :
74
86
}
@@ -83,6 +95,7 @@ function AVLTreeParam() {
83
95
const handleSearch = ( e ) => {
84
96
e . preventDefault ( ) ;
85
97
const inputValue = e . target [ 0 ] . value ;
98
+ setLocalValue ( inputValue ) ;
86
99
87
100
if ( singleNumberValidCheck ( inputValue ) ) {
88
101
const target = parseInt ( inputValue , 10 ) ;
@@ -134,13 +147,13 @@ function AVLTreeParam() {
134
147
formClassName = "formLeft"
135
148
DEFAULT_VAL = { ( ( ) => {
136
149
if ( avlCase . balanced ) {
137
- return balanceBSTArray ( [ ...nodes ] . sort ( ( a , b ) => a - b ) ) ;
150
+ return balanceBSTArray ( [ ...localNodes ] . sort ( ( a , b ) => a - b ) ) ;
138
151
} if ( avlCase . sorted ) {
139
- return [ ...nodes ] . sort ( ( a , b ) => a - b ) ;
152
+ return [ ...localNodes ] . sort ( ( a , b ) => a - b ) ;
140
153
}
141
- return nodes ;
154
+ return localNodes ;
142
155
} ) ( ) }
143
- SET_VAL = { setNodes }
156
+ SET_VAL = { setlocalNodes }
144
157
ALGORITHM_NAME = { INSERTION }
145
158
EXAMPLE = { INSERTION_EXAMPLE }
146
159
setMessage = { setMessage }
@@ -152,7 +165,7 @@ function AVLTreeParam() {
152
165
buttonName = "Search"
153
166
mode = "search"
154
167
formClassName = "formRight"
155
- DEFAULT_VAL = { DEFAULT_TARGET }
168
+ DEFAULT_VAL = { value || localValue }
156
169
ALGORITHM_NAME = { SEARCH }
157
170
EXAMPLE = { SEARCH_EXAMPLE }
158
171
handleSubmit = { handleSearch }
@@ -199,4 +212,12 @@ function AVLTreeParam() {
199
212
) ;
200
213
}
201
214
202
- export default AVLTreeParam ;
215
+ // Define the prop types for URL Params
216
+ AVLTreeParam . propTypes = {
217
+ alg : PropTypes . string . isRequired ,
218
+ mode : PropTypes . string . isRequired ,
219
+ list : PropTypes . string . isRequired ,
220
+ value : PropTypes . string . isRequired
221
+ } ;
222
+
223
+ export default withAlgorithmParams ( AVLTreeParam ) ; // Export with the wrapper for URL Params
0 commit comments