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..4c3e1dae --- /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(); + + 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/classes.module.scss b/src/front/Components/DesignSystem/Header/BurgerMenu/BurgerModal/classes.module.scss index 77be3233..0887c82f 100644 --- a/src/front/Components/DesignSystem/Header/BurgerMenu/BurgerModal/classes.module.scss +++ b/src/front/Components/DesignSystem/Header/BurgerMenu/BurgerModal/classes.module.scss @@ -11,6 +11,8 @@ width: 100%; left: 0; text-align: center; + max-height: calc(100vh - 83px); + overflow: auto; > *:not(:last-child) { margin-bottom: 24px; } 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/ClientDashboard/index.tsx b/src/front/Components/Layouts/ClientDashboard/index.tsx index edd7af21..810f043a 100644 --- a/src/front/Components/Layouts/ClientDashboard/index.tsx +++ b/src/front/Components/Layouts/ClientDashboard/index.tsx @@ -72,7 +72,7 @@ export default function ClientDashboard(props: IProps) { setIsAddDocumentModalVisible(true); }, []); - async function downloadFile() { + const downloadFile = useCallback(async () => { if (!folder?.office?.uid) return; const blob = await OfficeRib.getInstance().getRibStream(folder.office.uid); const ribUrl = URL.createObjectURL(blob); @@ -84,7 +84,7 @@ export default function ClientDashboard(props: IProps) { a.download = ""; document.body.appendChild(a); a.click(); - } + }, [folder]); useEffect(() => { getDocuments(); @@ -126,7 +126,15 @@ export default function ClientDashboard(props: IProps) { )}
); - }, [customer, folder?.folder_number, folder?.name, folder?.office?.name]); + }, [ + customer?.contact?.first_name, + customer?.contact?.last_name, + downloadFile, + folder?.folder_number, + folder?.name, + folder?.office?.name, + folder?.office?.rib_name, + ]); const renderBox = useCallback(() => { return ( diff --git a/src/front/Components/Layouts/DeedTypes/DeedTypesEdit/index.tsx b/src/front/Components/Layouts/DeedTypes/DeedTypesEdit/index.tsx index 97df2dc7..ad5cd1e6 100644 --- a/src/front/Components/Layouts/DeedTypes/DeedTypesEdit/index.tsx +++ b/src/front/Components/Layouts/DeedTypes/DeedTypesEdit/index.tsx @@ -76,7 +76,7 @@ export default function DeedTypesEdit() { return; } }, - [deedTypeUid, router, validationError], + [deedTypeUid, router], ); const onFieldChange = useCallback((name: string, field: any) => { diff --git a/src/front/Components/Layouts/Login/index.tsx b/src/front/Components/Layouts/Login/index.tsx index 0069ad29..d5a2fc02 100644 --- a/src/front/Components/Layouts/Login/index.tsx +++ b/src/front/Components/Layouts/Login/index.tsx @@ -41,10 +41,10 @@ export default function Login() { router.push("https://connexion.idnot.fr/"); }, [router]); - const closeContactAdminModal = useCallback(() => { + const closeContactAdminModal = () => { setIsErrorModalOpen(0); window.open("https://www.lecoffre.io/contact", "_blank"); - }, [router]); + }; useEffect(() => { openErrorModal(parseInt(error as string)); diff --git a/src/front/Components/Layouts/Subscription/Components/SubscribeCheckoutTicket/index.tsx b/src/front/Components/Layouts/Subscription/Components/SubscribeCheckoutTicket/index.tsx index 97f4021f..18352aff 100644 --- a/src/front/Components/Layouts/Subscription/Components/SubscribeCheckoutTicket/index.tsx +++ b/src/front/Components/Layouts/Subscription/Components/SubscribeCheckoutTicket/index.tsx @@ -1,5 +1,5 @@ import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; -import { EForfeitType } from "../../SubscriptionFacturation"; +import { EForfeitType, collaboratorPrice, forfeitsPrices } from "../../SubscriptionFacturation"; import classes from "./classes.module.scss"; import { useEffect, useState } from "react"; import RadioBox from "@Front/Components/DesignSystem/RadioBox"; @@ -9,13 +9,6 @@ import { EType } from "le-coffre-resources/dist/Admin/Subscription"; import Stripe from "@Front/Api/LeCoffreApi/Admin/Stripe/Stripe"; import { useRouter } from "next/router"; -export const forfeitsPrices: Record = { - [EForfeitType.standard]: 99, - [EForfeitType.unlimited]: 249, -}; - -export const collaboratorPrice = 6.99; - type IProps = { forfeitType: EForfeitType; numberOfCollaborators: number; diff --git a/src/front/Components/Layouts/Subscription/Components/SubscribeIllimityComponent/index.tsx b/src/front/Components/Layouts/Subscription/Components/SubscribeIllimityComponent/index.tsx index 76955f82..3b51400c 100644 --- a/src/front/Components/Layouts/Subscription/Components/SubscribeIllimityComponent/index.tsx +++ b/src/front/Components/Layouts/Subscription/Components/SubscribeIllimityComponent/index.tsx @@ -2,8 +2,8 @@ import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Ty import classes from "./classes.module.scss"; import DefaultTemplate from "@Front/Components/LayoutTemplates/DefaultTemplate"; import NavTab from "@Front/Components/Elements/NavTab"; -import SubscribeCheckoutTicket, { EPaymentFrequency, forfeitsPrices } from "../SubscribeCheckoutTicket"; -import { EForfeitType } from "../../SubscriptionFacturation"; +import SubscribeCheckoutTicket, { EPaymentFrequency } from "../SubscribeCheckoutTicket"; +import { EForfeitType, forfeitsPrices } from "../../SubscriptionFacturation"; import { useEffect, useState } from "react"; import Check from "@Front/Components/Elements/Icons/Check"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; diff --git a/src/front/Components/Layouts/Subscription/Components/SubscribeStandardComponent/index.tsx b/src/front/Components/Layouts/Subscription/Components/SubscribeStandardComponent/index.tsx index 0b06aadc..581524cf 100644 --- a/src/front/Components/Layouts/Subscription/Components/SubscribeStandardComponent/index.tsx +++ b/src/front/Components/Layouts/Subscription/Components/SubscribeStandardComponent/index.tsx @@ -3,8 +3,8 @@ import classes from "./classes.module.scss"; import DefaultTemplate from "@Front/Components/LayoutTemplates/DefaultTemplate"; import NavTab from "@Front/Components/Elements/NavTab"; import NumberPicker from "@Front/Components/Elements/NumberPicker"; -import SubscribeCheckoutTicket, { EPaymentFrequency, collaboratorPrice, forfeitsPrices } from "../SubscribeCheckoutTicket"; -import { EForfeitType } from "../../SubscriptionFacturation"; +import SubscribeCheckoutTicket, { EPaymentFrequency } from "../SubscribeCheckoutTicket"; +import { EForfeitType, collaboratorPrice, forfeitsPrices } from "../../SubscriptionFacturation"; import { useEffect, useState } from "react"; import Check from "@Front/Components/Elements/Icons/Check"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; diff --git a/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx b/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx index 62e07d4a..401e2296 100644 --- a/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx +++ b/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx @@ -18,6 +18,12 @@ export enum EForfeitType { "standard", "unlimited", } +export const collaboratorPrice = 6.99; + +export const forfeitsPrices: Record = { + [EForfeitType.standard]: 99, + [EForfeitType.unlimited]: 199, +}; export default function SubscriptionFacturation() { const router = useRouter(); const [subscription, setSubscription] = useState(null); @@ -74,6 +80,8 @@ export default function SubscriptionFacturation() { useEffect(() => { loadSubscription(); }, [loadSubscription]); + + console.log(forfeitsPrices[EForfeitType.unlimited].toString()); return ( {subscription && ( @@ -114,14 +122,14 @@ export default function SubscriptionFacturation() {
- 99€ + {forfeitsPrices[EForfeitType.standard]}€  HT  / mois - + 6,99€ / collaborateur / mois + + {collaboratorPrice}€ / collaborateur / mois
@@ -178,7 +186,7 @@ export default function SubscriptionFacturation() {
- 249€ + {forfeitsPrices[EForfeitType.unlimited]}€  HT  diff --git a/src/front/Components/Layouts/Subscription/SubscriptionNew/index.tsx b/src/front/Components/Layouts/Subscription/SubscriptionNew/index.tsx index 5a98f987..ab1087f7 100644 --- a/src/front/Components/Layouts/Subscription/SubscriptionNew/index.tsx +++ b/src/front/Components/Layouts/Subscription/SubscriptionNew/index.tsx @@ -5,6 +5,7 @@ import Image from "next/image"; import DefaultTemplate from "@Front/Components/LayoutTemplates/DefaultTemplate"; import Button from "@Front/Components/DesignSystem/Button"; import Link from "next/link"; +import { EForfeitType, collaboratorPrice, forfeitsPrices } from "../SubscriptionFacturation"; export default function SubscriptionNew() { return ( @@ -42,7 +43,7 @@ export default function SubscriptionNew() { / mois - + 6,99€ / collaborateur / mois + + {collaboratorPrice}€ / collaborateur / mois
@@ -63,7 +64,7 @@ export default function SubscriptionNew() {
- 249€ + {forfeitsPrices[EForfeitType.unlimited]}€  HT  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, + }; +}