import React, { useState } from 'react'; import { z } from 'zod'; import { useForm, Controller } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { Button, ComposedModal, FilterableMultiSelect, FormGroup, InlineNotification, ModalBody, ModalFooter, ModalHeader, Stack, TextInput, } from '@carbon/react'; import { getCoreTranslation } from '@openmrs/esm-framework'; import { useTranslation } from 'react-i18next'; import { type locationData } from '../stock-items/types'; import { useLocationTags } from './stock-locations-table.resource'; import styles from './stock-locations-table.scss'; const LocationAdministrationSchema = z.object({ name: z.string().max(255), }); interface LocationAdministrationFormProps { showModal: boolean; onModalChange: (showModal: boolean) => void; handleCreateQuestion?: (formData: locationData) => void; handleDeleteBedTag?: () => void; headerTitle: string; initialData: locationData; } interface ErrorType { message: string; } const LocationAdministrationForm: React.FC = ({ showModal, onModalChange, handleCreateQuestion, headerTitle, initialData, }) => { const { t } = useTranslation(); const [showErrorNotification, setShowErrorNotification] = useState(false); const [formStateError, setFormStateError] = useState(''); // Location tag types const { locationTagList: Tags } = useLocationTags(); const { handleSubmit, control, getValues, formState: { isDirty }, } = useForm({ mode: 'all', resolver: zodResolver(LocationAdministrationSchema), defaultValues: { name: initialData.name || '', tags: initialData.tags || [], }, }); const onSubmit = (formData: locationData) => { const formDataFormSubmission = getValues(); const locationTagsUuid = formDataFormSubmission?.tags?.['selectedItems']?.map((tag) => tag.uuid) ?? []; const payload = { name: formDataFormSubmission.name, tags: locationTagsUuid, }; const result = LocationAdministrationSchema.safeParse(formData); if (result.success) { setShowErrorNotification(false); handleCreateQuestion(payload); } }; const onError = (error: { [key: string]: ErrorType }) => { setFormStateError(Object.entries(error)[0][1].message); setShowErrorNotification(true); }; return ( onModalChange(false)} preventCloseOnClickOutside size={'md'}>
( <> )} />
( { if (item && typeof item === 'object' && 'display' in item) { return (item as { display: string }).display; } return ''; }} selectionFeedback="top-after-reopen" /> )} />
{showErrorNotification && ( setShowErrorNotification(false)} /> )}
); }; export default LocationAdministrationForm;