import { useState } from "react"; import { on } from "events"; import { useTranslations } from "next-intl"; import { FieldPath, FieldValues } from "react-hook-form"; import { FaExternalLinkAlt } from "react-icons/fa"; import { TimeControlColours } from "@/constants"; import { getTournamentDetails } from "@/server/getTournamentDetails"; import { SearchedTournament, searchTournaments, } from "@/server/searchTournaments"; import { AsyncSelectField, AsyncSelectFieldProps } from "./AsyncSelectField"; type TournamentSelectFieldProps< TFieldValues extends FieldValues = FieldValues, TFieldName extends FieldPath = FieldPath, > = Omit< AsyncSelectFieldProps< TFieldValues, TFieldName, false, string, SearchedTournament >, "loadOptions" | "loadOption" | "separators" >; export const TournamentSelectField = < TFieldValues extends FieldValues = FieldValues, TFieldName extends FieldPath = FieldPath, >({ onInformChange, ...rest }: TournamentSelectFieldProps) => { const at = useTranslations("App"); const [selectedTournament, setSelectedTournament] = useState(null); const loadOption = async (ffeId: string) => { const { data: tournament } = await getTournamentDetails({ ffeId }); return !tournament ? undefined : { value: tournament.ffeId, label: tournament.tournament, data: tournament, }; }; const loadOptions = async (searchValue?: string) => { const { data: tournaments } = await searchTournaments({ searchValue: searchValue ?? "", }); return (tournaments ?? []).map((tournament) => ({ value: tournament.ffeId, label: tournament.tournament, data: tournament, })); }; return (
{ setSelectedTournament(data ? data[0].data ?? null : null); onInformChange?.(data); }} formatOptionLabel={(option, context) => { if (context.context === "value") return option.label; return (
{option.data?.town}
{at("timeControlEnum", { tc: option.data?.timeControl })}
{option.data?.date}
{option.data?.tournament}
); }} /> {selectedTournament && ( {selectedTournament.url} )}
); };