Files
verify/frontend/contexts/LanguageContext.tsx
Mohamed Mathar Irfan ed6610d5d8 Initial project upload
2026-07-28 17:57:02 +05:30

119 lines
2.0 KiB
TypeScript

"use client";
import {
createContext,
useContext,
useEffect,
useState,
} from "react";
import { T, detectLang, Lang } from "@/lib/i18n";
import { api } from "@/lib/api";
type ContextType = {
lang: Lang;
setLang: (l: Lang) => void;
t: typeof T.en;
};
const LanguageContext = createContext<ContextType>(null!);
export function LanguageProvider({
children,
}: {
children: React.ReactNode;
}) {
const [lang, setLang] = useState<Lang>("en");
const [loaded, setLoaded] = useState(false);
useEffect(() => {
async function loadLanguage() {
try {
// First check saved language
const saved = localStorage.getItem("language") as Lang | null;
if (saved) {
setLang(saved);
}
// Then get organization language from database
const API = process.env.NEXT_PUBLIC_API_URL || "http://localhost:8000";
const res = await fetch(`${API}/organization`, {
headers: {
Authorization: `Bearer ${localStorage.getItem("vp_token")}`,
},
});
if (res.ok) {
const org = await res.json();
if (org.language) {
setLang(org.language);
localStorage.setItem(
"language",
org.language
);
}
}
} catch (error) {
console.log("Language loading error", error);
const saved =
localStorage.getItem("language") as Lang | null;
setLang(saved || detectLang());
}
setLoaded(true);
}
loadLanguage();
}, []);
useEffect(() => {
if(loaded){
localStorage.setItem(
"language",
lang
);
}
}, [lang, loaded]);
if(!loaded){
return null;
}
return (
<LanguageContext.Provider
value={{
lang,
setLang,
t: T[lang] ?? T.en,
}}
>
{children}
</LanguageContext.Provider>
);
}
export function useLanguage() {
return useContext(LanguageContext);
}