All files / src/stores useLanguageStore.ts

100% Statements 10/10
100% Branches 4/4
100% Functions 6/6
100% Lines 10/10

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37              12x 12x               12x   12x     2x 2x         8x 10x 10x 9x            
import { create } from 'zustand';
import { persist, createJSONStorage } from 'zustand/middleware';
import i18n from '../i18n';
 
type Lang = 'fr'|'en'|'de';
 
function getInitialLang(): Lang {
  const nav = (navigator.language.split('-')[0] as Lang);
  return ['fr','en','de'].includes(nav) ? nav : 'en';
}
 
interface LanguageState {
  lang: Lang;
  setLang: (lang: Lang) => void;
}
 
export const useLanguageStore = create<LanguageState>()(
  persist(
    (set) => ({
      lang: getInitialLang(),
      setLang: (lang) => {
        set({ lang });
        i18n.changeLanguage(lang);
      },
    }),
    {
      name: 'language-storage',
      storage: createJSONStorage(() => localStorage),
      onRehydrateStorage: () => (state) => {
        if (state?.lang) {
          i18n.changeLanguage(state.lang);
        }
      }
    }
  )
);