import React, { useCallback } from 'react'; import { Button } from '@carbon/react'; import { useTranslation } from 'react-i18next'; import { Add } from '@carbon/react/icons'; import styles from './file.scss'; import { type Attachment, type FormFieldInputProps } from '../../../types'; import { useFormProviderContext } from '../../../provider/form-provider'; import { isViewMode } from '../../../utils/common-utils'; import FieldValueView from '../../value/view/field-value-view.component'; import FieldLabel from '../../field-label/field-label.component'; import { showModal, type UploadedFile, useLayoutType } from '@openmrs/esm-framework'; import { FileThumbnail } from './file-thumbnail.component'; import classNames from 'classnames'; const File: React.FC>> = ({ field, value, setFieldValue }) => { const { t } = useTranslation(); const { sessionMode } = useFormProviderContext(); const isTablet = useLayoutType() === 'tablet'; const showImageCaptureModal = useCallback(() => { const close = showModal('capture-photo-modal', { saveFile: (file: UploadedFile) => { if (file.capturedFromWebcam && !file.fileName.includes('.')) { file.fileName = `${file.fileName}.png`; } const currentFiles = value ? value : []; setFieldValue([...currentFiles, file]); close(); return Promise.resolve(); }, closeModal: () => { close(); }, allowedExtensions: field.questionOptions.allowedFileTypes, multipleFiles: field.questionOptions.allowMultiple, collectDescription: true, }); }, [value, field]); const handleRemoveFile = useCallback( (index: number) => { const buffer = [...value]; const attachment = buffer[index]; if (attachment.uuid) { buffer[index] = { ...attachment, voided: true, }; } else { buffer.splice(index, 1); } setFieldValue(buffer); }, [value], ); if (isViewMode(sessionMode) && !value) { return ( ); } return (
{!isViewMode(sessionMode) && (
)}
{value && value .filter((file) => !file.voided) .map((file, index) => (
handleRemoveFile(index)} />
))}
); }; export default File;