import { Flex, useToast } from "@chakra-ui/react"; import { t } from "@lingui/macro"; import MyContainer from "components/common/MyContainer"; import { useMyTheme } from "hooks/common"; import { useState } from "react"; import { SWRConfig } from "swr"; import Banner from "./Banner"; import Footer from "./Footer"; import IconNavBar from "./IconNavBar"; import TopNav from "./TopNav"; const DATE_KEYS = ["createdAt", "updatedAt"]; const WIDE = [ "analyzer", "plans", "builds", "u/", "sr/leaderboards", "plus/history", ]; const Layout = ({ children }: { children: React.ReactNode }) => { const { secondaryBgColor } = useMyTheme(); const [errors, setErrors] = useState(new Set()); const toast = useToast(); const isWide = window && WIDE.some((widePage) => window.location.pathname.startsWith("/" + widePage) ); return ( fetch(resource, init).then(async (res) => { const data = await res.text(); return JSON.parse(data, reviver); }), revalidateOnFocus: false, revalidateOnReconnect: false, onError: (_, key) => { if (errors.has(key)) return; setErrors(new Set([...errors, key])); toast({ duration: null, isClosable: true, position: "top-right", status: "error", description: t`An error occurred`, onCloseComplete: () => setErrors( new Set(Array.from(errors).filter((error) => error !== key)) ), }); }, }} > {children}