diff --git a/components/breadcrumbs.js b/components/breadcrumbs.js
index 92a51c49..9d6ffd51 100644
--- a/components/breadcrumbs.js
+++ b/components/breadcrumbs.js
@@ -113,6 +113,26 @@ const Breadcrumbs = (props) => {
return staticTextCrumbByPath[path] || null;
};
+ const getSimpleRouteRenderer = (path) => {
+ const simpleRouteRenderersByPath = {
+ "/myportal": () => renderTextCrumb(t("myportal:page-title")),
+ "/searchresults": () =>
+ renderTextCrumb(t("common:breadcrumb-search-results")),
+ "/advancedsearch": () =>
+ renderTextCrumb(t("common:breadcrumb-advanced-search")),
+ "/addresssearch": () =>
+ renderTextCrumb(t("common:breadcrumb-address-search")),
+ "/contactus": () =>
+ renderTextCrumb(t("common:footer-contact-us-link-label")),
+ "/viewall": () =>
+ renderMyPortalSectionCrumbs(t("common:breadcrumb-your-cases")),
+ "/myportal/dnsapplications": () =>
+ renderMyPortalSectionCrumbs(t("dnsCommon:service-name"))
+ };
+
+ return simpleRouteRenderersByPath[path] || null;
+ };
+
const renderMyPortalCrumb = () => (
@@ -208,11 +228,13 @@ const Breadcrumbs = (props) => {
t("common:service-name-breadcrumb")
)}
- {isPath("/myportal") && (
-
- {t("myportal:page-title")}
-
- )}
+ {(() => {
+ const renderSimpleRoute =
+ getSimpleRouteRenderer(pathname);
+ return renderSimpleRoute
+ ? renderSimpleRoute()
+ : null;
+ })()}
{isPath("/myportal/searchresults") && (
<>
{renderAnchorCrumb(
@@ -224,27 +246,6 @@ const Breadcrumbs = (props) => {
>
)}
- {isPath("/searchresults") && (
- <>
- {renderTextCrumb(
- t("common:breadcrumb-search-results")
- )}
- >
- )}
- {isPath("/advancedsearch") && (
- <>
- {renderTextCrumb(
- t("common:breadcrumb-advanced-search")
- )}
- >
- )}
- {isPath("/addresssearch") && (
- <>
- {renderTextCrumb(
- t("common:breadcrumb-address-search")
- )}
- >
- )}
{isPath("/myportal/addresssearch") &&
renderMyPortalSectionCrumbs(
t("common:breadcrumb-address-search")
@@ -257,13 +258,6 @@ const Breadcrumbs = (props) => {
renderMyPortalSectionCrumbs(
t("common:footer-contact-us-link-label")
)}
- {isPath("/contactus") && (
- <>
- {renderTextCrumb(
- t("common:footer-contact-us-link-label")
- )}
- >
- )}
{isPath("/addresssearchresults") && (
<>
{" "}
@@ -384,14 +378,6 @@ const Breadcrumbs = (props) => {
>
)}
- {isPath("/viewall") && (
- <>
- {renderMyPortalCrumb()}
- {renderTextCrumb(
- t("common:breadcrumb-your-cases")
- )}
- >
- )}
{isPath("/myportal/viewall") && (
<>
{renderMyPortalCrumb()}
@@ -489,13 +475,6 @@ const Breadcrumbs = (props) => {
{renderCaseReferenceCrumb(caseReferenceDisplay)}
>
)}
- {isPath("/myportal/dnsapplications") && (
- <>
- {" "}
- {renderMyPortalCrumb()}
- {renderTextCrumb(t("dnsCommon:service-name"))}
- >
- )}
{isPath("/myportal/dnsdetails") && (
<>
{renderMyPortalCrumb()}
diff --git a/memory-bank/change-log.md b/memory-bank/change-log.md
index bfd6019b..90f5a707 100644
--- a/memory-bank/change-log.md
+++ b/memory-bank/change-log.md
@@ -333,6 +333,34 @@ Follow-ups:
- Next slice recommendation: extract a small route-to-renderer map for static single-branch crumbs (where branch has no bespoke side-effects) so the main JSX conditional chain shrinks further without altering explicit behavior in dynamic/sensitive branches.
+### CL-22541-L: breadcrumbs simple-route renderer map introduction
+
+date: 2026-04-09
+author: Cline
+scope: `components/breadcrumbs.js`
+type: change
+rationale: Continue bounded readability refactor by introducing a small route-to-renderer map for simple static branches, reducing conditional-chain length while preserving explicit dynamic branches.
+impact: Refactor-only structural deduplication/readability improvement; no intended route/auth/session/API/EN-CY/a11y behavior change.
+status: completed
+
+Summary:
+
+- Added `getSimpleRouteRenderer(path)` in `components/breadcrumbs.js` for simple routes with no bespoke side effects.
+- Introduced a single invocation block that resolves and renders mapped simple routes when present.
+- Migrated simple route branches into the map, including:
+ - `/myportal`, `/searchresults`, `/advancedsearch`, `/addresssearch`, `/contactus`
+ - `/viewall`, `/myportal/dnsapplications`
+- Preserved existing label text, helper usage, and rendered crumb sequence semantics.
+
+Validation:
+
+- `npx eslint components/breadcrumbs.js` -> pass.
+- `node tests/phase22/index.test.cjs` -> pass (combined suite).
+
+Follow-ups:
+
+- Next slice recommendation: extract a second tiny map for simple "link + text" pair routes (no callbacks, no side effects) to further shrink the conditional chain while keeping callback/dynamic branches explicit.
+
### CL-00X: 22500 `components/elements/index.js` Phase 1 helper extraction
date: 2026-04-07