diff --git a/package.json b/package.json index e3c9fd64..fd63ce3e 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,8 @@ "react-textarea-autosize": "8.3.3", "sitemap": "7.0.0", "tslib": "2.3.1", - "use-cookie-consent": "^0.1.12" + "use-cookie-consent": "^0.1.12", + "zustand": "3.5.10" }, "devDependencies": { "@babel/core": "^7.15.0", diff --git a/src/atoms/route-loader/index.tsx b/src/atoms/route-loader/index.tsx index 3d1e9049..9f90a636 100644 --- a/src/atoms/route-loader/index.tsx +++ b/src/atoms/route-loader/index.tsx @@ -1,7 +1,11 @@ -import React from "react"; +import { useRouteLoader } from "@/ions/hooks/route-loader"; +import React, { memo } from "react"; import { StyledLoader } from "./styled"; -import { RouteLoaderProps } from "./types"; -const RouteLoader = (props: RouteLoaderProps) => ; +const RouteLoader = () => { + const { loaded, loading } = useRouteLoader(); -export default RouteLoader; + return ; +}; + +export default memo(RouteLoader); diff --git a/src/atoms/route-loader/types.ts b/src/atoms/route-loader/types.ts index 6c42bf8f..1392100e 100644 --- a/src/atoms/route-loader/types.ts +++ b/src/atoms/route-loader/types.ts @@ -2,5 +2,3 @@ export interface StyledLoaderProps { isLoading?: boolean; isLoaded?: boolean; } - -export interface RouteLoaderProps extends StyledLoaderProps {} diff --git a/src/atoms/toggle/index.tsx b/src/atoms/toggle/index.tsx index 236d9ea5..ebc88fd8 100644 --- a/src/atoms/toggle/index.tsx +++ b/src/atoms/toggle/index.tsx @@ -1,4 +1,4 @@ -import React from "react"; +import React, { memo } from "react"; import { StyledInput, StyledToggle, StyledToggleWrapper } from "./styled"; import { ToggleProps } from "./types"; @@ -17,4 +17,4 @@ const Toggle = ({ checked, onChange, invalid, disabled, ...props }: ToggleProps) ); }; -export default Toggle; +export default memo(Toggle); diff --git a/src/groups/layout/index.tsx b/src/groups/layout/index.tsx index f6cc2993..028f922b 100644 --- a/src/groups/layout/index.tsx +++ b/src/groups/layout/index.tsx @@ -1,6 +1,8 @@ +import RouteLoader from "@/atoms/route-loader"; import { GlobalTypography } from "@/atoms/typography/global"; import { BreadcrumbsProvider } from "@/ions/contexts/breadcrumbs/context"; -import { useCookieConsentModal } from "@/ions/contexts/cookie-consent-modal"; +import { useCookieConsentContext } from "@/ions/contexts/cookie-consent"; +import { useCookieConsentModal } from "@/ions/stores/modal/cookie-consent"; import { globalStyles } from "@/ions/styles"; import Footer from "@/organisms/footer"; import Header from "@/organisms/header"; @@ -9,7 +11,7 @@ import { css, Global, useTheme } from "@emotion/react"; import dynamic from "next/dynamic"; import Head from "next/head"; import process from "process"; -import React, { FC, useMemo } from "react"; +import React, { FC, useEffect, useMemo } from "react"; import { LayoutProps } from "./types"; const OverlayGrid = dynamic(async () => import("@/organisms/grid-overlay"), { ssr: false }); @@ -28,8 +30,17 @@ const Layout: FC = ({ }) => { const theme = useTheme(); const breadcrumbs = useMemo(() => rawBreadcrumbs || [], [rawBreadcrumbs]); - const { isOpen: isCookieModalOpen } = useCookieConsentModal(); + const isCookieModalOpen = useCookieConsentModal(state => state.isOpen); + const toggleCookieModal = useCookieConsentModal(state => state.toggle); + const { consent } = useCookieConsentContext(); + useEffect(() => { + if (consent) { + toggleCookieModal(Object.keys(consent).length === 0); + } else { + toggleCookieModal(true); + } + }, [consent, toggleCookieModal]); return ( <> @@ -67,12 +78,15 @@ const Layout: FC = ({ {description && } {image && } - {isCookieModalOpen && !process.env.NEXT_PUBLIC_HIDE_COOKIE_CONSENT && } + {isCookieModalOpen && !process.env.NEXT_PUBLIC_HIDE_COOKIE_CONSENT && ( + + )}
{children}