@@ -0,0 +1 @@ +export * from './use-loading-logs' \ No newline at end of file @@ -0,0 +1,18 @@ +import { captureMessage } from '@sentry/nextjs' +import { useSession } from 'next-auth/react' + +export function useLoadingLogs() { + const { data } = useSession() + + function onMounted() { + if (!data) return captureMessage(`long time loading - session not defined`) + + const { user } = data + + captureMessage(`long time loading - ${user ? user.email : 'unknown email'} - ${new Date().toDateString()} - ${JSON.stringify(data)}`) + } + + return { + onMounted + } +} @@ -0,0 +1 @@ +export * from './slow-loading' \ No newline at end of file @@ -0,0 +1,33 @@ +.loading { + display: flex; + align-items: center; + justify-content: center; + height: 100dvh; + + &__loader { + margin-bottom: 20px; + } + + &__box { + display: flex; + flex-direction: column; + align-items: center; + max-width: 300px; + + p { + font-weight: 600; + font-size: 26px; + color: var(--air-color); + letter-spacing: 0.06rem; + margin-bottom: 5px; + } + + span { + font-weight: 500; + text-align: center; + font-size: 14px; + color: var(--new-ui-gray-color); + margin-bottom: 20px; + } + } +} @@ -0,0 +1,28 @@ +import React, { useEffect } from 'react' +import styles from './slow-loading.module.scss' +import { Loader } from '#/shared' +import { CommonButton } from '#/shared/ui/button' +import { signOut, useSession } from 'next-auth/react' +import { captureMessage } from '@sentry/nextjs' +import { useLoadingLogs } from '../model' + +interface SlowLoadingProps {} + +export const SlowLoading = ({}: SlowLoadingProps) => { + const { onMounted } = useLoadingLogs() + + useEffect(() => { + onMounted() + }, []) + + return ( +
+ +

Долгая загрузка

+ Предлагаем перезайти + signOut()} variant='primary'> + Выйти + +
+ ) +} @@ -0,0 +1 @@ +export * from './ui' \ No newline at end of file @@ -27,14 +27,9 @@ import { ErrorReportPlate } from '#/features/error-report' import { CSSTransition, SwitchTransition } from 'react-transition-group' import { CommonButton } from '#/shared/ui/button' import styles from './default.module.scss' +import { SlowLoading } from '#/features/slow-loading' -export const Layout: React.FC = ({ - children, - titlePage, - title = titlePage, - isLoader, - device = getDeviceType(), -}) => { +export const Layout: React.FC = ({ children, titlePage, title = titlePage, isLoader, device = getDeviceType() }) => { const { data: sessionData } = useSession() const appState = useAppSelector((state) => state) const dispatch = useAppDispatch() @@ -74,8 +69,7 @@ export const Layout: React.FC = ({ useEffect(() => { if (!data) return - if (!data.user || Object.values(data.user).length === 0 || !data.access || !data.refresh) - logout() + if (!data.user || Object.values(data.user).length === 0 || !data.access || !data.refresh) logout() }, [data]) useEffect(() => { @@ -84,10 +78,7 @@ export const Layout: React.FC = ({ }, [data]) useEffect(() => { - if ( - (sessionData && !sessionStorage.getItem('firstRender')) || - (sessionData && !localStorage.getItem('global_settings')) - ) { + if ((sessionData && !sessionStorage.getItem('firstRender')) || (sessionData && !localStorage.getItem('global_settings'))) { dispatch(getUserAccountSettings(sessionData.access)) sessionStorage.setItem('firstRender', 'true') } @@ -112,10 +103,7 @@ export const Layout: React.FC = ({ targetDevice: device, targetType: 'sidemenu', }) - if (setting) - setting?.value?.sidemenu_state === 'opened' - ? setSidemenuDefaultOpen(true) - : setSidemenuDefaultOpen(false) + if (setting) setting?.value?.sidemenu_state === 'opened' ? setSidemenuDefaultOpen(true) : setSidemenuDefaultOpen(false) } }, [appState.settings.state]) @@ -124,20 +112,7 @@ export const Layout: React.FC = ({ const transitionRef = useRef(null) useEffect(() => { - setTimeout(() => { - setRequestDelay(true) - if (userLoading || isLoader || status === 'loading') { - if (!sessionData) - return Sentry.captureMessage(`long time loading - session not defined`) - - const { user } = sessionData - - Sentry.captureMessage(`long time loading - - ${user ? user.email : 'unknown email'} - - ${new Date().toDateString()} - - ${JSON.stringify(sessionData)}`) - } - }, 5000) + setTimeout(() => setRequestDelay(true), 5000) }, []) if (userLoading || isLoader || status === 'loading') { @@ -151,18 +126,7 @@ export const Layout: React.FC = ({ in={requestDelay} >
- {requestDelay ? ( -
- -

Долгая загрузка

- Предлагаем перезайти - - Выйти - -
- ) : ( - - )} + {requestDelay ? : }
@@ -195,10 +159,7 @@ export const Layout: React.FC = ({ > {desktop ? ( - +