- New Service
+ New service
Your {linkToFeedbackPage} will help us to improve this service.
diff --git a/app/src/styles/App.scss b/app/src/styles/App.scss
index 096f72080..945b40c1d 100644
--- a/app/src/styles/App.scss
+++ b/app/src/styles/App.scss
@@ -793,6 +793,10 @@ $hunit: '%';
border: none;
}
+.govuk-phase-banner__content__tag {
+ text-transform: none;
+}
+
.govuk-warning-text__icon {
border: 3px solid $color_nhsuk-yellow;
background: $color_nhsuk-yellow;
From f87cbc5c1fdde359dbfe3447823457b6e826ecaa Mon Sep 17 00:00:00 2001
From: steph-torres-nhs
Date: Fri, 20 Dec 2024 11:29:26 +0000
Subject: [PATCH 5/8] Update subscribe-to-mns.yml (#496)
---
.github/workflows/subscribe-to-mns.yml | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/.github/workflows/subscribe-to-mns.yml b/.github/workflows/subscribe-to-mns.yml
index c49f68eae..cd8e8a02a 100644
--- a/.github/workflows/subscribe-to-mns.yml
+++ b/.github/workflows/subscribe-to-mns.yml
@@ -12,15 +12,12 @@ on:
sandbox:
required: true
type: string
- secrets:
- AWS_ASSUME_ROLE:
- required: true
permissions:
pull-requests: write
id-token: write # This is required for requesting the JWT
contents: read # This is required for actions/checkout
jobs:
- batch_update_build_docker_image:
+ placeholder:
runs-on: ubuntu-latest
environment: ${{ inputs.environment }}
defaults:
@@ -28,6 +25,6 @@ jobs:
working-directory: lambdas
steps:
- name: Placeholder
- run: |
- echo "Running placeholder job on ${inputs.sandbox}"
+ run: |
+ echo "Running placeholder job on ${inputs.sandbox}"
From 9c5628721535a164b818672ed34030889af1cf16 Mon Sep 17 00:00:00 2001
From: mark-start-nhs
Date: Thu, 2 Jan 2025 15:21:39 +0000
Subject: [PATCH 6/8] [PRMP-1237] Underline nav bar links in the nav bar
---
app/src/styles/App.scss | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/app/src/styles/App.scss b/app/src/styles/App.scss
index 945b40c1d..7b230425b 100644
--- a/app/src/styles/App.scss
+++ b/app/src/styles/App.scss
@@ -678,9 +678,16 @@ $hunit: '%';
}
&_item {
- a,
- a:hover {
+
+ a {
color: $color_nhsuk-white;
+ text-decoration: underline;
+ text-decoration-color: $color_nhsuk-white;
+ text-underline-offset: 2px;
+ }
+
+ a:hover {
+ text-decoration: none;
}
a:visited {
@@ -690,7 +697,9 @@ $hunit: '%';
&--desktop {
margin: 0 2rem;
}
+
}
+
}
// Generic
From 037723fd43440d8babe3d5fa0c41d64334e64c9f Mon Sep 17 00:00:00 2001
From: mark-start-nhs
Date: Thu, 2 Jan 2025 15:23:04 +0000
Subject: [PATCH 7/8] [PRMP-1321][PRMP-1041] Patient Details screen updates
---
app/README.md | 2 +-
.../lloyd_george_workflow.cy.js | 2 +-
.../download_lloyd_george_workflow.cy.js | 2 +-
.../patient_search_and_verify_workflow.cy.js | 4 +-
.../LloydGeorgeViewRecordStage.tsx | 7 +++-
.../generic/backButton/BackButton.story.ts | 13 ++++++
.../generic/backButton/BackButton.test.tsx | 26 ++++++++++++
.../generic/backButton/BackButton.tsx | 13 ++++--
.../PatientResultPage.test.tsx | 42 ++++++++-----------
.../patientResultPage/PatientResultPage.tsx | 16 +++----
10 files changed, 83 insertions(+), 44 deletions(-)
diff --git a/app/README.md b/app/README.md
index 8d9eb6d36..d3b5596d4 100644
--- a/app/README.md
+++ b/app/README.md
@@ -22,7 +22,7 @@ The National Document Repository user interface (UI) has been developed with Rea
### 1. Set Env Variables
-Create a `.env` file by duplicating [.env.template](.env.template) and adding any missing values. This file is sourced to
+In the app/ directory create a `.env` file by duplicating the [.env.template](.env.template) and adding any missing values. This file is sourced to
your shell env so make sure it doesn't have any extra whitespace, comments etc.
The `local` environment variable will allow your local app to bypass auth and mock most lambda requests.
diff --git a/app/cypress/e2e/0-ndr-core-tests/feature_flag_workflows/lloyd_george_workflow.cy.js b/app/cypress/e2e/0-ndr-core-tests/feature_flag_workflows/lloyd_george_workflow.cy.js
index 56b1a5be1..275130a64 100644
--- a/app/cypress/e2e/0-ndr-core-tests/feature_flag_workflows/lloyd_george_workflow.cy.js
+++ b/app/cypress/e2e/0-ndr-core-tests/feature_flag_workflows/lloyd_george_workflow.cy.js
@@ -28,7 +28,7 @@ describe('Feature flags - Lloyd George Workflow', () => {
});
cy.title().should(
'eq',
- 'Verify patient details - Access and store digital patient documents',
+ 'Patient details - Access and store digital patient documents',
);
cy.get('#verify-submit').click();
diff --git a/app/cypress/e2e/0-ndr-core-tests/gp_user_workflows/download_lloyd_george_workflow.cy.js b/app/cypress/e2e/0-ndr-core-tests/gp_user_workflows/download_lloyd_george_workflow.cy.js
index 802440d69..8aa60367b 100644
--- a/app/cypress/e2e/0-ndr-core-tests/gp_user_workflows/download_lloyd_george_workflow.cy.js
+++ b/app/cypress/e2e/0-ndr-core-tests/gp_user_workflows/download_lloyd_george_workflow.cy.js
@@ -11,7 +11,7 @@ const downloadPageTitle =
const downloadingPageTitle = 'Downloading documents - Access and store digital patient documents';
const downloadCompletePageTitle = 'Download complete - Access and store digital patient documents';
const verifyPatientPageTitle =
- 'Verify patient details - Access and store digital patient documents';
+ 'Patient details - Access and store digital patient documents';
const lloydGeorgeRecordPageTitle = 'Available records - Access and store digital patient documents';
const testFiles = [
{
diff --git a/app/cypress/e2e/0-ndr-core-tests/gp_user_workflows/patient_search_and_verify_workflow.cy.js b/app/cypress/e2e/0-ndr-core-tests/gp_user_workflows/patient_search_and_verify_workflow.cy.js
index 651588015..402d35791 100644
--- a/app/cypress/e2e/0-ndr-core-tests/gp_user_workflows/patient_search_and_verify_workflow.cy.js
+++ b/app/cypress/e2e/0-ndr-core-tests/gp_user_workflows/patient_search_and_verify_workflow.cy.js
@@ -65,7 +65,7 @@ describe('GP Workflow: Patient search and verify', () => {
cy.wait('@search');
cy.title().should(
'eq',
- 'Verify patient details - Access and store digital patient documents',
+ 'Patient details - Access and store digital patient documents',
);
cy.url().should('include', 'verify');
@@ -73,7 +73,7 @@ describe('GP Workflow: Patient search and verify', () => {
cy.get('#gp-message').should('be.visible');
cy.get('#gp-message').should(
'have.text',
- 'Check these patient details match the records or attachments you plan to use',
+ 'This page displays the current data recorded in the Patient Demographic Service for this patient.',
);
cy.get('#verify-submit').click();
diff --git a/app/src/components/blocks/_lloydGeorge/lloydGeorgeViewRecordStage/LloydGeorgeViewRecordStage.tsx b/app/src/components/blocks/_lloydGeorge/lloydGeorgeViewRecordStage/LloydGeorgeViewRecordStage.tsx
index 9d30b156d..e65fc263d 100644
--- a/app/src/components/blocks/_lloydGeorge/lloydGeorgeViewRecordStage/LloydGeorgeViewRecordStage.tsx
+++ b/app/src/components/blocks/_lloydGeorge/lloydGeorgeViewRecordStage/LloydGeorgeViewRecordStage.tsx
@@ -26,7 +26,7 @@ import {
import RecordCard from '../../../generic/recordCard/RecordCard';
import RecordMenuCard from '../../../generic/recordMenuCard/RecordMenuCard';
import useTitle from '../../../../helpers/hooks/useTitle';
-import { routeChildren } from '../../../../types/generic/routes';
+import { routes, routeChildren } from '../../../../types/generic/routes';
import { useNavigate } from 'react-router-dom';
import PatientSimpleSummary from '../../../generic/patientSimpleSummary/PatientSimpleSummary';
import ProgressBar from '../../../generic/progressBar/ProgressBar';
@@ -126,7 +126,10 @@ function LloydGeorgeViewRecordStage({
Exit full screen
) : (
-
+
)}
{!fullScreen && userIsGpAdminNonBSOL && (
diff --git a/app/src/components/generic/backButton/BackButton.story.ts b/app/src/components/generic/backButton/BackButton.story.ts
index 402090f1b..51a1efe04 100644
--- a/app/src/components/generic/backButton/BackButton.story.ts
+++ b/app/src/components/generic/backButton/BackButton.story.ts
@@ -18,4 +18,17 @@ export const BackButton: Story = {
args: {},
};
+export const WithCustomText: Story = {
+ args: {
+ backLinkText: 'navigate to ...',
+ },
+};
+
+export const WithCustomToLocationAndText: Story = {
+ args: {
+ toLocation: '/specified-location',
+ backLinkText: 'navigate to /specified-location',
+ },
+};
+
export default meta;
diff --git a/app/src/components/generic/backButton/BackButton.test.tsx b/app/src/components/generic/backButton/BackButton.test.tsx
index 130a87a02..a320cf206 100644
--- a/app/src/components/generic/backButton/BackButton.test.tsx
+++ b/app/src/components/generic/backButton/BackButton.test.tsx
@@ -32,4 +32,30 @@ describe('BackButton', () => {
expect(mockUseNavigate).toHaveBeenCalledWith(-1);
});
});
+
+ it('navigates to specified location when the "toLocation" property is defined' , async () => {
+
+ render(
);
+ userEvent.click( screen.getByText('Go back'));
+
+ await waitFor(() => {
+ expect(mockUseNavigate).toHaveBeenCalledWith('/specified-location');
+ });
+
+ });
+
+ it('displays default back link text when "backLinkText" is not provided', async () => {
+
+ render(
);
+ expect(screen.getByText('Go back')).toBeInTheDocument();
+
+ });
+
+ it('displays custom back link text when "backLinkText" is defined', async () => {
+
+ render(
);
+ expect(screen.getByText('navigate to ...')).toBeInTheDocument();
+
+ });
+
});
diff --git a/app/src/components/generic/backButton/BackButton.tsx b/app/src/components/generic/backButton/BackButton.tsx
index 7b0e4d98a..e25b57a00 100644
--- a/app/src/components/generic/backButton/BackButton.tsx
+++ b/app/src/components/generic/backButton/BackButton.tsx
@@ -3,17 +3,24 @@ import React from 'react';
import type { MouseEvent } from 'react';
import { useNavigate } from 'react-router-dom';
-const BackButton = () => {
+interface BackButtonProps {
+ toLocation?: string;
+ backLinkText?: string;
+}
+
+const BackButton = ({ toLocation, backLinkText = 'Go back' }: BackButtonProps) => {
const navigate = useNavigate();
const onBack = (e: MouseEvent
) => {
e.preventDefault();
- navigate(-1);
+
+ if (toLocation) navigate(toLocation);
+ else navigate(-1);
};
return (
- Go back
+ {backLinkText}
);
};
diff --git a/app/src/pages/patientResultPage/PatientResultPage.test.tsx b/app/src/pages/patientResultPage/PatientResultPage.test.tsx
index 34833c446..b92b1117a 100644
--- a/app/src/pages/patientResultPage/PatientResultPage.test.tsx
+++ b/app/src/pages/patientResultPage/PatientResultPage.test.tsx
@@ -19,6 +19,10 @@ jest.mock('../../helpers/hooks/usePatient');
const mockedUseRole = useRole as jest.Mock;
const mockedUsePatient = usePatient as jest.Mock;
+const PAGE_HEADER_TEXT = 'Patient details'
+const PAGE_TEXT = "This page displays the current data recorded in the Patient Demographic Service for this patient."
+const CONFIRM_BUTTON_TEXT = 'Confirm patient details and continue'
+
describe('PatientResultPage', () => {
beforeEach(() => {
process.env.REACT_APP_ENVIRONMENT = 'jest';
@@ -32,7 +36,7 @@ describe('PatientResultPage', () => {
it('displays component', () => {
render( );
- expect(screen.getByText('Verify patient details')).toBeInTheDocument();
+ expect(screen.getByText(PAGE_HEADER_TEXT)).toBeInTheDocument();
});
it.each(authorisedRoles)(
@@ -47,23 +51,13 @@ describe('PatientResultPage', () => {
render( );
expect(
- screen.getByRole('heading', { name: 'Verify patient details' }),
+ screen.getByRole('heading', { name: PAGE_HEADER_TEXT }),
).toBeInTheDocument();
expect(screen.getByText(familyName)).toBeInTheDocument();
expect(
- screen.getByRole('button', { name: 'Accept details are correct' }),
+ screen.getByRole('button', { name: CONFIRM_BUTTON_TEXT }),
).toBeInTheDocument();
- expect(screen.getByText(/If patient details are incorrect/)).toBeInTheDocument();
-
- const nationalServiceDeskLink = screen.getByRole('link', {
- name: /National Service Desk/,
- });
- expect(nationalServiceDeskLink).toHaveAttribute(
- 'href',
- 'https://digital.nhs.uk/about-nhs-digital/contact-us#nhs-digital-service-desks',
- );
- expect(nationalServiceDeskLink).toHaveAttribute('target', '_blank');
},
);
@@ -79,11 +73,11 @@ describe('PatientResultPage', () => {
render( );
expect(
- screen.getByRole('heading', { name: 'Verify patient details' }),
+ screen.getByRole('heading', { name: PAGE_HEADER_TEXT }),
).toBeInTheDocument();
expect(
screen.getByText(
- 'Check these patient details match the records or attachments you plan to use',
+ PAGE_TEXT ,
),
).toBeInTheDocument();
},
@@ -100,7 +94,7 @@ describe('PatientResultPage', () => {
render( );
expect(
- screen.getByRole('heading', { name: 'Verify patient details' }),
+ screen.getByRole('heading', { name: PAGE_HEADER_TEXT }),
).toBeInTheDocument();
expect(screen.queryByText('Select patient status')).not.toBeInTheDocument();
@@ -110,7 +104,7 @@ describe('PatientResultPage', () => {
).not.toBeInTheDocument();
expect(
screen.queryByText(
- 'Check these patient details match the records or attachments you plan to use',
+ PAGE_TEXT,
),
).not.toBeInTheDocument();
});
@@ -127,7 +121,7 @@ describe('PatientResultPage', () => {
act(() => {
userEvent.click(
screen.getByRole('button', {
- name: 'Accept details are correct',
+ name: CONFIRM_BUTTON_TEXT,
}),
);
});
@@ -148,7 +142,7 @@ describe('PatientResultPage', () => {
render( );
expect(
- screen.getByRole('heading', { name: 'Verify patient details' }),
+ screen.getByRole('heading', { name: PAGE_HEADER_TEXT }),
).toBeInTheDocument();
expect(
screen.getByText('The NHS number for this patient has changed.'),
@@ -167,7 +161,7 @@ describe('PatientResultPage', () => {
render( );
expect(
- screen.getByRole('heading', { name: 'Verify patient details' }),
+ screen.getByRole('heading', { name: PAGE_HEADER_TEXT }),
).toBeInTheDocument();
expect(
screen.getByText(
@@ -190,7 +184,7 @@ describe('PatientResultPage', () => {
render( );
expect(
- screen.getByRole('heading', { name: 'Verify patient details' }),
+ screen.getByRole('heading', { name: PAGE_HEADER_TEXT }),
).toBeInTheDocument();
const results = await runAxeTest(document.body);
@@ -237,7 +231,7 @@ describe('PatientResultPage', () => {
act(() => {
userEvent.click(
screen.getByRole('button', {
- name: 'Accept details are correct',
+ name: CONFIRM_BUTTON_TEXT,
}),
);
});
@@ -259,7 +253,7 @@ describe('PatientResultPage', () => {
act(() => {
userEvent.click(
- screen.getByRole('button', { name: 'Accept details are correct' }),
+ screen.getByRole('button', { name: CONFIRM_BUTTON_TEXT }),
);
});
@@ -275,7 +269,7 @@ describe('PatientResultPage', () => {
render( );
- userEvent.click(screen.getByRole('button', { name: 'Accept details are correct' }));
+ userEvent.click(screen.getByRole('button', { name: CONFIRM_BUTTON_TEXT }));
await waitFor(() => {
expect(mockedUseNavigate).toHaveBeenCalledWith(routes.ARF_OVERVIEW);
diff --git a/app/src/pages/patientResultPage/PatientResultPage.tsx b/app/src/pages/patientResultPage/PatientResultPage.tsx
index 9bf56689b..4ba8ce98e 100644
--- a/app/src/pages/patientResultPage/PatientResultPage.tsx
+++ b/app/src/pages/patientResultPage/PatientResultPage.tsx
@@ -8,7 +8,6 @@ import ErrorBox from '../../components/layout/errorBox/ErrorBox';
import { REPOSITORY_ROLE } from '../../types/generic/authRole';
import useRole from '../../helpers/hooks/useRole';
import usePatient from '../../helpers/hooks/usePatient';
-import ServiceDeskLink from '../../components/generic/serviceDeskLink/ServiceDeskLink';
import useTitle from '../../helpers/hooks/useTitle';
import PatientSummary from '../../components/generic/patientSummary/PatientSummary';
@@ -44,11 +43,11 @@ function PatientResultPage() {
};
const showWarning = patientDetails?.superseded || patientDetails?.restricted;
const isGp = userIsGPAdmin || userIsGPClinical;
- const pageHeader = 'Verify patient details';
+ const pageHeader = 'Patient details';
useTitle({ pageTitle: pageHeader });
return (
-
+
{inputError && (
- Check these patient details match the records or attachments you plan to
- use
+ This page displays the current data recorded in the Patient Demographic
+ Service for this patient.
>
)}
-
- Accept details are correct
+
+ Confirm patient details and continue
-
- If patient details are incorrect, please contact the
-
);
}
From 018cc07dc7117e41b06a9080d4236592d9a7b53e Mon Sep 17 00:00:00 2001
From: jack-nhs
Date: Fri, 3 Jan 2025 10:06:44 +0000
Subject: [PATCH 8/8] PRMP-1332 - single element are being placed in
groups/lists (#482)
* [PRMP-1332] Updated download and remove options to not be list items on view document page
* moves update and delete links from within a list
* removes fieldset from search for patient screen
* remove unnessecary import
* [PRMP-1332] use css to create margin between link items
---------
Co-authored-by: Ollie Beumkes
Co-authored-by: Jack Sutton
Co-authored-by: Steph Torres
---
.../generic/recordMenuCard/RecordMenuCard.tsx | 10 ++--
.../patientSearchPage/PatientSearchPage.tsx | 49 +++++++++----------
app/src/styles/App.scss | 10 ++--
3 files changed, 29 insertions(+), 40 deletions(-)
diff --git a/app/src/components/generic/recordMenuCard/RecordMenuCard.tsx b/app/src/components/generic/recordMenuCard/RecordMenuCard.tsx
index 1de5fdefb..06a4f5de0 100644
--- a/app/src/components/generic/recordMenuCard/RecordMenuCard.tsx
+++ b/app/src/components/generic/recordMenuCard/RecordMenuCard.tsx
@@ -61,13 +61,9 @@ const SideMenuSubSection = ({ actionLinks, heading, setStage }: SubSectionProps)
return (
<>
{heading}
-
- {actionLinks.map((link) => (
-
-
-
- ))}
-
+ {actionLinks.map((link) => (
+
+ ))}
>
);
};
diff --git a/app/src/pages/patientSearchPage/PatientSearchPage.tsx b/app/src/pages/patientSearchPage/PatientSearchPage.tsx
index 0f2b6f426..8fff917dd 100644
--- a/app/src/pages/patientSearchPage/PatientSearchPage.tsx
+++ b/app/src/pages/patientSearchPage/PatientSearchPage.tsx
@@ -2,7 +2,7 @@ import React, { useState } from 'react';
import { routes } from '../../types/generic/routes';
import { FieldValues, useForm } from 'react-hook-form';
import ErrorBox from '../../components/layout/errorBox/ErrorBox';
-import { Button, Fieldset, Input } from 'nhsuk-react-components';
+import { Button, Input } from 'nhsuk-react-components';
import SpinnerButton from '../../components/generic/spinnerButton/SpinnerButton';
import { InputRef } from '../../types/generic/inputRef';
import { useNavigate } from 'react-router-dom';
@@ -107,32 +107,29 @@ function PatientSearchPage() {
)}
>
)}
+ {pageTitle}