From 262eab8c5545d0cc491ddad1096cc7d055abb6a2 Mon Sep 17 00:00:00 2001 From: barshathakuri Date: Tue, 11 Mar 2025 17:52:27 +0545 Subject: [PATCH 1/4] Add Update ERU Form --- app/src/App/routes/SurgeRoutes.tsx | 3 +- .../EruReadinessForm/EruInputItem/i18n.json | 11 + .../EruReadinessForm/EruInputItem/index.tsx | 160 +++++++++ .../EruInputItem/styles.module.css | 13 + app/src/views/EruReadinessForm/i18n.json | 16 + app/src/views/EruReadinessForm/index.tsx | 315 ++++++++++++++++++ app/src/views/EruReadinessForm/schema.ts | 48 +++ .../views/EruReadinessForm/styles.module.css | 13 + .../EmergencyResponseUnit/index.tsx | 11 +- 9 files changed, 587 insertions(+), 3 deletions(-) create mode 100644 app/src/views/EruReadinessForm/EruInputItem/i18n.json create mode 100644 app/src/views/EruReadinessForm/EruInputItem/index.tsx create mode 100644 app/src/views/EruReadinessForm/EruInputItem/styles.module.css create mode 100644 app/src/views/EruReadinessForm/i18n.json create mode 100644 app/src/views/EruReadinessForm/index.tsx create mode 100644 app/src/views/EruReadinessForm/schema.ts create mode 100644 app/src/views/EruReadinessForm/styles.module.css diff --git a/app/src/App/routes/SurgeRoutes.tsx b/app/src/App/routes/SurgeRoutes.tsx index ae0cadec1..0af9f5e25 100644 --- a/app/src/App/routes/SurgeRoutes.tsx +++ b/app/src/App/routes/SurgeRoutes.tsx @@ -126,8 +126,7 @@ const updateERUReadinessForm = customWrapRoute({ parent: rootLayout, path: 'update-eru-readiness', component: { - // TODO: Add ERUReadinessUpdateForm Route - render: () => import('#views/Home'), + render: () => import('#views/EruReadinessForm'), props: {}, }, wrapperComponent: Auth, diff --git a/app/src/views/EruReadinessForm/EruInputItem/i18n.json b/app/src/views/EruReadinessForm/EruInputItem/i18n.json new file mode 100644 index 000000000..661579b87 --- /dev/null +++ b/app/src/views/EruReadinessForm/EruInputItem/i18n.json @@ -0,0 +1,11 @@ +{ + "namespace": "eruReadinessForm", + "strings": { + "eruEquipmentReadiness": "Equipment Readiness", + "eruPeopleReadiness": "People Readiness", + "eruFundingReadiness": "Funding Readiness", + "eruComments": "Comments", + "eruLead": "Confirm that you have capacity to lead this type of ERU", + "eruSupport": "Confirm that you have capacity to support this type of ERU" + } +} diff --git a/app/src/views/EruReadinessForm/EruInputItem/index.tsx b/app/src/views/EruReadinessForm/EruInputItem/index.tsx new file mode 100644 index 000000000..5c2510186 --- /dev/null +++ b/app/src/views/EruReadinessForm/EruInputItem/index.tsx @@ -0,0 +1,160 @@ +import { + Checkbox, + Container, + InputSection, + RadioInput, + TextArea, +} from '@ifrc-go/ui'; +import { useTranslation } from '@ifrc-go/ui/hooks'; +import { + isDefined, + randomString, +} from '@togglecorp/fujs'; +import { + type ArrayError, + getErrorObject, + type PartialForm, + type SetValueArg, + useFormObject, +} from '@togglecorp/toggle-form'; + +import useGlobalEnums from '#hooks/domain/useGlobalEnums'; +import { type GoApiResponse } from '#utils/restRequest'; + +import { type EruType } from '../schema'; + +import i18n from './i18n.json'; +import styles from './styles.module.css'; + +type GlobalEnumsResponse = GoApiResponse<'/api/v2/global-enums/'>; + +type ReadinessOption = NonNullable[number]; + +function readinessKeySelector(option: ReadinessOption) { + return option.key; +} + +function readinessLabelSelector(option: ReadinessOption) { + return option.value; +} + +const defaultCollectionValue: PartialForm = { + client_id: randomString(), +}; + +interface Props { + index: number; + value: PartialForm; + onChange: (value: SetValueArg>, index: number) => void; + title: Record | undefined; + error: ArrayError | undefined; +} + +function EruInputItem(props: Props) { + const { + index, + value, + onChange, + title, + error: errorFromProps, + } = props; + + const strings = useTranslation(i18n); + + const { + deployments_eru_readiness_status, + } = useGlobalEnums(); + + const onFieldChange = useFormObject( + index, + onChange, + defaultCollectionValue, + ); + const eruTypeLabel = isDefined(value.type) + ? title?.[value.type] + : undefined; + const error = (value && value.client_id && errorFromProps) + ? getErrorObject(errorFromProps?.[value.client_id]) + : undefined; + + return ( + + + + + + + + + + + +