|
6 | 6 | } from 'react-hook-form'; |
7 | 7 | import { zodResolver } from '@hookform/resolvers/zod'; |
8 | 8 | import * as z from 'zod'; |
| 9 | +import { yupResolver } from '@hookform/resolvers/yup'; |
| 10 | +import * as yup from 'yup'; |
9 | 11 | import polyglotI18nProvider from 'ra-i18n-polyglot'; |
10 | 12 | import englishMessages from 'ra-language-english'; |
11 | 13 | import { |
@@ -273,14 +275,10 @@ export const InputLevelValidation = ({ |
273 | 275 |
|
274 | 276 | const zodSchema = z.object({ |
275 | 277 | defaultMessage: z.string(), //.min(1), |
276 | | - customMessage: z.string({ |
277 | | - required_error: 'This field is required', |
278 | | - }), |
279 | | - customMessageTranslationKey: z.string({ |
280 | | - required_error: 'app.validation.required', |
281 | | - }), |
| 278 | + customMessage: z.string({ error: 'This field is required' }), |
| 279 | + customMessageTranslationKey: z.string({ error: 'app.validation.required' }), |
282 | 280 | missingCustomMessageTranslationKey: z.string({ |
283 | | - required_error: 'app.validation.missing', |
| 281 | + error: 'app.validation.missing', |
284 | 282 | }), |
285 | 283 | }); |
286 | 284 |
|
@@ -308,6 +306,67 @@ export const ZodResolver = ({ |
308 | 306 | ); |
309 | 307 | }; |
310 | 308 |
|
| 309 | +type Schema = z.infer<typeof zodSchema>; |
| 310 | + |
| 311 | +export const ZodResolverWithSchema = ({ |
| 312 | + i18nProvider = defaultI18nProvider, |
| 313 | +}: { |
| 314 | + i18nProvider?: I18nProvider; |
| 315 | +}) => { |
| 316 | + const [result, setResult] = React.useState<any>(); |
| 317 | + return ( |
| 318 | + <CoreAdminContext i18nProvider={i18nProvider}> |
| 319 | + <Form<Schema> |
| 320 | + record={{}} |
| 321 | + onSubmit={data => setResult(data)} |
| 322 | + resolver={zodResolver(zodSchema)} |
| 323 | + > |
| 324 | + <Input source="defaultMessage" /> |
| 325 | + <Input source="customMessage" /> |
| 326 | + <Input source="customMessageTranslationKey" /> |
| 327 | + <Input source="missingCustomMessageTranslationKey" /> |
| 328 | + <button type="submit">Submit</button> |
| 329 | + </Form> |
| 330 | + <pre>{JSON.stringify(result, null, 2)}</pre> |
| 331 | + </CoreAdminContext> |
| 332 | + ); |
| 333 | +}; |
| 334 | + |
| 335 | +const yupSchema = yup.object({ |
| 336 | + defaultMessage: yup.string().required(), |
| 337 | + customMessage: yup.string().required('This field is required'), |
| 338 | + customMessageTranslationKey: yup |
| 339 | + .string() |
| 340 | + .required('app.validation.required'), |
| 341 | + missingCustomMessageTranslationKey: yup |
| 342 | + .string() |
| 343 | + .required('app.validation.missing'), |
| 344 | +}); |
| 345 | + |
| 346 | +export const YupResolver = ({ |
| 347 | + i18nProvider = defaultI18nProvider, |
| 348 | +}: { |
| 349 | + i18nProvider?: I18nProvider; |
| 350 | +}) => { |
| 351 | + const [result, setResult] = React.useState<any>(); |
| 352 | + return ( |
| 353 | + <CoreAdminContext i18nProvider={i18nProvider}> |
| 354 | + <Form |
| 355 | + record={{}} |
| 356 | + onSubmit={data => setResult(data)} |
| 357 | + resolver={yupResolver(yupSchema)} |
| 358 | + > |
| 359 | + <Input source="defaultMessage" /> |
| 360 | + <Input source="customMessage" /> |
| 361 | + <Input source="customMessageTranslationKey" /> |
| 362 | + <Input source="missingCustomMessageTranslationKey" /> |
| 363 | + <button type="submit">Submit</button> |
| 364 | + </Form> |
| 365 | + <pre>{JSON.stringify(result, null, 2)}</pre> |
| 366 | + </CoreAdminContext> |
| 367 | + ); |
| 368 | +}; |
| 369 | + |
311 | 370 | const FormUnderTest = () => { |
312 | 371 | const navigate = useNavigate(); |
313 | 372 | return ( |
|
0 commit comments