import {FullPageLoader} from '@common/ui/progress/full-page-loader';
import {errorStatusIs} from '@common/utils/http/error-status-is';
import {NotFoundPage} from '@common/ui/not-found-page/not-found-page';
import {PageErrorMessage} from '@common/errors/page-error-message';
import React, {ReactNode} from 'react';
import {UseQueryResult} from '@tanstack/react-query';
import {Navigate} from 'react-router-dom';
import {useAuth} from '@common/auth/use-auth';
import useSpinDelay from '@common/utils/hooks/use-spin-delay';
interface Props {
query: UseQueryResult;
show404?: boolean;
loaderClassName?: string;
loaderIsScreen?: boolean;
loader?: ReactNode;
delayedSpinner?: boolean;
}
export function PageStatus({
query,
show404 = true,
loader,
loaderClassName,
loaderIsScreen = true,
delayedSpinner = true,
}: Props) {
const {isLoggedIn} = useAuth();
const showSpinner = useSpinDelay(query.isLoading, {
delay: 500,
minDuration: 200,
});
if (query.isLoading) {
if (!showSpinner && delayedSpinner) {
return null;
}
return (
loader || (
)
);
}
if (
query.isError &&
(errorStatusIs(query.error, 401) || errorStatusIs(query.error, 403)) &&
!isLoggedIn
) {
return ;
}
if (show404 && query.isError && errorStatusIs(query.error, 404)) {
return ;
}
return ;
}