Skip to content

Commit 5143081

Browse files
chanceaclarkclaude
andcommitted
fix(core): TRAC-281 Prevent breadcrumb array mutation on cached web pages
`.reverse()` was called directly on the breadcrumbs array returned from React's `cache()`, mutating the shared reference. When `generateMetadata` and `getWebPageBreadcrumbs` raced during render, the cached array could be in reversed order, causing parent breadcrumb entries to disappear. Also fix off-by-one in `truncateBreadcrumbs` where arrays exactly at the target length were incorrectly truncated, replacing the middle item with an ellipsis. Fixes TRAC-281 Co-Authored-By: Claude <noreply@anthropic.com>
1 parent a8dd99e commit 5143081

3 files changed

Lines changed: 3 additions & 3 deletions

File tree

core/app/[locale]/(default)/webpages/[id]/contact/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ async function getWebPageBreadcrumbs(id: string): Promise<Breadcrumb[]> {
6666
const t = await getTranslations('WebPages.ContactUs');
6767

6868
const webpage = await getWebPage(id);
69-
const [, ...rest] = webpage.breadcrumbs.reverse();
69+
const [, ...rest] = [...webpage.breadcrumbs].reverse();
7070
const breadcrumbs = [
7171
{
7272
label: t('home'),

core/app/[locale]/(default)/webpages/[id]/normal/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ async function getWebPageBreadcrumbs(id: string): Promise<Breadcrumb[]> {
4141
const t = await getTranslations('WebPages.Normal');
4242

4343
const webpage = await getWebPage(id);
44-
const [, ...rest] = webpage.breadcrumbs.reverse();
44+
const [, ...rest] = [...webpage.breadcrumbs].reverse();
4545
const breadcrumbs = [
4646
{
4747
label: t('home'),

core/data-transformers/breadcrumbs-transformer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export const breadcrumbsTransformer = (breadcrumbs: BreadcrumbsResult['breadcrum
2222
};
2323

2424
export function truncateBreadcrumbs(breadcrumbs: Breadcrumb[], length: number): Breadcrumb[] {
25-
if (breadcrumbs.length < length) {
25+
if (breadcrumbs.length <= length) {
2626
return breadcrumbs;
2727
}
2828

0 commit comments

Comments
 (0)