( schema: z.Schema<TInput>, handler: (validatedData: TInput) => Promise<ActionState<TInput, TOutput>>, )
| 17 | }; |
| 18 | |
| 19 | export const createSafeAction = <TInput, TOutput>( |
| 20 | schema: z.Schema<TInput>, |
| 21 | handler: (validatedData: TInput) => Promise<ActionState<TInput, TOutput>>, |
| 22 | ) => { |
| 23 | return async (data: TInput): Promise<ActionState<TInput, TOutput>> => { |
| 24 | const validationResult = schema.safeParse(data); |
| 25 | if (!validationResult.success) { |
| 26 | return { |
| 27 | fieldErrors: validationResult.error.flatten() |
| 28 | .fieldErrors as FieldErrors<TInput>, |
| 29 | }; |
| 30 | } |
| 31 | |
| 32 | return handler(validationResult.data); |
| 33 | }; |
| 34 | }; |