@@ -2,9 +2,10 @@ import { useState, useRef, useEffect, memo, RefObject } from "react"
2
2
import { useRouter } from "next/router"
3
3
import { Animate } from "react-simple-animate"
4
4
import { useForm } from "react-hook-form"
5
+ import type { SubmitHandler } from "react-hook-form"
5
6
import SortableContainer from "./SortableContainer"
6
7
import { useStateMachine } from "little-state-machine"
7
- import type { GlobalState } from "little-state-machine"
8
+ import type { GlobalState , FormDataItem } from "little-state-machine"
8
9
import colors from "../styles/colors"
9
10
import generateCode from "./logic/generateCode"
10
11
import copyClipBoard from "./utils/copyClipBoard"
@@ -27,7 +28,9 @@ const errorStyle = {
27
28
background : colors . errorPink ,
28
29
}
29
30
30
- const defaultValue = {
31
+ type FormFieldDefinitionItem = Partial < FormDataItem > & { toggle ?: boolean }
32
+
33
+ const defaultValue : FormFieldDefinitionItem = {
31
34
max : undefined ,
32
35
min : undefined ,
33
36
pattern : undefined ,
@@ -36,7 +39,7 @@ const defaultValue = {
36
39
required : undefined ,
37
40
name : "" ,
38
41
type : "" ,
39
- options : [ ] ,
42
+ options : "" ,
40
43
}
41
44
42
45
function BuilderPage ( {
@@ -61,41 +64,43 @@ function BuilderPage({
61
64
}
62
65
} ,
63
66
} )
64
- const [ editFormData , setFormData ] = useState ( defaultValue )
67
+ const [ editFormData , setEditFormData ] = useState ( defaultValue )
65
68
const { register, handleSubmit, watch, setValue, reset, formState } =
66
- useForm ( )
69
+ useForm < FormFieldDefinitionItem > ( )
67
70
const errors = formState . errors
68
71
const [ editIndex , setEditIndex ] = useState ( - 1 )
69
72
const copyFormData = useRef < GlobalState [ "formData" ] > ( [ ] )
70
73
const closeButton = useRef < HTMLButtonElement > ( null )
71
74
const [ showValidation , toggleValidation ] = useState ( false )
72
- const onSubmit = ( data ) => {
75
+
76
+ const onSubmit : SubmitHandler < FormFieldDefinitionItem > = ( data ) => {
73
77
toggleValidation ( false )
74
78
if ( editIndex >= 0 ) {
75
- formData [ editIndex ] = data
79
+ formData [ editIndex ] = data as FormDataItem
76
80
updateFormData ( [ ...formData . filter ( ( formInput ) => formInput ) ] )
77
- setFormData ( defaultValue )
81
+ setEditFormData ( defaultValue )
78
82
setEditIndex ( - 1 )
79
83
} else {
80
84
updateFormData ( [ ...formData , ...[ data ] ] )
81
85
}
82
86
reset ( )
83
87
}
88
+
84
89
const form = useRef < HTMLHeadingElement > ( null )
85
90
const type = watch ( "type" )
86
91
const shouldToggleOn =
87
- editFormData . max ||
88
- editFormData . min ||
89
- editFormData . pattern ||
90
- editFormData . maxLength ||
91
- editFormData . minLength ||
92
+ ! ! editFormData . max ||
93
+ ! ! editFormData . min ||
94
+ ! ! editFormData . pattern ||
95
+ ! ! editFormData . maxLength ||
96
+ ! ! editFormData . minLength ||
92
97
editFormData . required
93
98
copyFormData . current = formData
94
99
const editIndexRef = useRef < number | null > ( null )
95
100
editIndexRef . current = editIndex
96
101
const router = useRouter ( )
97
102
98
- const validate = ( value ) => {
103
+ const validate = ( value : unknown ) => {
99
104
return (
100
105
! Object . values ( copyFormData . current ) . find (
101
106
( data ) => data . name === value
@@ -118,7 +123,7 @@ function BuilderPage({
118
123
} , [ editFormData . type , setValue ] )
119
124
120
125
useEffect ( ( ) => {
121
- setValue ( "required" , editFormData . required )
126
+ setValue ( "required" , ! ! editFormData . required )
122
127
} , [ editFormData . required , editIndex , setValue ] )
123
128
124
129
const child = (
@@ -140,15 +145,12 @@ function BuilderPage({
140
145
</ p >
141
146
142
147
< SortableContainer
143
- { ...{
144
- updateFormData,
145
- formData,
146
- editIndex,
147
- setEditIndex,
148
- setFormData,
149
- editFormData,
150
- reset,
151
- } }
148
+ updateFormData = { updateFormData }
149
+ formData = { formData }
150
+ editIndex = { editIndex }
151
+ setEditIndex = { setEditIndex }
152
+ setFormData = { setEditFormData }
153
+ reset = { reset }
152
154
/>
153
155
</ section >
154
156
0 commit comments