40 lines
931 B
TypeScript
40 lines
931 B
TypeScript
"use client";
|
|
|
|
import type { ReactNode } from "react";
|
|
import { createContext, useContext, useState } from "react";
|
|
import type { AppLocale } from "./locale";
|
|
import { DEFAULT_LOCALE } from "./locale";
|
|
|
|
type LocaleContextValue = {
|
|
locale: AppLocale;
|
|
setLocale: (locale: AppLocale) => void;
|
|
};
|
|
|
|
const LocaleContext = createContext<LocaleContextValue>({
|
|
locale: DEFAULT_LOCALE,
|
|
setLocale: () => {
|
|
// no-op default
|
|
},
|
|
});
|
|
|
|
export function LocaleProvider({
|
|
initialLocale,
|
|
children,
|
|
}: {
|
|
initialLocale: AppLocale;
|
|
children: ReactNode;
|
|
}) {
|
|
const [locale, setLocale] = useState<AppLocale>(initialLocale);
|
|
|
|
return <LocaleContext.Provider value={{ locale, setLocale }}>{children}</LocaleContext.Provider>;
|
|
}
|
|
|
|
export function useAppLocale(): AppLocale {
|
|
return useContext(LocaleContext).locale;
|
|
}
|
|
|
|
export function useLocaleActions() {
|
|
const { setLocale } = useContext(LocaleContext);
|
|
return { setLocale };
|
|
}
|