diff --git a/frontend/cypress/e2e/main_window/reporting/create_reporting.spec.ts b/frontend/cypress/e2e/main_window/reporting/create_reporting.spec.ts
index dc1cf61c99..b9d83d9501 100644
--- a/frontend/cypress/e2e/main_window/reporting/create_reporting.spec.ts
+++ b/frontend/cypress/e2e/main_window/reporting/create_reporting.spec.ts
@@ -17,8 +17,7 @@ context('Reporting', () => {
cy.wait(1000)
// When
- cy.getDataCy('add-semaphore-source').click({ force: true })
- cy.get('div[role="option"]').contains('Sémaphore de Dieppe').click()
+ cy.fill('Nom du Sémaphore', 'Sémaphore de Dieppe')
cy.getDataCy('reporting-target-type').click({ force: true })
cy.get('div[role="option"]').contains('Personne morale').click()
@@ -73,8 +72,7 @@ context('Reporting', () => {
cy.intercept('PUT', '/bff/v1/reportings').as('createReporting')
// When
- cy.get('*[data-cy="add-semaphore-source"]').click({ force: true })
- cy.get('div[role="option"]').contains('Sémaphore de Dieppe').click()
+ cy.fill('Nom du Sémaphore', 'Sémaphore de Dieppe')
cy.get('*[data-cy="reporting-target-type"]').click({ force: true })
cy.get('div[role="option"]').contains('Personne morale').click()
@@ -111,6 +109,7 @@ context('Reporting', () => {
})
})
})
+
it('A mission can be detached from a reporting', () => {
// Given
cy.intercept('PUT', '/bff/v1/reportings/*').as('updateReporting')
@@ -143,4 +142,43 @@ context('Reporting', () => {
})
})
})
+
+ it('An attached mission can be reinitialze during reporting creation', () => {
+ // Given
+ cy.clickButton('Chercher des signalements')
+ cy.clickButton('Ajouter un signalement')
+ cy.intercept('PUT', '/bff/v1/reportings').as('createReporting')
+ cy.wait(1000)
+
+ // When
+ cy.fill('Nom du Sémaphore', 'Sémaphore de Dieppe')
+
+ cy.getDataCy('reporting-target-type').click({ force: true })
+ cy.get('div[role="option"]').contains('Personne morale').click()
+
+ cy.clickButton('Ajouter un point')
+ cy.get('#root').click(350, 690, { timeout: 10000 })
+ cy.clickButton('Valider le point')
+
+ cy.get('.rs-radio').find('label').contains('Infraction').click()
+
+ cy.fill('Saisi par', 'XYZ')
+ cy.fill('Date et heure (UTC)', [2024, 5, 26, 23, 35])
+
+ cy.clickButton('Lier à une mission existante')
+ cy.get('#root').click(582, 546)
+ cy.wait(1000)
+ cy.clickButton('Réinitialiser')
+ cy.wait(1000)
+
+ cy.clickButton('Valider le signalement')
+
+ // Then
+ cy.wait('@createReporting').then(({ response }) => {
+ expect(response && response.statusCode).equal(201)
+ const responseBody = response && response.body
+ expect(responseBody.missionId).equal(null)
+ expect(responseBody.attachedMission).equal(null)
+ })
+ })
})
diff --git a/frontend/cypress/e2e/side_window/mission_form/attach_actions_to_reportings_in_mission.spec.ts b/frontend/cypress/e2e/side_window/mission_form/attach_actions_to_reportings_in_mission.spec.ts
index 502d250ce4..2003ef82d0 100644
--- a/frontend/cypress/e2e/side_window/mission_form/attach_actions_to_reportings_in_mission.spec.ts
+++ b/frontend/cypress/e2e/side_window/mission_form/attach_actions_to_reportings_in_mission.spec.ts
@@ -1,4 +1,4 @@
-context('Mission', () => {
+context('Side Window > Mission Form > Attach action to reporting', () => {
beforeEach(() => {
cy.viewport(1280, 1024)
cy.visit(`/side_window`)
diff --git a/frontend/cypress/e2e/side_window/mission_form/close_mission_validation.spec.ts b/frontend/cypress/e2e/side_window/mission_form/close_mission_validation.spec.ts
index 1727c7940f..e8144b630b 100644
--- a/frontend/cypress/e2e/side_window/mission_form/close_mission_validation.spec.ts
+++ b/frontend/cypress/e2e/side_window/mission_form/close_mission_validation.spec.ts
@@ -1,4 +1,4 @@
-context('Mission', () => {
+context('Side Window > Mission Form > Validation on close', () => {
beforeEach(() => {
cy.viewport(1280, 1024)
cy.visit(`/side_window`)
diff --git a/frontend/cypress/e2e/side_window/mission_form/mission_actions.spec.ts b/frontend/cypress/e2e/side_window/mission_form/mission_actions.spec.ts
index 21ca31f214..2697a09a22 100644
--- a/frontend/cypress/e2e/side_window/mission_form/mission_actions.spec.ts
+++ b/frontend/cypress/e2e/side_window/mission_form/mission_actions.spec.ts
@@ -1,6 +1,6 @@
///
-context('Mission actions', () => {
+context('Side Window > Mission Form > Mission actions', () => {
beforeEach(() => {
cy.viewport(1280, 1024)
cy.visit(`/side_window`).wait(1000)
diff --git a/frontend/cypress/e2e/side_window/mission_form/mission_dates_validation.spec.ts b/frontend/cypress/e2e/side_window/mission_form/mission_dates_validation.spec.ts
index 8b27f2a758..026d92dc82 100644
--- a/frontend/cypress/e2e/side_window/mission_form/mission_dates_validation.spec.ts
+++ b/frontend/cypress/e2e/side_window/mission_form/mission_dates_validation.spec.ts
@@ -1,6 +1,6 @@
///
-context('Mission dates', () => {
+context('Side Window > Mission Form > Mission dates', () => {
beforeEach(() => {
cy.viewport(1280, 1024)
diff --git a/frontend/src/domain/use_cases/reporting/unattachMissionFromReporting.ts b/frontend/src/domain/use_cases/reporting/unattachMissionFromReporting.ts
index 6f12e25d3f..a1a1a93df4 100644
--- a/frontend/src/domain/use_cases/reporting/unattachMissionFromReporting.ts
+++ b/frontend/src/domain/use_cases/reporting/unattachMissionFromReporting.ts
@@ -2,6 +2,7 @@ import omit from 'lodash/omit'
import { reportingsAPI } from '../../../api/reportingsAPI'
import { attachMissionToReportingSliceActions } from '../../../features/Reportings/slice'
+import { isNewReporting } from '../../../features/Reportings/utils'
import { setToast, ReportingContext } from '../../shared_slices/Global'
import { reportingActions } from '../../shared_slices/reporting'
import { MapInteractionListenerEnum, updateMapInteractionListeners } from '../map/updateMapInteractionListeners'
@@ -9,10 +10,21 @@ import { MapInteractionListenerEnum, updateMapInteractionListeners } from '../ma
import type { Reporting } from '../../entities/reporting'
export const unattachMissionFromReporting =
- (values: Reporting | Partial, reportingContext: ReportingContext) => async dispatch => {
+ (values: Reporting | Partial, reportingContext: ReportingContext) => async (dispatch, getState) => {
const newOrNextReportingData = omit(values, ['attachedMission'])
const endpoint = reportingsAPI.endpoints.updateReporting
+ const { initialAttachedMission } = getState().attachMissionToReporting
+
+ const reportingIsNew = isNewReporting(values.id)
+
+ if (reportingIsNew) {
+ await dispatch(updateMapInteractionListeners(MapInteractionListenerEnum.NONE))
+ await dispatch(attachMissionToReportingSliceActions.setAttachedMission(initialAttachedMission))
+
+ return
+ }
+
try {
const response = await dispatch(endpoint.initiate(newOrNextReportingData))
if ('data' in response) {
diff --git a/frontend/src/features/Reportings/ReportingForm/AttachMission/index.tsx b/frontend/src/features/Reportings/ReportingForm/AttachMission/index.tsx
index f59041b76d..af12550612 100644
--- a/frontend/src/features/Reportings/ReportingForm/AttachMission/index.tsx
+++ b/frontend/src/features/Reportings/ReportingForm/AttachMission/index.tsx
@@ -56,7 +56,7 @@ export function AttachMission({ onAttachMission }) {
// the form listens to the redux store to update the attached mission
// because of the map interaction to attach mission
useEffect(() => {
- if (missionId && missionId !== values.missionId) {
+ if ((missionId && missionId !== values.missionId) || (!missionId && values.missionId)) {
setFieldValue('missionId', missionId)
setFieldValue('attachedMission', attachedMission)
setFieldValue('attachedToMissionAtUtc', new Date().toISOString())
diff --git a/frontend/src/features/map/draw/DrawModal.tsx b/frontend/src/features/map/draw/DrawModal.tsx
index c3bc92e1a1..df37811c3c 100644
--- a/frontend/src/features/map/draw/DrawModal.tsx
+++ b/frontend/src/features/map/draw/DrawModal.tsx
@@ -157,6 +157,9 @@ export function DrawModal() {
},
[dispatch]
)
+ if (!listener) {
+ return null
+ }
return (
(displayReportingsLayer && !hasMapListener) ||
- !!(attachedReportingsToActiveMission && attachedReportingsToActiveMission?.length > 0),
+ !!(attachedReportingsToActiveMission && attachedReportingsToActiveMission?.length > 0 && !hasMapListener),
[displayReportingsLayer, hasMapListener, attachedReportingsToActiveMission]
)