frontend/hooks/useLocale.ts (view raw)
1import {Enum_Userspermissionsuser_Lang as SupportedLocales} from '../generated/graphql';
2import {useRouter} from 'next/router';
3import moment from 'moment';
4import {setCookie} from '../lib/cookies';
5import {useEffect} from 'react';
6
7const defaultLocale = SupportedLocales['en'];
8
9const useLocale = (): {
10 locale: SupportedLocales;
11 changeLocale: (locale: SupportedLocales) => void;
12} => {
13 const {pathname, query, asPath, push, locale} = useRouter();
14
15 const changeLocale = (newLocale: SupportedLocales) => {
16 moment.locale(newLocale);
17 setCookie('NEXT_LOCALE', newLocale);
18 push({pathname, query}, asPath, {locale: newLocale});
19 };
20
21 useEffect(() => {
22 if (!SupportedLocales[locale]) changeLocale(defaultLocale);
23 }, [locale]);
24
25 return {
26 changeLocale,
27 locale: SupportedLocales[locale] || defaultLocale,
28 };
29};
30
31export default useLocale;