Browse Source

fix(@vben/layouts): preserve distinct unnamed breadcrumb routes

pull/8346/head
dingwenbin 4 weeks ago
parent
commit
a1f2b88ad9
  1. 26
      packages/effects/layouts/src/widgets/__tests__/breadcrumb-routes.test.ts
  2. 4
      packages/effects/layouts/src/widgets/breadcrumb-routes.ts

26
packages/effects/layouts/src/widgets/__tests__/breadcrumb-routes.test.ts

@ -4,7 +4,10 @@ import { describe, expect, it, vi } from 'vitest';
import { resolveBreadcrumbMatches } from '../breadcrumb-routes';
function createMatch(name: string, path: string): RouteLocationMatched {
function createMatch(
name: RouteLocationMatched['name'],
path: string,
): RouteLocationMatched {
return { name, path } as RouteLocationMatched;
}
@ -66,4 +69,25 @@ describe('resolveBreadcrumbMatches', () => {
),
).toEqual([root, list, detail]);
});
it('keeps distinct unnamed matches with the same normalized path', () => {
const parent = createMatch(undefined, '/list');
const defaultChild = createMatch(undefined, '/list');
const result = resolveBreadcrumbMatches(
{
matched: [parent, defaultChild],
meta: {
activePath: '/list',
breadcrumbUseActivePath: true,
title: 'List',
},
},
() => ({ matched: [parent] }),
);
expect(result).toHaveLength(2);
expect(result[0]).toBe(parent);
expect(result[1]).toBe(defaultChild);
});
});

4
packages/effects/layouts/src/widgets/breadcrumb-routes.ts

@ -27,9 +27,9 @@ export function resolveBreadcrumbMatches(
return route.matched;
}
const seen = new Set(activeMatches.map((match) => match.name ?? match.path));
const seen = new Set(activeMatches.map((match) => match.name ?? match));
const currentMatches = route.matched.filter((match) => {
const key = match.name ?? match.path;
const key = match.name ?? match;
if (seen.has(key)) {
return false;
}

Loading…
Cancel
Save