all repos — caroster @ main

[Octree] Group carpool to your event https://caroster.io

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 {useCallback, 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 = useCallback(
22    (newLocale: SupportedLocales) => {
23      moment.locale(newLocale);
24      setCookie('NEXT_LOCALE', newLocale);
25      push({pathname, query}, asPath, {locale: newLocale});
26    },
27    [asPath, pathname, query, push]
28  );
29
30  useEffect(() => {
31    if (!SupportedLocales[locale]) changeLocale(defaultLocale);
32  }, [locale, changeLocale]);
33
34  return {
35    changeLocale,
36    locale: SupportedLocales[locale] || defaultLocale,
37  };
38};
39
40export default useLocale;