![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/.cursor-server/data/User/History/-683e4975/ |
import '@/styles/globals.css';
import type { AppProps } from 'next/app';
import { SessionProvider, useSession } from 'next-auth/react';
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
import { useRouter } from 'next/router';
import { useEffect } from 'react';
import ErrorBoundary from '@/components/ErrorBoundary';
import { ThemeProvider } from '@/context/ThemeContext';
import ThemeCustomizer from '@/components/ThemeCustomizer';
import Layout from '@/components/Layout';
import { ChakraProvider, defaultSystem } from '@chakra-ui/react';
import { Toaster } from 'react-hot-toast';
import { registerServiceWorker } from '@/utils/serviceWorker';
import Head from 'next/head';
import AuthenticatedWebSocketProvider from '@/components/AuthenticatedWebSocketProvider';
import { PublicNotificationProvider } from '@/context/PublicNotificationContext';
import { LanguageProvider } from '@/context/LanguageContext';
import CaseUpdateBanner from '@/components/CaseUpdateBanner';
import SmartEngagement from '@/components/SmartEngagement';
// import IncomingCallNotification from '@/components/IncomingCallNotification'; // Removed for now
// import SimpleVideoCall from '@/components/SimpleVideoCall'; // Removed for now
// Disable the default Next.js loading indicator
NProgress.configure({ showSpinner: false });
function SessionRefresh() {
const { data: session, update } = useSession();
useEffect(() => {
// Refresh session on page load to ensure impersonation state is current
if (session?.user) {
console.log('🔄 App - Refreshing session on page load');
update({ trigger: 'update' });
}
}, []); // Only run once on mount
return null;
}
function App({ Component, pageProps: { session, ...pageProps } }: AppProps) {
const router = useRouter();
useEffect(() => {
registerServiceWorker();
}, []);
useEffect(() => {
const handleStart = () => NProgress.start();
const handleStop = () => NProgress.done();
router.events.on('routeChangeStart', handleStart);
router.events.on('routeChangeComplete', handleStop);
router.events.on('routeChangeError', handleStop);
return () => {
router.events.off('routeChangeStart', handleStart);
router.events.off('routeChangeComplete', handleStop);
router.events.off('routeChangeError', handleStop);
};
}, [router]);
return (
<ErrorBoundary>
<ChakraProvider value={defaultSystem}>
<SessionProvider session={session}>
<SessionRefresh />
<ThemeProvider>
<LanguageProvider>
<PublicNotificationProvider>
<AuthenticatedWebSocketProvider>
<Head>
<meta charSet="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" href="/favicon.ico" />
<link rel="preload" href="/fonts/Inter-Regular.woff2" as="font" type="font/woff2" crossOrigin="anonymous" />
{/* CSS is imported directly, no need for preload */}
</Head>
<CaseUpdateBanner />
<ThemeCustomizer />
<Layout>
<Component {...pageProps} />
</Layout>
<SmartEngagement />
{/* Video call removed for now */}
{/* Video call removed for now */}
<Toaster />
</AuthenticatedWebSocketProvider>
</PublicNotificationProvider>
</LanguageProvider>
</ThemeProvider>
</SessionProvider>
</ChakraProvider>
</ErrorBoundary>
);
}
export default App;