Skip to content

Commit

Permalink
Refactor result page
Browse files Browse the repository at this point in the history
- inline ResultPage component
- extract business logic to separate files
  • Loading branch information
mpanne committed Feb 18, 2025
1 parent 78dbcbb commit cc471ea
Show file tree
Hide file tree
Showing 5 changed files with 285 additions and 279 deletions.
196 changes: 0 additions & 196 deletions packages/dito/app/routes/vorpruefung.ergebnis/ResultPage.tsx

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import { preCheck } from "resources/content";
import { type ResultContent } from "routes/vorpruefung.ergebnis/getContentForResult";
import { PreCheckResult, ResultType } from "./PreCheckResult";

const { emailTemplate } = preCheck.result.form;

function resolveRecipients(result: PreCheckResult) {
const additionalRecipient =
result.interoperability !== ResultType.NEGATIVE
? `; ${emailTemplate.toDC}`
: "";
return `${emailTemplate.toNkr}${additionalRecipient}`;
}

function buildEmailBody(
resultContent: ResultContent,
negativeReasoning?: string,
) {
let resultText: string = `${resultContent.title}\n\n\n`;

resultContent.reasoningList
.filter((reasoning) => reasoning.reasons.length !== 0)
.forEach(({ intro, reasons }) => {
resultText += `➤ ${intro} \n\n`;
reasons
.sort((reason) => (reason.answer === "yes" ? -1 : 1))
.forEach((reason) => {
resultText += reason.answer === "yes" ? "+" : "";
resultText += reason.answer === "no" ? "-" : "";
resultText += reason.answer === "unsure" ? "?" : "";
resultText += ` ${reason.text}\n`;
resultText += reason.hint ? `${reason.hint}\n` : "";
});
resultText += "\n\n";
});

resultText = resultText.replaceAll("**", "");
resultText += negativeReasoning
? `${preCheck.result.form.reasonLabel}:\n\n${negativeReasoning}\n\n`
: "";

return `${emailTemplate.bodyBefore}\n${resultText}\n\n${emailTemplate.bodyAfter}`;
}

export default function buildMailtoRedirectUri(
result: PreCheckResult,
resultContent: ResultContent,
policyTitle: string,
userEmail?: string,
negativeReasoning?: string,
) {
const subject = `${emailTemplate.subject}: „${policyTitle}“`;
const cc = userEmail ? `&cc=${userEmail}` : "";
const recipients = encodeURIComponent(resolveRecipients(result));
const body = buildEmailBody(resultContent, negativeReasoning);
return `mailto:${recipients}?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}${cc}`;
}
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ function getRelevantReasons(
});
}

export default function resolveResultContent(
export default function getContentForResult(
answers: PreCheckAnswers,
result: PreCheckResult,
): ResultContent {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { preCheck } from "resources/content";
import type { PreCheckAnswers } from "routes/vorpruefung.$questionId/route";
import { PreCheckResult, ResultType } from "./PreCheckResult";

const { questions } = preCheck;

export default function getResultForAnswers(
answers: PreCheckAnswers,
): PreCheckResult {
const digital = getResultForRelevantAnswers(answers, false);
const interoperability =
digital === ResultType.POSITIVE
? getResultForRelevantAnswers(answers, true)
: ResultType.NEGATIVE;
return { digital, interoperability };
}

function getResultForRelevantAnswers(
answers: PreCheckAnswers,
interoperability: boolean,
) {
const relevantAnswers = questions
.filter((question) => !!question.interoperability === interoperability)
.map((question) => answers[question.id]);
if (relevantAnswers.includes("yes")) {
return ResultType.POSITIVE;
}
if (relevantAnswers.includes("unsure")) {
return ResultType.UNSURE;
}
return ResultType.NEGATIVE;
}
Loading

0 comments on commit cc471ea

Please sign in to comment.