2022-11-04 01:54:52 +01:00

60 lines
1.9 KiB
TypeScript

import { atom } from "jotai";
import { useRouter } from "next/router";
import { useEffect } from "react";
import { useFetch } from "usehooks-ts";
import { atomPairing, useAtomSetter } from "helpers/atoms";
import {
Languages,
Currencies,
Langui,
processLangui,
processCurrencies,
processLanguages,
} from "helpers/localData";
import {
LocalDataGetWebsiteInterfacesQuery,
LocalDataGetCurrenciesQuery,
LocalDataGetLanguagesQuery,
} from "graphql/generated";
import { LocalDataFile } from "graphql/fetchLocalData";
const languages = atomPairing(atom<Languages>([]));
const currencies = atomPairing(atom<Currencies>([]));
const langui = atomPairing(atom<Langui>({}));
export const localData = {
languages: languages[0],
currencies: currencies[0],
langui: langui[0],
};
const getFileName = (name: LocalDataFile): string => `/local-data/${name}.json`;
export const useLocalData = (): void => {
const setLanguages = useAtomSetter(languages);
const setCurrencies = useAtomSetter(currencies);
const setLangui = useAtomSetter(langui);
const { locale } = useRouter();
const { data: rawLanguages } = useFetch<LocalDataGetLanguagesQuery>(getFileName("languages"));
const { data: rawCurrencies } = useFetch<LocalDataGetCurrenciesQuery>(getFileName("currencies"));
const { data: rawLangui } = useFetch<LocalDataGetWebsiteInterfacesQuery>(
getFileName("websiteInterfaces")
);
useEffect(() => {
console.log("[useLocalData] Refresh languages");
setLanguages(processLanguages(rawLanguages));
}, [rawLanguages, setLanguages]);
useEffect(() => {
console.log("[useLocalData] Refresh currencies");
setCurrencies(processCurrencies(rawCurrencies));
}, [rawCurrencies, setCurrencies]);
useEffect(() => {
console.log("[useLocalData] Refresh langui");
setLangui(processLangui(rawLangui, locale));
}, [locale, rawLangui, setLangui]);
};