import { Suspense, useEffect, useMemo } from "react"; import { Outlet, useLocation, useSearchParams } from "react-router-dom"; import usePrevious from "react-use/lib/usePrevious"; import Navigation from "@/components/Navigation"; import Spinner from "@/components/Spinner"; import { useInstance } from "@/contexts/InstanceContext"; import { useMemoFilterContext } from "@/contexts/MemoFilterContext"; import useCurrentUser from "@/hooks/useCurrentUser"; import useMediaQuery from "@/hooks/useMediaQuery"; import { cn } from "@/lib/utils"; import { redirectOnAuthFailure } from "@/utils/auth-redirect"; const RootLayout = () => { const location = useLocation(); const [searchParams] = useSearchParams(); const sm = useMediaQuery("sm"); const currentUser = useCurrentUser(); const { memoRelatedSetting } = useInstance(); const { removeFilter } = useMemoFilterContext(); const pathname = useMemo(() => location.pathname, [location.pathname]); const prevPathname = usePrevious(pathname); useEffect(() => { if (!currentUser && memoRelatedSetting.disallowPublicVisibility) { redirectOnAuthFailure(); } }, [currentUser, memoRelatedSetting.disallowPublicVisibility]); useEffect(() => { // When the route changes and there is no filter in the search params, remove all filters if (prevPathname !== pathname && !searchParams.has("filter")) { removeFilter(() => true); } }, [prevPathname, pathname, searchParams, removeFilter]); return (