@@ -2,9 +2,10 @@ import { useState, useRef, useEffect, memo, RefObject } from "react"
22import { useRouter } from "next/router"
33import { Animate } from "react-simple-animate"
44import { useForm } from "react-hook-form"
5+ import type { SubmitHandler } from "react-hook-form"
56import SortableContainer from "./SortableContainer"
67import { useStateMachine } from "little-state-machine"
7- import type { GlobalState } from "little-state-machine"
8+ import type { GlobalState , FormDataItem } from "little-state-machine"
89import colors from "../styles/colors"
910import generateCode from "./logic/generateCode"
1011import copyClipBoard from "./utils/copyClipBoard"
@@ -27,7 +28,9 @@ const errorStyle = {
2728 background : colors . errorPink ,
2829}
2930
30- const defaultValue = {
31+ type FormFieldDefinitionItem = Partial < FormDataItem > & { toggle ?: boolean }
32+
33+ const defaultValue : FormFieldDefinitionItem = {
3134 max : undefined ,
3235 min : undefined ,
3336 pattern : undefined ,
@@ -36,7 +39,7 @@ const defaultValue = {
3639 required : undefined ,
3740 name : "" ,
3841 type : "" ,
39- options : [ ] ,
42+ options : "" ,
4043}
4144
4245function BuilderPage ( {
@@ -61,41 +64,43 @@ function BuilderPage({
6164 }
6265 } ,
6366 } )
64- const [ editFormData , setFormData ] = useState ( defaultValue )
67+ const [ editFormData , setEditFormData ] = useState ( defaultValue )
6568 const { register, handleSubmit, watch, setValue, reset, formState } =
66- useForm ( )
69+ useForm < FormFieldDefinitionItem > ( )
6770 const errors = formState . errors
6871 const [ editIndex , setEditIndex ] = useState ( - 1 )
6972 const copyFormData = useRef < GlobalState [ "formData" ] > ( [ ] )
7073 const closeButton = useRef < HTMLButtonElement > ( null )
7174 const [ showValidation , toggleValidation ] = useState ( false )
72- const onSubmit = ( data ) => {
75+
76+ const onSubmit : SubmitHandler < FormFieldDefinitionItem > = ( data ) => {
7377 toggleValidation ( false )
7478 if ( editIndex >= 0 ) {
75- formData [ editIndex ] = data
79+ formData [ editIndex ] = data as FormDataItem
7680 updateFormData ( [ ...formData . filter ( ( formInput ) => formInput ) ] )
77- setFormData ( defaultValue )
81+ setEditFormData ( defaultValue )
7882 setEditIndex ( - 1 )
7983 } else {
8084 updateFormData ( [ ...formData , ...[ data ] ] )
8185 }
8286 reset ( )
8387 }
88+
8489 const form = useRef < HTMLHeadingElement > ( null )
8590 const type = watch ( "type" )
8691 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 ||
9297 editFormData . required
9398 copyFormData . current = formData
9499 const editIndexRef = useRef < number | null > ( null )
95100 editIndexRef . current = editIndex
96101 const router = useRouter ( )
97102
98- const validate = ( value ) => {
103+ const validate = ( value : unknown ) => {
99104 return (
100105 ! Object . values ( copyFormData . current ) . find (
101106 ( data ) => data . name === value
@@ -118,7 +123,7 @@ function BuilderPage({
118123 } , [ editFormData . type , setValue ] )
119124
120125 useEffect ( ( ) => {
121- setValue ( "required" , editFormData . required )
126+ setValue ( "required" , ! ! editFormData . required )
122127 } , [ editFormData . required , editIndex , setValue ] )
123128
124129 const child = (
@@ -140,15 +145,12 @@ function BuilderPage({
140145 </ p >
141146
142147 < 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 }
152154 />
153155 </ section >
154156
0 commit comments