@@ -4,7 +4,7 @@ import { zodResolver } from "@hookform/resolvers/zod"
44import { useForm } from "react-hook-form"
55import { useRouter } from "next/navigation"
66import * as z from "zod"
7- import { useState , useEffect } from "react"
7+ import { useState , useEffect , useImperativeHandle , forwardRef } from "react"
88import Image from "next/image"
99import { X } from "lucide-react"
1010
@@ -36,25 +36,38 @@ interface EditCarFormProps {
3636 onImageUrlChange ?: ( url : string | null ) => void
3737}
3838
39- export function EditCarForm ( { car , onSuccess , formId , onImageUrlChange } : EditCarFormProps ) {
40- const router = useRouter ( )
41- const [ isImageUploaded , setIsImageUploaded ] = useState ( false )
42- const [ imageUrl , setImageUrl ] = useState < string | null > ( car . imageUrl )
39+ export interface EditCarFormRef {
40+ submit : ( ) => void
41+ imageUrl : string | null
42+ }
4343
44- const updateImageUrl = ( url : string | null ) => {
45- setImageUrl ( url )
46- onImageUrlChange ?.( url )
47- }
44+ export const EditCarForm = forwardRef < EditCarFormRef , EditCarFormProps > (
45+ ( { car, onSuccess, formId, onImageUrlChange } , ref ) => {
46+ const router = useRouter ( )
47+ const [ isImageUploaded , setIsImageUploaded ] = useState ( false )
48+ const [ imageUrl , setImageUrl ] = useState < string | null > ( car . imageUrl )
49+
50+ const updateImageUrl = ( url : string | null ) => {
51+ setImageUrl ( url )
52+ onImageUrlChange ?.( url )
53+ }
4854
49- const form = useForm < FormValues > ( {
50- resolver : zodResolver ( formSchema ) ,
51- defaultValues : {
52- manufacturer : car . manufacturer || "" ,
53- model : car . model || "" ,
54- points : car . points || 0 ,
55- episode : car . episode || 1 ,
56- } ,
57- } )
55+ const form = useForm < FormValues > ( {
56+ resolver : zodResolver ( formSchema ) ,
57+ defaultValues : {
58+ manufacturer : car . manufacturer || "" ,
59+ model : car . model || "" ,
60+ points : car . points || 0 ,
61+ episode : car . episode || 1 ,
62+ } ,
63+ } )
64+
65+ useImperativeHandle ( ref , ( ) => ( {
66+ submit : ( ) => {
67+ form . handleSubmit ( onSubmit ) ( )
68+ } ,
69+ imageUrl,
70+ } ) )
5871
5972 useEffect ( ( ) => {
6073 if ( car . imageUrl ) {
@@ -202,6 +215,9 @@ export function EditCarForm({ car, onSuccess, formId, onImageUrlChange }: EditCa
202215 </ form >
203216 </ Form >
204217 )
205- }
218+ }
219+ )
220+
221+ EditCarForm . displayName = "EditCarForm"
206222
207223
0 commit comments