diff --git a/app/src/App/routes/SurgeRoutes.tsx b/app/src/App/routes/SurgeRoutes.tsx index ae0cadec1..543a38b75 100644 --- a/app/src/App/routes/SurgeRoutes.tsx +++ b/app/src/App/routes/SurgeRoutes.tsx @@ -122,12 +122,11 @@ const emergencyResponseUnit = customWrapRoute({ }, }); -const updateERUReadinessForm = customWrapRoute({ +const eruReadinessForm = customWrapRoute({ parent: rootLayout, - path: 'update-eru-readiness', + path: 'eru-readiness', component: { - // TODO: Add ERUReadinessUpdateForm Route - render: () => import('#views/Home'), + render: () => import('#views/EruReadinessForm'), props: {}, }, wrapperComponent: Auth, @@ -1631,5 +1630,5 @@ export default { activeSurgeDeployments, rapidResponsePersonnel, emergencyResponseUnit, - updateERUReadinessForm, + eruReadinessForm, }; 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..ce2eea385 --- /dev/null +++ b/app/src/views/EruReadinessForm/EruInputItem/index.tsx @@ -0,0 +1,160 @@ +import { useMemo } from 'react'; +import { + Checkbox, + InputSection, + RadioInput, + TextArea, +} from '@ifrc-go/ui'; +import { useTranslation } from '@ifrc-go/ui/hooks'; +import { randomString } from '@togglecorp/fujs'; +import { + type ArrayError, + getErrorObject, + type SetValueArg, + useFormObject, +} from '@togglecorp/toggle-form'; + +import useGlobalEnums from '#hooks/domain/useGlobalEnums'; +import { type GoApiResponse } from '#utils/restRequest'; + +import { type PartialEruItem } 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: PartialEruItem = { + client_id: randomString(), +}; + +interface Props { + index: number; + value: PartialEruItem; + onChange: (value: SetValueArg, index: number) => void; + error: ArrayError | undefined; +} + +function EruInputItem(props: Props) { + const { + index, + value, + onChange, + error: errorFromProps, + } = props; + + const strings = useTranslation(i18n); + + const { + deployments_eru_type: eruTypeOptions, + deployments_eru_readiness_status, + } = useGlobalEnums(); + + const onFieldChange = useFormObject( + index, + onChange, + defaultCollectionValue, + ); + + const error = (value && value.client_id && errorFromProps) + ? getErrorObject(errorFromProps?.[value.client_id]) + : undefined; + + const title = useMemo(() => ( + eruTypeOptions?.find((eruType) => eruType.key === value.type)?.value + ), [eruTypeOptions, value.type]); + + return ( + + + + + + + + + + + +