diff --git a/src/app/[name]/(Main)/about/hooks/useAboutData.ts b/src/app/[name]/(Main)/about/hooks/useAboutData.ts index 6dfd592..292c24a 100644 --- a/src/app/[name]/(Main)/about/hooks/useAboutData.ts +++ b/src/app/[name]/(Main)/about/hooks/useAboutData.ts @@ -1,16 +1,23 @@ import { useQuery } from "@tanstack/react-query"; -import * as api from "../service/AboutService"; import { useParams } from "next/navigation"; +import * as api from "../service/AboutService"; +import { setPersistedAboutData } from "@/lib/helpers/themeCache"; export const useGetAbout = () => { const { name } = useParams<{ name: string }>(); return useQuery({ queryKey: ["about", name], - queryFn: () => api.getAbout(name), + queryFn: async () => { + const data = await api.getAbout(name); + setPersistedAboutData(name, data); + return data; + }, enabled: !!name, retry: false, - staleTime: 5 * 60_000, + staleTime: 60 * 60_000, + gcTime: 24 * 60 * 60_000, refetchOnMount: false, + refetchOnWindowFocus: false, }); }; diff --git a/src/app/[name]/(Main)/components/MenuIndex.tsx b/src/app/[name]/(Main)/components/MenuIndex.tsx index 44304b8..e54d7c6 100644 --- a/src/app/[name]/(Main)/components/MenuIndex.tsx +++ b/src/app/[name]/(Main)/components/MenuIndex.tsx @@ -22,12 +22,12 @@ import type { Category, Food } from "../types/Types"; const sortings = ["PopularityDescending", "RateDescending", "PriceAscending", "PriceDescending"] as const; const MenuIndex = () => { - const { data: foodsData, isLoading: foodsLoading } = useGetFoods(); - const { data: categoriesData, isLoading: categoriesLoading } = useGetCategories(); + const { data: foodsData, isPending: foodsPending } = useGetFoods(); + const { data: categoriesData, isPending: categoriesPending } = useGetCategories(); const foods = useMemo(() => foodsData?.data || [], [foodsData?.data]); const categories = useMemo(() => categoriesData?.data || [], [categoriesData?.data]); - const isLoading = foodsLoading || categoriesLoading; + const isLoading = foodsPending || categoriesPending; const { t: tCommon } = useTranslation("common"); const { t: tMenu } = useTranslation("menu", { keyPrefix: "Menu" }); const { state: filterModal, toggle: toggleFilterModal } = useToggle(); diff --git a/src/app/[name]/(Main)/hooks/useMenuData.ts b/src/app/[name]/(Main)/hooks/useMenuData.ts index dec230e..ebe42af 100644 --- a/src/app/[name]/(Main)/hooks/useMenuData.ts +++ b/src/app/[name]/(Main)/hooks/useMenuData.ts @@ -1,28 +1,63 @@ +"use client"; + import { useQuery } from "@tanstack/react-query"; +import { useEffect } from "react"; import * as api from "../service/MenuService"; import { useParams } from "next/navigation"; import { hasAuthToken } from "@/lib/api/func"; +import { + getPersistedCategoriesData, + getPersistedMenuData, + setPersistedCategoriesData, + setPersistedMenuData, +} from "@/lib/helpers/themeCache"; export const useGetFoods = () => { const { name } = useParams<{ name: string }>(); - return useQuery({ + const query = useQuery({ queryKey: ["menu", name], - queryFn: () => api.getFoods(name), + queryFn: async () => { + const data = await api.getFoods(name); + setPersistedMenuData(name, data); + return data; + }, enabled: !!name, staleTime: 5 * 60_000, refetchOnMount: false, + placeholderData: () => (name ? getPersistedMenuData(name) : undefined), }); + + useEffect(() => { + if (name && query.data) { + setPersistedMenuData(name, query.data); + } + }, [name, query.data]); + + return query; }; export const useGetCategories = () => { const { name } = useParams<{ name: string }>(); - return useQuery({ + const query = useQuery({ queryKey: ["categories", name], - queryFn: () => api.getCategories(name), + queryFn: async () => { + const data = await api.getCategories(name); + setPersistedCategoriesData(name, data); + return data; + }, enabled: !!name, staleTime: 5 * 60_000, refetchOnMount: false, + placeholderData: () => (name ? getPersistedCategoriesData(name) : undefined), }); + + useEffect(() => { + if (name && query.data) { + setPersistedCategoriesData(name, query.data); + } + }, [name, query.data]); + + return query; }; export const useGetNotificationsCount = () => { diff --git a/src/app/[name]/(Main)/loading.tsx b/src/app/[name]/(Main)/loading.tsx deleted file mode 100644 index a21843d..0000000 --- a/src/app/[name]/(Main)/loading.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import LoadingOverlay from '@/components/overlays/LoadingOverlay' -import React from 'react' - -function Loading() { - return ( - - ) -} - -export default Loading \ No newline at end of file diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 2eba3e3..6341547 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -7,6 +7,7 @@ import initTranslations from '@/lib/i18n'; import TranslationsProvider from "@/components/utils/TranslationsProdiver"; import ToastContainer from "@/components/Toast"; import { ThemeColorSetter } from "@/components/ThemeColorSetter"; +import { ThemeBootScript } from "@/components/ThemeBootScript"; import PwaServiceWorker from "@/components/PwaServiceWorker"; export const metadata: Metadata = { @@ -48,6 +49,7 @@ export default async function RootLayout({ className={`antialiased bg-background h-svh overflow-hidden`} > + - ) -} - -export default Loading \ No newline at end of file diff --git a/src/components/ThemeBootScript.tsx b/src/components/ThemeBootScript.tsx new file mode 100644 index 0000000..74012c6 --- /dev/null +++ b/src/components/ThemeBootScript.tsx @@ -0,0 +1,10 @@ +import { getThemeBootScript } from "@/lib/helpers/themeBootScript"; + +export function ThemeBootScript() { + return ( +