diff --git a/components/breadcrumbs.js b/components/breadcrumbs.js index bf3e3909..ff3e52fa 100644 --- a/components/breadcrumbs.js +++ b/components/breadcrumbs.js @@ -20,7 +20,8 @@ import { import { createSimpleRouteRenderers, createSimpleLinkTextPairRenderers, - createSimpleMyPortalRouteRenderers + createSimpleMyPortalRouteRenderers, + createCaseDetailRouteRenderers } from "../lib/routing/breadcrumbRendererFactories"; const Breadcrumbs = (props) => { @@ -90,12 +91,11 @@ const Breadcrumbs = (props) => { const getViewAllLabel = (viewKey) => { const labelsByKey = { - awaitingSubmissionDetails: t( - "myportal:awatitingsubmission-card-title" - ), - watchedCases: t("myportal:watchedcases-card-title"), - myCases: t("myportal:mycases-card-title"), - myRepresentations: t("myportal:myrepresentations-card-title"), + awaitingSubmissionDetails: () => + t("myportal:awatitingsubmission-card-title"), + watchedCases: () => t("myportal:watchedcases-card-title"), + myCases: () => t("myportal:mycases-card-title"), + myRepresentations: () => t("myportal:myrepresentations-card-title"), mySubmittedReps: "Submitted representations" }; @@ -107,7 +107,6 @@ const Breadcrumbs = (props) => { "/account/register": () => t("account:register-new-account-heading"), "/dns": () => t("dnsCommon:service-name"), - "/dnsapplications": () => t("dnsCommon:service-name"), "/dns/application-process": () => "Guidance", "/dns/help": () => "Help", "/dns/contact-us": () => t("common:footer-contact-us-link-label"), @@ -227,12 +226,6 @@ const Breadcrumbs = (props) => { renderMyPortalSectionCrumbs }); - const mappedRouteRendererMaps = buildBreadcrumbRendererMaps({ - simpleRouteRenderersByPath, - simpleLinkTextPairRenderersByPath, - simpleMyPortalRouteRenderersByPath - }); - const resolveMappedRouteRenderer = (path) => { return resolveMappedRouteRendererByMaps(path, mappedRouteRendererMaps); }; @@ -247,11 +240,32 @@ const Breadcrumbs = (props) => { query: router.query, hasSession: Boolean(session), getViewAllLabel, - advancedLabel: t("common:breadcrumb-advanced-search-results"), - addressLabel: t("common:breadcrumb-address-search-results"), - defaultLabel: t("common:breadcrumb-search-results") + advancedLabel: () => t("common:breadcrumb-advanced-search-results"), + addressLabel: () => t("common:breadcrumb-address-search-results"), + defaultLabel: () => t("common:breadcrumb-search-results") }); + const caseDetailRouteRenderersByPath = createCaseDetailRouteRenderers({ + t, + router, + isWelsh, + caseResultsHref, + breadcrumbLabel, + fallbackSearchTitle, + caseReferenceDisplay, + getViewAllLabel, + renderLinkCrumb, + renderCaseReferenceCrumb, + renderMyPortalCrumb + }); + + const mappedRouteRendererMaps = buildBreadcrumbRendererMaps({ + simpleRouteRenderersByPath, + simpleLinkTextPairRenderersByPath, + simpleMyPortalRouteRenderersByPath, + caseDetailRouteRenderersByPath + }); + const staticTextCrumbLabel = getStaticTextCrumbLabel(pathname); return ( @@ -340,16 +354,6 @@ const Breadcrumbs = (props) => { )} - {isPath("/case/[ticketnumber]") && ( - <> - {renderLinkCrumb( - caseResultsHref, - breadcrumbLabel - )} - {renderCaseReferenceCrumb(fallbackSearchTitle)} - - )} - {isPath("/case/id/[incident]") && ( <> {renderLinkCrumb( @@ -394,17 +398,6 @@ const Breadcrumbs = (props) => { )} - {isPath("/myportal/case/[ticketnumber]") && ( - <> - {renderMyPortalCrumb()} - {renderLinkCrumb( - breadcrumbHref, - breadcrumbLabel - )} - {renderCaseReferenceCrumb(caseReferenceDisplay)} - - )} - {isPath("/myportal/dnsdetails") && ( <> {renderMyPortalCrumb()} diff --git a/lib/routing/breadcrumbRendererFactories.js b/lib/routing/breadcrumbRendererFactories.js index 88ceb51e..756a8054 100644 --- a/lib/routing/breadcrumbRendererFactories.js +++ b/lib/routing/breadcrumbRendererFactories.js @@ -17,7 +17,8 @@ export const createSimpleRouteRenderers = ({ "/viewall": () => renderMyPortalSectionCrumbs(t("common:breadcrumb-your-cases")), "/myportal/dnsapplications": () => - renderMyPortalSectionCrumbs(t("dnsCommon:service-name")) + renderMyPortalSectionCrumbs(t("dnsCommon:service-name")), + "/dnsapplications": () => renderTextCrumb(t("dnsCommon:service-name")) }); export const createSimpleLinkTextPairRenderers = ({ @@ -105,3 +106,133 @@ export const createSimpleMyPortalRouteRenderers = ({ ) }); + +export const createCaseDetailRouteRenderers = ({ + t, + router, + isWelsh, + caseResultsHref, + breadcrumbLabel, + fallbackSearchTitle, + caseReferenceDisplay, + getViewAllLabel, + renderLinkCrumb, + renderCaseReferenceCrumb, + renderMyPortalCrumb +}) => ({ + "/case/[ticketnumber]": () => { + const { ads, adv, va, key } = router.query; + + if (ads === "true") { + return ( + <> + {renderLinkCrumb( + isWelsh + ? `/${router.locale}/chwiliadcyfeiriadau` + : "/addresssearch", + t("common:breadcrumb-address-search") + )} + {renderLinkCrumb( + caseResultsHref, + t("common:breadcrumb-address-search-results") + )} + {renderCaseReferenceCrumb(fallbackSearchTitle)} + + ); + } + + if (adv === "true") { + return ( + <> + {renderLinkCrumb( + isWelsh + ? `/${router.locale}/advancedsearch` + : "/advancedsearch", + t("common:breadcrumb-advanced-search") + )} + {renderLinkCrumb( + caseResultsHref, + t("common:breadcrumb-advanced-search-results") + )} + {renderCaseReferenceCrumb(fallbackSearchTitle)} + + ); + } + + if (va === "true") { + return ( + <> + {renderLinkCrumb("/myportal/viewall", getViewAllLabel(key))} + {renderCaseReferenceCrumb(fallbackSearchTitle)} + + ); + } + + return ( + <> + {renderLinkCrumb(caseResultsHref, breadcrumbLabel)} + {renderCaseReferenceCrumb(fallbackSearchTitle)} + + ); + }, + + "/myportal/case/[ticketnumber]": () => { + const { ads, adv, va, key } = router.query; + + if (ads === "true") { + return ( + <> + {renderMyPortalCrumb()} + {renderLinkCrumb( + isWelsh + ? `/${router.locale}/fymhorth/chwiliadcyfeiriadau` + : "/myportal/addresssearch", + t("common:breadcrumb-address-search") + )} + {renderLinkCrumb( + caseResultsHref, + t("common:breadcrumb-address-search-results") + )} + {renderCaseReferenceCrumb(caseReferenceDisplay)} + + ); + } + + if (adv === "true") { + return ( + <> + {renderMyPortalCrumb()} + {renderLinkCrumb( + isWelsh + ? `/${router.locale}/myportal/advancedsearch` + : "/myportal/advancedsearch", + t("common:breadcrumb-advanced-search") + )} + {renderLinkCrumb( + caseResultsHref, + t("common:breadcrumb-advanced-search-results") + )} + {renderCaseReferenceCrumb(caseReferenceDisplay)} + + ); + } + + if (va === "true") { + return ( + <> + {renderMyPortalCrumb()} + {renderLinkCrumb("/myportal/viewall", getViewAllLabel(key))} + {renderCaseReferenceCrumb(caseReferenceDisplay)} + + ); + } + + return ( + <> + {renderMyPortalCrumb()} + {renderLinkCrumb(caseResultsHref, breadcrumbLabel)} + {renderCaseReferenceCrumb(caseReferenceDisplay)} + + ); + } +}); diff --git a/lib/routing/breadcrumbRouteMaps.js b/lib/routing/breadcrumbRouteMaps.js index cf5038bc..14375002 100644 --- a/lib/routing/breadcrumbRouteMaps.js +++ b/lib/routing/breadcrumbRouteMaps.js @@ -15,11 +15,13 @@ const resolveMappedRouteRenderer = (path, routeRendererMaps = []) => { const buildBreadcrumbRendererMaps = ({ simpleRouteRenderersByPath, simpleLinkTextPairRenderersByPath, - simpleMyPortalRouteRenderersByPath + simpleMyPortalRouteRenderersByPath, + caseDetailRouteRenderersByPath }) => [ simpleRouteRenderersByPath, simpleLinkTextPairRenderersByPath, - simpleMyPortalRouteRenderersByPath + simpleMyPortalRouteRenderersByPath, + caseDetailRouteRenderersByPath ]; module.exports = {