@@ -5,32 +5,41 @@ import { v4 as uuidv4 } from "uuid";
5
5
6
6
export type PreferredMuxRule = MuxRule & { id : string } ;
7
7
8
+ type MuxingRulesFormState = {
9
+ rules : PreferredMuxRule [ ] ;
10
+ } ;
11
+
8
12
const DEFAULT_STATE : PreferredMuxRule = {
9
- id : "" ,
13
+ id : uuidv4 ( ) ,
10
14
provider_id : "" ,
11
15
model : "" ,
12
16
matcher : "" ,
13
17
matcher_type : MuxMatcherType . CATCH_ALL ,
14
18
} ;
15
19
16
20
export const useMuxingRulesFormState = ( initialValues : MuxRule [ ] ) => {
17
- const formState = useFormState < {
18
- rules : PreferredMuxRule [ ] ;
19
- } > ( {
21
+ const formState = useFormState < MuxingRulesFormState > ( {
20
22
rules : [ { ...DEFAULT_STATE , id : uuidv4 ( ) } ] ,
21
23
} ) ;
22
24
const { values, updateFormValues, setInitialValues } = formState ;
23
25
24
26
useEffect ( ( ) => {
25
- if ( initialValues . length === 0 ) return ;
26
27
setInitialValues ( {
27
- rules : initialValues . map ( ( item ) => ( { ...item , id : uuidv4 ( ) } ) ) ,
28
+ rules :
29
+ initialValues . length == 0
30
+ ? [ DEFAULT_STATE ]
31
+ : initialValues . map ( ( item ) => ( { ...item , id : uuidv4 ( ) } ) ) ,
28
32
} ) ;
29
33
} , [ initialValues , setInitialValues ] ) ;
30
34
31
35
const addRule = useCallback ( ( ) => {
36
+ const newRules = [
37
+ ...values . rules . slice ( 0 , values . rules . length - 1 ) ,
38
+ { ...DEFAULT_STATE , id : uuidv4 ( ) } ,
39
+ ...values . rules . slice ( values . rules . length - 1 ) ,
40
+ ] ;
32
41
updateFormValues ( {
33
- rules : [ ... values . rules , { ... DEFAULT_STATE , id : uuidv4 ( ) } ] ,
42
+ rules : newRules ,
34
43
} ) ;
35
44
} , [ updateFormValues , values . rules ] ) ;
36
45
0 commit comments