web-humas-fe/app/providers.tsx

44 lines
1.3 KiB
TypeScript
Raw Permalink Normal View History

2024-01-05 06:57:30 +00:00
"use client";
import * as React from "react";
2025-02-13 08:25:39 +00:00
import { HeroUIProvider } from "@heroui/system";
2025-03-14 08:45:40 +00:00
import { useRouter } from "next/navigation";
2024-01-05 06:57:30 +00:00
import { ThemeProvider as NextThemesProvider } from "next-themes";
import { ThemeProviderProps } from "next-themes/dist/types";
2025-03-14 08:45:40 +00:00
import { NextIntlClientProvider } from "next-intl";
import storedLanguage from "@/store/language-store";
2024-01-05 06:57:30 +00:00
export interface ProvidersProps {
2025-03-14 08:45:40 +00:00
children: React.ReactNode;
themeProps?: ThemeProviderProps;
2024-01-05 06:57:30 +00:00
}
export function Providers({ children, themeProps }: ProvidersProps) {
2025-03-14 08:45:40 +00:00
const router = useRouter();
const [localeNow, setLocaleNow] = React.useState<string>("id");
const [messages, setMessages] = React.useState<any>(null);
2024-01-05 06:57:30 +00:00
2025-03-14 08:45:40 +00:00
const locale = storedLanguage((state) => state.locale);
React.useEffect(() => {
if (locale) {
setLocaleNow(locale);
}
}, [locale]);
React.useEffect(() => {
(async () => {
const loadedMessages = (await import(`../messages/${locale}.json`))
.default;
setMessages(loadedMessages);
})();
}, [locale]);
return (
2025-03-14 08:54:37 +00:00
<NextIntlClientProvider locale={localeNow} messages={messages}>
2025-03-14 08:45:40 +00:00
<HeroUIProvider navigate={router.push}>
<NextThemesProvider {...themeProps}>{children}</NextThemesProvider>
</HeroUIProvider>
</NextIntlClientProvider>
);
2024-01-05 06:57:30 +00:00
}