and the rest of the stuff
export const validateFormData = async <T extends FieldValues>(
data: FormData,
resolver: Resolver<T>,
): Promise<
| {
errors: FieldErrors<T>;
data: undefined;
}
| {
errors: undefined;
data: T;
}
> => {
const formEntries = Object.fromEntries(data) as T;
const { errors, values } = await resolver(
formEntries,
{},
{ shouldUseNativeValidation: false, fields: {} },
);
if (Object.keys(errors).length > 0) {
return { errors: errors as FieldErrors<T>, data: undefined };
}
return { errors: undefined, data: values as T };
};
export default function LoginPage({ actionData }: Route.ComponentProps) {
const [searchParams] = useSearchParams();
const redirectTo = searchParams.get("redirectTo") || "/";
const navigation = useNavigation();
const form = useForm({
resolver: zodResolver(formSchema),
defaultValues: {
email: "",
password: "",
redirectTo: "",
},
errors: actionData?.errors as FieldErrors<LoginFormSchema> | undefined,
});
const submit = useSubmit();
return ( )
}
So what I understand is that the type is similar and not exactly the same. Am I correct?
This is the part that makes me believe this:
type ServerData<T> = T extends Response ? never : T extends DataWithResponseInit<infer U> ? Serialize<U> : Serialize<T>;
Where Serialize does the stripping, am I right?