73 lines
2.5 KiB
TypeScript
73 lines
2.5 KiB
TypeScript
import 'src/global.css';
|
|
import { useEffect } from 'react';
|
|
import { AuthProvider as AmplifyAuthProvider } from 'src/auth/context/amplify';
|
|
import { AuthProvider as Auth0AuthProvider } from 'src/auth/context/auth0';
|
|
import { AuthProvider as FirebaseAuthProvider } from 'src/auth/context/firebase';
|
|
import { AuthProvider as JwtAuthProvider } from 'src/auth/context/jwt';
|
|
import { AuthProvider as SupabaseAuthProvider } from 'src/auth/context/supabase';
|
|
import { MotionLazy } from 'src/components/animate/motion-lazy';
|
|
import { ProgressBar } from 'src/components/progress-bar';
|
|
import { defaultSettings, SettingsDrawer, SettingsProvider } from 'src/components/settings';
|
|
import { Snackbar } from 'src/components/snackbar';
|
|
import { CONFIG } from 'src/global-config';
|
|
import { LocalizationProvider } from 'src/locales';
|
|
import { I18nProvider } from 'src/locales/i18n-provider';
|
|
import { usePathname } from 'src/routes/hooks';
|
|
import { CheckoutProvider } from 'src/sections/checkout/context';
|
|
import { themeConfig, ThemeProvider } from 'src/theme';
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
const AuthProvider =
|
|
(CONFIG.auth.method === 'amplify' && AmplifyAuthProvider) ||
|
|
(CONFIG.auth.method === 'firebase' && FirebaseAuthProvider) ||
|
|
(CONFIG.auth.method === 'supabase' && SupabaseAuthProvider) ||
|
|
(CONFIG.auth.method === 'auth0' && Auth0AuthProvider) ||
|
|
JwtAuthProvider;
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
type AppProps = {
|
|
children: React.ReactNode;
|
|
};
|
|
|
|
export default function App({ children }: AppProps) {
|
|
useScrollToTop();
|
|
|
|
return (
|
|
<I18nProvider>
|
|
<AuthProvider>
|
|
<SettingsProvider defaultSettings={defaultSettings}>
|
|
<LocalizationProvider>
|
|
<ThemeProvider
|
|
modeStorageKey={themeConfig.modeStorageKey}
|
|
defaultMode={themeConfig.enableSystemMode ? 'system' : themeConfig.defaultMode}
|
|
>
|
|
<MotionLazy>
|
|
<CheckoutProvider>
|
|
<Snackbar />
|
|
<ProgressBar />
|
|
<SettingsDrawer defaultSettings={defaultSettings} />
|
|
{children}
|
|
</CheckoutProvider>
|
|
</MotionLazy>
|
|
</ThemeProvider>
|
|
</LocalizationProvider>
|
|
</SettingsProvider>
|
|
</AuthProvider>
|
|
</I18nProvider>
|
|
);
|
|
}
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
function useScrollToTop() {
|
|
const pathname = usePathname();
|
|
|
|
useEffect(() => {
|
|
window.scrollTo(0, 0);
|
|
}, [pathname]);
|
|
|
|
return null;
|
|
}
|