From 41f3bd1e1340ff80e3928c4500ff568c8138a05e Mon Sep 17 00:00:00 2001 From: Harry Ross Date: Fri, 29 Dec 2023 15:45:34 +1100 Subject: [PATCH] Added rules functionality --- lib/components/DesktopMenu/DesktopMenu.tsx | 34 ++++++++++++-- .../MegaMenuLayout/MegaMenuLayout.tsx | 46 +++++++++++++++---- lib/hooks/useMenuItems.ts | 14 ++++-- 3 files changed, 75 insertions(+), 19 deletions(-) diff --git a/lib/components/DesktopMenu/DesktopMenu.tsx b/lib/components/DesktopMenu/DesktopMenu.tsx index a22d080..e8dc7df 100644 --- a/lib/components/DesktopMenu/DesktopMenu.tsx +++ b/lib/components/DesktopMenu/DesktopMenu.tsx @@ -9,11 +9,19 @@ import { MenuItemWithSubmenu } from "./MenuItemWithSubmenu"; export interface DesktopMenuProps { menuGroups: NavMenuGroup[]; + sideActionsOverride?: () => JSX.Element; + hidePhone?: boolean; } export const ClosePopoverContext = createContext<(() => void) | null>(null); -const DesktopMenu: React.FC = ({ menuGroups }) => { +const DesktopMenu: React.FC = ({ + menuGroups, + sideActionsOverride, + hidePhone, +}) => { + const SideActions = sideActionsOverride; + return ( <>
@@ -62,15 +70,31 @@ const DesktopMenu: React.FC = ({ menuGroups }) => {
- - - - + {SideActions ? ( + + ) : ( + + )}
); }; +type DefaultSideActionsProps = { + hidePhone?: boolean; +}; + +const DefaultSideActions = ({ hidePhone }: DefaultSideActionsProps) => { + return ( + <> + {!hidePhone && } + + + + + ); +}; + const Divider: React.FC = () => { return
; }; diff --git a/lib/components/MegaMenuLayout/MegaMenuLayout.tsx b/lib/components/MegaMenuLayout/MegaMenuLayout.tsx index 390b759..d1a9294 100644 --- a/lib/components/MegaMenuLayout/MegaMenuLayout.tsx +++ b/lib/components/MegaMenuLayout/MegaMenuLayout.tsx @@ -4,7 +4,7 @@ import { useMenuItems } from "../../hooks/useMenuItems"; import { NavMenuGroup } from "../../types/megamenu"; import { CustomLink } from "../CustomLink"; import DesktopMenu from "../DesktopMenu/DesktopMenu"; -import { Logo } from "../Logo"; +import { Logo as BaseLogo } from "../Logo"; import MobileMenu from "../MobileMenu/MobileMenu"; import { PhoneButton } from "../PhoneButton"; import { Search } from "../Search"; @@ -12,19 +12,28 @@ import { Search } from "../Search"; export interface MegaMenuWrapperProps extends React.PropsWithChildren { tagline?: string; menuBarItems?: NavMenuGroup[]; + logoOverride?: () => JSX.Element; + sideActionsOverride?: () => JSX.Element; + hidePhone?: boolean; } const MegaMenuLayout: React.FC = ({ tagline = "Enterprise Software Development", menuBarItems, + logoOverride, + sideActionsOverride, + hidePhone, }) => { const [isMobileMenuOpen, setMobileMenuOpen] = useState(false); const { menuItems } = useMenuItems(menuBarItems); + const Logo = logoOverride; + const SideActions = sideActionsOverride; + return ( <> -
+
- + {!hidePhone && } + {SideActions && ( +
+ +
+ )}
- + = ({ closeMobileMenu={() => setMobileMenuOpen(false)} />
- + {!hidePhone && } + {SideActions && ( +
+ +
+ )} ); }; diff --git a/lib/hooks/useMenuItems.ts b/lib/hooks/useMenuItems.ts index 22ad93a..f015d1f 100644 --- a/lib/hooks/useMenuItems.ts +++ b/lib/hooks/useMenuItems.ts @@ -7,11 +7,14 @@ const refreshData = async () => { const res = await fetch(API_URL); const json = await res.json(); - if (window?.localStorage) { - window.localStorage.setItem("megamenu", JSON.stringify(json)); + + const { menuGroups } = json; + + if (window?.localStorage && menuGroups?.length > 0) { + window.localStorage.setItem("megamenu", JSON.stringify(menuGroups)); } - return json; + return menuGroups; }; export const useMenuItems = ( @@ -20,11 +23,12 @@ export const useMenuItems = ( const [menuItems, setMenuItems] = useState([]); useEffect(() => { - const cached = JSON.parse(window.localStorage.getItem("megamenu") || "{}"); + const cached = JSON.parse(window.localStorage.getItem("megamenu") || "[]"); + console.log("cached", cached); if (menuBarItems) { setMenuItems(menuBarItems); - } else if (cached) { + } else if (cached?.length > 0) { setMenuItems(cached); } else { refreshData().then((data) => {