/* eslint-disable @typescript-eslint/no-explicit-any */ import { z } from "zod"; export type ActionState = { error?: string; success?: string; [key: string]: any; // This allows for additional properties }; type ValidatedActionFunction, T> = ( data: z.infer, formData: FormData, ) => Promise; export function validatedAction, T>( schema: S, action: ValidatedActionFunction, ) { return async (prevState: ActionState, formData: FormData): Promise => { const result = schema.safeParse(Object.fromEntries(formData)); if (!result.success) { return { error: result.error.errors[0].message } as T; } return action(result.data, formData); }; }