Skip to content

Commit 8d4158b

Browse files
committed
Revert "feat(pageData): Add subflowDoneStates to evaluate in guards (#3099)"
This reverts commit 659e46f.
1 parent a9d76d7 commit 8d4158b

File tree

11 files changed

+48
-126
lines changed

11 files changed

+48
-126
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { beratungshilfePersoenlicheDatenDone } from "~/domains/beratungshilfe/formular/persoenlicheDaten/doneFunctions";
2+
import type { BeratungshilfeFormularUserData } from "~/domains/beratungshilfe/formular/userData";
3+
import type { Guards } from "../../../guards.server";
4+
import { anwaltlicheVertretungDone } from "../anwaltlicheVertretung/guards";
5+
import { grundvoraussetzungDone } from "../grundvoraussetzung/grundvoraussetzungDone";
6+
import { rechtsproblemDone } from "../rechtsproblem/rechtsproblemDone";
7+
import { beratungshilfeFinanzielleAngabeDone } from "../finanzielleAngaben/doneFunctions";
8+
9+
export const beratungshilfeAbgabeGuards = {
10+
readyForAbgabe: ({ context }) =>
11+
grundvoraussetzungDone({ context }) &&
12+
anwaltlicheVertretungDone({ context }) &&
13+
rechtsproblemDone({ context }) &&
14+
beratungshilfeFinanzielleAngabeDone({ context }) &&
15+
beratungshilfePersoenlicheDatenDone({ context }),
16+
abgabeOnline: ({ context }) => context.abgabeArt == "online",
17+
abgabeAusdrucken: ({ context }) => context.abgabeArt == "ausdrucken",
18+
} satisfies Guards<BeratungshilfeFormularUserData>;

app/domains/beratungshilfe/formular/abgabe/xstateConfig.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { xStateTargetsFromPagesConfig } from "~/domains/pageSchemas";
22
import type { Config } from "~/services/flow/server/types";
33
import { isFeatureFlagEnabled } from "~/services/isFeatureFlagEnabled.server";
4+
import { beratungshilfeAbgabeGuards } from "./guards";
45
import { berHAntragAbgabePages } from "./pages";
5-
import { type BeratungshilfeFormularUserData } from "~/domains/beratungshilfe/formular/userData";
6+
import { type BeratungshilfeAbgabeUserData } from "./userData";
67

78
const steps = xStateTargetsFromPagesConfig(berHAntragAbgabePages);
89
const showFileUpload = await isFeatureFlagEnabled("showFileUpload");
@@ -24,9 +25,7 @@ export const abgabeXstateConfig = {
2425
on: { BACK: "#weitere-angaben" },
2526
meta: { triggerValidation: true },
2627
always: {
27-
guard: ({ context }): boolean =>
28-
!!context.pageData?.subflowDoneStates &&
29-
Object.values(context.pageData.subflowDoneStates).every(Boolean),
28+
guard: beratungshilfeAbgabeGuards.readyForAbgabe,
3029
target: showAutoSummary
3130
? steps.zusammenfassung.relative
3231
: steps.art.relative,
@@ -46,17 +45,17 @@ export const abgabeXstateConfig = {
4645
on: {
4746
BACK: showAutoSummary
4847
? steps.zusammenfassung.relative
49-
: "#weitere-angaben",
48+
: steps.art.relative,
5049
SUBMIT: [
5150
{
5251
target: showFileUpload
5352
? steps.dokumente.relative
5453
: steps.online.relative,
55-
guard: ({ context }) => context.abgabeArt == "online",
54+
guard: beratungshilfeAbgabeGuards.abgabeOnline,
5655
},
5756
{
5857
target: steps.ausdrucken.relative,
59-
guard: ({ context }) => context.abgabeArt == "ausdrucken",
58+
guard: beratungshilfeAbgabeGuards.abgabeAusdrucken,
6059
},
6160
],
6261
},
@@ -86,4 +85,4 @@ export const abgabeXstateConfig = {
8685
},
8786
},
8887
},
89-
} satisfies Config<BeratungshilfeFormularUserData>;
88+
} satisfies Config<BeratungshilfeAbgabeUserData>;

app/domains/beratungshilfe/formular/userData.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { type BeratungshilfeFinanzielleAngabenUserData } from "./finanzielleAnga
55
import { type BeratungshilfeGrundvoraussetzungenUserData } from "./grundvoraussetzung/userData";
66
import { type BeratungshilfeRechtsproblemUserData } from "./rechtsproblem/userData";
77
import { type BeratungshilfeWeitereAngabenUserData } from "./weitereAngaben/userData";
8-
import type { PageData } from "~/services/flow/pageDataSchema";
98

109
export type BeratungshilfeFormularUserData =
1110
BeratungshilfeGrundvoraussetzungenUserData &
@@ -15,5 +14,7 @@ export type BeratungshilfeFormularUserData =
1514
BeratungshilfePersoenlicheDatenUserData &
1615
BeratungshilfeWeitereAngabenUserData &
1716
BeratungshilfeAbgabeUserData & {
18-
pageData?: PageData;
17+
pageData?: {
18+
arrayIndexes: number[];
19+
};
1920
};

app/domains/shared/formular/stringReplacements.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import { type BeratungshilfeFormularUserData } from "~/domains/beratungshilfe/formular/userData";
22
import type { ProzesskostenhilfeFormularUserData } from "../../prozesskostenhilfe/formular/userData";
3-
import { firstArrayIndex } from "~/services/flow/pageDataSchema";
43

54
export const getKinderStrings = (
65
context: BeratungshilfeFormularUserData | ProzesskostenhilfeFormularUserData,
76
) => {
8-
const arrayIndex = firstArrayIndex(context.pageData);
7+
const arrayIndex = context.pageData?.arrayIndexes.at(0);
98
if (
109
arrayIndex === undefined ||
1110
!context.kinder ||
@@ -22,7 +21,7 @@ export const getKinderStrings = (
2221
export const getArrayIndexStrings = (
2322
context: BeratungshilfeFormularUserData | ProzesskostenhilfeFormularUserData,
2423
) => {
25-
const arrayIndex = firstArrayIndex(context.pageData);
24+
const arrayIndex = context.pageData?.arrayIndexes.at(0);
2625
return arrayIndex === undefined
2726
? {}
2827
: { "array#index": String(arrayIndex + 1) };

app/routes/shared/__test__/formular.test.ts

Lines changed: 10 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import {
1616
isResponse,
1717
} from "~/routes/__test__/isResponse";
1818
import invariant from "tiny-invariant";
19-
import { fluggastrechtFlow } from "~/domains/fluggastrechte/formular";
2019

2120
vi.mock("~/services/security/csrf/validatedSession.server", () => ({
2221
validatedSession: vi.fn(),
@@ -26,6 +25,7 @@ vi.mock("~/services/logging", () => ({
2625
logWarning: vi.fn(),
2726
}));
2827

28+
vi.mock("~/services/flow/server/buildFlowController");
2929
vi.mock("~/services/upload/fileUploadHelpers.server");
3030
vi.mock("~/services/session.server");
3131
vi.mock("~/services/flow/userFlowAction/validateFormUserData");
@@ -146,30 +146,7 @@ describe("formular.server", () => {
146146
expect(response.data.repopulateFields).toEqual({ name: "" });
147147
});
148148

149-
it("should save both valid userdata and pageData including subflowDoneStates", async () => {
150-
const subflowDoneStates = Object.fromEntries(
151-
Object.keys(fluggastrechtFlow.config.states).map(
152-
(subflowName, idx) => ["/" + subflowName, idx !== 1], // only second entry /grundvoraussetzungen isnt done
153-
),
154-
);
155-
156-
const userData = { name: "Valid Name" };
157-
const expectedPageData = { subflowDoneStates };
158-
159-
vi.mocked(validateFormUserData).mockResolvedValue(
160-
Result.ok({ userData, migrationData: undefined }),
161-
);
162-
163-
await action(mockRouteArgsFromRequest(mockDefaultRequest));
164-
165-
expect(updateSession).toHaveBeenCalledTimes(1);
166-
expect(updateSession).toHaveBeenCalledWith(
167-
expect.anything(),
168-
expect.objectContaining({ ...userData, pageData: expectedPageData }),
169-
);
170-
});
171-
172-
it("should update session with migration data when form validation succeeds", async () => {
149+
it("should update session twice when form validation succeeds with migration data", async () => {
173150
vi.mocked(validateFormUserData).mockResolvedValue(
174151
Result.ok({
175152
userData: { name: "Valid Name" },
@@ -179,13 +156,14 @@ describe("formular.server", () => {
179156

180157
await action(mockRouteArgsFromRequest(mockDefaultRequest));
181158

182-
expect(updateSession).toHaveBeenCalledTimes(1);
183-
expect(updateSession).toHaveBeenCalledWith(
184-
expect.anything(),
185-
expect.objectContaining({
186-
name: "Migration Name",
187-
}),
188-
);
159+
expect(updateSession).toHaveBeenCalledTimes(2);
160+
expect(updateSession).toHaveBeenCalledWith(expect.anything(), {
161+
name: "Valid Name",
162+
});
163+
164+
expect(updateSession).toHaveBeenCalledWith(expect.anything(), {
165+
name: "Migration Name",
166+
});
189167
});
190168

191169
it("should call postValidationFormUserData once when form validation succeeds", async () => {

app/routes/shared/formular.ts

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { parseFormData } from "@remix-run/form-data-parser";
22
import { validationError } from "@rvf/react-router";
33
import type { ActionFunctionArgs, LoaderFunctionArgs } from "react-router";
44
import { data, redirectDocument } from "react-router";
5+
import { parsePathname } from "~/domains/flowIds";
56
import { retrieveContentData } from "~/services/flow/formular/contentData/retrieveContentData";
67
import { setUserVisitedValidationPage } from "~/services/flow/formular/contentData/setUserVisitedValidationPage";
78
import { isFileUploadOrDeleteAction } from "~/services/flow/formular/fileUpload/isFileUploadOrDeleteAction";
@@ -14,7 +15,6 @@ import { validatedSession } from "~/services/security/csrf/validatedSession.serv
1415
import { getSessionManager, updateSession } from "~/services/session.server";
1516
import { updateMainSession } from "~/services/session.server/updateSessionInHeader";
1617
import type { SummaryItem } from "~/services/summary/types";
17-
import merge from "lodash/merge";
1818
import {
1919
deleteUserFile,
2020
uploadUserFile,
@@ -25,9 +25,6 @@ import { shouldShowReportProblem } from "../../components/reportProblem/showRepo
2525
import { generateSummaryFromUserData } from "~/services/summary/autoGenerateSummary";
2626
import { isFeatureFlagEnabled } from "~/services/isFeatureFlagEnabled.server";
2727
import { pruneIrrelevantData } from "~/services/flow/pruner/pruner";
28-
import { buildFlowController } from "~/services/flow/server/buildFlowController";
29-
import { getPageAndFlowDataFromPathname } from "~/services/flow/getPageAndFlowDataFromPathname";
30-
import { stepStatesToSubflowDoneStates } from "~/services/navigation/stepStatesToSubflowDoneStates";
3128

3229
export const loader = async ({ params, request }: LoaderFunctionArgs) => {
3330
const resultUserAndFlow = await getUserDataAndFlow(request);
@@ -127,7 +124,7 @@ export const action = async ({ request }: ActionFunctionArgs) => {
127124
}
128125

129126
const { pathname } = new URL(request.url);
130-
const { flowId, currentFlow } = getPageAndFlowDataFromPathname(pathname);
127+
const { flowId } = parsePathname(pathname);
131128
const { getSession, commitSession } = getSessionManager(flowId);
132129
const cookieHeader = request.headers.get("Cookie");
133130
const flowSession = await getSession(cookieHeader);
@@ -182,25 +179,13 @@ export const action = async ({ request }: ActionFunctionArgs) => {
182179
);
183180
}
184181

185-
const updatedUserData = merge(
186-
{},
187-
flowSession.data,
188-
resultFormUserData.value.userData,
189-
resultFormUserData.value.migrationData,
190-
);
182+
updateSession(flowSession, resultFormUserData.value.userData);
191183

192-
const subflowDoneStates = stepStatesToSubflowDoneStates(
193-
buildFlowController({
194-
config: currentFlow.config,
195-
data: updatedUserData,
196-
guards: "guards" in currentFlow ? currentFlow.guards : {},
197-
}).stepStates(),
198-
);
184+
if (resultFormUserData.value.migrationData) {
185+
updateSession(flowSession, resultFormUserData.value.migrationData);
186+
}
199187

200-
const pageData = { pageData: { subflowDoneStates } };
201-
const userDataToSave = merge({}, updatedUserData, pageData);
202-
updateSession(flowSession, userDataToSave);
203-
const { prunedData } = pruneIrrelevantData(userDataToSave, flowId);
188+
const { prunedData } = pruneIrrelevantData(flowSession.data, flowId);
204189

205190
await postValidationFlowAction(request, prunedData);
206191

app/services/flow/pageDataSchema.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { z } from "zod";
22

33
export const pageDataSchema = z.object({
44
arrayIndexes: z.array(z.number()),
5-
subflowDoneStates: z.record(z.string(), z.boolean()).optional(),
65
});
76

87
export type PageData = z.infer<typeof pageDataSchema>;

app/services/flow/pruner/__test__/pruner.test.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,6 @@ describe("pruner", () => {
121121
eigentuemer: "partner",
122122
},
123123
],
124-
pageData: { arrayIndexes: [1] },
125124
});
126125
});
127126
});

app/services/flow/pruner/pruner.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,7 @@ export function pruneIrrelevantData(data: UserData, flowId: FlowId) {
2626

2727
const validFlowPaths = getValidFlowPaths(formFields, formPaths);
2828

29-
return {
30-
prunedData: pick(data, validFormFields, "pageData"),
31-
validFlowPaths,
32-
};
29+
return { prunedData: pick(data, validFormFields), validFlowPaths };
3330
}
3431

3532
export function filterFormFields(

app/services/navigation/__test__/stepStatesToSubflowDoneStates.test.ts

Lines changed: 0 additions & 47 deletions
This file was deleted.

0 commit comments

Comments
 (0)