Skip to content

Commit

Permalink
[Mission] Invalidation du cache (#998)
Browse files Browse the repository at this point in the history
- Resolve #997
  • Loading branch information
claire2212 authored Nov 20, 2023
2 parents 52b28a4 + 27ce6e4 commit d97d00c
Show file tree
Hide file tree
Showing 3 changed files with 106 additions and 88 deletions.
67 changes: 36 additions & 31 deletions frontend/src/domain/use_cases/missions/editMissionInLocalStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,44 +13,49 @@ export const editMissionInLocalStore = missionId => async (dispatch, getState) =
} = getState()

const missionToEdit = missionsAPI.endpoints.getMission
try {
const response = await dispatch(missionToEdit.initiate(missionId))
if ('data' in response) {
const missions = [...selectedMissions]
// first we want to save the active mission in multiMissions state
if (missionState) {
const selectedMissionIndex = missions.findIndex(mission => mission.mission.id === missionState.id)
const response = dispatch(missionToEdit.initiate(missionId))

response
.then(async result => {
if (result.data) {
const missions = [...selectedMissions]
// first we want to save the active mission in multiMissions state
if (missionState) {
const selectedMissionIndex = missions.findIndex(mission => mission.mission.id === missionState.id)

const missionFormatted = {
isFormDirty,
mission: missionState
}

if (selectedMissionIndex !== -1) {
missions[selectedMissionIndex] = missionFormatted
} else {
missions.push(missionFormatted)
}
}

// now we want to save in multiMissions state the mission we want to edit
const missionToSave = result.data
const newSelectedMissionIndex = missions.findIndex(mission => mission.mission.id === missionToSave?.id)
const missionFormatted = {
isFormDirty,
mission: missionState
isFormDirty: false,
mission: missionToSave
}

if (selectedMissionIndex !== -1) {
missions[selectedMissionIndex] = missionFormatted
} else {
if (newSelectedMissionIndex === -1) {
missions.push(missionFormatted)
}
}

// now we want to save in multiMissions state the mission we want to edit
const missionToSave = response.data
const newSelectedMissionIndex = missions.findIndex(mission => mission.mission.id === missionToSave?.id)
const missionFormatted = {
isFormDirty: false,
mission: missionToSave
}
await dispatch(multiMissionsActions.setSelectedMissions(missions))
await dispatch(sideWindowActions.focusAndGoTo(generatePath(sideWindowPaths.MISSION, { id: missionId })))

if (newSelectedMissionIndex === -1) {
missions.push(missionFormatted)
response.unsubscribe()
} else {
throw Error('Erreur à la création ou à la modification de la mission')
}

await dispatch(multiMissionsActions.setSelectedMissions(missions))
await dispatch(sideWindowActions.focusAndGoTo(generatePath(sideWindowPaths.MISSION, { id: missionId })))
} else {
throw Error('Erreur à la création ou à la modification de la mission')
}
} catch (error) {
dispatch(setToast({ containerId: 'sideWindow', message: error }))
}
})
.catch(error => {
dispatch(setToast({ containerId: 'sideWindow', message: error }))
})
}
50 changes: 27 additions & 23 deletions frontend/src/domain/use_cases/reporting/duplicateReporting.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,34 @@ export const duplicateReporting = (reportingId: number) => async (dispatch, getS
const { reportings } = getState().reporting

const reportingToDuplicate = reportingsAPI.endpoints.getReporting
try {
const response = await dispatch(reportingToDuplicate.initiate(reportingId))
if ('data' in response) {
const id = createIdForNewReporting(reportings)

const duplicatedReporting = {
context: ReportingContext.SIDE_WINDOW,
isFormDirty: false,
reporting: getReportingInitialValues({ ...response.data, createdAt: new Date().toISOString(), id })
}

await dispatch(reportingActions.setReporting(duplicatedReporting))
await dispatch(reportingActions.setActiveReportingId(id))
const response = dispatch(reportingToDuplicate.initiate(reportingId))
response
.then(async result => {
if (result.data) {
const id = createIdForNewReporting(reportings)

await dispatch(
setReportingFormVisibility({
const duplicatedReporting = {
context: ReportingContext.SIDE_WINDOW,
visibility: VisibilityState.VISIBLE
})
)
} else {
throw Error('Erreur à la duplication du signalement')
}
} catch (error) {
dispatch(setToast({ containerId: 'sideWindow', message: error }))
}
isFormDirty: false,
reporting: getReportingInitialValues({ ...result.data, createdAt: new Date().toISOString(), id })
}

await dispatch(reportingActions.setReporting(duplicatedReporting))
await dispatch(reportingActions.setActiveReportingId(id))

await dispatch(
setReportingFormVisibility({
context: ReportingContext.SIDE_WINDOW,
visibility: VisibilityState.VISIBLE
})
)
response.unsubscribe()
} else {
throw Error('Erreur à la duplication du signalement')
}
})
.catch(error => {
dispatch(setToast({ containerId: 'sideWindow', message: error }))
})
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,41 +5,50 @@ import { reportingActions } from '../../shared_slices/reporting'
export const editReportingInLocalStore =
(reportingId: number, reportingContext: ReportingContext) => async (dispatch, getState) => {
const reportingToEdit = reportingsAPI.endpoints.getReporting
try {
const { reportings } = getState().reporting

let newReporting

if (reportings[reportingId]) {
newReporting = {
...reportings[reportingId],
context: reportingContext
}
} else {
// if the reporting not already in reporting state
const response = await dispatch(reportingToEdit.initiate(reportingId))
if ('data' in response) {
const reportingToSave = response.data

newReporting = {
context: reportingContext,
isFormDirty: false,
reporting: reportingToSave
}
} else {
throw Error('Erreur à la récupération du signalement')
}

const { reportings } = getState().reporting

if (reportings[reportingId]) {
const newReporting = {
...reportings[reportingId],
context: reportingContext
}
await dispatch(
setReportingFormVisibility({
context: reportingContext,
visibility: VisibilityState.VISIBLE
})
)

await dispatch(reportingActions.setReporting(newReporting))
await dispatch(reportingActions.setActiveReportingId(reportingId))
} catch (error) {
dispatch(setToast({ message: error }))
setReporting(dispatch, reportingId, reportingContext, newReporting)
} else {
// if the reporting not already in reporting state
const response = dispatch(reportingToEdit.initiate(reportingId))
response
.then(result => {
if (result.data) {
const reportingToSave = result.data

const newReporting = {
context: reportingContext,
isFormDirty: false,
reporting: reportingToSave
}
response.unsubscribe()

setReporting(dispatch, reportingId, reportingContext, newReporting)
} else {
throw Error('Erreur à la récupération du signalement')
}
})
.catch(error => {
dispatch(setToast({ message: error }))
})
}
}

async function setReporting(dispatch, reportingId, reportingContext, newReporting) {
await dispatch(
setReportingFormVisibility({
context: reportingContext,
visibility: VisibilityState.VISIBLE
})
)

await dispatch(reportingActions.setReporting(newReporting))
await dispatch(reportingActions.setActiveReportingId(reportingId))
}

0 comments on commit d97d00c

Please sign in to comment.