diff --git a/src/front/Components/DesignSystem/Header/BurgerMenu/BurgerModal/BurgerModalSubmenu/classes.module.scss b/src/front/Components/DesignSystem/Header/BurgerMenu/BurgerModal/BurgerModalSubmenu/classes.module.scss new file mode 100644 index 00000000..26b47c0f --- /dev/null +++ b/src/front/Components/DesignSystem/Header/BurgerMenu/BurgerModal/BurgerModalSubmenu/classes.module.scss @@ -0,0 +1,18 @@ +@import "@Themes/constants.scss"; + +.root { + .content { + display: flex; + gap: 8px; + align-items: center; + justify-content: center; + } + + .sub-menu { + padding: 24px; + text-align: center; + gap: 24px; + display: flex; + flex-direction: column; + } +} diff --git a/src/front/Components/DesignSystem/Header/BurgerMenu/BurgerModal/BurgerModalSubmenu/index.tsx b/src/front/Components/DesignSystem/Header/BurgerMenu/BurgerModal/BurgerModalSubmenu/index.tsx new file mode 100644 index 00000000..4c93dc3b --- /dev/null +++ b/src/front/Components/DesignSystem/Header/BurgerMenu/BurgerModal/BurgerModalSubmenu/index.tsx @@ -0,0 +1,54 @@ +import classNames from "classnames"; +import { useRouter } from "next/router"; +import React, { useEffect, useState } from "react"; +import classes from "./classes.module.scss"; +import { IAppRule } from "@Front/Api/Entities/rule"; +import Rules, { RulesMode } from "@Front/Components/Elements/Rules"; +import { IHeaderLinkProps } from "../../../HeaderLink"; +import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography"; +import HeaderSubmenuLink from "../../../HeaderSubmenu/HeaderSubmenuLink"; +import useToggle from "@Front/Hooks/useToggle"; +import { ChevronDownIcon, ChevronUpIcon } from "@heroicons/react/24/outline"; + +type IProps = { + text: string | JSX.Element; + links: (IHeaderLinkProps & { + rules?: IAppRule[]; + })[]; +}; + +export default function HeaderSubmenu(props: IProps) { + const router = useRouter(); + const { pathname } = router; + const [isActive, setIsActive] = useState(true); + const { active: isSubmenuOpened, toggle } = useToggle(true); + + useEffect(() => { + setIsActive(false); + if (props.links.some((link) => link.path === pathname)) setIsActive(true); + if (props.links.some((link) => link.routesActive?.some((routeActive) => pathname.includes(routeActive)))) setIsActive(true); + }, [isActive, pathname, props.links]); + + return ( + link.rules ?? [])}> +
+
+
+ {props.text} + {isSubmenuOpened ? : } +
+
+ {isSubmenuOpened && ( +
+ {props.links.map((link) => ( + + + + ))} +
+ )} +
+
+ + ); +} diff --git a/src/front/Components/DesignSystem/Header/BurgerMenu/BurgerModal/index.tsx b/src/front/Components/DesignSystem/Header/BurgerMenu/BurgerModal/index.tsx index b498cc7e..42687181 100644 --- a/src/front/Components/DesignSystem/Header/BurgerMenu/BurgerModal/index.tsx +++ b/src/front/Components/DesignSystem/Header/BurgerMenu/BurgerModal/index.tsx @@ -4,8 +4,8 @@ import React from "react"; import NavigationLink from "../../NavigationLink"; import classes from "./classes.module.scss"; -import Rules, { RulesMode } from "@Front/Components/Elements/Rules"; import { AppRuleActions, AppRuleNames } from "@Front/Api/Entities/rule"; +import BurgerModalSubmenu from "./BurgerModalSubmenu"; type IProps = { isOpen: boolean; @@ -34,111 +34,120 @@ export default class BurgerModal extends React.Component { text="Dossiers archivés" routesActive={[Module.getInstance().get().modules.pages.Folder.pages.FolderArchived.props.path]} /> - + + - - - - - - + - - - - - - - - - - - + { + text: "Abonnement", + path: Module.getInstance().get().modules.pages.Subscription.pages.Manage.props.path, + routesActive: [ + Module.getInstance().get().modules.pages.Subscription.pages.Error.props.path, + Module.getInstance().get().modules.pages.Subscription.pages.Success.props.path, + Module.getInstance().get().modules.pages.Subscription.pages.Invite.props.path, + Module.getInstance().get().modules.pages.Subscription.pages.Manage.props.path, + Module.getInstance().get().modules.pages.Subscription.pages.ManageCollaborators.props.path, + Module.getInstance().get().modules.pages.Subscription.pages.New.props.path, + Module.getInstance().get().modules.pages.Subscription.pages.Subscribe.props.path, + ], + }, + ]} + /> +
-
diff --git a/src/front/Components/DesignSystem/Header/HeaderSubmenu/HeaderSubmenuLink/index.tsx b/src/front/Components/DesignSystem/Header/HeaderSubmenu/HeaderSubmenuLink/index.tsx index 416ea8e5..60c836f2 100644 --- a/src/front/Components/DesignSystem/Header/HeaderSubmenu/HeaderSubmenuLink/index.tsx +++ b/src/front/Components/DesignSystem/Header/HeaderSubmenu/HeaderSubmenuLink/index.tsx @@ -5,7 +5,7 @@ import React, { useEffect } from "react"; import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography"; import useHoverable from "@Front/Hooks/useHoverable"; -export type IHeaderLinkProps = { +type IHeaderLinkProps = { text: string | JSX.Element; path: string; routesActive?: string[]; diff --git a/src/front/Components/DesignSystem/Header/Navigation/index.tsx b/src/front/Components/DesignSystem/Header/Navigation/index.tsx index fe7b8321..e926c670 100644 --- a/src/front/Components/DesignSystem/Header/Navigation/index.tsx +++ b/src/front/Components/DesignSystem/Header/Navigation/index.tsx @@ -117,7 +117,7 @@ export default function Navigation() { ], }, { - text: "Paramétrage types d'actes", + text: "Paramétrage des listes de pièces", path: Module.getInstance().get().modules.pages.DeedTypes.props.path, routesActive: [ Module.getInstance().get().modules.pages.DeedTypes.pages.Create.props.path, diff --git a/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx b/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx index 107cc094..401e2296 100644 --- a/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx +++ b/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx @@ -22,7 +22,7 @@ export const collaboratorPrice = 6.99; export const forfeitsPrices: Record = { [EForfeitType.standard]: 99, - [EForfeitType.unlimited]: 249, + [EForfeitType.unlimited]: 199, }; export default function SubscriptionFacturation() { const router = useRouter(); diff --git a/src/front/Hooks/useToggle.ts b/src/front/Hooks/useToggle.ts new file mode 100644 index 00000000..884e67aa --- /dev/null +++ b/src/front/Hooks/useToggle.ts @@ -0,0 +1,24 @@ +import { useCallback, useState } from "react"; + +export default function useToggle(defaultValue: boolean = false) { + const [active, setActive] = useState(defaultValue); + + const toggle = useCallback(() => { + setActive((prev) => !prev); + }, []); + + const activate = useCallback(() => { + setActive(true); + }, []); + + const deactivate = useCallback(() => { + setActive(false); + }, []); + + return { + active, + toggle, + activate, + deactivate, + }; +}