Skip to content

Commit

Permalink
feat(web): display previously entered data in photovoltaic project de…
Browse files Browse the repository at this point in the history
…contamination forms
  • Loading branch information
stephane-ruhlmann committed Jan 14, 2025
1 parent 76c6ec6 commit d8ef8b3
Show file tree
Hide file tree
Showing 9 changed files with 46 additions and 22 deletions.
1 change: 1 addition & 0 deletions apps/web/src/features/create-project/core/project.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ export type ReconversionProjectCreationData = {
futureSiteOwner: ProjectStakeholder;
reinstatementContractOwner?: ProjectStakeholder;
decontaminatedSurfaceArea?: number;
decontaminationPlan?: "none" | "partial" | "unknown";
// soils transformation
baseSoilsDistributionForTransformation: SoilsDistribution;
soilsDistribution: SoilsDistribution;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,9 +117,9 @@ export const completeProjectPhaseStep = createAction<{ phase: RenewableEnergyPro
export const completeSoilsDecontaminationIntroduction = createAction(
"completeSoilsDecontaminationIntroduction",
);
export const completeSoilsDecontaminationSelection = createAction<
"partial" | "none" | "unknown" | null
>("completeSoilsDecontaminationSelection");
export const completeSoilsDecontaminationSelection = createAction<"partial" | "none" | "unknown">(
"completeSoilsDecontaminationSelection",
);
export const completeSoilsDecontaminationSurfaceArea = createAction<number>(
"completeSoilsDecontaminationSurfaceArea",
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -193,13 +193,13 @@ const addCompleteStepActionCases = (builder: ActionReducerMapBuilder<ProjectCrea
});

builder.addCase(completeSoilsDecontaminationSelection, (state, action) => {
state.renewableEnergyProject.creationData.decontaminationPlan = action.payload;
switch (action.payload) {
case "none":
state.renewableEnergyProject.creationData.decontaminatedSurfaceArea = 0;
state.renewableEnergyProject.stepsHistory.push("SOILS_TRANSFORMATION_INTRODUCTION");
break;
case "unknown":
case null: {
case "unknown": {
const contaminatedSoilSurface = state.siteData?.contaminatedSoilSurface ?? 0;
state.renewableEnergyProject.creationData.decontaminatedSurfaceArea =
contaminatedSoilSurface * 0.25;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@ import { ProjectSchedule, ProjectScheduleBuilder, SoilsDistribution } from "shar

import { RootState } from "@/app/application/store";
import { RenewableEnergyDevelopmentPlanType } from "@/shared/domain/reconversionProject";
import { computePercentage } from "@/shared/services/percentage/percentage";

import { ProjectCreationState } from "../../createProject.reducer";
import { selectDefaultSchedule } from "../../createProject.selectors";
import { selectDefaultSchedule, selectSiteData } from "../../createProject.selectors";
import { generateRenewableEnergyProjectName } from "../../projectName";
import {
computeDefaultPhotovoltaicOtherAmountExpenses,
Expand Down Expand Up @@ -46,6 +47,17 @@ export const selectProjectSoilsDistribution = createSelector(
(state): SoilsDistribution => state.creationData.soilsDistribution ?? {},
);

export const selectContaminatedSurfaceAreaPercentageToDecontaminate = createSelector(
[selectCreationData, selectSiteData],
(creationData, siteData) => {
const surfaceToDecontaminate = creationData.decontaminatedSurfaceArea;
const contaminatedSurfaceArea = siteData?.contaminatedSoilSurface;
if (!contaminatedSurfaceArea || !surfaceToDecontaminate) return 0;

return computePercentage(surfaceToDecontaminate, contaminatedSurfaceArea);
},
);

export const getDefaultValuesForYearlyProjectedExpenses = createSelector(
selectCreationData,
(creationData): { rent: number; maintenance: number; taxes: number } | undefined => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ describe("Urban project custom creation : soils decontamination", () => {
expectUpdatedState(initialRootState, newState, {
currentStep: "SOILS_DECONTAMINATION_SURFACE_AREA",
creationDataDiff: {
decontaminationNeeded: "partial",
decontaminationPlan: "partial",
},
});
});
Expand All @@ -69,7 +69,7 @@ describe("Urban project custom creation : soils decontamination", () => {
expectUpdatedState(initialRootState, newState, {
currentStep: "BUILDINGS_INTRODUCTION",
creationDataDiff: {
decontaminationNeeded: "none",
decontaminationPlan: "none",
decontaminatedSurfaceArea: 0,
},
});
Expand All @@ -92,7 +92,7 @@ describe("Urban project custom creation : soils decontamination", () => {
expectUpdatedState(initialRootState, newState, {
currentStep: "BUILDINGS_INTRODUCTION",
creationDataDiff: {
decontaminationNeeded: "unknown",
decontaminationPlan: "unknown",
decontaminatedSurfaceArea: 250,
},
});
Expand All @@ -110,7 +110,7 @@ describe("Urban project custom creation : soils decontamination", () => {
expectUpdatedState(initialRootState, newState, {
currentStep: "STAKEHOLDERS_INTRODUCTION",
creationDataDiff: {
decontaminationNeeded: "none",
decontaminationPlan: "none",
decontaminatedSurfaceArea: 0,
},
});
Expand All @@ -130,7 +130,7 @@ describe("Urban project custom creation : soils decontamination", () => {
expectUpdatedState(initialRootState, newState, {
currentStep: "STAKEHOLDERS_INTRODUCTION",
creationDataDiff: {
decontaminationNeeded: "unknown",
decontaminationPlan: "unknown",
decontaminatedSurfaceArea: 250,
},
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ export type UrbanProjectState = {
greenSpacesDistribution?: Partial<Record<UrbanGreenSpace, number>>;
livingAndActivitySpacesDistribution?: Partial<Record<UrbanLivingAndActivitySpace, number>>;
publicSpacesDistribution?: Partial<Record<UrbanPublicSpace, number>>;
decontaminationNeeded?: "partial" | "none" | "unknown";
decontaminationPlan?: "partial" | "none" | "unknown";
decontaminatedSurfaceArea?: number;
// buildings
buildingsFloorSurfaceArea?: number;
Expand Down Expand Up @@ -402,7 +402,7 @@ const urbanProjectReducer = createReducer({} as ProjectCreationState, (builder)
? "BUILDINGS_INTRODUCTION"
: "STAKEHOLDERS_INTRODUCTION";

state.urbanProject.creationData.decontaminationNeeded = action.payload;
state.urbanProject.creationData.decontaminationPlan = action.payload;
switch (action.payload) {
case "partial":
state.urbanProject.stepsHistory.push("SOILS_DECONTAMINATION_SURFACE_AREA");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,26 @@ import {
completeSoilsDecontaminationSelection,
revertSoilsDecontaminationSelectionStep,
} from "@/features/create-project/core/renewable-energy/actions/renewableEnergy.actions";
import { useAppDispatch } from "@/shared/views/hooks/store.hooks";
import { useAppDispatch, useAppSelector } from "@/shared/views/hooks/store.hooks";

import SoilsDecontaminationSelection, {
FormValues,
} from "../../../common-views/soils-decontamination/selection/SoilsDecontaminationSelection";

function SoilsDecontaminationSelectionContainer() {
const dispatch = useAppDispatch();

const onSubmit = (data: FormValues) => {
dispatch(completeSoilsDecontaminationSelection(data.decontaminationSelection));
};
const decontaminationPlan = useAppSelector(
(state) => state.projectCreation.renewableEnergyProject.creationData.decontaminationPlan,
);

return (
<SoilsDecontaminationSelection
onSubmit={onSubmit}
initialValues={{
decontaminationSelection: decontaminationPlan ?? null,
}}
onSubmit={(data: FormValues) => {
dispatch(completeSoilsDecontaminationSelection(data.decontaminationSelection ?? "unknown"));
}}
onBack={() => dispatch(revertSoilsDecontaminationSelectionStep())}
/>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,27 @@ import {
completeSoilsDecontaminationSurfaceArea,
revertSoilsDecontaminationSurfaceAreaStep,
} from "@/features/create-project/core/renewable-energy/actions/renewableEnergy.actions";
import { selectContaminatedSurfaceAreaPercentageToDecontaminate } from "@/features/create-project/core/renewable-energy/selectors/renewableEnergy.selector";
import { useAppDispatch, useAppSelector } from "@/shared/views/hooks/store.hooks";

import SoilsDecontaminationSurfaceArea from "../../../common-views/soils-decontamination/surface-area/SoilsDecontaminationSurfaceArea";

function SoilsDecontaminationSurfaceAreaContainer() {
const dispatch = useAppDispatch();
const contaminatedSurfaceArea = useAppSelector(selectSiteContaminatedSurfaceArea);
const surfaceAreaToDecontaminateInPercentage = useAppSelector(
selectContaminatedSurfaceAreaPercentageToDecontaminate,
);

const onSubmit = (surfaceArea: number) => {
dispatch(completeSoilsDecontaminationSurfaceArea(surfaceArea));
};

return (
<SoilsDecontaminationSurfaceArea
initialValues={{
percentSurfaceArea: surfaceAreaToDecontaminateInPercentage,
}}
contaminatedSoilSurface={contaminatedSurfaceArea}
onSubmit={onSubmit}
onBack={() => dispatch(revertSoilsDecontaminationSurfaceAreaStep())}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ import SoilsDecontaminationSelection, {
import { useAppDispatch, useAppSelector } from "@/shared/views/hooks/store.hooks";

function SoilsDecontaminationSelectionContainer() {
const decontaminationNeeded = useAppSelector(
(state) => state.projectCreation.urbanProject.creationData.decontaminationNeeded,
const decontaminationPlan = useAppSelector(
(state) => state.projectCreation.urbanProject.creationData.decontaminationPlan,
);
const dispatch = useAppDispatch();

return (
<SoilsDecontaminationSelection
initialValues={{
decontaminationSelection: decontaminationNeeded ?? null,
decontaminationSelection: decontaminationPlan ?? null,
}}
onSubmit={(data: FormValues) => {
dispatch(
Expand Down

0 comments on commit d8ef8b3

Please sign in to comment.