From c97f66c02dde3faec61336fc8b362deb1b816511 Mon Sep 17 00:00:00 2001 From: adamwhitingnhs Date: Mon, 9 Feb 2026 16:59:34 +0000 Subject: [PATCH] [PRMP-1244] Changes to document view page buttons --- .../ReviewDetailsAssessmentStage.test.tsx | 2 +- .../ReviewDetailsAssessmentStage.tsx | 2 +- .../ReviewDetailsDocumentRemoveAllStage.tsx | 2 +- ...ewDetailsDocumentSelectOrderStage.test.tsx | 2 +- .../ReviewDetailsDocumentSelectOrderStage.tsx | 2 +- .../ReviewDetailsDocumentSelectStage.tsx | 2 +- ...viewDetailsDocumentUploadingStage.test.tsx | 2 +- .../ReviewDetailsDocumentUploadingStage.tsx | 2 +- .../ReviewDetailsPatientSearchStage.test.tsx | 2 +- .../ReviewDetailsPatientSearchStage.tsx | 2 +- .../ReviewsDetailsStage.tsx | 2 +- .../DocumentSelectFileErrorsPage.test.tsx | 0 .../DocumentSelectFileErrorsPage.tsx | 1 - .../DocumentSelectOrderStage.test.tsx | 0 .../DocumentSelectOrderStage.tsx | 7 +- .../DocumentSelectPagesStage.test.tsx | 10 ++ .../DocumentSelectPagesStage.tsx | 9 ++ .../DocumentSelectStage.scss | 0 .../DocumentSelectStage.test.tsx | 2 +- .../DocumentSelectStage.tsx | 19 ++- .../DocumentUploadCompleteStage.scss | 0 .../DocumentUploadCompleteStage.test.tsx | 0 .../DocumentUploadCompleteStage.tsx | 0 .../DocumentUploadConfirmStage.test.tsx | 0 .../DocumentUploadConfirmStage.tsx | 0 .../components/DocumentList.test.tsx | 0 .../components/DocumentList.tsx | 0 .../DocumentUploadIndex.test.tsx | 0 .../DocumentUploadIndex.tsx | 0 .../DocumentUploadInfectedStage.test.tsx | 0 .../DocumentUploadInfectedStage.tsx | 0 .../DocumentUploadLloydGeorgePreview.test.tsx | 0 .../DocumentUploadLloydGeorgePreview.tsx | 0 .../DocumentUploadRemoveFilesStage.test.tsx | 0 .../DocumentUploadRemoveFilesStage.tsx | 0 .../DocumentUploadingStage.test.tsx | 0 .../DocumentUploadingStage.tsx | 0 .../documentView/DocumentView.scss | 24 ++++ .../documentView/DocumentView.test.tsx | 73 ++++++++-- .../documentView/DocumentView.tsx | 134 ++++++++++++------ .../generic/recordCard/RecordCard.tsx | 16 ++- .../recordMenuCard/RecordMenuCard.test.tsx | 49 +------ ...ectronicHealthRecordAttachmentsConfig.json | 6 +- .../config/electronicHealthRecordConfig.json | 6 +- app/src/config/lettersAndDocumentsConfig.json | 6 +- app/src/config/lloydGeorgeConfig.json | 6 +- app/src/helpers/utils/documentType.ts | 24 ++-- .../DocumentCorrectPage.test.tsx | 39 +++++ .../DocumentCorrectPage.tsx | 21 +++ .../DocumentSearchResultsPage.tsx | 7 +- .../documentUploadPage/DocumentUploadPage.tsx | 24 ++-- app/src/router/AppRouter.tsx | 15 ++ app/src/styles/App.scss | 9 +- .../types/blocks/lloydGeorgeActions.test.ts | 19 ++- app/src/types/blocks/lloydGeorgeActions.ts | 23 ++- app/src/types/generic/featureFlags.ts | 2 + app/src/types/generic/location.ts | 7 + app/src/types/generic/routes.ts | 4 + .../types/pages/UploadDocumentsPage/types.ts | 9 +- app/src/types/pages/documentCorrect/types.ts | 5 + 60 files changed, 416 insertions(+), 182 deletions(-) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentSelectFileErrorsPage/DocumentSelectFileErrorsPage.test.tsx (100%) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentSelectFileErrorsPage/DocumentSelectFileErrorsPage.tsx (99%) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentSelectOrderStage/DocumentSelectOrderStage.test.tsx (100%) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentSelectOrderStage/DocumentSelectOrderStage.tsx (98%) create mode 100644 app/src/components/blocks/_documentManagement/documentSelectPagesStage/DocumentSelectPagesStage.test.tsx create mode 100644 app/src/components/blocks/_documentManagement/documentSelectPagesStage/DocumentSelectPagesStage.tsx rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentSelectStage/DocumentSelectStage.scss (100%) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentSelectStage/DocumentSelectStage.test.tsx (99%) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentSelectStage/DocumentSelectStage.tsx (98%) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentUploadCompleteStage/DocumentUploadCompleteStage.scss (100%) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentUploadCompleteStage/DocumentUploadCompleteStage.test.tsx (100%) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentUploadCompleteStage/DocumentUploadCompleteStage.tsx (100%) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentUploadConfirmStage/DocumentUploadConfirmStage.test.tsx (100%) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentUploadConfirmStage/DocumentUploadConfirmStage.tsx (100%) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentUploadConfirmStage/components/DocumentList.test.tsx (100%) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentUploadConfirmStage/components/DocumentList.tsx (100%) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentUploadIndex/DocumentUploadIndex.test.tsx (100%) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentUploadIndex/DocumentUploadIndex.tsx (100%) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentUploadInfectedStage/DocumentUploadInfectedStage.test.tsx (100%) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentUploadInfectedStage/DocumentUploadInfectedStage.tsx (100%) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentUploadLloydGeorgePreview/DocumentUploadLloydGeorgePreview.test.tsx (100%) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentUploadLloydGeorgePreview/DocumentUploadLloydGeorgePreview.tsx (100%) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentUploadRemoveFilesStage/DocumentUploadRemoveFilesStage.test.tsx (100%) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentUploadRemoveFilesStage/DocumentUploadRemoveFilesStage.tsx (100%) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentUploadingStage/DocumentUploadingStage.test.tsx (100%) rename app/src/components/blocks/{_documentUpload => _documentManagement}/documentUploadingStage/DocumentUploadingStage.tsx (100%) create mode 100644 app/src/components/blocks/_patientDocuments/documentView/DocumentView.scss create mode 100644 app/src/pages/documentCorrectPage/DocumentCorrectPage.test.tsx create mode 100644 app/src/pages/documentCorrectPage/DocumentCorrectPage.tsx create mode 100644 app/src/types/generic/location.ts create mode 100644 app/src/types/pages/documentCorrect/types.ts diff --git a/app/src/components/blocks/_admin/reviewDetailsAssessmentStage/ReviewDetailsAssessmentStage.test.tsx b/app/src/components/blocks/_admin/reviewDetailsAssessmentStage/ReviewDetailsAssessmentStage.test.tsx index af9ed6b839..0c269d70ed 100644 --- a/app/src/components/blocks/_admin/reviewDetailsAssessmentStage/ReviewDetailsAssessmentStage.test.tsx +++ b/app/src/components/blocks/_admin/reviewDetailsAssessmentStage/ReviewDetailsAssessmentStage.test.tsx @@ -71,7 +71,7 @@ vi.mock('./ExistingRecordTable', () => ({ })); vi.mock( - '../../_documentUpload/documentUploadLloydGeorgePreview/DocumentUploadLloydGeorgePreview', + '../../_documentManagement/documentUploadLloydGeorgePreview/DocumentUploadLloydGeorgePreview', () => ({ default: ({ documents, diff --git a/app/src/components/blocks/_admin/reviewDetailsAssessmentStage/ReviewDetailsAssessmentStage.tsx b/app/src/components/blocks/_admin/reviewDetailsAssessmentStage/ReviewDetailsAssessmentStage.tsx index 340e70abbb..8f06f06759 100644 --- a/app/src/components/blocks/_admin/reviewDetailsAssessmentStage/ReviewDetailsAssessmentStage.tsx +++ b/app/src/components/blocks/_admin/reviewDetailsAssessmentStage/ReviewDetailsAssessmentStage.tsx @@ -24,7 +24,7 @@ import { ReviewUploadDocument, UploadDocumentType, } from '../../../../types/pages/UploadDocumentsPage/types'; -import DocumentUploadLloydGeorgePreview from '../../_documentUpload/documentUploadLloydGeorgePreview/DocumentUploadLloydGeorgePreview'; +import DocumentUploadLloydGeorgePreview from '../../_documentManagement/documentUploadLloydGeorgePreview/DocumentUploadLloydGeorgePreview'; import { AxiosError } from 'axios'; import { errorToParams } from '../../../../helpers/utils/errorToParams'; import PatientSummary, { PatientInfo } from '../../../generic/patientSummary/PatientSummary'; diff --git a/app/src/components/blocks/_admin/reviewDetailsDocumentRemoveAllStage/ReviewDetailsDocumentRemoveAllStage.tsx b/app/src/components/blocks/_admin/reviewDetailsDocumentRemoveAllStage/ReviewDetailsDocumentRemoveAllStage.tsx index 2da1b7888b..3b9a91d648 100644 --- a/app/src/components/blocks/_admin/reviewDetailsDocumentRemoveAllStage/ReviewDetailsDocumentRemoveAllStage.tsx +++ b/app/src/components/blocks/_admin/reviewDetailsDocumentRemoveAllStage/ReviewDetailsDocumentRemoveAllStage.tsx @@ -7,7 +7,7 @@ import { UploadDocumentType, } from '../../../../types/pages/UploadDocumentsPage/types'; import Spinner from '../../../generic/spinner/Spinner'; -import DocumentUploadRemoveFilesStage from '../../_documentUpload/documentUploadRemoveFilesStage/DocumentUploadRemoveFilesStage'; +import DocumentUploadRemoveFilesStage from '../../_documentManagement/documentUploadRemoveFilesStage/DocumentUploadRemoveFilesStage'; import BackButton from '../../../generic/backButton/BackButton'; type ReviewDetailsDocumentRemoveAllStageProps = { diff --git a/app/src/components/blocks/_admin/reviewDetailsDocumentSelectOrderStage/ReviewDetailsDocumentSelectOrderStage.test.tsx b/app/src/components/blocks/_admin/reviewDetailsDocumentSelectOrderStage/ReviewDetailsDocumentSelectOrderStage.test.tsx index b3cdd7f462..b931ac7112 100644 --- a/app/src/components/blocks/_admin/reviewDetailsDocumentSelectOrderStage/ReviewDetailsDocumentSelectOrderStage.test.tsx +++ b/app/src/components/blocks/_admin/reviewDetailsDocumentSelectOrderStage/ReviewDetailsDocumentSelectOrderStage.test.tsx @@ -7,7 +7,7 @@ import { ReviewDetails } from '../../../../types/generic/reviews'; import { UploadDocument } from '../../../../types/pages/UploadDocumentsPage/types'; import userEvent from '@testing-library/user-event'; -vi.mock('../../_documentUpload/documentSelectOrderStage/DocumentSelectOrderStage', () => ({ +vi.mock('../../_documentManagement/documentSelectOrderStage/DocumentSelectOrderStage', () => ({ default: vi.fn( ({ documents, setDocuments, setMergedPdfBlob, existingDocuments, onSuccess }) => (
diff --git a/app/src/components/blocks/_admin/reviewDetailsDocumentSelectOrderStage/ReviewDetailsDocumentSelectOrderStage.tsx b/app/src/components/blocks/_admin/reviewDetailsDocumentSelectOrderStage/ReviewDetailsDocumentSelectOrderStage.tsx index 2ca7a98cad..2352ca3028 100644 --- a/app/src/components/blocks/_admin/reviewDetailsDocumentSelectOrderStage/ReviewDetailsDocumentSelectOrderStage.tsx +++ b/app/src/components/blocks/_admin/reviewDetailsDocumentSelectOrderStage/ReviewDetailsDocumentSelectOrderStage.tsx @@ -7,7 +7,7 @@ import { UploadDocument, } from '../../../../types/pages/UploadDocumentsPage/types'; import Spinner from '../../../generic/spinner/Spinner'; -import DocumentSelectOrderStage from '../../_documentUpload/documentSelectOrderStage/DocumentSelectOrderStage'; +import DocumentSelectOrderStage from '../../_documentManagement/documentSelectOrderStage/DocumentSelectOrderStage'; import { getConfigForDocType } from '../../../../helpers/utils/documentType'; type Props = { diff --git a/app/src/components/blocks/_admin/reviewDetailsDocumentSelectStage/ReviewDetailsDocumentSelectStage.tsx b/app/src/components/blocks/_admin/reviewDetailsDocumentSelectStage/ReviewDetailsDocumentSelectStage.tsx index 045a38e4b9..3057a30426 100644 --- a/app/src/components/blocks/_admin/reviewDetailsDocumentSelectStage/ReviewDetailsDocumentSelectStage.tsx +++ b/app/src/components/blocks/_admin/reviewDetailsDocumentSelectStage/ReviewDetailsDocumentSelectStage.tsx @@ -1,5 +1,5 @@ import { JSX, useEffect, useRef, useState } from 'react'; -import DocumentSelectStage from '../../_documentUpload/documentSelectStage/DocumentSelectStage'; +import DocumentSelectStage from '../../_documentManagement/documentSelectStage/DocumentSelectStage'; import { getConfigForDocType } from '../../../../helpers/utils/documentType'; import { useNavigate } from 'react-router-dom'; import { ReviewDetails } from '../../../../types/generic/reviews'; diff --git a/app/src/components/blocks/_admin/reviewDetailsDocumentUploadingStage/ReviewDetailsDocumentUploadingStage.test.tsx b/app/src/components/blocks/_admin/reviewDetailsDocumentUploadingStage/ReviewDetailsDocumentUploadingStage.test.tsx index 65719e502b..cab54026a9 100644 --- a/app/src/components/blocks/_admin/reviewDetailsDocumentUploadingStage/ReviewDetailsDocumentUploadingStage.test.tsx +++ b/app/src/components/blocks/_admin/reviewDetailsDocumentUploadingStage/ReviewDetailsDocumentUploadingStage.test.tsx @@ -50,7 +50,7 @@ vi.mock('../../../../helpers/utils/urlManipulations', () => ({ }, })); -vi.mock('../../_documentUpload/documentUploadingStage/DocumentUploadingStage', () => ({ +vi.mock('../../_documentManagement/documentUploadingStage/DocumentUploadingStage', () => ({ default: ({ documents, startUpload }: any): JSX.Element => (
- - )} + {session.isFullscreen && showMenu && recordCardLinks()}
- {documentReference.url ? ( - getRecordCard() - ) : ( -

- This document is currently being uploaded, please try again in a few - minutes. -

- )} + {documentReference.url ? getRecordCard() : }
); diff --git a/app/src/components/generic/recordCard/RecordCard.tsx b/app/src/components/generic/recordCard/RecordCard.tsx index ec8ea9b271..eecc309787 100644 --- a/app/src/components/generic/recordCard/RecordCard.tsx +++ b/app/src/components/generic/recordCard/RecordCard.tsx @@ -16,6 +16,7 @@ export type RecordLayoutProps = { detailsElement: ReactNode; isFullScreen: boolean; recordLinks?: Array; + linksElement?: ReactNode; setStage?: Dispatch>; showMenu?: boolean; children?: ReactNode; @@ -27,6 +28,7 @@ export const RecordLayout = ({ heading, fullScreenHandler, recordLinks = [], + linksElement, setStage = (): void => {}, showMenu = false, children, @@ -64,11 +66,13 @@ export const RecordLayout = ({ {detailsElement} - + {linksElement || ( + + )}
{children}
@@ -83,6 +87,7 @@ const RecordCard = ({ isFullScreen, pdfObjectUrl, recordLinks = [], + linksElement, setStage = (): void => {}, showMenu = false, }: RecordCardProps): React.JSX.Element => { @@ -108,6 +113,7 @@ const RecordCard = ({ heading={heading} fullScreenHandler={fullScreenHandler} recordLinks={recordLinks} + linksElement={linksElement} setStage={setStage} showMenu={showMenu} > diff --git a/app/src/components/generic/recordMenuCard/RecordMenuCard.test.tsx b/app/src/components/generic/recordMenuCard/RecordMenuCard.test.tsx index e09725e6fc..ffbfce6c63 100644 --- a/app/src/components/generic/recordMenuCard/RecordMenuCard.test.tsx +++ b/app/src/components/generic/recordMenuCard/RecordMenuCard.test.tsx @@ -5,7 +5,6 @@ import { LGRecordActionLink, RECORD_ACTION } from '../../../types/blocks/lloydGe import { REPOSITORY_ROLE } from '../../../types/generic/authRole'; import { LinkProps } from 'react-router-dom'; import { LG_RECORD_STAGE } from '../../../types/blocks/lloydGeorgeStages'; -import { routes } from '../../../types/generic/routes'; import userEvent from '@testing-library/user-event'; import { afterEach, beforeEach, describe, expect, it, vi, Mock } from 'vitest'; @@ -13,18 +12,10 @@ vi.mock('../../../helpers/hooks/useRole'); const mockSetStage = vi.fn(); const mockedUseNavigate = vi.fn(); const mockedUseRole = useRole as Mock; -const mockShowDownloadAndRemoveConfirmation = vi.fn(); const mockLinks: Array = [ { - label: 'Upload files', - key: 'upload-files-link', - type: RECORD_ACTION.UPDATE, - href: routes.HOME, - unauthorised: [REPOSITORY_ROLE.GP_CLINICAL], - showIfRecordInStorage: false, - }, - { + index: 1, label: 'Remove files', key: 'delete-all-files-link', type: RECORD_ACTION.UPDATE, @@ -33,20 +24,13 @@ const mockLinks: Array = [ showIfRecordInStorage: true, }, { + index: 0, label: 'Download files', key: 'download-all-files-link', type: RECORD_ACTION.DOWNLOAD, stage: LG_RECORD_STAGE.DOWNLOAD_ALL, - unauthorised: [REPOSITORY_ROLE.GP_CLINICAL], - showIfRecordInStorage: true, - }, - { - label: 'Download and remove files', - key: 'download-and-remove-all-files-link', - type: RECORD_ACTION.DOWNLOAD, - unauthorised: [REPOSITORY_ROLE.GP_CLINICAL], + unauthorised: [], showIfRecordInStorage: true, - onClick: mockShowDownloadAndRemoveConfirmation, }, ]; @@ -71,7 +55,6 @@ describe('RecordMenuCard', () => { , ); expect(screen.getByRole('link', { name: 'Remove files' })).toBeInTheDocument(); - expect(screen.getByRole('link', { name: 'Upload files' })).toBeInTheDocument(); expect(screen.getByRole('link', { name: 'Download files' })).toBeInTheDocument(); }); @@ -87,7 +70,6 @@ describe('RecordMenuCard', () => { showMenu={true} />, ); - expect(screen.getByRole('link', { name: 'Upload files' })).toBeInTheDocument(); expect(screen.getByRole('link', { name: 'Remove files' })).toBeInTheDocument(); expect(screen.queryByRole('link', { name: 'Download files' })).not.toBeInTheDocument(); @@ -103,7 +85,6 @@ describe('RecordMenuCard', () => { ); expect(screen.getByRole('link', { name: 'Download files' })).toBeInTheDocument(); - expect(screen.queryByRole('link', { name: 'Upload files' })).not.toBeInTheDocument(); expect(screen.queryByRole('link', { name: 'Remove files' })).not.toBeInTheDocument(); }); @@ -114,21 +95,6 @@ describe('RecordMenuCard', () => { expect(container).toBeEmptyDOMElement(); }); - it('render menu item as a