umami/src/app/Providers.tsx

62 lines
1.6 KiB
TypeScript
Raw Normal View History

2023-09-29 14:29:22 +02:00
'use client';
2023-12-10 07:18:47 +01:00
import { useEffect, useState } from 'react';
2023-09-29 14:29:22 +02:00
import { IntlProvider } from 'react-intl';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { ReactBasicsProvider } from 'react-basics';
import ErrorBoundary from 'components/common/ErrorBoundary';
import SettingsContext from 'app/(main)/settings/SettingsContext';
2023-09-29 14:29:22 +02:00
import useLocale from 'components/hooks/useLocale';
import 'chartjs-adapter-date-fns';
const client = new QueryClient({
defaultOptions: {
queries: {
retry: false,
refetchOnWindowFocus: false,
},
},
});
function MessagesProvider({ children }) {
const { locale, messages } = useLocale();
return (
<IntlProvider locale={locale} messages={messages[locale]} onError={() => null}>
{children}
</IntlProvider>
);
}
function SettingsProvider({ children }) {
2023-12-10 07:18:47 +01:00
const [config, setConfig] = useState({});
useEffect(() => {
const hostUrl = process.env.hostUrl || window?.location.origin;
setConfig({
shareUrl: hostUrl,
trackingCodeUrl: hostUrl,
2023-12-13 06:23:12 +01:00
websitesUrl: '/websites',
settingsPath: '/settings/websites',
websitesPath: `/websites`,
2023-12-10 07:18:47 +01:00
});
}, []);
return <SettingsContext.Provider value={config}>{children}</SettingsContext.Provider>;
}
2023-09-29 14:29:22 +02:00
export function Providers({ children }) {
return (
<MessagesProvider>
<SettingsProvider>
<QueryClientProvider client={client}>
<ReactBasicsProvider>
<ErrorBoundary>{children}</ErrorBoundary>
</ReactBasicsProvider>
</QueryClientProvider>
</SettingsProvider>
2023-09-29 14:29:22 +02:00
</MessagesProvider>
);
}
export default Providers;