Merge branch 'dev' into staging

This commit is contained in:
Maxime Lalo 2024-04-23 14:43:51 +02:00
commit 122cd8367f
4 changed files with 74 additions and 34 deletions

View File

@ -6,6 +6,7 @@ import NavigationLink from "../../NavigationLink";
import classes from "./classes.module.scss"; import classes from "./classes.module.scss";
import { AppRuleActions, AppRuleNames } from "@Front/Api/Entities/rule"; import { AppRuleActions, AppRuleNames } from "@Front/Api/Entities/rule";
import BurgerModalSubmenu from "./BurgerModalSubmenu"; import BurgerModalSubmenu from "./BurgerModalSubmenu";
import Rules, { RulesMode } from "@Front/Components/Elements/Rules";
type IProps = { type IProps = {
isOpen: boolean; isOpen: boolean;
@ -21,20 +22,31 @@ export default class BurgerModal extends React.Component<IProps, IState> {
<> <>
<div className={classes["background"]} onClick={this.props.closeModal} /> <div className={classes["background"]} onClick={this.props.closeModal} />
<div className={classes["root"]}> <div className={classes["root"]}>
<NavigationLink <Rules
path={Module.getInstance().get().modules.pages.Folder.props.path} mode={RulesMode.OPTIONAL}
text="Dossiers en cours" rules={[
routesActive={[ {
Module.getInstance().get().modules.pages.Folder.pages.FolderInformation.props.path, action: AppRuleActions.read,
Module.getInstance().get().modules.pages.Folder.pages.CreateFolder.props.path, name: AppRuleNames.officeFolders,
]} },
/> ]}>
<NavigationLink <>
path={Module.getInstance().get().modules.pages.Folder.pages.FolderArchived.props.path} <NavigationLink
text="Dossiers archivés" path={Module.getInstance().get().modules.pages.Folder.props.path}
routesActive={[Module.getInstance().get().modules.pages.Folder.pages.FolderArchived.props.path]} text="Dossiers en cours"
/> routesActive={[
<div className={classes["separator"]} /> Module.getInstance().get().modules.pages.Folder.pages.FolderInformation.props.path,
Module.getInstance().get().modules.pages.Folder.pages.CreateFolder.props.path,
]}
/>
<NavigationLink
path={Module.getInstance().get().modules.pages.Folder.pages.FolderArchived.props.path}
text="Dossiers archivés"
routesActive={[Module.getInstance().get().modules.pages.Folder.pages.FolderArchived.props.path]}
/>
<div className={classes["separator"]} />
</>
</Rules>
<BurgerModalSubmenu <BurgerModalSubmenu
text={"Espace super admin"} text={"Espace super admin"}

View File

@ -63,27 +63,30 @@ export default function Navigation() {
return ( return (
<div className={classes["root"]}> <div className={classes["root"]}>
<HeaderLink <Rules
text={"Dossiers en cours"} mode={RulesMode.OPTIONAL}
path={Module.getInstance().get().modules.pages.Folder.props.path}
routesActive={[
Module.getInstance().get().modules.pages.Folder.pages.FolderInformation.props.path,
Module.getInstance().get().modules.pages.Folder.pages.CreateFolder.props.path,
]}
/>
<HeaderLink
text={"Dossiers archivés"}
path={Module.getInstance().get().modules.pages.Folder.pages.FolderArchived.props.path}
routesActive={[Module.getInstance().get().modules.pages.Folder.pages.FolderArchived.props.path]}
/>
{/* <Rules
mode={RulesMode.NECESSARY}
rules={[ rules={[
{ {
action: AppRuleActions.update, action: AppRuleActions.read,
name: AppRuleNames.officeRoles, name: AppRuleNames.officeFolders,
}, },
]}> */} ]}>
<>
<HeaderLink
text={"Dossiers en cours"}
path={Module.getInstance().get().modules.pages.Folder.props.path}
routesActive={[
Module.getInstance().get().modules.pages.Folder.pages.FolderInformation.props.path,
Module.getInstance().get().modules.pages.Folder.pages.CreateFolder.props.path,
]}
/>
<HeaderLink
text={"Dossiers archivés"}
path={Module.getInstance().get().modules.pages.Folder.pages.FolderArchived.props.path}
routesActive={[Module.getInstance().get().modules.pages.Folder.pages.FolderArchived.props.path]}
/>
</>
</Rules>
<HeaderSubmenu <HeaderSubmenu
text={"Espace office"} text={"Espace office"}
links={[ links={[

View File

@ -26,6 +26,11 @@ export default function LoginCallBack() {
const token = await Auth.getInstance().getIdnotJwt(code as string); const token = await Auth.getInstance().getIdnotJwt(code as string);
if (!token) return router.push(Module.getInstance().get().modules.pages.Login.props.path); if (!token) return router.push(Module.getInstance().get().modules.pages.Login.props.path);
await UserStore.instance.connect(token.accessToken, token.refreshToken); await UserStore.instance.connect(token.accessToken, token.refreshToken);
const jwt = JwtService.getInstance().decodeJwt();
if (!jwt) return router.push(Module.getInstance().get().modules.pages.Login.props.path + "?error=1");
if (!jwt.rules.includes("GET folders")) {
return router.push(Module.getInstance().get().modules.pages.Subscription.pages.New.props.path);
}
return router.push(Module.getInstance().get().modules.pages.Folder.props.path); return router.push(Module.getInstance().get().modules.pages.Folder.props.path);
} catch (e: any) { } catch (e: any) {
if (e.http_status === 401 && e.message === "Email not found") { if (e.http_status === 401 && e.message === "Email not found") {
@ -40,6 +45,11 @@ export default function LoginCallBack() {
const refreshToken = CookieService.getInstance().getCookie("leCoffreRefreshToken"); const refreshToken = CookieService.getInstance().getCookie("leCoffreRefreshToken");
if (!refreshToken) return router.push(Module.getInstance().get().modules.pages.Login.props.path + "?error=1"); if (!refreshToken) return router.push(Module.getInstance().get().modules.pages.Login.props.path + "?error=1");
const isTokenRefreshed = await JwtService.getInstance().refreshToken(refreshToken); const isTokenRefreshed = await JwtService.getInstance().refreshToken(refreshToken);
const jwt = JwtService.getInstance().decodeJwt();
if (!jwt) return router.push(Module.getInstance().get().modules.pages.Login.props.path + "?error=1");
if (!jwt.rules.includes("GET folders")) {
return router.push(Module.getInstance().get().modules.pages.Subscription.pages.New.props.path);
}
if (isTokenRefreshed) { if (isTokenRefreshed) {
return router.push(Module.getInstance().get().modules.pages.Folder.props.path); return router.push(Module.getInstance().get().modules.pages.Folder.props.path);
} }

View File

@ -31,7 +31,7 @@ export default function SubscriptionFacturation() {
const { close: closeCancelSubscription, isOpen: isCancelSubscriptionOpen } = useOpenable(); const { close: closeCancelSubscription, isOpen: isCancelSubscriptionOpen } = useOpenable();
const { close: closeConfirmation, isOpen: isConfirmationOpen } = useOpenable(); const { close: closeConfirmation, isOpen: isConfirmationOpen } = useOpenable();
const { close: closeConfirmationRemoveSeats, isOpen: isConfirmationRemoveSeatsOpen, open: openConfirmationRemoveSeats } = useOpenable();
// const cancelSubscription = useCallback(() => { // const cancelSubscription = useCallback(() => {
// closeCancelSubscription(); // closeCancelSubscription();
// openConfirmation(); // openConfirmation();
@ -160,7 +160,7 @@ export default function SubscriptionFacturation() {
href={ href={
Module.getInstance().get().modules.pages.Subscription.pages.Manage.pages.Standard.props.path Module.getInstance().get().modules.pages.Subscription.pages.Manage.pages.Standard.props.path
}> */} }> */}
<Button onClick={manageBilling} fullwidth variant={EButtonVariant.PRIMARY}> <Button onClick={openConfirmationRemoveSeats} fullwidth variant={EButtonVariant.PRIMARY}>
Changer de plan Changer de plan
</Button> </Button>
{/* </Link> */} {/* </Link> */}
@ -294,6 +294,21 @@ export default function SubscriptionFacturation() {
</MessageBox> </MessageBox>
</div> </div>
</Confirm> </Confirm>
<Confirm
isOpen={isConfirmationRemoveSeatsOpen}
onClose={closeConfirmationRemoveSeats}
onAccept={manageBilling}
closeBtn
confirmText={"Continuer"}
cancelText={"Annuler"}>
<div className={classes["modal-content"]}>
<Typography typo={ITypo.P_16} color={ITypoColor.BLACK}>
En cas de suppression de sièges, les derniers comptes ajoutés seront concernés. Vous pouvez réattribuer les sièges
que vous avez dans votre page sur la page "Gérer mes attributions.
</Typography>
</div>
</Confirm>
</DefaultTemplate> </DefaultTemplate>
); );
} }