"use client" import { useMemo } from "react" import { useController } from "react-hook-form" import { useIntl } from "react-intl" import { Select } from "@scandic-hotels/design-system/Select" import { countries } from "@scandic-hotels/trpc/constants/countries" import useLang from "@/hooks/useLang" import ErrorMessage from "../ErrorMessage" import type { CountryProps } from "./country" const prioCountryCode = ["DE", "DK", "FI", "NO", "SE"] export default function CountrySelect({ className = "", label, name = "country", readOnly = false, registerOptions = {}, }: CountryProps) { const lang = useLang() const intl = useIntl() const { field, formState, fieldState } = useController({ name, rules: registerOptions, }) const items = useMemo(() => { function mapCountry(country: (typeof countries)[number]) { return { value: country.code, label: intl.formatDisplayName(country.code, { type: "region" }) || country.name, } } const collator = new Intl.Collator(lang) const prioCountries = countries .filter((c) => prioCountryCode.includes(c.code)) .map(mapCountry) .sort((a, b) => collator.compare(a.label, b.label)) const restCountries = countries .filter((c) => !prioCountryCode.includes(c.code)) .map(mapCountry) .sort((a, b) => collator.compare(a.label, b.label)) return [...prioCountries, ...restCountries] }, [intl, lang]) return (