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 {
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()}
+132 -1
View File
@@ -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)}
</>
);
}
});
+4 -2
View File
@@ -15,11 +15,13 @@ const resolveMappedRouteRenderer = (path, routeRendererMaps = []) => {
const buildBreadcrumbRendererMaps = ({
simpleRouteRenderersByPath,
simpleLinkTextPairRenderersByPath,
simpleMyPortalRouteRenderersByPath
simpleMyPortalRouteRenderersByPath,
caseDetailRouteRenderersByPath
}) => [
simpleRouteRenderersByPath,
simpleLinkTextPairRenderersByPath,
simpleMyPortalRouteRenderersByPath
simpleMyPortalRouteRenderersByPath,
caseDetailRouteRenderersByPath
];
module.exports = {