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
7// Import moment locales
8import 'moment/locale/fr';
9import 'moment/locale/de';
10import 'moment/locale/nl';
11import 'moment/locale/it';
12
13const defaultLocale = SupportedLocales['en'];
14
15const useLocale = (): {
16 locale: SupportedLocales;
17 changeLocale: (locale: SupportedLocales) => void;
18} => {
19 const {pathname, query, asPath, push, locale} = useRouter();
20
21 const changeLocale = (newLocale: SupportedLocales) => {
22 moment.locale(newLocale);
23 setCookie('NEXT_LOCALE', newLocale);
24 push({pathname, query}, asPath, {locale: newLocale});
25 };
26
27 useEffect(() => {
28 if (!SupportedLocales[locale]) changeLocale(defaultLocale);
29 }, [locale]);
30
31 return {
32 changeLocale,
33 locale: SupportedLocales[locale] || defaultLocale,
34 };
35};
36
37export default useLocale;