Skip to content

Commit 6d44f17

Browse files
Fix: [AEA-6014] - show relevant details with back button (#1575)
## Summary https://nhsd-jira.digital.nhs.uk/browse/AEA-6014 https://nhsd-jira.digital.nhs.uk/browse/AEA-6013 - Routine Change ### Details Made it so you dont get autocomplete options on the basic details form Made it so that when you do any of the searches, thats the only details that are saved and populated when you press the back button
1 parent 937b847 commit 6d44f17

File tree

7 files changed

+45
-48
lines changed

7 files changed

+45
-48
lines changed

packages/cpt-ui/__tests__/EpsSearchForAPrescription.test.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import SearchForAPrescription from "@/pages/SearchPrescriptionPage"
77
import {HERO_TEXT} from "@/constants/ui-strings/SearchForAPrescriptionStrings"
88
import {AuthContext, AuthContextType} from "@/context/AuthProvider"
99
import {AccessContext} from "@/context/AccessProvider"
10+
import {SearchProvider} from "@/context/SearchProvider"
1011

1112
// Default mock values for contexts
1213
const defaultAuthContext: AuthContextType = {
@@ -45,7 +46,9 @@ const renderWithProviders = (
4546
<MemoryRouter>
4647
<AuthContext.Provider value={authContext}>
4748
<AccessContext.Provider value={accessContext}>
48-
{ui}
49+
<SearchProvider>
50+
{ui}
51+
</SearchProvider>
4952
</AccessContext.Provider>
5053
</AuthContext.Provider>
5154
</MemoryRouter>

packages/cpt-ui/__tests__/PrescriptionListTable.test.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -431,10 +431,8 @@ describe("PrescriptionsListTable", () => {
431431
expect(prescriptionButton).toBeInTheDocument()
432432

433433
fireEvent.click(prescriptionButton)
434-
expect(mockSetAllSearchParameters).toHaveBeenCalledWith({
435-
prescriptionId: "C0C757-A83008-C2D93O",
436-
issueNumber: "1"
437-
})
434+
expect(mockSetPrescriptionId).toHaveBeenCalledWith("C0C757-A83008-C2D93O")
435+
expect(mockSetIssueNumber).toHaveBeenCalledWith("1")
438436
})
439437

440438
})

packages/cpt-ui/src/components/prescriptionList/PrescriptionsListTable.tsx

Lines changed: 5 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import {PRESCRIPTION_LIST_TABLE_TEXT} from "@/constants/ui-strings/PrescriptionL
88
import {Link} from "react-router-dom"
99
import {FRONTEND_PATHS} from "@/constants/environment"
1010
import {useSearchContext} from "@/context/SearchProvider"
11-
import {useNavigationContext} from "@/context/NavigationProvider"
1211

1312
export interface PrescriptionsListTableProps {
1413
textContent: PrescriptionsListStrings;
@@ -26,7 +25,6 @@ const PrescriptionsListTable = ({
2625
const initialSortConfig: SortConfig = {key: "issueDate", direction: null}
2726
const currentTabId: TabId = textContent.testid as TabId
2827
const searchContext = useSearchContext()
29-
const navigationContext = useNavigationContext()
3028

3129
// all tabs have own key in state object so each tab can be sorted individually
3230
const [allSortConfigs, setAllSortConfigs] = React.useState<
@@ -144,32 +142,12 @@ const PrescriptionsListTable = ({
144142
prescriptionId: string,
145143
issueNumber: string | undefined
146144
) => {
147-
const originalSearchParams =
148-
navigationContext.getOriginalSearchParameters()
149-
150-
let relevantParams = {}
151-
if (originalSearchParams) {
152-
if (originalSearchParams.prescriptionId) {
153-
relevantParams =
154-
navigationContext.getRelevantSearchParameters("prescriptionId")
155-
} else if (originalSearchParams.nhsNumber) {
156-
relevantParams =
157-
navigationContext.getRelevantSearchParameters("nhsNumber")
158-
} else if (
159-
originalSearchParams.firstName ||
160-
originalSearchParams.lastName
161-
) {
162-
relevantParams =
163-
navigationContext.getRelevantSearchParameters("basicDetails")
164-
}
145+
// Only set the prescription-specific parameters needed for the details page
146+
// Don't modify or mix with the original search parameters to avoid cross-contamination
147+
searchContext.setPrescriptionId(prescriptionId)
148+
if (issueNumber) {
149+
searchContext.setIssueNumber(issueNumber)
165150
}
166-
167-
// only preserve relevant search parameters and add prescription-specific ones
168-
searchContext.setAllSearchParameters({
169-
...relevantParams,
170-
prescriptionId,
171-
issueNumber
172-
})
173151
}
174152

175153
const getSortedItems = () => {

packages/cpt-ui/src/components/prescriptionSearch/BasicDetailsSearch.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,14 @@ export default function BasicDetailsSearch() {
5353

5454
// restore original search parameters when available
5555
useEffect(() => {
56-
const originalParams = navigationContext.getOriginalSearchParameters()
57-
if (originalParams) {
58-
setFirstName(originalParams.firstName || "")
59-
setLastName(originalParams.lastName || "")
60-
setDobDay(originalParams.dobDay || "")
61-
setDobMonth(originalParams.dobMonth || "")
62-
setDobYear(originalParams.dobYear || "")
63-
setPostcode(originalParams.postcode || "")
56+
const relevantParams = navigationContext.getRelevantSearchParameters("basicDetails")
57+
if (relevantParams) {
58+
setFirstName(relevantParams.firstName || "")
59+
setLastName(relevantParams.lastName || "")
60+
setDobDay(relevantParams.dobDay || "")
61+
setDobMonth(relevantParams.dobMonth || "")
62+
setDobYear(relevantParams.dobYear || "")
63+
setPostcode(relevantParams.postcode || "")
6464
}
6565
}, [navigationContext])
6666

@@ -180,7 +180,7 @@ export default function BasicDetailsSearch() {
180180
<Container className="nhsuk-width-container-fluid" data-testid="basic-details-search-form-container">
181181
<Row className="patient-search-form">
182182
<Col width="three-quarters">
183-
<Form onSubmit={handleSubmit} noValidate data-testid="basic-details-form">
183+
<Form onSubmit={handleSubmit} noValidate autoComplete="off" data-testid="basic-details-form">
184184
{inlineErrors.length > 0 && (
185185
<ErrorSummary ref={errorRef} data-testid="error-summary">
186186
<ErrorSummary.Title>{STRINGS.errorSummaryHeading}</ErrorSummary.Title>

packages/cpt-ui/src/components/prescriptionSearch/NhsNumSearch.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ export default function NhsNumSearch() {
4848
}, [searchContext.nhsNumber, searchContext.searchType])
4949

5050
useEffect(() => {
51-
const originalParams = navigationContext.getOriginalSearchParameters()
52-
if (originalParams && originalParams.nhsNumber) {
53-
setNhsNumber(originalParams.nhsNumber || "")
51+
const relevantParams = navigationContext.getRelevantSearchParameters("nhsNumber")
52+
if (relevantParams && relevantParams.nhsNumber) {
53+
setNhsNumber(relevantParams.nhsNumber || "")
5454
}
5555
}, [navigationContext])
5656

packages/cpt-ui/src/components/prescriptionSearch/PrescriptionIdSearch.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ export default function PrescriptionIdSearch() {
4343
const errorMessages = PRESCRIPTION_ID_SEARCH_STRINGS.errors
4444

4545
useEffect(() => {
46-
const originalParams = navigationContext.getOriginalSearchParameters()
47-
if (originalParams && originalParams.prescriptionId) {
48-
setPrescriptionId(originalParams.prescriptionId || "")
46+
const relevantParams = navigationContext.getRelevantSearchParameters("prescriptionId")
47+
if (relevantParams && relevantParams.prescriptionId) {
48+
setPrescriptionId(relevantParams.prescriptionId || "")
4949
}
5050
}, [navigationContext])
5151

packages/cpt-ui/src/pages/SearchPrescriptionPage.tsx

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, {Fragment} from "react"
1+
import React, {Fragment, useEffect} from "react"
22
import {
33
Col,
44
Container,
@@ -14,10 +14,28 @@ import BasicDetailsSearch from "@/components/prescriptionSearch/BasicDetailsSear
1414

1515
import {HERO_TEXT} from "@/constants/ui-strings/SearchForAPrescriptionStrings"
1616
import {PRESCRIPTION_SEARCH_TABS} from "@/constants/ui-strings/SearchTabStrings"
17+
import {useSearchContext} from "@/context/SearchProvider"
1718

1819
export default function SearchPrescriptionPage() {
1920
const location = useLocation()
2021
const pathname = location.pathname
22+
const searchContext = useSearchContext()
23+
24+
// Clear search context contamination when navigating to search pages
25+
useEffect(() => {
26+
const allParams = searchContext.getAllSearchParameters()
27+
28+
// Check if we have contamination from multiple search types
29+
const hasPrescriptionId = !!allParams.prescriptionId
30+
const hasNhsNumber = !!allParams.nhsNumber
31+
const hasBasicDetails = !!(allParams.firstName || allParams.lastName || allParams.dobDay)
32+
33+
const contaminationCount = [hasPrescriptionId, hasNhsNumber, hasBasicDetails].filter(Boolean).length
34+
35+
if (contaminationCount > 1) {
36+
searchContext.clearSearchParameters()
37+
}
38+
}, [pathname, searchContext])
2139

2240
// Map paths directly to content components
2341
const pathContent: Record<string, React.ReactNode> = {

0 commit comments

Comments
 (0)