Skip to content

Commit 3aa06ad

Browse files
fix menu
1 parent d54f60e commit 3aa06ad

File tree

3 files changed

+40
-51
lines changed

3 files changed

+40
-51
lines changed

src/context/menuContext.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import React, { createContext, useContext, useEffect, useState } from "react";
2-
import { useQuery } from "react-query";
1+
import React, { createContext, useContext, useState, useEffect } from "react";
32
import { getData } from "@/utils/api/fetchData/apiCall";
43
import { MegaMenuAPI } from "@/const/endPoint";
54
import { MegaMenuTransformer } from "@/utils/api/transformer/megaMenu";
65
import { menuItems } from "@/utils/type";
6+
import { useRouter } from "next/router";
77

88
type MegaMenuContextType = menuItems[] | undefined;
99

@@ -13,8 +13,9 @@ export const MegaMenuProvider: React.FC<{
1313
children: React.ReactNode;
1414
initialMenu: menuItems[];
1515
language?: string;
16-
}> = ({ children, initialMenu, language = "en" }) => {
16+
}> = ({ children, initialMenu }) => {
1717
const [clientMenu, setClientMenu] = useState(initialMenu);
18+
const router = useRouter();
1819

1920
useEffect(() => {
2021
const fetchMenu = async () => {
@@ -23,7 +24,7 @@ export const MegaMenuProvider: React.FC<{
2324
};
2425

2526
fetchMenu();
26-
}, [language]);
27+
}, [router.locale]);
2728

2829
return (
2930
<MegaMenuContext.Provider value={clientMenu}>

src/pages/_app.tsx

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -10,48 +10,40 @@ import { MegaMenuProvider } from "@/context/menuContext";
1010
import { Toaster } from "react-hot-toast";
1111
import "./../../i18n";
1212
import { useRouter } from "next/router";
13-
import { useTranslation } from "react-i18next";
14-
import { QueryClientProvider } from "react-query";
13+
import { QueryClientProvider, HydrationBoundary } from "@tanstack/react-query";
1514
import { queryClient } from "@/const/queryClient";
1615

1716
const inter = Raleway({ subsets: ["latin"] });
1817

1918
export default function App({ Component, pageProps }: AppProps) {
2019
const router = useRouter();
21-
const { i18n } = useTranslation();
22-
2320
useEffect(() => {
2421
if ("scrollRestoration" in window.history) {
2522
window.history.scrollRestoration = "manual";
2623
}
2724
}, [router]);
2825

29-
useEffect(() => {
30-
const { locale } = router;
31-
if (locale) {
32-
i18n.changeLanguage(locale);
33-
}
34-
}, [router.locale]);
35-
3626
return (
3727
<>
3828
<QueryClientProvider client={queryClient}>
39-
<CartProvider>
40-
<MegaMenuProvider
41-
initialMenu={pageProps.menu || []}
42-
language={router.locale}
43-
>
44-
<main className={inter.className}>
45-
<Header />
46-
<div className="container">
47-
<Toaster />
48-
<Component {...pageProps} />
49-
</div>
50-
<NavigationBar />
51-
<Footer />
52-
</main>
53-
</MegaMenuProvider>
54-
</CartProvider>
29+
<HydrationBoundary>
30+
<CartProvider>
31+
<MegaMenuProvider
32+
initialMenu={pageProps.menu || []}
33+
language={router.locale}
34+
>
35+
<main className={inter.className}>
36+
<Header />
37+
<div className="container">
38+
<Toaster />
39+
<Component {...pageProps} />
40+
</div>
41+
<NavigationBar />
42+
<Footer />
43+
</main>
44+
</MegaMenuProvider>
45+
</CartProvider>
46+
</HydrationBoundary>
5547
</QueryClientProvider>
5648
</>
5749
);

src/pages/index.tsx

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,26 @@
11
import MainSlider from "@/component/mainSlider";
22
import HomeCategory from "@/component/homeCategory";
33
import ProductCarousel from "@/component/productCarousel";
4-
import { HomePageAPI } from "@/const/endPoint";
4+
import { HomePageAPI, MegaMenuAPI } from "@/const/endPoint";
55
import Subscribe from "@/component/subscribe";
66
import InstagramPost from "@/component/instagramPost";
77
import { HomeProps, Product } from "@/utils/type";
8-
import { MegaMenuProvider } from "@/context/menuContext";
98
import { HomeTransformer } from "@/utils/api/transformer/home";
109
import { getData } from "@/utils/api/fetchData/apiCall";
1110
import { useScrollRestoration } from "@/utils/hooks";
1211
import { useQuery } from "@tanstack/react-query";
13-
import { useRouter } from "next/router";
1412
import { GetServerSidePropsContext } from "next";
1513
import MetaTags from "@/component/metaTags";
14+
import { MegaMenuTransformer } from "@/utils/api/transformer/megaMenu";
1615

1716
const fetchCHomeData = async () => {
1817
const data = await getData(HomePageAPI);
1918
return HomeTransformer(data).homeProductCarousel;
2019
};
2120

22-
export default function Home({
23-
homeProductCarousel,
24-
menu,
25-
}: HomeProps): JSX.Element {
21+
export default function Home({ homeProductCarousel }: HomeProps): JSX.Element {
2622
useScrollRestoration();
27-
const router = useRouter();
28-
const locale = router.locale || "en";
23+
2924
const { data: carouselData } = useQuery<Product[]>({
3025
queryKey: ["homePage"],
3126
queryFn: () => fetchCHomeData(),
@@ -36,25 +31,26 @@ export default function Home({
3631

3732
return (
3833
<>
39-
<MegaMenuProvider initialMenu={menu} language={locale}>
40-
<MetaTags />
41-
<MainSlider />
42-
<HomeCategory />
43-
<ProductCarousel product={carouselData} />
44-
<Subscribe />
45-
<InstagramPost />
46-
</MegaMenuProvider>
34+
<MetaTags />
35+
<MainSlider />
36+
<HomeCategory />
37+
<ProductCarousel product={carouselData} />
38+
<Subscribe />
39+
<InstagramPost />
4740
</>
4841
);
4942
}
5043

5144
export async function getServerSideProps(context: GetServerSidePropsContext) {
5245
const referer = context.req.headers.referer || null;
46+
5347
if (!referer) {
5448
const data = await getData(HomePageAPI);
5549
const { homeProductCarousel } = HomeTransformer(data);
56-
57-
return { props: { homeProductCarousel } };
50+
const megaMenuData = await getData(MegaMenuAPI);
51+
const menu = MegaMenuTransformer(megaMenuData).menuItems;
52+
return { props: { homeProductCarousel, menu } };
5853
}
59-
return { props: { homeProductCarousel: null } };
54+
55+
return { props: { homeProductCarousel: null, menu: [] } };
6056
}

0 commit comments

Comments
 (0)