Files
HKSingleParty/03_source/frontend/src/app.tsx
louiscklaw db805f23b6 update
2025-05-28 21:06:12 +08:00

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;
}