From 00cefbda37e0de323943ec9169748161c90f3bbe Mon Sep 17 00:00:00 2001
From: vijay
Date: Tue, 30 Jan 2024 00:08:09 +0530
Subject: [PATCH 1/8] (fix) 03-2658 Attachment description fixed When Viewing
Images
---
.../src/attachments/attachment-thumbnail.component.tsx | 4 +---
.../src/attachments/attachments-grid-overview.component.tsx | 2 --
.../src/attachments/image-preview.component.tsx | 5 ++---
3 files changed, 3 insertions(+), 8 deletions(-)
diff --git a/packages/esm-patient-attachments-app/src/attachments/attachment-thumbnail.component.tsx b/packages/esm-patient-attachments-app/src/attachments/attachment-thumbnail.component.tsx
index 6efaf8d5c0..49ffe11dbe 100644
--- a/packages/esm-patient-attachments-app/src/attachments/attachment-thumbnail.component.tsx
+++ b/packages/esm-patient-attachments-app/src/attachments/attachment-thumbnail.component.tsx
@@ -13,7 +13,7 @@ export default function AttachmentThumbnail(props: AttachmentThumbnailProps) {
function ImageThumbnail(props: ImageProps) {
return (
-
![{props.title}]({props.src})
+
);
}
@@ -39,7 +39,6 @@ function Thumbnail(props: AttachmentThumbnailProps) {
const imageProps = {
src: props.imageProps.src,
- title: props.imageProps.title,
style: props.imageProps.style,
onClick: props.imageProps?.onClick,
};
@@ -60,7 +59,6 @@ type AttachmentThumbnailProps = {
type ImageProps = {
src: string;
- title: string;
style: Object;
onClick?: () => void;
};
diff --git a/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.component.tsx b/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.component.tsx
index 681289b640..a14bb94626 100644
--- a/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.component.tsx
+++ b/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.component.tsx
@@ -33,7 +33,6 @@ const AttachmentsGridOverview: React.FC = ({
{attachments.map((attachment, indx) => {
const imageProps = {
src: attachment.src,
- title: attachment.title,
style: {},
onClick: () => {
openAttachment(attachment);
@@ -48,7 +47,6 @@ const AttachmentsGridOverview: React.FC = ({
return (
-
{attachment.title}
{attachment.dateTime}
);
diff --git a/packages/esm-patient-attachments-app/src/attachments/image-preview.component.tsx b/packages/esm-patient-attachments-app/src/attachments/image-preview.component.tsx
index 6298ec07a3..d68c25d28a 100644
--- a/packages/esm-patient-attachments-app/src/attachments/image-preview.component.tsx
+++ b/packages/esm-patient-attachments-app/src/attachments/image-preview.component.tsx
@@ -67,9 +67,8 @@ const AttachmentPreview: React.FC = ({
-
{attachmentToPreview.title}
- {attachmentToPreview?.description ? (
-
{attachmentToPreview.description}
+ {attachmentToPreview?.title ? (
+
{attachmentToPreview.title}
) : null}
From 7a94e973a28bb293150ac6dce9c77895ba5ba8d5 Mon Sep 17 00:00:00 2001
From: vijay
Date: Tue, 30 Jan 2024 10:58:22 +0530
Subject: [PATCH 2/8] fixed the changes
---
.../src/attachments/attachment-thumbnail.component.tsx | 4 +++-
.../src/attachments/attachments-grid-overview.component.tsx | 2 ++
packages/esm-patient-attachments-app/src/root.scss | 3 ++-
3 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/packages/esm-patient-attachments-app/src/attachments/attachment-thumbnail.component.tsx b/packages/esm-patient-attachments-app/src/attachments/attachment-thumbnail.component.tsx
index 49ffe11dbe..6efaf8d5c0 100644
--- a/packages/esm-patient-attachments-app/src/attachments/attachment-thumbnail.component.tsx
+++ b/packages/esm-patient-attachments-app/src/attachments/attachment-thumbnail.component.tsx
@@ -13,7 +13,7 @@ export default function AttachmentThumbnail(props: AttachmentThumbnailProps) {
function ImageThumbnail(props: ImageProps) {
return (
-
![]({props.src})
+
);
}
@@ -39,6 +39,7 @@ function Thumbnail(props: AttachmentThumbnailProps) {
const imageProps = {
src: props.imageProps.src,
+ title: props.imageProps.title,
style: props.imageProps.style,
onClick: props.imageProps?.onClick,
};
@@ -59,6 +60,7 @@ type AttachmentThumbnailProps = {
type ImageProps = {
src: string;
+ title: string;
style: Object;
onClick?: () => void;
};
diff --git a/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.component.tsx b/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.component.tsx
index a14bb94626..681289b640 100644
--- a/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.component.tsx
+++ b/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.component.tsx
@@ -33,6 +33,7 @@ const AttachmentsGridOverview: React.FC = ({
{attachments.map((attachment, indx) => {
const imageProps = {
src: attachment.src,
+ title: attachment.title,
style: {},
onClick: () => {
openAttachment(attachment);
@@ -47,6 +48,7 @@ const AttachmentsGridOverview: React.FC = ({
return (
+
{attachment.title}
{attachment.dateTime}
);
diff --git a/packages/esm-patient-attachments-app/src/root.scss b/packages/esm-patient-attachments-app/src/root.scss
index c8e6835bda..fa23940123 100644
--- a/packages/esm-patient-attachments-app/src/root.scss
+++ b/packages/esm-patient-attachments-app/src/root.scss
@@ -15,7 +15,8 @@
}
.muted {
- color: $text-02;
+ color: $color-gray-70;
+ @include type.type-style("label-01");
}
.bodyShort01 {
From 9e3fb4c1780b6f93f0f291c68c15a22ed1f3ad07 Mon Sep 17 00:00:00 2001
From: Dennis Kigen
Date: Tue, 30 Jan 2024 14:27:30 +0300
Subject: [PATCH 3/8] Minor fixup
---
.../attachments-grid-overview.component.tsx | 4 ++--
.../src/attachments/attachments-grid-overview.scss | 12 ++++++++++++
packages/esm-patient-attachments-app/src/root.scss | 5 -----
3 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.component.tsx b/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.component.tsx
index 681289b640..6483ea320c 100644
--- a/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.component.tsx
+++ b/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.component.tsx
@@ -48,8 +48,8 @@ const AttachmentsGridOverview: React.FC = ({
return (
-
{attachment.title}
-
{attachment.dateTime}
+
{attachment.title}
+
{attachment.dateTime}
);
})}
diff --git a/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.scss b/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.scss
index 6b47777a30..7c5fde8ccb 100644
--- a/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.scss
+++ b/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.scss
@@ -1,5 +1,6 @@
@use '@carbon/styles/scss/spacing';
@use '~@carbon/styles/scss/colors';
+@use '@carbon/styles/scss/type';
@import '../root.scss';
.galleryContainer {
@@ -18,3 +19,14 @@
object-fit: cover;
}
+.muted {
+ color: $color-gray-70;
+ @include type.type-style("label-01");
+ margin: 0.25rem;
+}
+
+.title {
+ @extend .bodyLong01;
+ color: colors.$gray-100;
+ margin: 0.25rem;
+}
diff --git a/packages/esm-patient-attachments-app/src/root.scss b/packages/esm-patient-attachments-app/src/root.scss
index fa23940123..7d7fdf6a29 100644
--- a/packages/esm-patient-attachments-app/src/root.scss
+++ b/packages/esm-patient-attachments-app/src/root.scss
@@ -14,11 +14,6 @@
@include type.type-style("body-long-01");
}
-.muted {
- color: $color-gray-70;
- @include type.type-style("label-01");
-}
-
.bodyShort01 {
@include type.type-style("body-compact-01");
}
From 7d6fed6fd5d58b6cdfaa5b02fbda8659c1aabd4c Mon Sep 17 00:00:00 2001
From: Dennis Kigen
Date: Fri, 2 Feb 2024 23:35:07 +0300
Subject: [PATCH 4/8] Show attachment description as well as fix up some more
things
---
.../attachments-grid-overview.component.tsx | 5 +-
.../attachments-grid-overview.scss | 7 +-
.../attachments-overview.component.tsx | 36 ++--
.../attachments/attachments-overview.test.tsx | 40 ++++
.../attachments-table-overview.component.tsx | 4 +-
.../attachments/image-preview.component.tsx | 11 +-
.../src/attachments/image-preview.scss | 7 +
.../file-review.component.tsx | 92 ++++-----
.../media-uploader.component.tsx | 2 +-
.../esm-patient-attachments-app/src/utils.ts | 6 +-
yarn.lock | 180 +++++++++---------
11 files changed, 221 insertions(+), 169 deletions(-)
create mode 100644 packages/esm-patient-attachments-app/src/attachments/attachments-overview.test.tsx
diff --git a/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.component.tsx b/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.component.tsx
index 6483ea320c..d29f4eb5fe 100644
--- a/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.component.tsx
+++ b/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.component.tsx
@@ -1,5 +1,4 @@
import React from 'react';
-import classNames from 'classnames';
import { SkeletonPlaceholder } from '@carbon/react';
import { type Attachment } from '@openmrs/esm-framework';
import AttachmentThumbnail from './attachment-thumbnail.component';
@@ -33,7 +32,7 @@ const AttachmentsGridOverview: React.FC = ({
{attachments.map((attachment, indx) => {
const imageProps = {
src: attachment.src,
- title: attachment.title,
+ title: attachment.filename,
style: {},
onClick: () => {
openAttachment(attachment);
@@ -48,7 +47,7 @@ const AttachmentsGridOverview: React.FC = ({
return (
-
{attachment.title}
+
{attachment.filename}
{attachment.dateTime}
);
diff --git a/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.scss b/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.scss
index 7c5fde8ccb..3a9ea1b77f 100644
--- a/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.scss
+++ b/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.scss
@@ -4,11 +4,12 @@
@import '../root.scss';
.galleryContainer {
- display: grid;
- grid-template-columns: 1fr 1fr 1fr 1fr;
align-items: center;
+ display: grid;
+ grid-template-columns:
+ repeat(3, 1fr);
grid-gap: spacing.$spacing-05;
- padding: 0 spacing.$spacing-05 spacing.$spacing-05 spacing.$spacing-05;
+ padding: spacing.$spacing-05;
}
.attachmentThumbnailSkeleton {
diff --git a/packages/esm-patient-attachments-app/src/attachments/attachments-overview.component.tsx b/packages/esm-patient-attachments-app/src/attachments/attachments-overview.component.tsx
index 3896ded276..5660256421 100644
--- a/packages/esm-patient-attachments-app/src/attachments/attachments-overview.component.tsx
+++ b/packages/esm-patient-attachments-app/src/attachments/attachments-overview.component.tsx
@@ -1,25 +1,25 @@
import React, { useState, useEffect, useCallback, useMemo } from 'react';
import { useTranslation } from 'react-i18next';
-import { Button, ContentSwitcher, Loading, Switch } from '@carbon/react';
-import { List, Thumbnail_2, Add } from '@carbon/react/icons';
+import { Button, ContentSwitcher, DataTableSkeleton, Loading, Switch } from '@carbon/react';
+import { Add, List, Thumbnail_2 } from '@carbon/react/icons';
import {
- type UploadedFile,
- type Attachment,
+ createAttachment,
+ deleteAttachmentPermanently,
showModal,
showSnackbar,
+ useAttachments,
useLayoutType,
UserHasAccess,
- createAttachment,
- deleteAttachmentPermanently,
- useAttachments,
+ type Attachment,
+ type UploadedFile,
} from '@openmrs/esm-framework';
import { CardHeader, EmptyState } from '@openmrs/esm-patient-common-lib';
import { createGalleryEntry } from '../utils';
+import { useAllowedExtensions } from './use-allowed-extensions';
import AttachmentsGridOverview from './attachments-grid-overview.component';
import AttachmentsTableOverview from './attachments-table-overview.component';
import AttachmentPreview from './image-preview.component';
import styles from './attachments-overview.scss';
-import { useAllowedExtensions } from './use-allowed-extensions';
const AttachmentsOverview: React.FC<{ patientUuid: string }> = ({ patientUuid }) => {
const { t } = useTranslation();
@@ -45,7 +45,7 @@ const AttachmentsOverview: React.FC<{ patientUuid: string }> = ({ patientUuid })
}
}, [error, t]);
- const showCam = useCallback(() => {
+ const showAttachmentModal = useCallback(() => {
const close = showModal('capture-photo-modal', {
saveFile: (file: UploadedFile) => createAttachment(patientUuid, file),
allowedExtensions: allowedExtensions,
@@ -67,15 +67,15 @@ const AttachmentsOverview: React.FC<{ patientUuid: string }> = ({ patientUuid })
showSnackbar({
title: t('fileDeleted', 'File deleted'),
- subtitle: `${attachment.title} ${t('successfullyDeleted', 'successfully deleted')}`,
+ subtitle: `${attachment.filename} ${t('successfullyDeleted', 'successfully deleted')}`,
kind: 'success',
isLowContrast: true,
});
})
- .catch((error) => {
+ .catch(() => {
showSnackbar({
title: t('error', 'Error'),
- subtitle: `${attachment.title} ${t('failedDeleting', "couldn't be deleted")}`,
+ subtitle: `${attachment.filename} ${t('failedDeleting', "couldn't be deleted")}`,
kind: 'error',
});
});
@@ -104,26 +104,30 @@ const AttachmentsOverview: React.FC<{ patientUuid: string }> = ({ patientUuid })
} else {
const anchor = document.createElement('a');
anchor.setAttribute('href', attachment.src);
- anchor.setAttribute('download', attachment.title);
+ anchor.setAttribute('download', attachment.filename);
anchor.click();
}
},
[setAttachmentToPreview],
);
+ if (isLoading) {
+ return ;
+ }
+
if (!attachments.length) {
return (
);
}
return (
-
+
{isValidating && }
@@ -137,7 +141,7 @@ const AttachmentsOverview: React.FC<{ patientUuid: string }> = ({ patientUuid })
-
diff --git a/packages/esm-patient-attachments-app/src/attachments/attachments-overview.test.tsx b/packages/esm-patient-attachments-app/src/attachments/attachments-overview.test.tsx
new file mode 100644
index 0000000000..bad7f90db0
--- /dev/null
+++ b/packages/esm-patient-attachments-app/src/attachments/attachments-overview.test.tsx
@@ -0,0 +1,40 @@
+import React from 'react';
+import { render, screen } from '@testing-library/react';
+import AttachmentsOverview from './attachments-overview.component';
+import { useAttachments } from '@openmrs/esm-framework';
+
+const mockedUseAttachments = jest.mocked(useAttachments);
+
+it('renders a loading skeleton when attachments are loading', () => {
+ mockedUseAttachments.mockReturnValue({
+ data: [],
+ error: null,
+ isLoading: true,
+ isValidating: false,
+ mutate: jest.fn(),
+ });
+
+ renderAttachmentsOverview();
+
+ expect(screen.getByRole('progressbar')).toBeInTheDocument();
+ expect(screen.queryByRole('table')).not.toBeInTheDocument();
+});
+
+it('renders an empty state if attachments are not available', () => {
+ mockedUseAttachments.mockReturnValue({
+ data: [],
+ error: null,
+ isLoading: false,
+ isValidating: false,
+ mutate: jest.fn(),
+ });
+
+ renderAttachmentsOverview();
+
+ expect(screen.getByText(/There are no attachments to display for this patient/i)).toBeInTheDocument();
+ expect(screen.getByRole('button', { name: /record attachments/i })).toBeInTheDocument();
+});
+
+function renderAttachmentsOverview() {
+ render(
);
+}
diff --git a/packages/esm-patient-attachments-app/src/attachments/attachments-table-overview.component.tsx b/packages/esm-patient-attachments-app/src/attachments/attachments-table-overview.component.tsx
index c6e4d17b36..b700b159b9 100644
--- a/packages/esm-patient-attachments-app/src/attachments/attachments-table-overview.component.tsx
+++ b/packages/esm-patient-attachments-app/src/attachments/attachments-table-overview.component.tsx
@@ -17,8 +17,8 @@ import { useTranslation } from 'react-i18next';
import styles from './attachments-table-overview.scss';
interface AttachmentsTableOverviewProps {
- isLoading: boolean;
attachments: Array
;
+ isLoading: boolean;
deleteAttachment: (attachment: Attachment) => void;
openAttachment: (attachment: Attachment) => void;
}
@@ -40,7 +40,7 @@ const AttachmentsTableOverview: React.FC = ({
id: attachment.id,
fileName: (
openAttachment(attachment)}>
- {attachment.title}
+ {attachment.filename}
),
type: attachment.bytesContentFamily,
diff --git a/packages/esm-patient-attachments-app/src/attachments/image-preview.component.tsx b/packages/esm-patient-attachments-app/src/attachments/image-preview.component.tsx
index d68c25d28a..ea24abbbd2 100644
--- a/packages/esm-patient-attachments-app/src/attachments/image-preview.component.tsx
+++ b/packages/esm-patient-attachments-app/src/attachments/image-preview.component.tsx
@@ -7,14 +7,14 @@ import { type Attachment, useLayoutType } from '@openmrs/esm-framework';
import styles from './image-preview.scss';
interface AttachmentPreviewProps {
- closePreview: any;
attachmentToPreview: Attachment;
+ closePreview: () => void;
deleteAttachment: (attachment: Attachment) => void;
}
const AttachmentPreview: React.FC = ({
- closePreview,
attachmentToPreview,
+ closePreview,
deleteAttachment,
}) => {
const { t } = useTranslation();
@@ -49,7 +49,7 @@ const AttachmentPreview: React.FC = ({
/>
{attachmentToPreview.bytesContentFamily === 'IMAGE' ? (
-
![{attachmentToPreview.title}]({attachmentToPreview.src})
+
![{attachmentToPreview.filename}]({attachmentToPreview.src})
) : attachmentToPreview.bytesContentFamily === 'PDF' ? (
) : null}
@@ -67,8 +67,9 @@ const AttachmentPreview: React.FC
= ({
- {attachmentToPreview?.title ? (
-
{attachmentToPreview.title}
+
{attachmentToPreview.filename}
+ {attachmentToPreview?.description ? (
+
{attachmentToPreview.description}
) : null}
diff --git a/packages/esm-patient-attachments-app/src/attachments/image-preview.scss b/packages/esm-patient-attachments-app/src/attachments/image-preview.scss
index 3ee22d6e12..71d6d20870 100644
--- a/packages/esm-patient-attachments-app/src/attachments/image-preview.scss
+++ b/packages/esm-patient-attachments-app/src/attachments/image-preview.scss
@@ -67,3 +67,10 @@
.menuItem {
max-width: none;
}
+
+.title {
+ @extend .productiveHeading02;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+}
diff --git a/packages/esm-patient-attachments-app/src/camera-media-uploader/file-review.component.tsx b/packages/esm-patient-attachments-app/src/camera-media-uploader/file-review.component.tsx
index 16b2b1d27d..a2f61b400b 100644
--- a/packages/esm-patient-attachments-app/src/camera-media-uploader/file-review.component.tsx
+++ b/packages/esm-patient-attachments-app/src/camera-media-uploader/file-review.component.tsx
@@ -1,20 +1,28 @@
import React, { type SyntheticEvent, useCallback, useEffect, useState, useContext } from 'react';
import { useTranslation } from 'react-i18next';
-import { Button, TextArea, TextInput, ModalHeader, ModalBody, ModalFooter } from '@carbon/react';
+import { Button, Form, ModalBody, ModalFooter, ModalHeader, Stack, TextArea, TextInput } from '@carbon/react';
+import { DocumentPdf, DocumentUnknown } from '@carbon/react/icons';
import { type UploadedFile, UserHasAccess } from '@openmrs/esm-framework';
-import styles from './file-review.scss';
import CameraMediaUploaderContext from './camera-media-uploader-context.resources';
-import { DocumentPdf, DocumentUnknown } from '@carbon/react/icons';
+import styles from './file-review.scss';
export interface FileReviewContainerProps {
onCompletion: () => void;
}
+interface FilePreviewProps {
+ uploadedFile: UploadedFile;
+ collectDescription?: boolean;
+ onSaveFile: (dataUri: UploadedFile) => void;
+ clearData?(): void;
+ moveToNextFile: () => void;
+}
+
const FileReviewContainer: React.FC = ({ onCompletion }) => {
- const { filesToUpload, clearData, setFilesToUpload, closeModal, collectDescription } =
- useContext(CameraMediaUploaderContext);
const { t } = useTranslation();
const [currentFile, setCurrentFile] = useState(1);
+ const { filesToUpload, clearData, setFilesToUpload, closeModal, collectDescription } =
+ useContext(CameraMediaUploaderContext);
const moveToNextFile = useCallback(() => {
if (currentFile < filesToUpload.length) {
@@ -26,9 +34,7 @@ const FileReviewContainer: React.FC = ({ onCompletion
const handleSave = useCallback(
(updatedFile: UploadedFile) => {
- setFilesToUpload((filesToUpload) =>
- filesToUpload.map((file, indx) => (indx === currentFile - 1 ? updatedFile : file)),
- );
+ setFilesToUpload((filesToUpload) => filesToUpload.map((file, i) => (i === currentFile - 1 ? updatedFile : file)));
moveToNextFile();
},
[moveToNextFile, setFilesToUpload, currentFile],
@@ -51,18 +57,10 @@ const FileReviewContainer: React.FC = ({ onCompletion
);
};
-interface FilePreviewProps {
- uploadedFile: UploadedFile;
- collectDescription?: boolean;
- onSaveFile: (dataUri: UploadedFile) => void;
- clearData?(): void;
- moveToNextFile: () => void;
-}
-
const FilePreview: React.FC = ({ uploadedFile, collectDescription, onSaveFile, clearData }) => {
+ const { t } = useTranslation();
const [fileName, setFileName] = useState('');
const [fileDescription, setFileDescription] = useState('');
- const { t } = useTranslation();
const [emptyName, setEmptyName] = useState(false);
useEffect(() => {
@@ -112,7 +110,7 @@ const FilePreview: React.FC = ({ uploadedFile, collectDescript
);
return (
-
-
+
);
};
diff --git a/packages/esm-patient-attachments-app/src/camera-media-uploader/media-uploader.component.tsx b/packages/esm-patient-attachments-app/src/camera-media-uploader/media-uploader.component.tsx
index 2f0a78c6c4..512a3cac58 100644
--- a/packages/esm-patient-attachments-app/src/camera-media-uploader/media-uploader.component.tsx
+++ b/packages/esm-patient-attachments-app/src/camera-media-uploader/media-uploader.component.tsx
@@ -7,9 +7,9 @@ import CameraMediaUploaderContext from './camera-media-uploader-context.resource
import styles from './media-uploader.scss';
const MediaUploaderComponent = () => {
- const { setFilesToUpload, allowedExtensions, multipleFiles } = useContext(CameraMediaUploaderContext);
const { t } = useTranslation();
const { fileSize } = useConfig();
+ const { setFilesToUpload, allowedExtensions, multipleFiles } = useContext(CameraMediaUploaderContext);
const upload = useCallback(
(files: Array) => {
diff --git a/packages/esm-patient-attachments-app/src/utils.ts b/packages/esm-patient-attachments-app/src/utils.ts
index d9e9f0a70f..9352ea3e0e 100644
--- a/packages/esm-patient-attachments-app/src/utils.ts
+++ b/packages/esm-patient-attachments-app/src/utils.ts
@@ -1,4 +1,4 @@
-import { type AttachmentResponse, type Attachment, attachmentUrl, formatDate } from '@openmrs/esm-framework';
+import { type Attachment, type AttachmentResponse, attachmentUrl, formatDate } from '@openmrs/esm-framework';
export function readFileAsString(file: File) {
return new Promise((resolve) => {
@@ -28,8 +28,8 @@ export function createGalleryEntry(data: AttachmentResponse): Attachment {
return {
id: data.uuid,
src: `${window.openmrsBase}${attachmentUrl}/${data.uuid}/bytes`,
- title: data.comment,
- description: '',
+ filename: data.filename,
+ description: data.comment,
dateTime: formatDate(new Date(data.dateTime), {
mode: 'wide',
}),
diff --git a/yarn.lock b/yarn.lock
index 4832f40161..07f9a688ed 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4388,9 +4388,9 @@ __metadata:
languageName: node
linkType: hard
-"@openmrs/esm-api@npm:5.3.3-pre.1404":
- version: 5.3.3-pre.1404
- resolution: "@openmrs/esm-api@npm:5.3.3-pre.1404"
+"@openmrs/esm-api@npm:5.3.3-pre.1477":
+ version: 5.3.3-pre.1477
+ resolution: "@openmrs/esm-api@npm:5.3.3-pre.1477"
dependencies:
"@types/fhir": 0.0.31
lodash-es: ^4.17.21
@@ -4399,17 +4399,17 @@ __metadata:
"@openmrs/esm-error-handling": 5.x
"@openmrs/esm-navigation": 5.x
"@openmrs/esm-offline": 5.x
- checksum: 875b3b199565cc44474190be1a10563956cd6e855594f9615ab1ba5b72ca0ab451129d87b1994ef293705cd3619d5264cdece57dc18a7363b4694305d5aaa3e6
+ checksum: 825c3f856e953ca977eaafe1b1ef62fc739eb567ba92e217f17c1a76b3ca2c46e8d79be54fdf018d7115c8fef9db238f1cb4a87da46792a815536e625f17fc0c
languageName: node
linkType: hard
-"@openmrs/esm-app-shell@npm:5.3.3-pre.1404":
- version: 5.3.3-pre.1404
- resolution: "@openmrs/esm-app-shell@npm:5.3.3-pre.1404"
+"@openmrs/esm-app-shell@npm:5.3.3-pre.1477":
+ version: 5.3.3-pre.1477
+ resolution: "@openmrs/esm-app-shell@npm:5.3.3-pre.1477"
dependencies:
"@carbon/react": ~1.37.0
- "@openmrs/esm-framework": 5.3.3-pre.1404
- "@openmrs/esm-styleguide": 5.3.3-pre.1404
+ "@openmrs/esm-framework": 5.3.3-pre.1477
+ "@openmrs/esm-styleguide": 5.3.3-pre.1477
dayjs: ^1.10.4
dexie: ^3.0.3
html-webpack-plugin: ^5.5.0
@@ -4434,44 +4434,44 @@ __metadata:
workbox-strategies: ^6.1.5
workbox-webpack-plugin: ^6.1.5
workbox-window: ^6.1.5
- checksum: 03669949fab620a034e9835764e44afb395dbc3feb310cad336a11743a64b91676d8d40816edbbddab85aaee3689796a6d55c3620f14b2e9b852774712e0d44f
+ checksum: e4e4d4fef178c5f5e22fdcbc1074c622054b26cc9dca72952ebc3c8317569fe9f8de065b4c6bda353f723b581676e7de538ce0e3dd43b2ff982ee862f598a5ed
languageName: node
linkType: hard
-"@openmrs/esm-config@npm:5.3.3-pre.1404":
- version: 5.3.3-pre.1404
- resolution: "@openmrs/esm-config@npm:5.3.3-pre.1404"
+"@openmrs/esm-config@npm:5.3.3-pre.1477":
+ version: 5.3.3-pre.1477
+ resolution: "@openmrs/esm-config@npm:5.3.3-pre.1477"
dependencies:
ramda: ^0.26.1
peerDependencies:
"@openmrs/esm-globals": 5.x
"@openmrs/esm-state": 5.x
single-spa: 5.x
- checksum: 93a61dc50091f19f8a92dd2575950364b0d58dca7c4d88dabaf11e39bee6bd0d008173cdf1cd60d9e622b639717b99791b8fa8a47395cc924b784c5b8d03ca75
+ checksum: ffa9ccd19decacbde26350b2f62868dc4b37ff2e7146264bb43e4b83842a4e967036a506e60ef6dbd2d3d3a45d347f0784a57fb70e4f643d3a7ef4a231855d95
languageName: node
linkType: hard
-"@openmrs/esm-dynamic-loading@npm:5.3.3-pre.1404":
- version: 5.3.3-pre.1404
- resolution: "@openmrs/esm-dynamic-loading@npm:5.3.3-pre.1404"
+"@openmrs/esm-dynamic-loading@npm:5.3.3-pre.1477":
+ version: 5.3.3-pre.1477
+ resolution: "@openmrs/esm-dynamic-loading@npm:5.3.3-pre.1477"
peerDependencies:
"@openmrs/esm-globals": 5.x
- checksum: 932af656d8c6d70a1731ef23f08446e2747b89d41e82ebfa1f2d88e227b083e578dd7eb096ecbad0cfb5b877e087287589f060c5a7794f71ae048614d6145e37
+ checksum: 0c0e0729124ea802df6e9af0d505949f2551ff1bfbdbfa9e6d89a3ea6a04881dcba8f59618b303a28fa4316f713e91935c904b2f7c4a948931e2bba65f1809a9
languageName: node
linkType: hard
-"@openmrs/esm-error-handling@npm:5.3.3-pre.1404":
- version: 5.3.3-pre.1404
- resolution: "@openmrs/esm-error-handling@npm:5.3.3-pre.1404"
+"@openmrs/esm-error-handling@npm:5.3.3-pre.1477":
+ version: 5.3.3-pre.1477
+ resolution: "@openmrs/esm-error-handling@npm:5.3.3-pre.1477"
peerDependencies:
"@openmrs/esm-globals": 5.x
- checksum: 7045047385a3486c89579f5fcb747df86f7185b30cedddd7eeb73fd110ad3d3e330dac11ba2af0dfff45e26f4392d679e1e1f335c72d09c7b0f6ff16a4e23d7d
+ checksum: 0e6f9f54984ae1b60b9a18680c23b3fa29d0cf1a9f257be8794e476f7d6124e8a70e1c246ff16ae5815715153577dd7cca70fa63c6fd801d59855fa90213d5e6
languageName: node
linkType: hard
-"@openmrs/esm-extensions@npm:5.3.3-pre.1404":
- version: 5.3.3-pre.1404
- resolution: "@openmrs/esm-extensions@npm:5.3.3-pre.1404"
+"@openmrs/esm-extensions@npm:5.3.3-pre.1477":
+ version: 5.3.3-pre.1477
+ resolution: "@openmrs/esm-extensions@npm:5.3.3-pre.1477"
dependencies:
lodash-es: ^4.17.21
peerDependencies:
@@ -4480,20 +4480,20 @@ __metadata:
"@openmrs/esm-feature-flags": 5.x
"@openmrs/esm-state": 5.x
single-spa: 5.x
- checksum: a1a6264a70aa18ee1603005d295cb773e3cd2d8488721018ab5e859231fb2e668a2ea7b240bb10e8d759411431dea080dca5602948361aca8685ef554c059759
+ checksum: 6d6781e5c003f03562dff2657e1fe50e4d1296ace1e4e1892fca5c94b9c20e5c416fcb74c743a6fe4763e6e9ed5880443aec8603d8d3c3bd0b726a07da4b3b20
languageName: node
linkType: hard
-"@openmrs/esm-feature-flags@npm:5.3.3-pre.1404":
- version: 5.3.3-pre.1404
- resolution: "@openmrs/esm-feature-flags@npm:5.3.3-pre.1404"
+"@openmrs/esm-feature-flags@npm:5.3.3-pre.1477":
+ version: 5.3.3-pre.1477
+ resolution: "@openmrs/esm-feature-flags@npm:5.3.3-pre.1477"
dependencies:
ramda: ^0.26.1
peerDependencies:
"@openmrs/esm-globals": 5.x
"@openmrs/esm-state": 5.x
single-spa: 5.x
- checksum: 011792fefea3cb069f63492501ee55353708398dfcb523916110198d7417a898993f7e12d8c84f17ab3b90c210433356a342fcd58481a3040d4d70d8af311184
+ checksum: 64253a5def6771926511b6a34768984380955468ee47f3c09fbc2a2629ed3ad16e8e1a5fc5fb817ae9322bba2e1f5ad9b1cba61ac597a66da33d6fce8b669f8e
languageName: node
linkType: hard
@@ -4588,24 +4588,24 @@ __metadata:
languageName: unknown
linkType: soft
-"@openmrs/esm-framework@npm:5.3.3-pre.1404, @openmrs/esm-framework@npm:next":
- version: 5.3.3-pre.1404
- resolution: "@openmrs/esm-framework@npm:5.3.3-pre.1404"
- dependencies:
- "@openmrs/esm-api": 5.3.3-pre.1404
- "@openmrs/esm-config": 5.3.3-pre.1404
- "@openmrs/esm-dynamic-loading": 5.3.3-pre.1404
- "@openmrs/esm-error-handling": 5.3.3-pre.1404
- "@openmrs/esm-extensions": 5.3.3-pre.1404
- "@openmrs/esm-feature-flags": 5.3.3-pre.1404
- "@openmrs/esm-globals": 5.3.3-pre.1404
- "@openmrs/esm-navigation": 5.3.3-pre.1404
- "@openmrs/esm-offline": 5.3.3-pre.1404
- "@openmrs/esm-react-utils": 5.3.3-pre.1404
- "@openmrs/esm-routes": 5.3.3-pre.1404
- "@openmrs/esm-state": 5.3.3-pre.1404
- "@openmrs/esm-styleguide": 5.3.3-pre.1404
- "@openmrs/esm-utils": 5.3.3-pre.1404
+"@openmrs/esm-framework@npm:5.3.3-pre.1477, @openmrs/esm-framework@npm:next":
+ version: 5.3.3-pre.1477
+ resolution: "@openmrs/esm-framework@npm:5.3.3-pre.1477"
+ dependencies:
+ "@openmrs/esm-api": 5.3.3-pre.1477
+ "@openmrs/esm-config": 5.3.3-pre.1477
+ "@openmrs/esm-dynamic-loading": 5.3.3-pre.1477
+ "@openmrs/esm-error-handling": 5.3.3-pre.1477
+ "@openmrs/esm-extensions": 5.3.3-pre.1477
+ "@openmrs/esm-feature-flags": 5.3.3-pre.1477
+ "@openmrs/esm-globals": 5.3.3-pre.1477
+ "@openmrs/esm-navigation": 5.3.3-pre.1477
+ "@openmrs/esm-offline": 5.3.3-pre.1477
+ "@openmrs/esm-react-utils": 5.3.3-pre.1477
+ "@openmrs/esm-routes": 5.3.3-pre.1477
+ "@openmrs/esm-state": 5.3.3-pre.1477
+ "@openmrs/esm-styleguide": 5.3.3-pre.1477
+ "@openmrs/esm-utils": 5.3.3-pre.1477
dayjs: ^1.10.7
peerDependencies:
dayjs: 1.x
@@ -4616,7 +4616,7 @@ __metadata:
rxjs: 6.x
single-spa: 5.x
swr: 2.x
- checksum: 3e90fbf513e134bfd3ca7784a7518831d4b4aaf339690ce27856d3d13a05c7c2a574085930bec42d305dccf4857b7385e253cc9264f1d783245605e76c4ea93a
+ checksum: 7da04ea81b9b906ec69f7730b5399a6901e4bb0c2b6f73601016a90dbdae08fe5f471ff12a44945a90cb750f9f121332721901960a249b9d502e965b8ad9ec97
languageName: node
linkType: hard
@@ -4642,29 +4642,29 @@ __metadata:
languageName: unknown
linkType: soft
-"@openmrs/esm-globals@npm:5.3.3-pre.1404":
- version: 5.3.3-pre.1404
- resolution: "@openmrs/esm-globals@npm:5.3.3-pre.1404"
+"@openmrs/esm-globals@npm:5.3.3-pre.1477":
+ version: 5.3.3-pre.1477
+ resolution: "@openmrs/esm-globals@npm:5.3.3-pre.1477"
peerDependencies:
single-spa: 5.x
- checksum: 1a378c4246a2aff8e8e1eaf2ac576c03af2aa642f5a3c33f8543eb348a94987f87999a17f6c743e4b2b5ae35110d9cba402f3701f3185a338fe40246f8b127b0
+ checksum: ac8f961b5de0b86b7c9b71b72b31b1af99cd2988169292993303be61a99ed131f0d72d192ee284af01b803a7d2911a019abeeaf8c29abb5241e23b97fd4e1917
languageName: node
linkType: hard
-"@openmrs/esm-navigation@npm:5.3.3-pre.1404":
- version: 5.3.3-pre.1404
- resolution: "@openmrs/esm-navigation@npm:5.3.3-pre.1404"
+"@openmrs/esm-navigation@npm:5.3.3-pre.1477":
+ version: 5.3.3-pre.1477
+ resolution: "@openmrs/esm-navigation@npm:5.3.3-pre.1477"
dependencies:
path-to-regexp: 6.1.0
peerDependencies:
"@openmrs/esm-state": 5.x
- checksum: e510862e5d29657319c1869eb724ac708f5fbe57870a9ddf5a39d9e9b546426e717406255267354b75bbd22fc0300e2b50fac7d2fc78914d677a559f5b94718f
+ checksum: 1d60cf050e3424e72cb064efdb3ea02a1fb01d544c937e0c1f045a4f0d075e0e225187c3847c709b4719acee47accc254c552717f29fe5af8ed18d084eec75be
languageName: node
linkType: hard
-"@openmrs/esm-offline@npm:5.3.3-pre.1404":
- version: 5.3.3-pre.1404
- resolution: "@openmrs/esm-offline@npm:5.3.3-pre.1404"
+"@openmrs/esm-offline@npm:5.3.3-pre.1477":
+ version: 5.3.3-pre.1477
+ resolution: "@openmrs/esm-offline@npm:5.3.3-pre.1477"
dependencies:
dexie: ^3.0.3
lodash-es: ^4.17.21
@@ -4676,7 +4676,7 @@ __metadata:
"@openmrs/esm-state": 5.x
"@openmrs/esm-styleguide": 5.x
rxjs: 6.x
- checksum: b492415acece28e1ae177ea9b2c5e0bf2d243dd009d33fbe69d93a0954fe9924e20986aadc7ffd373137390022d0839ba3a33e86398f47a4d22a2fed37c51621
+ checksum: 3e6d89475697c0749df09341fac00e4307d88dc86337530491640b91446de4ff0d3346a5c43676736b9b053e211daf5450fc690bd1ce061a343bf273096073f5
languageName: node
linkType: hard
@@ -5089,9 +5089,9 @@ __metadata:
languageName: unknown
linkType: soft
-"@openmrs/esm-react-utils@npm:5.3.3-pre.1404":
- version: 5.3.3-pre.1404
- resolution: "@openmrs/esm-react-utils@npm:5.3.3-pre.1404"
+"@openmrs/esm-react-utils@npm:5.3.3-pre.1477":
+ version: 5.3.3-pre.1477
+ resolution: "@openmrs/esm-react-utils@npm:5.3.3-pre.1477"
dependencies:
lodash-es: ^4.17.21
single-spa-react: ^6.0.0
@@ -5109,34 +5109,34 @@ __metadata:
react-i18next: 11.x
rxjs: 6.x
swr: 2.x
- checksum: 5b1e7f1359e58d83bd05480fa33fc19a3b94d7415f8fdcc2e6ec0943f4a423e523ea64586110f7d0c5ebc910f68ee5716eb1f69ce3f2dbc5394f7ce2746e657b
+ checksum: 7e31fa6fd9b2073680f971e2bcb54361e3d424def0e4e9761beff0f203e8bc45b25e9f14ffd5c4958f481e1a277540b35c518a6a91a96b0db157ee95f4ab0c6b
languageName: node
linkType: hard
-"@openmrs/esm-routes@npm:5.3.3-pre.1404":
- version: 5.3.3-pre.1404
- resolution: "@openmrs/esm-routes@npm:5.3.3-pre.1404"
+"@openmrs/esm-routes@npm:5.3.3-pre.1477":
+ version: 5.3.3-pre.1477
+ resolution: "@openmrs/esm-routes@npm:5.3.3-pre.1477"
peerDependencies:
"@openmrs/esm-globals": 5.x
"@openmrs/esm-utils": 5.x
- checksum: 7ddf83879362fd9680bae4c43598abac9433f98d608de869e6ad4476050758acc63868752520e7cf11c2392e9892e489fb0277e3c819afe78d081f73c1d74904
+ checksum: 419ee274eb79f60ff134855c235ec434d61b847b767b6a792edcfd932ffa7b829cd3480da893f28ab537647b6b0ed200ae6b6624853588563ea76ffec99ce771
languageName: node
linkType: hard
-"@openmrs/esm-state@npm:5.3.3-pre.1404":
- version: 5.3.3-pre.1404
- resolution: "@openmrs/esm-state@npm:5.3.3-pre.1404"
+"@openmrs/esm-state@npm:5.3.3-pre.1477":
+ version: 5.3.3-pre.1477
+ resolution: "@openmrs/esm-state@npm:5.3.3-pre.1477"
dependencies:
zustand: ^4.3.6
peerDependencies:
"@openmrs/esm-globals": 5.x
- checksum: 989795e206c0f2ccb375a9ae9c2304803e22af4113f51ae974a61f5be31dab7b2edaf063fe653276573bf37bde980fd9b51abce7861df313308d9b5124831a8f
+ checksum: 1d74ed2706f8977d9e9c957afd195a2dc28e334d387222edc72432f68a47d5190b633a80ed2e9aebc8c2f6e587be51f5c2c06004a870df443f25acd39b0dbb76
languageName: node
linkType: hard
-"@openmrs/esm-styleguide@npm:5.3.3-pre.1404":
- version: 5.3.3-pre.1404
- resolution: "@openmrs/esm-styleguide@npm:5.3.3-pre.1404"
+"@openmrs/esm-styleguide@npm:5.3.3-pre.1477":
+ version: 5.3.3-pre.1477
+ resolution: "@openmrs/esm-styleguide@npm:5.3.3-pre.1477"
dependencies:
"@carbon/charts": ^1.12.0
"@carbon/react": ~1.37.0
@@ -5155,20 +5155,20 @@ __metadata:
react: 18.x
react-dom: 18.x
rxjs: 6.x
- checksum: 93540fa2029ea30d7bc0df2d52fb69972831de5d442bcc02c238329e3a132affc496291aea2dbd143c6e30223da3175c0aaa2aaec736d2eec319360946e1c863
+ checksum: d02cd848c0da55ea65567e3ed1f48001154bcc1be09df9f5cc82d3ba33794e712ffe29732a7d32287899eb3baa1877984bd1793ef980e255c4b1763576de99f9
languageName: node
linkType: hard
-"@openmrs/esm-utils@npm:5.3.3-pre.1404":
- version: 5.3.3-pre.1404
- resolution: "@openmrs/esm-utils@npm:5.3.3-pre.1404"
+"@openmrs/esm-utils@npm:5.3.3-pre.1477":
+ version: 5.3.3-pre.1477
+ resolution: "@openmrs/esm-utils@npm:5.3.3-pre.1477"
dependencies:
semver: 7.3.2
peerDependencies:
dayjs: 1.x
i18next: 19.x
rxjs: 6.x
- checksum: 5ad86c28113da2a03178ee5a77fce02b42b98f5b73b5a0c439875430d03fee8a1d6a5338a6daa6132c9bd95230d654a663003b19f8e201eba18782d8c59d45b6
+ checksum: fd5652dd432a5cedd746bef0eed0440d4622c023c33c524421d7a856b321ed0ee949668269014137156153a5748ca2a3a1a0d2710316b73ca788cf8364b59762
languageName: node
linkType: hard
@@ -5248,9 +5248,9 @@ __metadata:
languageName: node
linkType: hard
-"@openmrs/webpack-config@npm:5.3.3-pre.1404":
- version: 5.3.3-pre.1404
- resolution: "@openmrs/webpack-config@npm:5.3.3-pre.1404"
+"@openmrs/webpack-config@npm:5.3.3-pre.1477":
+ version: 5.3.3-pre.1477
+ resolution: "@openmrs/webpack-config@npm:5.3.3-pre.1477"
dependencies:
"@swc/core": ^1.3.58
clean-webpack-plugin: ^4.0.0
@@ -5267,7 +5267,7 @@ __metadata:
webpack-stats-plugin: ^1.0.3
peerDependencies:
webpack: 5.x
- checksum: fcfdce97969513037dab7ab3ddd0cd1beb973d68b8e3dc79c9c35658898557f3a21f2e29266659ed203a5b934801569e71a98e78068ebe819fc8ad5812fb88d2
+ checksum: 80d5d2e70481fa8722ac389bd2c7bce5f3fa02c891088050b8fa30b8f3b4fde497f002ca914f8f6c5fcebd8d51368d4dd30ac0f086da6aefe23a6f16bf6993bd
languageName: node
linkType: hard
@@ -19414,12 +19414,12 @@ __metadata:
linkType: hard
"openmrs@npm:next":
- version: 5.3.3-pre.1404
- resolution: "openmrs@npm:5.3.3-pre.1404"
+ version: 5.3.3-pre.1477
+ resolution: "openmrs@npm:5.3.3-pre.1477"
dependencies:
"@carbon/icons-react": 11.26.0
- "@openmrs/esm-app-shell": 5.3.3-pre.1404
- "@openmrs/webpack-config": 5.3.3-pre.1404
+ "@openmrs/esm-app-shell": 5.3.3-pre.1477
+ "@openmrs/webpack-config": 5.3.3-pre.1477
"@pnpm/npm-conf": ^2.1.0
"@swc/core": ^1.3.58
autoprefixer: ^10.4.2
@@ -19450,7 +19450,7 @@ __metadata:
yargs: ^17.6.2
bin:
openmrs: ./dist/cli.js
- checksum: e369415883977c3cc8aea88dd2ef29f614f4a18bf7e751d414731b1428ab97343da4eb44e815242863c4d53807e7916f1bed4d71b18e62506be3645758349bd9
+ checksum: 891007b1952052501e5b002b964961ad5446c9d53ecf7adc8af8e92d6844a60b630e0c03e23c4ea424616e1fd963ce13af201216e853805a2a7e8a6f04766c9d
languageName: node
linkType: hard
From 1e1ecd87e6bf74987e04cd541fd86449d6693779 Mon Sep 17 00:00:00 2001
From: Dennis Kigen
Date: Sat, 3 Feb 2024 00:03:08 +0300
Subject: [PATCH 5/8] Fixup
---
.../src/attachments/attachments-grid-overview.scss | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.scss b/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.scss
index 3a9ea1b77f..25d3cc7329 100644
--- a/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.scss
+++ b/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.scss
@@ -6,8 +6,7 @@
.galleryContainer {
align-items: center;
display: grid;
- grid-template-columns:
- repeat(3, 1fr);
+ grid-template-columns: repeat(3, 1fr);
grid-gap: spacing.$spacing-05;
padding: spacing.$spacing-05;
}
From 21894ab9b4e0b4c3efc6ffec598e7b138b8dbd3f Mon Sep 17 00:00:00 2001
From: Dennis Kigen
Date: Sat, 3 Feb 2024 00:19:10 +0300
Subject: [PATCH 6/8] Remove helper text about supported file types
---
.../src/camera-media-uploader/media-uploader.component.tsx | 2 +-
packages/esm-patient-attachments-app/translations/am.json | 1 -
packages/esm-patient-attachments-app/translations/ar.json | 1 -
packages/esm-patient-attachments-app/translations/en.json | 1 -
packages/esm-patient-attachments-app/translations/es.json | 1 -
packages/esm-patient-attachments-app/translations/fr.json | 1 -
packages/esm-patient-attachments-app/translations/he.json | 1 -
packages/esm-patient-attachments-app/translations/km.json | 1 -
packages/esm-patient-attachments-app/translations/zh.json | 1 -
packages/esm-patient-attachments-app/translations/zh_CN.json | 1 -
10 files changed, 1 insertion(+), 10 deletions(-)
diff --git a/packages/esm-patient-attachments-app/src/camera-media-uploader/media-uploader.component.tsx b/packages/esm-patient-attachments-app/src/camera-media-uploader/media-uploader.component.tsx
index 512a3cac58..ca9d652bbb 100644
--- a/packages/esm-patient-attachments-app/src/camera-media-uploader/media-uploader.component.tsx
+++ b/packages/esm-patient-attachments-app/src/camera-media-uploader/media-uploader.component.tsx
@@ -62,7 +62,7 @@ const MediaUploaderComponent = () => {
{t('fileUploadSizeConstraints', 'Size limit is {{fileSize}}MB', {
fileSize,
})}
- . {t('supportedFileTypes', 'Supported file types are: JPEG, PNG, and WEBP')}.
+ .
Date: Sat, 3 Feb 2024 00:28:42 +0300
Subject: [PATCH 7/8] Remove alignment from gallery container
---
.../src/attachments/attachments-grid-overview.scss | 1 -
1 file changed, 1 deletion(-)
diff --git a/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.scss b/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.scss
index 25d3cc7329..4172011e64 100644
--- a/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.scss
+++ b/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.scss
@@ -4,7 +4,6 @@
@import '../root.scss';
.galleryContainer {
- align-items: center;
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: spacing.$spacing-05;
From 81e2427e28705cf83db461560035f2af9c7ba378 Mon Sep 17 00:00:00 2001
From: Dennis Kigen
Date: Sat, 3 Feb 2024 19:28:57 +0300
Subject: [PATCH 8/8] Clean up most other things
---
.../src/attachments-config-schema.ts | 5 +-
...t.tsx => attachment-preview.component.tsx} | 62 ++++----
...e-preview.scss => attachment-preview.scss} | 27 ++--
.../attachment-thumbnail.component.tsx | 40 ++---
.../attachments-grid-overview.component.tsx | 23 ++-
.../attachments-overview.component.tsx | 141 ++++++++++--------
.../attachments-table-overview.component.tsx | 36 +++--
.../attachments-table-overview.scss | 4 +
...ttachment-confirmation-modal.component.tsx | 8 +-
.../src/attachments/use-allowed-extensions.ts | 24 ++-
.../camera-media-uploader.component.tsx | 25 ++--
.../camera.component.tsx | 6 +-
.../file-review.component.tsx | 63 ++++----
.../media-uploader.component.tsx | 43 ++++--
.../camera-media-uploader/media-uploader.scss | 4 +
...ponent.tsx => upload-status.component.tsx} | 14 +-
...loading-status.scss => upload-status.scss} | 0
.../translations/am.json | 2 +-
.../translations/en.json | 10 +-
.../translations/zh.json | 2 +-
.../translations/zh_CN.json | 2 +-
21 files changed, 294 insertions(+), 247 deletions(-)
rename packages/esm-patient-attachments-app/src/attachments/{image-preview.component.tsx => attachment-preview.component.tsx} (55%)
rename packages/esm-patient-attachments-app/src/attachments/{image-preview.scss => attachment-preview.scss} (75%)
rename packages/esm-patient-attachments-app/src/camera-media-uploader/{uploading-status.component.tsx => upload-status.component.tsx} (90%)
rename packages/esm-patient-attachments-app/src/camera-media-uploader/{uploading-status.scss => upload-status.scss} (100%)
diff --git a/packages/esm-patient-attachments-app/src/attachments-config-schema.ts b/packages/esm-patient-attachments-app/src/attachments-config-schema.ts
index f1d41b6464..0d1cb348d0 100644
--- a/packages/esm-patient-attachments-app/src/attachments-config-schema.ts
+++ b/packages/esm-patient-attachments-app/src/attachments-config-schema.ts
@@ -1,8 +1,9 @@
import { Type } from '@openmrs/esm-framework';
+
export const attachmentsConfigSchema = {
- fileSize: {
+ maxFileSize: {
_type: Type.Number,
- _description: 'Max file size limit to upload (in MB)',
+ _description: 'Maximum allowed upload file size (in MB)',
_default: 1,
},
};
diff --git a/packages/esm-patient-attachments-app/src/attachments/image-preview.component.tsx b/packages/esm-patient-attachments-app/src/attachments/attachment-preview.component.tsx
similarity index 55%
rename from packages/esm-patient-attachments-app/src/attachments/image-preview.component.tsx
rename to packages/esm-patient-attachments-app/src/attachments/attachment-preview.component.tsx
index ea24abbbd2..ac06021188 100644
--- a/packages/esm-patient-attachments-app/src/attachments/image-preview.component.tsx
+++ b/packages/esm-patient-attachments-app/src/attachments/attachment-preview.component.tsx
@@ -4,26 +4,29 @@ import { useTranslation } from 'react-i18next';
import { Button, OverflowMenu, OverflowMenuItem } from '@carbon/react';
import { Close } from '@carbon/react/icons';
import { type Attachment, useLayoutType } from '@openmrs/esm-framework';
-import styles from './image-preview.scss';
+import styles from './attachment-preview.scss';
interface AttachmentPreviewProps {
attachmentToPreview: Attachment;
- closePreview: () => void;
- deleteAttachment: (attachment: Attachment) => void;
+ onClosePreview: () => void;
+ onDeleteAttachment: (attachment: Attachment) => void;
}
const AttachmentPreview: React.FC = ({
attachmentToPreview,
- closePreview,
- deleteAttachment,
+ onClosePreview,
+ onDeleteAttachment,
}) => {
const { t } = useTranslation();
const isTablet = useLayoutType() === 'tablet';
+ const isPdf = attachmentToPreview.bytesContentFamily === 'PDF';
+ const isImage = attachmentToPreview.bytesContentFamily === 'IMAGE';
+ const responsiveSize = isTablet ? 'lg' : 'md';
useEffect(() => {
- const closePreviewOnEscape = (evt) => {
- if (evt.key == 'Escape') {
- closePreview();
+ const closePreviewOnEscape = (event) => {
+ if (event.key == 'Escape') {
+ onClosePreview();
}
};
@@ -32,39 +35,38 @@ const AttachmentPreview: React.FC = ({
return () => {
window.removeEventListener('keydown', closePreviewOnEscape);
};
- }, [closePreview]);
+ }, [onClosePreview]);
return (
-
+
-
- {attachmentToPreview.bytesContentFamily === 'IMAGE' ? (
+
+ {isImage ? (
![{attachmentToPreview.filename}]({attachmentToPreview.src})
- ) : attachmentToPreview.bytesContentFamily === 'PDF' ? (
-
+ ) : isPdf ? (
+
) : null}
-
-
- deleteAttachment(attachmentToPreview)}
- />
-
-
+
+ onDeleteAttachment(attachmentToPreview)}
+ />
+
{attachmentToPreview.filename}
diff --git a/packages/esm-patient-attachments-app/src/attachments/image-preview.scss b/packages/esm-patient-attachments-app/src/attachments/attachment-preview.scss
similarity index 75%
rename from packages/esm-patient-attachments-app/src/attachments/image-preview.scss
rename to packages/esm-patient-attachments-app/src/attachments/attachment-preview.scss
index 71d6d20870..d450993803 100644
--- a/packages/esm-patient-attachments-app/src/attachments/image-preview.scss
+++ b/packages/esm-patient-attachments-app/src/attachments/attachment-preview.scss
@@ -2,7 +2,7 @@
@use '~@carbon/styles/scss/colors';
@import "../root.scss";
-.attachmentPreview {
+.previewContainer {
display: grid;
grid-template-columns: 1fr 16rem;
position: fixed;
@@ -26,15 +26,13 @@
color: $ui-01;
}
-.closePreviewButton > svg > path {
- fill: $ui-01 !important;
-}
-
-.closePreviewButton:hover > svg > path {
- fill: $ui-05 !important;
+.closePreviewButton {
+ > svg {
+ fill: white !important;
+ }
}
-.attachmentImage {
+.attachmentPreview {
display: flex;
justify-content: center;
align-items: center;
@@ -51,13 +49,14 @@
}
}
-.overflowMenu button svg circle{
- fill: $ui-01;
-}
+.overflowMenu {
+ &:hover {
+ background-color: hsla(0,0%,55%,.12) !important;
+ }
-.overflowMenu:hover button svg circle,
-.overflowMenu:focus button svg circle {
- fill: $ui-05;
+ svg {
+ fill: white;
+ }
}
.imageDescription {
diff --git a/packages/esm-patient-attachments-app/src/attachments/attachment-thumbnail.component.tsx b/packages/esm-patient-attachments-app/src/attachments/attachment-thumbnail.component.tsx
index 6efaf8d5c0..42648d7561 100644
--- a/packages/esm-patient-attachments-app/src/attachments/attachment-thumbnail.component.tsx
+++ b/packages/esm-patient-attachments-app/src/attachments/attachment-thumbnail.component.tsx
@@ -1,6 +1,25 @@
import React from 'react';
-import styles from './attachment-thumbnail.scss';
import { DocumentPdf, DocumentUnknown } from '@carbon/react/icons';
+import styles from './attachment-thumbnail.scss';
+
+type AttachmentThumbnailProps = {
+ imageProps: ImageProps;
+ item: ItemProps;
+};
+
+type ImageProps = {
+ src: string;
+ title: string;
+ style: Object;
+ onClick?: () => void;
+};
+
+type ItemProps = {
+ id: string;
+ dateTime: string;
+ bytesMimeType: string;
+ bytesContentFamily: string;
+};
export default function AttachmentThumbnail(props: AttachmentThumbnailProps) {
return (
@@ -52,22 +71,3 @@ function Thumbnail(props: AttachmentThumbnailProps) {
return
;
}
}
-
-type AttachmentThumbnailProps = {
- imageProps: ImageProps;
- item: ItemProps;
-};
-
-type ImageProps = {
- src: string;
- title: string;
- style: Object;
- onClick?: () => void;
-};
-
-type ItemProps = {
- id: string;
- dateTime: string;
- bytesMimeType: string;
- bytesContentFamily: string;
-};
diff --git a/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.component.tsx b/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.component.tsx
index d29f4eb5fe..9f9de5b465 100644
--- a/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.component.tsx
+++ b/packages/esm-patient-attachments-app/src/attachments/attachments-grid-overview.component.tsx
@@ -7,14 +7,13 @@ import styles from './attachments-grid-overview.scss';
interface AttachmentsGridOverviewProps {
isLoading: boolean;
attachments: Array
;
- deleteAttachment: (attachment: Attachment) => void;
- openAttachment: (attachment: Attachment) => void;
+ onOpenAttachment: (attachment: Attachment) => void;
}
const AttachmentsGridOverview: React.FC = ({
attachments,
isLoading,
- openAttachment,
+ onOpenAttachment: openAttachment,
}) => {
if (isLoading) {
return (
@@ -29,23 +28,19 @@ const AttachmentsGridOverview: React.FC = ({
return (
- {attachments.map((attachment, indx) => {
+ {attachments.map((attachment, i) => {
const imageProps = {
src: attachment.src,
title: attachment.filename,
style: {},
- onClick: () => {
- openAttachment(attachment);
- },
- };
- const item = {
- id: attachment.id,
- dateTime: attachment.dateTime,
- bytesMimeType: attachment.bytesMimeType,
- bytesContentFamily: attachment.bytesContentFamily,
+ onClick: () => openAttachment(attachment),
};
+
+ const { id, dateTime, bytesMimeType, bytesContentFamily } = attachment;
+ const item = { id, dateTime, bytesMimeType, bytesContentFamily };
+
return (
-
+
{attachment.filename}
{attachment.dateTime}
diff --git a/packages/esm-patient-attachments-app/src/attachments/attachments-overview.component.tsx b/packages/esm-patient-attachments-app/src/attachments/attachments-overview.component.tsx
index 5660256421..11be6a363e 100644
--- a/packages/esm-patient-attachments-app/src/attachments/attachments-overview.component.tsx
+++ b/packages/esm-patient-attachments-app/src/attachments/attachments-overview.component.tsx
@@ -1,6 +1,6 @@
-import React, { useState, useEffect, useCallback, useMemo } from 'react';
+import React, { useCallback, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next';
-import { Button, ContentSwitcher, DataTableSkeleton, Loading, Switch } from '@carbon/react';
+import { Button, ContentSwitcher, DataTableSkeleton, IconSwitch, Loading } from '@carbon/react';
import { Add, List, Thumbnail_2 } from '@carbon/react/icons';
import {
createAttachment,
@@ -16,47 +16,46 @@ import {
import { CardHeader, EmptyState } from '@openmrs/esm-patient-common-lib';
import { createGalleryEntry } from '../utils';
import { useAllowedExtensions } from './use-allowed-extensions';
+import AttachmentPreview from './attachment-preview.component';
import AttachmentsGridOverview from './attachments-grid-overview.component';
import AttachmentsTableOverview from './attachments-table-overview.component';
-import AttachmentPreview from './image-preview.component';
import styles from './attachments-overview.scss';
-const AttachmentsOverview: React.FC<{ patientUuid: string }> = ({ patientUuid }) => {
+interface AttachmentsOverviewProps {
+ patientUuid: string;
+}
+
+interface SwitchEventHandlersParams {
+ index?: number;
+ name?: string | number;
+ text?: string;
+ key?: string | number;
+}
+
+type ViewType = 'grid' | 'table';
+
+const AttachmentsOverview: React.FC
= ({ patientUuid }) => {
+ const isTablet = useLayoutType() === 'tablet';
const { t } = useTranslation();
const { data, mutate, isValidating, isLoading } = useAttachments(patientUuid, true);
- const [attachmentToPreview, setAttachmentToPreview] = useState(null);
- const attachments = useMemo(() => data.map((item) => createGalleryEntry(item)), [data]);
- const [error, setError] = useState(false);
- const [view, setView] = useState('grid');
- const isTablet = useLayoutType() === 'tablet';
const { allowedExtensions } = useAllowedExtensions();
- const closeImagePDFPreview = useCallback(() => setAttachmentToPreview(null), [setAttachmentToPreview]);
+ const [attachmentToPreview, setAttachmentToPreview] = useState(null);
+ const [hasUploadError, setHasUploadError] = useState(false);
+ const [view, setView] = useState('grid');
- useEffect(() => {
- if (error === true) {
- showSnackbar({
- isLowContrast: true,
- kind: 'error',
- subtitle: t('fileUnsupported', 'File uploaded is not supported'),
- title: t('errorUploading', 'Error uploading a file'),
- });
- setError(false);
- }
- }, [error, t]);
+ const attachments = useMemo(() => data.map((item) => createGalleryEntry(item)), [data]);
+ const closeImageOrPdfPreview = useCallback(() => setAttachmentToPreview(null), [setAttachmentToPreview]);
- const showAttachmentModal = useCallback(() => {
- const close = showModal('capture-photo-modal', {
- saveFile: (file: UploadedFile) => createAttachment(patientUuid, file),
- allowedExtensions: allowedExtensions,
- closeModal: () => {
- close();
- },
- onCompletion: () => mutate(),
- multipleFiles: true,
- collectDescription: true,
+ if (hasUploadError) {
+ showSnackbar({
+ isLowContrast: true,
+ kind: 'error',
+ subtitle: t('unsupportedFileType', 'Unsupported file type'),
+ title: t('uploadError', 'Error uploading file'),
});
- }, [patientUuid, mutate, allowedExtensions]);
+ setHasUploadError(false);
+ }
const deleteAttachment = useCallback(
(attachment: Attachment) => {
@@ -83,20 +82,6 @@ const AttachmentsOverview: React.FC<{ patientUuid: string }> = ({ patientUuid })
[mutate, t, setAttachmentToPreview],
);
- const deleteAttachmentModal = useCallback(
- (attachment: Attachment) => {
- const close = showModal('delete-attachment-modal', {
- attachment: attachment,
- close: () => close(),
- onConfirmation: (attachment) => {
- deleteAttachment(attachment);
- close();
- },
- });
- },
- [deleteAttachment],
- );
-
const openAttachment = useCallback(
(attachment: Attachment) => {
if (attachment.bytesContentFamily === 'IMAGE' || attachment.bytesContentFamily === 'PDF') {
@@ -111,6 +96,31 @@ const AttachmentsOverview: React.FC<{ patientUuid: string }> = ({ patientUuid })
[setAttachmentToPreview],
);
+ const showAddAttachmentModal = useCallback(() => {
+ const close = showModal('capture-photo-modal', {
+ saveFile: (file: UploadedFile) => createAttachment(patientUuid, file),
+ allowedExtensions: allowedExtensions,
+ closeModal: () => close(),
+ onCompletion: () => mutate(),
+ multipleFiles: true,
+ collectDescription: true,
+ });
+ }, [patientUuid, mutate, allowedExtensions]);
+
+ const showDeleteAttachmentModal = useCallback(
+ (attachment: Attachment) => {
+ const close = showModal('delete-attachment-modal', {
+ attachment: attachment,
+ close: () => close(),
+ onConfirmation: (attachment) => {
+ deleteAttachment(attachment);
+ close();
+ },
+ });
+ },
+ [deleteAttachment],
+ );
+
if (isLoading) {
return ;
}
@@ -120,54 +130,57 @@ const AttachmentsOverview: React.FC<{ patientUuid: string }> = ({ patientUuid })
);
}
return (
-
-
+
+ <>
{isValidating && }
-
setView(`${evt.name}`)} size={isTablet ? 'md' : 'sm'}>
-
+ setView(event.name.toString() as ViewType)}
+ size={isTablet ? 'md' : 'sm'}
+ >
+
-
-
+
+
-
+
-
+
{t('add', 'Add')}
{view === 'grid' ? (
) : (
)}
-
+ >
{attachmentToPreview && (
)}
diff --git a/packages/esm-patient-attachments-app/src/attachments/attachments-table-overview.component.tsx b/packages/esm-patient-attachments-app/src/attachments/attachments-table-overview.component.tsx
index b700b159b9..582b13c1ac 100644
--- a/packages/esm-patient-attachments-app/src/attachments/attachments-table-overview.component.tsx
+++ b/packages/esm-patient-attachments-app/src/attachments/attachments-table-overview.component.tsx
@@ -1,4 +1,6 @@
+import React, { useMemo } from 'react';
import {
+ Button,
DataTable,
DataTableSkeleton,
OverflowMenu,
@@ -12,41 +14,46 @@ import {
TableRow,
} from '@carbon/react';
import { type Attachment, useLayoutType } from '@openmrs/esm-framework';
-import React, { useMemo } from 'react';
import { useTranslation } from 'react-i18next';
import styles from './attachments-table-overview.scss';
interface AttachmentsTableOverviewProps {
attachments: Array
;
isLoading: boolean;
- deleteAttachment: (attachment: Attachment) => void;
- openAttachment: (attachment: Attachment) => void;
+ onDeleteAttachment: (attachment: Attachment) => void;
+ onOpenAttachment: (attachment: Attachment) => void;
}
const AttachmentsTableOverview: React.FC = ({
attachments,
isLoading,
- deleteAttachment,
- openAttachment,
+ onDeleteAttachment,
+ onOpenAttachment,
}) => {
const { t } = useTranslation();
const layout = useLayoutType();
const isTablet = layout === 'tablet';
const isDesktop = layout === 'small-desktop' || layout === 'large-desktop';
+ const responsiveSize = isTablet ? 'lg' : 'sm';
const rows = useMemo(
() =>
attachments.map((attachment) => ({
id: attachment.id,
fileName: (
- openAttachment(attachment)}>
+ onOpenAttachment(attachment)}
+ size={responsiveSize}
+ >
{attachment.filename}
-
+
),
type: attachment.bytesContentFamily,
dateUploaded: attachment.dateTime,
})),
- [attachments, openAttachment],
+ [attachments, onOpenAttachment],
);
const headers = useMemo(
@@ -80,7 +87,13 @@ const AttachmentsTableOverview: React.FC = ({
return (
-
+
{({ rows, headers, getHeaderProps, getTableProps }) => (
@@ -105,11 +118,12 @@ const AttachmentsTableOverview: React.FC = ({
{cell.value?.content ?? cell.value}
))}
-
+
deleteAttachment(attachments[indx])}
+ onClick={() => onDeleteAttachment(attachments[indx])}
/>
diff --git a/packages/esm-patient-attachments-app/src/attachments/attachments-table-overview.scss b/packages/esm-patient-attachments-app/src/attachments/attachments-table-overview.scss
index cce0640bf5..090f7affd4 100644
--- a/packages/esm-patient-attachments-app/src/attachments/attachments-table-overview.scss
+++ b/packages/esm-patient-attachments-app/src/attachments/attachments-table-overview.scss
@@ -8,3 +8,7 @@
text-decoration: none;
cursor: pointer;
}
+
+.menuItem {
+ max-width: none;
+}
diff --git a/packages/esm-patient-attachments-app/src/attachments/delete-attachment-confirmation-modal.component.tsx b/packages/esm-patient-attachments-app/src/attachments/delete-attachment-confirmation-modal.component.tsx
index f5f1df9cac..16d8d26f91 100644
--- a/packages/esm-patient-attachments-app/src/attachments/delete-attachment-confirmation-modal.component.tsx
+++ b/packages/esm-patient-attachments-app/src/attachments/delete-attachment-confirmation-modal.component.tsx
@@ -6,8 +6,8 @@ import styles from './delete-attachment-confirmation-modal.scss';
interface DeleteAttachmentConfirmationProps {
attachment: Attachment;
- close: Function;
- onConfirmation: Function;
+ close: () => void;
+ onConfirmation: (attachment: Attachment) => void;
}
const DeleteAttachmentConfirmation: React.FC = ({
@@ -20,7 +20,7 @@ const DeleteAttachmentConfirmation: React.FC
return (
<>
- {t('delete', 'Delete')} {attachment.bytesContentFamily.toLowerCase()} ?
+ {t('delete', 'Delete')} {attachment.bytesContentFamily.toLowerCase()}?
@@ -37,7 +37,7 @@ const DeleteAttachmentConfirmation: React.FC
close()}>
{t('cancel', 'Cancel')}
- onConfirmation?.(attachment)} autoFocus>
+ onConfirmation?.(attachment)} size="lg">
{t('delete', 'Delete')}
diff --git a/packages/esm-patient-attachments-app/src/attachments/use-allowed-extensions.ts b/packages/esm-patient-attachments-app/src/attachments/use-allowed-extensions.ts
index a1e368ed71..ba433db552 100644
--- a/packages/esm-patient-attachments-app/src/attachments/use-allowed-extensions.ts
+++ b/packages/esm-patient-attachments-app/src/attachments/use-allowed-extensions.ts
@@ -8,25 +8,23 @@ export interface GlobalProperty {
}
/**
- * Global property created by the openmrs-module-attachment
- */
-const allowedExtensionsGlobalProperty: string = 'attachments.allowedFileExtensions';
-
-/**
- * React hook that takes returns the allowed file extensions
+ * React hook that returns the allowed file extensions from the global property
* @returns String array containing the `allowedExtensions`, `isLoading` loading status, `error`
*/
export const useAllowedExtensions = () => {
+ // Global property from the attachments backend module https://github.com/openmrs/openmrs-module-attachments/blob/master/api/src/main/java/org/openmrs/module/attachments/AttachmentsConstants.java that contains the allowed file extensions
+ const allowedExtensionsGlobalProperty: string = 'attachments.allowedFileExtensions';
const customRepresentation = 'custom:(value)';
- const { data, error, isLoading } = useSWRImmutable<{ data: { results: Array } }>(
- `/ws/rest/v1/systemsetting?&v=${customRepresentation}&q=${allowedExtensionsGlobalProperty}`,
- openmrsFetch,
- );
+ const url = `/ws/rest/v1/systemsetting?&v=${customRepresentation}&q=${allowedExtensionsGlobalProperty}`;
+
+ const { data, error, isLoading } = useSWRImmutable<{ data: { results: Array } }>(url, openmrsFetch);
+
+ const allowedExtensions =
+ data?.data?.results?.length > 0 ? data?.data?.results[0].value?.toLowerCase().split(',') || undefined : undefined;
return {
+ allowedExtensions,
+ error,
isLoading,
- allowedExtensions:
- data?.data?.results?.length > 0 ? data?.data?.results[0].value?.toLowerCase().split(',') || undefined : undefined,
- error: error,
};
};
diff --git a/packages/esm-patient-attachments-app/src/camera-media-uploader/camera-media-uploader.component.tsx b/packages/esm-patient-attachments-app/src/camera-media-uploader/camera-media-uploader.component.tsx
index ea37b455f6..dd61395de9 100644
--- a/packages/esm-patient-attachments-app/src/camera-media-uploader/camera-media-uploader.component.tsx
+++ b/packages/esm-patient-attachments-app/src/camera-media-uploader/camera-media-uploader.component.tsx
@@ -6,7 +6,7 @@ import CameraComponent from './camera.component';
import CameraMediaUploaderContext from './camera-media-uploader-context.resources';
import FileReviewContainer from './file-review.component';
import MediaUploaderComponent from './media-uploader.component';
-import UploadingStatusComponent from './uploading-status.component';
+import UploadStatusComponent from './upload-status.component';
import styles from './camera-media-uploader.scss';
interface CameraMediaUploaderModalProps {
@@ -57,7 +57,7 @@ const CameraMediaUploaderModal: React.FC = ({
const returnComponent = useMemo(() => {
// If the files are all set to upload, then filesUploader is visible on the screen.
if (uploadFilesToServer) {
- return ;
+ return ;
}
if (filesToUpload.length) {
@@ -70,21 +70,21 @@ const CameraMediaUploaderModal: React.FC = ({
return (
{returnComponent}
@@ -95,6 +95,7 @@ const CameraMediaUploaderModal: React.FC = ({
const CameraMediaUploadTabs = () => {
const { t } = useTranslation();
const [view, setView] = useState('upload');
+
const { cameraOnly, closeModal, error } = useContext(CameraMediaUploaderContext);
const mediaStream = useRef();
diff --git a/packages/esm-patient-attachments-app/src/camera-media-uploader/camera.component.tsx b/packages/esm-patient-attachments-app/src/camera-media-uploader/camera.component.tsx
index e79b8ff8f3..62c72a234a 100644
--- a/packages/esm-patient-attachments-app/src/camera-media-uploader/camera.component.tsx
+++ b/packages/esm-patient-attachments-app/src/camera-media-uploader/camera.component.tsx
@@ -25,11 +25,11 @@ const CameraComponent: React.FC = ({ mediaStream, stopCame
);
return (
);
};
diff --git a/packages/esm-patient-attachments-app/src/camera-media-uploader/file-review.component.tsx b/packages/esm-patient-attachments-app/src/camera-media-uploader/file-review.component.tsx
index a2f61b400b..33ab9c9b16 100644
--- a/packages/esm-patient-attachments-app/src/camera-media-uploader/file-review.component.tsx
+++ b/packages/esm-patient-attachments-app/src/camera-media-uploader/file-review.component.tsx
@@ -11,17 +11,18 @@ export interface FileReviewContainerProps {
}
interface FilePreviewProps {
- uploadedFile: UploadedFile;
- collectDescription?: boolean;
- onSaveFile: (dataUri: UploadedFile) => void;
clearData?(): void;
+ collectDescription?: boolean;
moveToNextFile: () => void;
+ onSaveFile: (dataUri: UploadedFile) => void;
+ uploadedFile: UploadedFile;
}
const FileReviewContainer: React.FC = ({ onCompletion }) => {
const { t } = useTranslation();
const [currentFile, setCurrentFile] = useState(1);
- const { filesToUpload, clearData, setFilesToUpload, closeModal, collectDescription } =
+
+ const { clearData, closeModal, collectDescription, filesToUpload, setFilesToUpload } =
useContext(CameraMediaUploaderContext);
const moveToNextFile = useCallback(() => {
@@ -47,11 +48,12 @@ const FileReviewContainer: React.FC = ({ onCompletion
{filesToUpload.length > 1 && `(${currentFile} of ${filesToUpload.length})`}
);
@@ -59,18 +61,13 @@ const FileReviewContainer: React.FC = ({ onCompletion
const FilePreview: React.FC = ({ uploadedFile, collectDescription, onSaveFile, clearData }) => {
const { t } = useTranslation();
- const [fileName, setFileName] = useState('');
- const [fileDescription, setFileDescription] = useState('');
+ const [fileName, setFileName] = useState(uploadedFile.fileName);
+ const [fileDescription, setFileDescription] = useState(uploadedFile.fileDescription);
const [emptyName, setEmptyName] = useState(false);
- useEffect(() => {
- setFileName(uploadedFile.fileName);
- setFileDescription(uploadedFile.fileDescription);
- }, [uploadedFile]);
-
const saveImageOrPdf = useCallback(
- (e: SyntheticEvent) => {
- e.preventDefault();
+ (event: SyntheticEvent) => {
+ event.preventDefault();
onSaveFile?.({
...uploadedFile,
fileName,
@@ -81,30 +78,32 @@ const FilePreview: React.FC = ({ uploadedFile, collectDescript
);
const cancelCapture = useCallback(
- (e: SyntheticEvent) => {
- e.preventDefault();
+ (event: SyntheticEvent) => {
+ event.preventDefault();
clearData?.();
},
[clearData],
);
const updateFileName = useCallback(
- (e: React.ChangeEvent) => {
- e.preventDefault();
- if (e.target.value === '') {
+ (event: React.ChangeEvent) => {
+ event.preventDefault();
+
+ if (event.target.value === '') {
setEmptyName(true);
} else if (emptyName) {
setEmptyName(false);
}
- setFileName(e.target.value);
+
+ setFileName(event.target.value);
},
[setEmptyName, setFileName, emptyName],
);
const updateDescription = useCallback(
- (e: React.ChangeEvent) => {
- e.preventDefault();
- setFileDescription(e.target.value);
+ (event: React.ChangeEvent) => {
+ event.preventDefault();
+ setFileDescription(event.target.value);
},
[setFileDescription],
);
@@ -127,29 +126,29 @@ const FilePreview: React.FC = ({ uploadedFile, collectDescript
{collectDescription && (
)}
diff --git a/packages/esm-patient-attachments-app/src/camera-media-uploader/media-uploader.component.tsx b/packages/esm-patient-attachments-app/src/camera-media-uploader/media-uploader.component.tsx
index ca9d652bbb..e5caf6195e 100644
--- a/packages/esm-patient-attachments-app/src/camera-media-uploader/media-uploader.component.tsx
+++ b/packages/esm-patient-attachments-app/src/camera-media-uploader/media-uploader.component.tsx
@@ -1,33 +1,37 @@
-import React, { useContext, useCallback } from 'react';
-import { FileUploaderDropContainer } from '@carbon/react';
+import React, { useCallback, useContext, useState } from 'react';
+import { FileUploaderDropContainer, InlineNotification } from '@carbon/react';
import { useTranslation } from 'react-i18next';
-import { showSnackbar, useConfig } from '@openmrs/esm-framework';
+import { useConfig } from '@openmrs/esm-framework';
import { readFileAsString } from '../utils';
import CameraMediaUploaderContext from './camera-media-uploader-context.resources';
import styles from './media-uploader.scss';
+interface ErrorNotification {
+ title: string;
+ subtitle: string;
+}
+
const MediaUploaderComponent = () => {
const { t } = useTranslation();
- const { fileSize } = useConfig();
+ const { maxFileSize } = useConfig();
const { setFilesToUpload, allowedExtensions, multipleFiles } = useContext(CameraMediaUploaderContext);
+ const [errorNotification, setErrorNotification] = useState(null);
const upload = useCallback(
(files: Array) => {
files.forEach((file) => {
- if (file.size > fileSize * 1024 * 1024) {
- showSnackbar({
+ if (file.size > maxFileSize * 1024 * 1024) {
+ setErrorNotification({
title: t('fileSizeLimitExceededText', 'File size limit exceeded'),
- subtitle: `${file.name} ${t('fileSizeLimitExceeded', 'exceeds the file size of')} ${fileSize} MB`,
- kind: 'error',
+ subtitle: `${file.name} ${t('fileSizeLimitExceeded', 'exceeds the size limit of')} ${maxFileSize} MB.`,
});
} else if (!isFileExtensionAllowed(file.name, allowedExtensions)) {
- showSnackbar({
+ setErrorNotification({
title: t('fileExtensionNotAllowedText', 'File extension is not allowed'),
- subtitle: `${file.name} ${t('allowedExtensionsAre', 'Allowed extensions are:')} ${allowedExtensions}`,
- kind: 'error',
+ subtitle: `${file.name} ${t('allowedExtensionsAre', 'Allowed extensions are: ')} ${allowedExtensions}.`,
});
} else {
- // Changing MB to bytes
+ // Convert MBs to bytes
readFileAsString(file).then((base64Content) => {
setFilesToUpload((uriData) => [
...uriData,
@@ -45,7 +49,7 @@ const MediaUploaderComponent = () => {
}
});
},
- [setFilesToUpload, fileSize, t],
+ [setFilesToUpload, maxFileSize, t],
);
const isFileExtensionAllowed = (fileName: string, allowedExtensions: string[]): boolean => {
@@ -58,9 +62,20 @@ const MediaUploaderComponent = () => {
return (
+ {errorNotification && (
+
+ setErrorNotification(null)}
+ subtitle={errorNotification.subtitle}
+ title={errorNotification.title}
+ />
+
+ )}
{t('fileUploadSizeConstraints', 'Size limit is {{fileSize}}MB', {
- fileSize,
+ fileSize: maxFileSize,
})}
.
diff --git a/packages/esm-patient-attachments-app/src/camera-media-uploader/media-uploader.scss b/packages/esm-patient-attachments-app/src/camera-media-uploader/media-uploader.scss
index 8fe299e158..c779198953 100644
--- a/packages/esm-patient-attachments-app/src/camera-media-uploader/media-uploader.scss
+++ b/packages/esm-patient-attachments-app/src/camera-media-uploader/media-uploader.scss
@@ -1,5 +1,9 @@
@import '../root.scss';
+.errorContainer {
+ margin: 1rem 0;
+}
+
.uploadFile {
color: $ui-02;
width: 100%;
diff --git a/packages/esm-patient-attachments-app/src/camera-media-uploader/uploading-status.component.tsx b/packages/esm-patient-attachments-app/src/camera-media-uploader/upload-status.component.tsx
similarity index 90%
rename from packages/esm-patient-attachments-app/src/camera-media-uploader/uploading-status.component.tsx
rename to packages/esm-patient-attachments-app/src/camera-media-uploader/upload-status.component.tsx
index 19218aa00b..fe2233190d 100644
--- a/packages/esm-patient-attachments-app/src/camera-media-uploader/uploading-status.component.tsx
+++ b/packages/esm-patient-attachments-app/src/camera-media-uploader/upload-status.component.tsx
@@ -1,13 +1,11 @@
import React, { useState, useEffect, useContext } from 'react';
import { useTranslation } from 'react-i18next';
+import { Button, ButtonSet, FileUploaderItem, ModalBody, ModalFooter, ModalHeader } from '@carbon/react';
import { showSnackbar } from '@openmrs/esm-framework';
-import { FileUploaderItem, Button, ButtonSet, ModalHeader, ModalBody, ModalFooter } from '@carbon/react';
import CameraMediaUploaderContext from './camera-media-uploader-context.resources';
-import styles from './uploading-status.scss';
+import styles from './upload-status.scss';
-interface UploadingStatusComponentProps {}
-
-const UploadingStatusComponent: React.FC
= () => {
+const UploadStatusComponent: React.FC = () => {
const { t } = useTranslation();
const { filesToUpload, saveFile, closeModal, clearData, onCompletion } = useContext(CameraMediaUploaderContext);
const [filesUploading, setFilesUploading] = useState([]);
@@ -47,9 +45,9 @@ const UploadingStatusComponent: React.FC = () =>
})
.catch((err) => {
showSnackbar({
- title: `${t('uploading', 'Uploading')} ${file.fileName} ${t('failed', 'failed')}`,
- subtitle: err,
kind: 'error',
+ subtitle: err,
+ title: `${t('uploading', 'Uploading')} ${file.fileName} ${t('failed', 'failed')}`,
});
}),
),
@@ -94,4 +92,4 @@ const UploadingStatusComponent: React.FC = () =>
);
};
-export default UploadingStatusComponent;
+export default UploadStatusComponent;
diff --git a/packages/esm-patient-attachments-app/src/camera-media-uploader/uploading-status.scss b/packages/esm-patient-attachments-app/src/camera-media-uploader/upload-status.scss
similarity index 100%
rename from packages/esm-patient-attachments-app/src/camera-media-uploader/uploading-status.scss
rename to packages/esm-patient-attachments-app/src/camera-media-uploader/upload-status.scss
diff --git a/packages/esm-patient-attachments-app/translations/am.json b/packages/esm-patient-attachments-app/translations/am.json
index 39ddf9cd24..f08bfa706f 100644
--- a/packages/esm-patient-attachments-app/translations/am.json
+++ b/packages/esm-patient-attachments-app/translations/am.json
@@ -30,7 +30,7 @@
"fileExtensionNotAllowedText": "File extension is not allowed",
"fileName": "File name",
"fileSizeInstructions": "Drag and drop files here or click to upload",
- "fileSizeLimitExceeded": "exceeds the file size of",
+ "fileSizeLimitExceeded": "exceeds the size limit of",
"fileSizeLimitExceededText": "File size limit exceeded",
"fileUnsupported": "File uploaded is not supported",
"fileUploadSizeConstraints": "File limit is {{fileSize}}MB",
diff --git a/packages/esm-patient-attachments-app/translations/en.json b/packages/esm-patient-attachments-app/translations/en.json
index 38abbf017b..199c55a1fd 100644
--- a/packages/esm-patient-attachments-app/translations/en.json
+++ b/packages/esm-patient-attachments-app/translations/en.json
@@ -20,8 +20,8 @@
"delete": "Delete",
"deleteAttachmentConfirmationText": "Are you sure you want to delete this {{attachmentType}}? This action can't be undone.",
"deleteImage": "Delete image",
+ "deletePdf": "Delete PDF",
"error": "Error",
- "errorUploading": "Error uploading a file",
"failed": "failed",
"failedDeleting": "couldn't be deleted",
"fieldRequired": "This field is required",
@@ -30,17 +30,21 @@
"fileExtensionNotAllowedText": "File extension is not allowed",
"fileName": "File name",
"fileSizeInstructions": "Drag and drop files here or click to upload",
- "fileSizeLimitExceeded": "exceeds the file size of",
+ "fileSizeLimitExceeded": "exceeds the size limit of",
"fileSizeLimitExceededText": "File size limit exceeded",
- "fileUnsupported": "File uploaded is not supported",
"fileUploadSizeConstraints": "File limit is {{fileSize}}MB",
+ "gridView": "Grid view",
"image": "Image",
"imageDescription": "Image description",
"name": "name",
+ "options": "Options",
"successfullyDeleted": "successfully deleted",
+ "tableView": "Table view",
"type": "Type",
+ "unsupportedFileType": "Unsupported file type",
"uploadComplete": "Upload complete",
"uploadedSuccessfully": "uploaded successfully",
+ "uploadError": "Error uploading file",
"uploadFiles": "Upload files",
"uploading": "Uploading",
"uploadWillContinueInTheBackground": "Files will be uploaded in the background. You can close this modal.",
diff --git a/packages/esm-patient-attachments-app/translations/zh.json b/packages/esm-patient-attachments-app/translations/zh.json
index d0a9a75883..e7cd7f095d 100644
--- a/packages/esm-patient-attachments-app/translations/zh.json
+++ b/packages/esm-patient-attachments-app/translations/zh.json
@@ -30,7 +30,7 @@
"fileExtensionNotAllowedText": "File extension is not allowed",
"fileName": "文件名",
"fileSizeInstructions": "拖放文件到此处或点击上传",
- "fileSizeLimitExceeded": "exceeds the file size of",
+ "fileSizeLimitExceeded": "exceeds the size limit of",
"fileSizeLimitExceededText": "文件大小超过限制",
"fileUnsupported": "上传的文件不受支持",
"fileUploadSizeConstraints": "文件限制为{{fileSize}}MB",
diff --git a/packages/esm-patient-attachments-app/translations/zh_CN.json b/packages/esm-patient-attachments-app/translations/zh_CN.json
index d0a9a75883..e7cd7f095d 100644
--- a/packages/esm-patient-attachments-app/translations/zh_CN.json
+++ b/packages/esm-patient-attachments-app/translations/zh_CN.json
@@ -30,7 +30,7 @@
"fileExtensionNotAllowedText": "File extension is not allowed",
"fileName": "文件名",
"fileSizeInstructions": "拖放文件到此处或点击上传",
- "fileSizeLimitExceeded": "exceeds the file size of",
+ "fileSizeLimitExceeded": "exceeds the size limit of",
"fileSizeLimitExceededText": "文件大小超过限制",
"fileUnsupported": "上传的文件不受支持",
"fileUploadSizeConstraints": "文件限制为{{fileSize}}MB",