"use client"; import { useState } from "react"; import { zodResolver } from "@hookform/resolvers/zod"; import { FormProvider, useForm } from "react-hook-form"; import { z } from "zod"; import Calendar from "@/app/[locale]/(main)/components/Calendar"; import TeamSelection from "@/app/[locale]/(main)/match/components/TeamSelection"; import { Button } from "@/components/Button"; import InfoMessage, { InfoMessageType } from "@/components/InfoMessage"; import { TextField } from "@/components/form/TextField"; import { matchSchema } from "@/schemas"; import { generateFeuilleDeMatch } from "@/server/generateFeuilleDeMatch"; import { Club } from "@/types"; export type MatchFormValues = z.infer; interface IProps { clubs: Club[]; } const MatchForm = ({ clubs }: IProps) => { const [responseMessage, setResponseMessage] = useState<{ type: InfoMessageType; message: string; } | null>(null); const form = useForm({ resolver: zodResolver(matchSchema), }); const onSubmit = async (data: MatchFormValues) => { try { const result = await generateFeuilleDeMatch(data); if (result?.data?.pdfBase64) { const byteCharacters = atob(result.data.pdfBase64); const byteNumbers = new Array(byteCharacters.length); for (let i = 0; i < byteCharacters.length; i++) { byteNumbers[i] = byteCharacters.charCodeAt(i); } const byteArray = new Uint8Array(byteNumbers); const blob = new Blob([byteArray], { type: "application/pdf" }); const url = URL.createObjectURL(blob); window.open(url, "_blank"); } setResponseMessage({ type: "success", message: "generated feuille de match", }); } catch (err: unknown) { console.log(err); setResponseMessage({ type: "error", message: "error creating feuille de match", }); } }; const clubOptions = clubs.map((club) => ({ value: club.name, label: club.name, url: club.url, })); return (
{responseMessage && ( setResponseMessage(null)} /> )}
); }; export default MatchForm;