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] )