From bd0f30e95e6992c3c7b5be2929d72918f3c0a714 Mon Sep 17 00:00:00 2001 From: makombe Date: Mon, 14 Oct 2024 22:30:30 +0300 Subject: [PATCH] Add validations for quantity --- src/form/add-medical-supply-order/api.ts | 18 +------ .../medical-supply-form.component.tsx | 48 +++++++------------ src/routes.json | 2 +- src/types/index.ts | 2 - 4 files changed, 19 insertions(+), 51 deletions(-) diff --git a/src/form/add-medical-supply-order/api.ts b/src/form/add-medical-supply-order/api.ts index 112dcbc..dc2cb5c 100644 --- a/src/form/add-medical-supply-order/api.ts +++ b/src/form/add-medical-supply-order/api.ts @@ -39,10 +39,8 @@ export function useOrderReasons(conceptUuids: Array) { } export interface MedicalSupplyOrderPost extends OrderPost { - scheduledDate?: Date | string; - commentToFulfiller?: string; - laterality?: string; - bodySite?: string; + quantity?: number; + quantityUnits?: string; } export function prepMedicalSupplyOrderPostData( @@ -61,12 +59,8 @@ export function prepMedicalSupplyOrderPostData( encounter: encounterUuid, concept: order.testType.conceptUuid, instructions: order.instructions, - orderReason: order.orderReason, urgency: order.urgency, }; - if (order.urgency === "ON_SCHEDULED_DATE") { - payload["scheduledDate"] = order.scheduleDate; - } return payload; } else if (order.action === "REVISE") { payload = { @@ -78,12 +72,8 @@ export function prepMedicalSupplyOrderPostData( encounter: encounterUuid, concept: order.testType.conceptUuid, instructions: order.instructions, - orderReason: order.orderReason, }; - if (order.urgency === "ON_SCHEDULED_DATE") { - payload["scheduledDate"] = order.scheduleDate; - } return payload; } else if (order.action === "DISCONTINUE") { payload = { @@ -94,11 +84,7 @@ export function prepMedicalSupplyOrderPostData( orderer: order.orderer, encounter: encounterUuid, concept: order.testType.conceptUuid, - orderReason: order.orderReason, }; - if (order.urgency === "ON_SCHEDULED_DATE") { - payload["scheduledDate"] = order.scheduleDate; - } return payload; } else { throw new Error(`Unknown order action: ${order.action}.`); diff --git a/src/form/add-medical-supply-order/medical-supply-order/medical-supply-form.component.tsx b/src/form/add-medical-supply-order/medical-supply-order/medical-supply-form.component.tsx index cf21a8c..fafa14c 100644 --- a/src/form/add-medical-supply-order/medical-supply-order/medical-supply-form.component.tsx +++ b/src/form/add-medical-supply-order/medical-supply-order/medical-supply-form.component.tsx @@ -28,7 +28,6 @@ import { type MedicalSupplyConfig } from '../../../config-schema'; import styles from './medical-supply-form.scss'; import { type MedicalSupplyOrderBasketItem } from '../../../types'; import { priorityOptions } from './medical-supply-order'; -import { useMedicalSupplyTypes } from '../../../hooks/useMedicalSupplyTypes'; import { careSettingUuid, prepMedicalSupplyOrderPostData } from '../api'; export interface MedicalSupplyOrderFormProps { @@ -54,7 +53,6 @@ export function MedicalSupplyOrderForm({ 'medicalsupply', prepMedicalSupplyOrderPostData, ); - const { medicalSupplyTypes, isLoading: isLoadingTestTypes, error: errorLoadingTestTypes } = useMedicalSupplyTypes(); const [showErrorNotification, setShowErrorNotification] = useState(false); const config = useConfig(); @@ -74,12 +72,14 @@ export function MedicalSupplyOrderForm({ ), }, ), - scheduleDate: z.union([z.string(), z.date(), z.string().optional()]), commentsToFulfiller: z.string().optional(), quantityUnits: z.string().optional(), - quantity: z.number().refine((value) => value !== null && value !== undefined && value > 0, { - message: translateFrom(moduleName, 'quantityRequired', 'Quantity is required'), - }), + quantity: z + .number({ + required_error: translateFrom(moduleName, 'quantityRequired', 'Quantity is required'), + invalid_type_error: translateFrom(moduleName, 'quantityInvalid', 'Quantity must be a number'), + }) + .min(1, { message: translateFrom(moduleName, 'quantityMin', 'Quantity must be greater than 0') }), }); const { @@ -128,19 +128,8 @@ export function MedicalSupplyOrderForm({ promptBeforeClosing(() => isDirty); }, [isDirty, promptBeforeClosing]); - const [showScheduleDate, setShowScheduleDate] = useState(false); - return ( <> - {errorLoadingTestTypes && ( - - )}
onChange(selectedItem)} + onChange={({ selectedItem }) => { + onChange(selectedItem); + }} invalid={errors.testType?.message} invalidText={errors.testType?.message} /> @@ -194,7 +178,6 @@ export function MedicalSupplyOrderForm({ onBlur={onBlur} onChange={({ selectedItem }) => { onChange(selectedItem?.value || ''); - setShowScheduleDate(selectedItem?.label === 'Scheduled'); }} invalid={errors.urgency?.message} invalidText={errors.urgency?.message} @@ -212,15 +195,18 @@ export function MedicalSupplyOrderForm({ control={control} render={({ field: { onChange, onBlur, value } }) => ( { + onChange(Number(e.target?.value)); + }} onBlur={onBlur} - min={0} - invalid={errors.quantity?.message} + min={1} + invalid={!!errors.quantity?.message} invalidText={errors.quantity?.message} /> )} @@ -267,8 +253,6 @@ export function MedicalSupplyOrderForm({ onChange={onChange} onBlur={onBlur} maxCount={500} - invalid={errors.instructions?.message} - invalidText={errors.instructions?.message} /> )} /> diff --git a/src/routes.json b/src/routes.json index 2c97f54..5809c60 100644 --- a/src/routes.json +++ b/src/routes.json @@ -9,7 +9,7 @@ "name": "medical-supply-order-panel", "component": "medicalSupplyOrderPanel", "slot": "order-basket-slot", - "order": 3 + "order": 5 } ], diff --git a/src/types/index.ts b/src/types/index.ts index 5bd4139..bc858b9 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -29,8 +29,6 @@ export interface MedicalSupplyOrderBasketItem extends OrderBasketItem { }; urgency?: string; instructions?: string; - orderReason?: string; - scheduleDate?: Date | string; quantity?: number; quantityUnits?: string; }