Skip to content

Commit

Permalink
extract methods
Browse files Browse the repository at this point in the history
  • Loading branch information
maximeperrault committed Oct 18, 2024
1 parent a8745dd commit 7faaf5a
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 74 deletions.
25 changes: 2 additions & 23 deletions frontend/src/features/Dashboard/useCases/createDashboard.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
import { ampsAPI } from '@api/ampsAPI'
import { dashboardsAPI } from '@api/dashboardsAPI'
import { regulatoryLayersAPI } from '@api/regulatoryLayersAPI'
import { reportingsAPI } from '@api/reportingsAPI'
import { vigilanceAreasAPI } from '@api/vigilanceAreasAPI'
import { sideWindowActions } from '@features/SideWindow/slice'
import { addSideWindowBanner } from '@features/SideWindow/useCases/addSideWindowBanner'
import { customDayjs, Level } from '@mtes-mct/monitor-ui'
import { sideWindowPaths } from 'domain/entities/sideWindow'
import { generatePath } from 'react-router'

import { dashboardActions } from '../slice'
import { populateExtractAreaFromApi } from '../utils'
import { closeDrawDashboard } from './closeDrawDashboard'

import type { Dashboard } from '../types'
import type { HomeAppThunk } from '@store/index'
import type { GeoJSON } from 'domain/types/GeoJSON'

Expand All @@ -38,24 +34,7 @@ export const createDashboard =
reportings: [],
vigilanceAreas: []
}
const { data: regulatoryLayers } = await dispatch(regulatoryLayersAPI.endpoints.getRegulatoryLayers.initiate())
const { data: ampLayers } = await dispatch(ampsAPI.endpoints.getAMPs.initiate())
const { data: vigilanceAreas } = await dispatch(vigilanceAreasAPI.endpoints.getVigilanceAreas.initiate())
const { data: reportings } = await dispatch(
reportingsAPI.endpoints.getReportingsByIds.initiate(data.reportings)
)
const extractedArea: Dashboard.ExtractedArea = {
...data,
amps: Object.values(ampLayers?.entities ?? []).filter(amp => data.amps.includes(amp.id)),
regulatoryAreas: Object.values(regulatoryLayers?.entities ?? []).filter(reg =>
data.regulatoryAreas.includes(reg.id)
),
reportings: Object.values(reportings?.entities ?? []),

vigilanceAreas: Object.values(vigilanceAreas?.entities ?? []).filter(vigilanceArea =>
data.vigilanceAreas.includes(vigilanceArea.id)
)
}
const extractedArea = await populateExtractAreaFromApi(dispatch, data)
dispatch(dashboardActions.createDashboard({ dashboard, defaultName: newDashboardName, extractedArea }))
dispatch(sideWindowActions.focusAndGoTo(generatePath(sideWindowPaths.DASHBOARD, { id: newId })))
}
Expand Down
30 changes: 7 additions & 23 deletions frontend/src/features/Dashboard/useCases/editDashboard.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,13 @@
import { ampsAPI } from '@api/ampsAPI'
import { dashboardsAPI } from '@api/dashboardsAPI'
import { regulatoryLayersAPI } from '@api/regulatoryLayersAPI'
import { reportingsAPI } from '@api/reportingsAPI'
import { vigilanceAreasAPI } from '@api/vigilanceAreasAPI'
import { sideWindowActions } from '@features/SideWindow/slice'
import { addSideWindowBanner } from '@features/SideWindow/useCases/addSideWindowBanner'
import { Level } from '@mtes-mct/monitor-ui'
import { sideWindowPaths } from 'domain/entities/sideWindow'
import { generatePath } from 'react-router'

import { dashboardActions, initialDashboard } from '../slice'
import { updateDashboardDatas } from '../utils'
import { getFilteredDashboardAndExtractedArea } from '../utils'

import type { Dashboard } from '../types'
import type { HomeAppThunk } from '@store/index'

export const editDashboard =
Expand All @@ -37,23 +32,12 @@ export const editDashboard =
throw Error()
}

const filteredDashboard = updateDashboardDatas(dashboard, data)

const { data: regulatoryLayers } = await dispatch(regulatoryLayersAPI.endpoints.getRegulatoryLayers.initiate())
const { data: ampLayers } = await dispatch(ampsAPI.endpoints.getAMPs.initiate())
const { data: vigilanceAreas } = await dispatch(vigilanceAreasAPI.endpoints.getVigilanceAreas.initiate())
const { data: reportings } = await dispatch(reportingsAPI.endpoints.getReportingsByIds.initiate(data.reportings))
const extractedArea: Dashboard.ExtractedArea = {
...data,
amps: Object.values(ampLayers?.entities ?? []).filter(amp => data.amps.includes(amp.id)),
regulatoryAreas: Object.values(regulatoryLayers?.entities ?? []).filter(reg =>
data.regulatoryAreas.includes(reg.id)
),
reportings: Object.values(reportings?.entities ?? []),
vigilanceAreas: Object.values(vigilanceAreas?.entities ?? []).filter(vigilanceArea =>
data.vigilanceAreas.includes(vigilanceArea.id)
)
}
const { extractedArea, filteredDashboard } = await getFilteredDashboardAndExtractedArea(
dashboard,
dashboard.geom,
data,
dispatch
)

const formattedDashboard = {
...initialDashboard,
Expand Down
33 changes: 6 additions & 27 deletions frontend/src/features/Dashboard/useCases/editDashboardArea.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
import { ampsAPI } from '@api/ampsAPI'
import { dashboardsAPI } from '@api/dashboardsAPI'
import { regulatoryLayersAPI } from '@api/regulatoryLayersAPI'
import { reportingsAPI } from '@api/reportingsAPI'
import { vigilanceAreasAPI } from '@api/vigilanceAreasAPI'
import { addMainWindowBanner } from '@features/MainWindow/useCases/addMainWindowBanner'
import { Level } from '@mtes-mct/monitor-ui'

import { dashboardActions } from '../slice'
import { updateDashboardDatas } from '../utils'
import { getFilteredDashboardAndExtractedArea as getEditedDashboardAndExtractedArea } from '../utils'

import type { Dashboard } from '../types'
import type { HomeAppThunk } from '@store/index'
import type { GeoJSON } from 'domain/types/GeoJSON'

Expand All @@ -23,28 +18,12 @@ export const editDashboardArea =
if (data) {
const dashboard = getState().dashboard.dashboards[dashboardKey]?.dashboard
if (dashboard) {
const filteredDashboard = {
...updateDashboardDatas(dashboard, data),
geom: geometry
}

const { data: regulatoryLayers } = await dispatch(regulatoryLayersAPI.endpoints.getRegulatoryLayers.initiate())
const { data: ampLayers } = await dispatch(ampsAPI.endpoints.getAMPs.initiate())
const { data: vigilanceAreas } = await dispatch(vigilanceAreasAPI.endpoints.getVigilanceAreas.initiate())
const { data: reportings } = await dispatch(
reportingsAPI.endpoints.getReportingsByIds.initiate(data.reportings)
const { extractedArea, filteredDashboard } = await getEditedDashboardAndExtractedArea(
dashboard,
geometry,
data,
dispatch
)
const extractedArea: Dashboard.ExtractedArea = {
...data,
amps: Object.values(ampLayers?.entities ?? []).filter(amp => data.amps.includes(amp.id)),
regulatoryAreas: Object.values(regulatoryLayers?.entities ?? []).filter(reg =>
data.regulatoryAreas.includes(reg.id)
),
reportings: Object.values(reportings?.entities ?? []),
vigilanceAreas: Object.values(vigilanceAreas?.entities ?? []).filter(vigilanceArea =>
data.vigilanceAreas.includes(vigilanceArea.id)
)
}

dispatch(dashboardActions.updateArea({ dashboardKey, extractedArea, filteredDashboard }))
}
Expand Down
52 changes: 51 additions & 1 deletion frontend/src/features/Dashboard/utils.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,38 @@
import { ampsAPI } from '@api/ampsAPI'
import { regulatoryLayersAPI } from '@api/regulatoryLayersAPI'
import { reportingsAPI } from '@api/reportingsAPI'
import { vigilanceAreasAPI } from '@api/vigilanceAreasAPI'
import { isCypress } from '@utils/isCypress'
import { intersection } from 'lodash'

import type { Dashboard } from './types'
import type { HomeRootState } from '@store/index'
import type { GeoJSON } from 'domain/types/GeoJSON'
import type { Action } from 'redux'
import type { ThunkDispatch } from 'redux-thunk'

export const isDashboardEnabled = () =>
isCypress()
? window.Cypress.env('CYPRESS_FRONTEND_DASHBOARD_ENABLED') === 'true'
: import.meta.env.FRONTEND_DASHBOARD_ENABLED === 'true'

export const updateDashboardDatas = (
export const getFilteredDashboardAndExtractedArea = async (
dashboardFromApi: Dashboard.Dashboard,
geometry: GeoJSON.Geometry,
extractedAreaFromApi: Dashboard.ExtractedAreaFromApi,
dispatch: ThunkDispatch<HomeRootState, void, Action>
) => {
const filteredDashboard = {
...updateDashboardDatas(dashboardFromApi, extractedAreaFromApi),
geom: geometry
}

const extractedArea: Dashboard.ExtractedArea = await populateExtractAreaFromApi(dispatch, extractedAreaFromApi)

return { extractedArea, filteredDashboard }
}

const updateDashboardDatas = (
dashboard: Dashboard.Dashboard,
extractedData: Dashboard.ExtractedAreaFromApi
): Dashboard.Dashboard => ({
Expand All @@ -19,3 +43,29 @@ export const updateDashboardDatas = (
reportings: intersection(dashboard.reportings, extractedData.reportings),
vigilanceAreas: intersection(dashboard.vigilanceAreas, extractedData.vigilanceAreas)
})

export async function populateExtractAreaFromApi(
dispatch: ThunkDispatch<HomeRootState, void, Action>,
extractedAreaFromApi: Dashboard.ExtractedAreaFromApi
) {
const { data: regulatoryLayers } = await dispatch(regulatoryLayersAPI.endpoints.getRegulatoryLayers.initiate())
const { data: ampLayers } = await dispatch(ampsAPI.endpoints.getAMPs.initiate())
const { data: vigilanceAreas } = await dispatch(vigilanceAreasAPI.endpoints.getVigilanceAreas.initiate())
const { data: reportings } = await dispatch(
reportingsAPI.endpoints.getReportingsByIds.initiate(extractedAreaFromApi.reportings)
)

const extractedArea: Dashboard.ExtractedArea = {
...extractedAreaFromApi,
amps: Object.values(ampLayers?.entities ?? []).filter(amp => extractedAreaFromApi.amps.includes(amp.id)),
regulatoryAreas: Object.values(regulatoryLayers?.entities ?? []).filter(reg =>
extractedAreaFromApi.regulatoryAreas.includes(reg.id)
),
reportings: Object.values(reportings?.entities ?? []),
vigilanceAreas: Object.values(vigilanceAreas?.entities ?? []).filter(vigilanceArea =>
extractedAreaFromApi.vigilanceAreas.includes(vigilanceArea.id)
)
}

return extractedArea
}

0 comments on commit 7faaf5a

Please sign in to comment.