diff --git a/src/app/[locale]/(main)/match/MatchForm.tsx b/src/app/[locale]/(main)/match/MatchForm.tsx index 2443174..eda1d53 100644 --- a/src/app/[locale]/(main)/match/MatchForm.tsx +++ b/src/app/[locale]/(main)/match/MatchForm.tsx @@ -11,12 +11,15 @@ 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 { Player } from "@/interfaces"; import { matchSchema } from "@/schemas"; import { generateFeuilleDeMatch } from "@/server/generateFeuilleDeMatch"; import { Club } from "@/types"; export type MatchFormValues = z.infer; +type BoardPlayer = Partial>; + interface IProps { clubs: Club[]; } @@ -31,8 +34,43 @@ const MatchForm = ({ clubs }: IProps) => { resolver: zodResolver(matchSchema), }); + // check 100 point ELO rule + const checkPlayerOrder = ( + team1Players: BoardPlayer[], + team2Players: BoardPlayer[], + ) => { + function checkOrder(elos: number[]) { + for (let i = 0; i < elos.length - 1; i++) { + if (elos[i] < elos[i + 1]) { + if (elos[i + 1] - elos[i] > 100) { + return false; + } + } + } + return true; + } + + const team1Elos = team1Players + .filter((player) => player.elo !== "") + .map((player) => Number(player.elo?.split(" ")[0])); + + const team2Elos = team2Players + .filter((player) => player.elo !== "") + .map((player) => Number(player.elo?.split(" ")[0])); + + return !(!checkOrder(team1Elos) || !checkOrder(team2Elos)); + }; + const onSubmit = async (data: MatchFormValues) => { try { + if (!checkPlayerOrder(data.team1_players, data.team2_players)) { + const confirmResult = confirm( + "ELO ordering is not correct, please check your players.\nClick 'OK' to continue or 'Cancel' to abort.", + ); + + if (!confirmResult) return false; + } + const result = await generateFeuilleDeMatch(data); if (result?.data?.pdfBase64) { @@ -54,10 +92,17 @@ const MatchForm = ({ clubs }: IProps) => { } catch (err: unknown) { console.log(err); - setResponseMessage({ - type: "error", - message: "error creating feuille de match", - }); + if (err instanceof Error) { + setResponseMessage({ + type: "error", + message: err.message, + }); + } else { + setResponseMessage({ + type: "error", + message: "error creating feuille de match", + }); + } } }; diff --git a/src/app/[locale]/(main)/match/components/pdf/styles.ts b/src/app/[locale]/(main)/match/components/pdf/styles.ts index ba87304..a8679df 100644 --- a/src/app/[locale]/(main)/match/components/pdf/styles.ts +++ b/src/app/[locale]/(main)/match/components/pdf/styles.ts @@ -4,7 +4,7 @@ export const styles = StyleSheet.create({ page: { flexDirection: "column", paddingHorizontal: 30, - paddingVertical: 10, + paddingVertical: 20, fontSize: 10, }, header: { marginBottom: 10, textAlign: "center" }, @@ -64,7 +64,7 @@ export const styles = StyleSheet.create({ footer: { position: "absolute", zIndex: 1, - bottom: 40, + bottom: 10, left: 0, right: 0, fontSize: 8,