mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2026-07-25 09:24:54 +10:00
37 lines
1.0 KiB
TypeScript
37 lines
1.0 KiB
TypeScript
import type { Locale } from "@reactive-resume/utils/locale";
|
|
import type { SingleComboboxProps } from "@/components/ui/combobox";
|
|
import { i18n } from "@lingui/core";
|
|
import { useLingui } from "@lingui/react";
|
|
import { Combobox } from "@/components/ui/combobox";
|
|
import { isLocale, loadLocale, localeMap, setLocaleServerFn } from "@/libs/locale";
|
|
|
|
type Props = Omit<SingleComboboxProps, "options" | "value" | "onValueChange">;
|
|
|
|
export const getLocaleOptions = () => {
|
|
return Object.entries(localeMap).map(([value, label]) => ({
|
|
value: value as Locale,
|
|
label: i18n.t(label),
|
|
keywords: [i18n.t(label)],
|
|
}));
|
|
};
|
|
|
|
export function LocaleCombobox(props: Props) {
|
|
const { i18n } = useLingui();
|
|
|
|
const onLocaleChange = async (value: string | null) => {
|
|
if (!value || !isLocale(value)) return;
|
|
await Promise.all([loadLocale(value), setLocaleServerFn({ data: value })]);
|
|
window.location.reload();
|
|
};
|
|
|
|
return (
|
|
<Combobox
|
|
showClear={false}
|
|
defaultValue={i18n.locale}
|
|
options={getLocaleOptions()}
|
|
onValueChange={onLocaleChange}
|
|
{...props}
|
|
/>
|
|
);
|
|
}
|