import { useState } from 'react' import type { ReactNode } from 'react' import { useStore } from '@tanstack/react-form' import { useAppForm } from '@/app/components/base/form' type UseAppFormOptions = Parameters[0] type AppFormInstance = ReturnType type FormStoryWrapperProps = { options?: UseAppFormOptions children: (form: AppFormInstance) => ReactNode title?: string subtitle?: string } export const FormStoryWrapper = ({ options, children, title, subtitle, }: FormStoryWrapperProps) => { const [lastSubmitted, setLastSubmitted] = useState(null) const [submitCount, setSubmitCount] = useState(0) const form = useAppForm({ ...options, onSubmit: (context) => { setSubmitCount(count => count + 1) setLastSubmitted(context.value) options?.onSubmit?.(context) }, }) const values = useStore(form.store, state => state.values) const isSubmitting = useStore(form.store, state => state.isSubmitting) const canSubmit = useStore(form.store, state => state.canSubmit) return (
{(title || subtitle) && (
{title &&

{title}

} {subtitle &&

{subtitle}

}
)} {children(form)}
) } export type FormStoryRender = (form: AppFormInstance) => ReactNode