From 82c8a7884f35dd280163cfb3cebe2256d7c762df Mon Sep 17 00:00:00 2001 From: Frank <48450599+Fbasham@users.noreply.github.com> Date: Tue, 4 Mar 2025 07:24:03 -0500 Subject: [PATCH] update /request-details to use person-case/service functions (#321) --- .../protected/person-case/request-details.tsx | 59 +++++++++---------- 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/frontend/app/routes/protected/person-case/request-details.tsx b/frontend/app/routes/protected/person-case/request-details.tsx index 634fd824..8359f554 100644 --- a/frontend/app/routes/protected/person-case/request-details.tsx +++ b/frontend/app/routes/protected/person-case/request-details.tsx @@ -4,12 +4,19 @@ import type { RouteHandle } from 'react-router'; import { data, useFetcher } from 'react-router'; import type { SessionData } from 'express-session'; -import type { ResourceKey } from 'i18next'; import { useTranslation } from 'react-i18next'; import * as v from 'valibot'; import type { Info, Route } from './+types/request-details'; +import { + getApplicationSubmissionScenarios, + getLocalizedApplicationSubmissionScenarios, +} from '~/.server/domain/person-case/services/application-submission-scenario'; +import { + getLocalizedTypesOfApplicationToSubmit, + getTypesOfApplicationToSubmit, +} from '~/.server/domain/person-case/services/application-type-service'; import { requireAuth } from '~/.server/utils/auth-utils'; import { i18nRedirect } from '~/.server/utils/route-utils'; import { Button } from '~/components/button'; @@ -24,34 +31,18 @@ import { handle as parentHandle } from '~/routes/protected/layout'; type RequestDetailsSessionData = NonNullable; -const VALID_REQUESTS = [ - 'first-time', - 'record-confirmation', - 'name-change', - 'expiry-extension', - 'change-status', - 'sin-confirmation', - 'new-sin', -] as const; - -const VALID_SCENARIOS = [ - 'for-self', // - 'legal-guardian', - 'legal-representative', - 'as-employee', - 'estate-representative', -] as const; - export const handle = { i18nNamespace: [...parentHandle.i18nNamespace, 'protected'], } as const satisfies RouteHandle; export async function loader({ context, request }: Route.LoaderArgs) { requireAuth(context.session, new URL(request.url), ['user']); - const { t } = await getTranslation(request, handle.i18nNamespace); + const { t, lang } = await getTranslation(request, handle.i18nNamespace); return { documentTitle: t('protected:request-details.page-title'), + localizedSubmissionScenarios: getLocalizedApplicationSubmissionScenarios(lang), + localizedTypeofApplicationToSubmit: getLocalizedTypesOfApplicationToSubmit(lang), defaultFormValues: context.session.inPersonSINCase?.requestDetails, }; } @@ -80,8 +71,14 @@ export async function action({ context, request }: Route.ActionArgs) { case 'next': { const schema = v.object({ - scenario: v.picklist(VALID_SCENARIOS, t('protected:request-details.required-scenario')), - type: v.picklist(VALID_REQUESTS, t('protected:request-details.required-request')), + scenario: v.picklist( + getApplicationSubmissionScenarios().map(({ id }) => id), + t('protected:request-details.required-scenario'), + ), + type: v.picklist( + getTypesOfApplicationToSubmit().map(({ id }) => id), + t('protected:request-details.required-request'), + ), }) satisfies v.GenericSchema; const input = { @@ -115,16 +112,18 @@ export default function RequestDetails({ loaderData, actionData, params }: Route const isSubmitting = fetcher.state !== 'idle'; const errors = fetcher.data?.errors; - const scenarioOptions = VALID_SCENARIOS.map((value) => ({ - value: value, - children: t(`protected:request-details.scenarios.${value}` as ResourceKey), - defaultChecked: value === loaderData.defaultFormValues?.scenario, + const scenarioOptions = loaderData.localizedSubmissionScenarios.map(({ id, name }) => ({ + value: id, + children: name, + defaultChecked: id === loaderData.defaultFormValues?.scenario, })); - const requestOptions = ['select-option', ...VALID_REQUESTS].map((value) => ({ - value: value === 'select-option' ? '' : value, - children: t(`protected:request-details.requests.${value}` as ResourceKey), - })); + const requestOptions = [{ id: 'select-option', name: '' }, ...loaderData.localizedTypeofApplicationToSubmit].map( + ({ id, name }) => ({ + value: id === 'select-option' ? '' : id, + children: id === 'select-option' ? t('protected:contact-information.select-option') : name, + }), + ); return ( <>