Skip to content

Commit 8297926

Browse files
maximeperraultmaximeperraultdev
authored andcommitted
fix: remove envbanner on unmount
1 parent 66d03d3 commit 8297926

File tree

5 files changed

+47
-58
lines changed

5 files changed

+47
-58
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { Level } from '@mtes-mct/monitor-ui'
2+
3+
import type { Environment } from '../../types'
4+
5+
const environment = import.meta.env.FRONTEND_SENTRY_ENV as Environment
6+
const version = import.meta.env.FRONTEND_MONITORENV_VERSION
7+
8+
export namespace EnvBannerStack {
9+
const message = `Vous êtes sur l'environnement ${
10+
environment === 'integration' ? "d'intégration" : 'de pré-production'
11+
} - Version : ${version}`
12+
13+
export const Props = {
14+
children: message,
15+
isClosable: false,
16+
isCollapsible: true,
17+
isFixed: true,
18+
level: Level.WARNING
19+
}
20+
}

frontend/src/features/SideWindow/index.tsx

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { EnvBannerStack } from '@components/BannerStack/EnvBannerStack'
12
import { DashboardForms } from '@features/Dashboard/components/DashboardForm'
23
import { DashboardsList } from '@features/Dashboard/components/DashboardsList'
34
import { DashboardsNavBar } from '@features/Dashboard/components/DashboardsNavBar'
@@ -12,17 +13,16 @@ import { reportingActions } from '@features/Reportings/slice'
1213
import { VigilancesAreasList } from '@features/VigilanceArea/components/VigilanceAreasList'
1314
import { useAppDispatch } from '@hooks/useAppDispatch'
1415
import { useAppSelector } from '@hooks/useAppSelector'
15-
import { Icon, NewWindowContext, SideMenu, type NewWindowContextValue } from '@mtes-mct/monitor-ui'
16+
import { Icon, NewWindowContext, type NewWindowContextValue, SideMenu } from '@mtes-mct/monitor-ui'
1617
import {
1718
isDashboardPage,
1819
isDashboardsPage,
1920
isMissionOrMissionsPage,
2021
isMissionPage,
2122
isReportingsPage
2223
} from '@utils/routes'
23-
import { shouldDisplayEnvBanner } from '@utils/shouldDisplayEnvBanner'
2424
import { omit } from 'lodash'
25-
import { useEffect, useMemo, useRef, useState, type MutableRefObject } from 'react'
25+
import { type MutableRefObject, useEffect, useMemo, useRef, useState } from 'react'
2626
import { generatePath } from 'react-router'
2727
import { StyleSheetManager } from 'styled-components'
2828

@@ -47,7 +47,6 @@ export function SideWindow() {
4747
const dispatch = useAppDispatch()
4848
const wrapperRef = useRef<HTMLDivElement | null>(null)
4949
const currentPath = useAppSelector(state => state.sideWindow.currentPath)
50-
const bannerStack = useAppSelector(state => state.sideWindow.bannerStack)
5150

5251
const [isMounted, setIsMounted] = useState(false)
5352
const missionEvent = useListenMissionEventUpdates()
@@ -95,16 +94,16 @@ export function SideWindow() {
9594
dispatch(dashboardActions.setMapFocus(false))
9695
dispatch(restorePreviousDisplayedItems())
9796
}
97+
let bannerId: number
9898
if (environment === 'integration' || environment === 'preprod') {
99-
const bannerProps = shouldDisplayEnvBanner(bannerStack)
99+
bannerId = dispatch(addSideWindowBanner(EnvBannerStack.Props))
100+
}
100101

101-
if (!bannerProps) {
102-
return
102+
return () => {
103+
if (bannerId) {
104+
dispatch(sideWindowActions.removeBanner(bannerId))
103105
}
104-
dispatch(addSideWindowBanner(bannerProps))
105106
}
106-
// we want to trigger this effect only when the currentPath change
107-
// eslint-disable-next-line react-hooks/exhaustive-deps
108107
}, [currentPath, dispatch])
109108

110109
const navigate = (nextPath: string) => {

frontend/src/pages/BackOfficePage.tsx

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1+
import { EnvBannerStack } from '@components/BannerStack/EnvBannerStack'
12
import { BannerStack } from '@features/BackOffice/components/BannerStack'
3+
import { backOfficeActions } from '@features/BackOffice/slice'
24
import { addBackOfficeBanner } from '@features/BackOffice/useCases/addBackOfficeBanner'
35
import { useAppDispatch } from '@hooks/useAppDispatch'
4-
import { useAppSelector } from '@hooks/useAppSelector'
5-
import { shouldDisplayEnvBanner } from '@utils/shouldDisplayEnvBanner'
66
import { useEffect } from 'react'
77
import { Route, Routes } from 'react-router'
88
import styled from 'styled-components'
@@ -22,20 +22,19 @@ const environment = import.meta.env.FRONTEND_SENTRY_ENV as Environment
2222

2323
export function BackOfficePage() {
2424
const dispatch = useAppDispatch()
25-
const bannerStack = useAppSelector(state => state.backOffice.bannerStack)
2625

2726
useEffect(() => {
27+
let bannerId: number
2828
if (environment === 'integration' || environment === 'preprod') {
29-
const bannerProps = shouldDisplayEnvBanner(bannerStack)
29+
bannerId = dispatch(addBackOfficeBanner(EnvBannerStack.Props))
30+
}
3031

31-
if (!bannerProps) {
32-
return
32+
return () => {
33+
if (bannerId) {
34+
dispatch(backOfficeActions.removeBanner(bannerId))
3335
}
34-
dispatch(addBackOfficeBanner(bannerProps))
3536
}
36-
// just want to run this once on mount
37-
// eslint-disable-next-line react-hooks/exhaustive-deps
38-
}, [])
37+
}, [dispatch])
3938

4039
return (
4140
<Wrapper>

frontend/src/pages/HomePage.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
1+
import { EnvBannerStack } from '@components/BannerStack/EnvBannerStack'
12
import { Menu } from '@components/Menu'
23
import { MapFocusForDashboardBanner } from '@features/Dashboard/components/MapFocusForDashboardBanner'
34
import { useSearchLayers } from '@features/layersSelector/search/hooks/useSearchLayers'
45
import { BannerStack } from '@features/MainWindow/components/BannerStack'
6+
import { mainWindowActions } from '@features/MainWindow/slice'
57
import { addMainWindowBanner } from '@features/MainWindow/useCases/addMainWindowBanner'
68
import { AttachMissionToReportingModal } from '@features/Reportings/components/ReportingForm/AttachMission/AttachMissionToReportingModal'
79
import { REPORTING_EVENT_UNSYNCHRONIZED_PROPERTIES } from '@features/Reportings/components/ReportingForm/constants'
810
import { useListenReportingEventUpdates } from '@features/Reportings/components/ReportingForm/hooks/useListenReportingEventUpdates'
911
import { reportingActions } from '@features/Reportings/slice'
1012
import { SideWindowStatus } from '@features/SideWindow/slice'
1113
import { useAppDispatch } from '@hooks/useAppDispatch'
12-
import { shouldDisplayEnvBanner } from '@utils/shouldDisplayEnvBanner'
1314
import { omit } from 'lodash'
1415
import { useCallback, useEffect, useMemo } from 'react'
1516
import { useBeforeUnload } from 'react-router'
@@ -34,7 +35,6 @@ const environment = import.meta.env.FRONTEND_SENTRY_ENV as Environment
3435

3536
export function HomePage() {
3637
const dispatch = useAppDispatch()
37-
const bannerStack = useAppSelector(state => state.mainWindow.bannerStack)
3838

3939
const isSuperUser = useAppSelector(state => state.account.isSuperUser)
4040
const sideWindowStatus = useAppSelector(state => state.sideWindow.status)
@@ -96,17 +96,17 @@ export function HomePage() {
9696
}, [dispatch, reportingEvent])
9797

9898
useEffect(() => {
99+
let bannerId: number
99100
if (environment === 'integration' || environment === 'preprod') {
100-
const bannerProps = shouldDisplayEnvBanner(bannerStack)
101+
bannerId = dispatch(addMainWindowBanner(EnvBannerStack.Props))
102+
}
101103

102-
if (!bannerProps) {
103-
return
104+
return () => {
105+
if (bannerId) {
106+
dispatch(mainWindowActions.removeBanner(bannerId))
104107
}
105-
dispatch(addMainWindowBanner(bannerProps))
106108
}
107-
// just want to run this once on mount
108-
// eslint-disable-next-line react-hooks/exhaustive-deps
109-
}, [])
109+
}, [dispatch])
110110

111111
useSearchLayers()
112112

frontend/src/utils/shouldDisplayEnvBanner.ts

Lines changed: 0 additions & 29 deletions
This file was deleted.

0 commit comments

Comments
 (0)