Extract case detail breadcrumb routes into shared renderer factory

This commit is contained in:
2026-04-09 13:16:56 +01:00
parent 062cd23463
commit c264830934
3 changed files with 167 additions and 41 deletions
+31 -38
View File
@@ -20,7 +20,8 @@ import {
import { import {
createSimpleRouteRenderers, createSimpleRouteRenderers,
createSimpleLinkTextPairRenderers, createSimpleLinkTextPairRenderers,
createSimpleMyPortalRouteRenderers createSimpleMyPortalRouteRenderers,
createCaseDetailRouteRenderers
} from "../lib/routing/breadcrumbRendererFactories"; } from "../lib/routing/breadcrumbRendererFactories";
const Breadcrumbs = (props) => { const Breadcrumbs = (props) => {
@@ -90,12 +91,11 @@ const Breadcrumbs = (props) => {
const getViewAllLabel = (viewKey) => { const getViewAllLabel = (viewKey) => {
const labelsByKey = { const labelsByKey = {
awaitingSubmissionDetails: t( awaitingSubmissionDetails: () =>
"myportal:awatitingsubmission-card-title" t("myportal:awatitingsubmission-card-title"),
), watchedCases: () => t("myportal:watchedcases-card-title"),
watchedCases: t("myportal:watchedcases-card-title"), myCases: () => t("myportal:mycases-card-title"),
myCases: t("myportal:mycases-card-title"), myRepresentations: () => t("myportal:myrepresentations-card-title"),
myRepresentations: t("myportal:myrepresentations-card-title"),
mySubmittedReps: "Submitted representations" mySubmittedReps: "Submitted representations"
}; };
@@ -107,7 +107,6 @@ const Breadcrumbs = (props) => {
"/account/register": () => "/account/register": () =>
t("account:register-new-account-heading"), t("account:register-new-account-heading"),
"/dns": () => t("dnsCommon:service-name"), "/dns": () => t("dnsCommon:service-name"),
"/dnsapplications": () => t("dnsCommon:service-name"),
"/dns/application-process": () => "Guidance", "/dns/application-process": () => "Guidance",
"/dns/help": () => "Help", "/dns/help": () => "Help",
"/dns/contact-us": () => t("common:footer-contact-us-link-label"), "/dns/contact-us": () => t("common:footer-contact-us-link-label"),
@@ -227,12 +226,6 @@ const Breadcrumbs = (props) => {
renderMyPortalSectionCrumbs renderMyPortalSectionCrumbs
}); });
const mappedRouteRendererMaps = buildBreadcrumbRendererMaps({
simpleRouteRenderersByPath,
simpleLinkTextPairRenderersByPath,
simpleMyPortalRouteRenderersByPath
});
const resolveMappedRouteRenderer = (path) => { const resolveMappedRouteRenderer = (path) => {
return resolveMappedRouteRendererByMaps(path, mappedRouteRendererMaps); return resolveMappedRouteRendererByMaps(path, mappedRouteRendererMaps);
}; };
@@ -247,11 +240,32 @@ const Breadcrumbs = (props) => {
query: router.query, query: router.query,
hasSession: Boolean(session), hasSession: Boolean(session),
getViewAllLabel, getViewAllLabel,
advancedLabel: t("common:breadcrumb-advanced-search-results"), advancedLabel: () => t("common:breadcrumb-advanced-search-results"),
addressLabel: t("common:breadcrumb-address-search-results"), addressLabel: () => t("common:breadcrumb-address-search-results"),
defaultLabel: t("common:breadcrumb-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); const staticTextCrumbLabel = getStaticTextCrumbLabel(pathname);
return ( return (
@@ -340,16 +354,6 @@ const Breadcrumbs = (props) => {
</> </>
)} )}
{isPath("/case/[ticketnumber]") && (
<>
{renderLinkCrumb(
caseResultsHref,
breadcrumbLabel
)}
{renderCaseReferenceCrumb(fallbackSearchTitle)}
</>
)}
{isPath("/case/id/[incident]") && ( {isPath("/case/id/[incident]") && (
<> <>
{renderLinkCrumb( {renderLinkCrumb(
@@ -394,17 +398,6 @@ const Breadcrumbs = (props) => {
</> </>
)} )}
{isPath("/myportal/case/[ticketnumber]") && (
<>
{renderMyPortalCrumb()}
{renderLinkCrumb(
breadcrumbHref,
breadcrumbLabel
)}
{renderCaseReferenceCrumb(caseReferenceDisplay)}
</>
)}
{isPath("/myportal/dnsdetails") && ( {isPath("/myportal/dnsdetails") && (
<> <>
{renderMyPortalCrumb()} {renderMyPortalCrumb()}
+132 -1
View File
@@ -17,7 +17,8 @@ export const createSimpleRouteRenderers = ({
"/viewall": () => "/viewall": () =>
renderMyPortalSectionCrumbs(t("common:breadcrumb-your-cases")), renderMyPortalSectionCrumbs(t("common:breadcrumb-your-cases")),
"/myportal/dnsapplications": () => "/myportal/dnsapplications": () =>
renderMyPortalSectionCrumbs(t("dnsCommon:service-name")) renderMyPortalSectionCrumbs(t("dnsCommon:service-name")),
"/dnsapplications": () => renderTextCrumb(t("dnsCommon:service-name"))
}); });
export const createSimpleLinkTextPairRenderers = ({ 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)}
</>
);
}
});
+4 -2
View File
@@ -15,11 +15,13 @@ const resolveMappedRouteRenderer = (path, routeRendererMaps = []) => {
const buildBreadcrumbRendererMaps = ({ const buildBreadcrumbRendererMaps = ({
simpleRouteRenderersByPath, simpleRouteRenderersByPath,
simpleLinkTextPairRenderersByPath, simpleLinkTextPairRenderersByPath,
simpleMyPortalRouteRenderersByPath simpleMyPortalRouteRenderersByPath,
caseDetailRouteRenderersByPath
}) => [ }) => [
simpleRouteRenderersByPath, simpleRouteRenderersByPath,
simpleLinkTextPairRenderersByPath, simpleLinkTextPairRenderersByPath,
simpleMyPortalRouteRenderersByPath simpleMyPortalRouteRenderersByPath,
caseDetailRouteRenderersByPath
]; ];
module.exports = { module.exports = {