|
1 | 1 | import { useEffect, MutableRefObject } from 'react'; |
| 2 | +import type { FormApi } from 'final-form'; |
2 | 3 |
|
3 | | -export interface FormLike { |
4 | | - getState(): { values: Record<string, unknown> }; |
5 | | - reset(): void; |
6 | | - change(field: string, value: unknown): void; |
7 | | -} |
| 4 | +// Generic FormLike that mirrors FormApi for any form value type |
| 5 | +export interface FormLike<FormValues = Record<string, unknown>> |
| 6 | + extends Pick<FormApi<FormValues>, 'getState' | 'reset' | 'change'> {} |
8 | 7 |
|
9 | 8 | /** |
10 | 9 | * This hook ensures that form values are preserved when the language changes. |
11 | 10 | * @param formRef |
12 | 11 | * @param language |
13 | 12 | */ |
14 | | -export const useSyncFormTranslations = ( |
15 | | - formRef: MutableRefObject<FormLike>, |
| 13 | +export const useSyncFormTranslations = <FormValues extends Record<string, any>>( |
| 14 | + formRef: MutableRefObject<FormLike<FormValues> | null>, |
16 | 15 | language: string |
17 | 16 | ) => { |
18 | 17 | useEffect(() => { |
19 | | - const form = formRef.current; |
| 18 | + const form = formRef?.current; |
20 | 19 | if (!form) return; |
21 | 20 |
|
22 | 21 | const { values } = form.getState(); |
23 | 22 | form.reset(); |
24 | 23 |
|
25 | | - Object.keys(values).forEach((field) => { |
26 | | - if (values[field]) { |
27 | | - form.change(field, values[field]); |
| 24 | + (Object.keys(values) as (keyof FormValues)[]).forEach((field) => { |
| 25 | + const value = values[field]; |
| 26 | + if (value !== undefined && value !== null && value !== '') { |
| 27 | + form.change(field, value); |
28 | 28 | } |
29 | 29 | }); |
30 | 30 | }, [language]); |
|
0 commit comments