Skip to content

Commit bf0099d

Browse files
authored
fix: partitionBreadcrumbItems miscalculated endDisplayedItems (#30005)
endDisplayedItems is incorrect when numberOfItemsToHide <= 0 Signed-off-by: Gordon Smith <[email protected]>
1 parent af6a9cb commit bf0099d

File tree

3 files changed

+43
-5
lines changed

3 files changed

+43
-5
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "patch",
3+
"comment": "partitionBreadcrumbItems miscalculated endDisplayedItems when endDisplayedItems is incorrect when numberOfItemsToHide <= 0",
4+
"packageName": "@fluentui/react-breadcrumb",
5+
"email": "[email protected]",
6+
"dependentChangeType": "patch"
7+
}

packages/react-components/react-breadcrumb/src/utils/partitionBreadcrumbItems.test.ts

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import { partitionBreadcrumbItems, PartitionBreadcrumbItemsOptions } from './partitionBreadcrumbItems';
2+
3+
type TestData = [PartitionBreadcrumbItemsOptions<number>, ReturnType<typeof partitionBreadcrumbItems>][];
4+
25
const items = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
3-
const testData = [
6+
const testData: TestData = [
47
[
58
{ items, overflowIndex: 2, maxDisplayedItems: 3 },
69
{ startDisplayedItems: [0, 1], overflowItems: [2, 3, 4, 5, 6, 7, 8, 9], endDisplayedItems: [10] },
@@ -25,9 +28,21 @@ const testData = [
2528
{ items, maxDisplayedItems: 9, overflowIndex: 9 },
2629
{ startDisplayedItems: [0, 1, 2, 3, 4, 5, 6, 7], overflowItems: [8, 9], endDisplayedItems: [10] },
2730
],
31+
[
32+
{ items, maxDisplayedItems: 999, overflowIndex: 999 },
33+
{ startDisplayedItems: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], overflowItems: undefined, endDisplayedItems: undefined },
34+
],
35+
[
36+
{ items, maxDisplayedItems: 11, overflowIndex: 11 },
37+
{ startDisplayedItems: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], overflowItems: undefined, endDisplayedItems: undefined },
38+
],
2839
];
2940

30-
const maxDisplayedItemsData = [
41+
const maxDisplayedItemsData: TestData = [
42+
[
43+
{ items, maxDisplayedItems: 999 },
44+
{ startDisplayedItems: [0], overflowItems: undefined, endDisplayedItems: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] },
45+
],
3146
[
3247
{ items, maxDisplayedItems: 3 },
3348
{ startDisplayedItems: [0], overflowItems: [1, 2, 3, 4, 5, 6, 7, 8], endDisplayedItems: [9, 10] },
@@ -37,7 +52,19 @@ const maxDisplayedItemsData = [
3752
{ startDisplayedItems: [0], overflowItems: [1, 2, 3, 4, 5, 6, 7, 8, 9], endDisplayedItems: [10] },
3853
],
3954
];
40-
const overflowIndexData = [
55+
const overflowIndexData: TestData = [
56+
[
57+
{ items, overflowIndex: 999 },
58+
{ startDisplayedItems: [0, 1, 2, 3, 4], overflowItems: [5, 6, 7, 8, 9], endDisplayedItems: [10] },
59+
],
60+
[
61+
{ items, overflowIndex: 10 },
62+
{ startDisplayedItems: [0, 1, 2, 3, 4], overflowItems: [5, 6, 7, 8, 9], endDisplayedItems: [10] },
63+
],
64+
[
65+
{ items, overflowIndex: 6 },
66+
{ startDisplayedItems: [0, 1, 2, 3, 4], overflowItems: [5, 6, 7, 8, 9], endDisplayedItems: [10] },
67+
],
4168
[
4269
{ items, overflowIndex: 2 },
4370
{ startDisplayedItems: [0, 1], overflowItems: [2, 3, 4, 5, 6], endDisplayedItems: [7, 8, 9, 10] },

packages/react-components/react-breadcrumb/src/utils/partitionBreadcrumbItems.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,16 @@ export const partitionBreadcrumbItems = <T>(
3636
const numberItemsToHide = itemsCount - maxDisplayedItems;
3737

3838
if (numberItemsToHide > 0) {
39-
overflowIndex = overflowIndex === maxDisplayedItems ? overflowIndex - 1 : overflowIndex;
39+
overflowIndex = overflowIndex >= maxDisplayedItems ? maxDisplayedItems - 1 : overflowIndex;
4040
const menuLastItemIdx = overflowIndex + numberItemsToHide;
4141

4242
startDisplayedItems = startDisplayedItems.slice(0, overflowIndex);
4343
overflowItems = items.slice(overflowIndex, menuLastItemIdx);
44-
endDisplayedItems = items.slice(menuLastItemIdx, itemsCount);
44+
if (menuLastItemIdx < itemsCount) {
45+
endDisplayedItems = items.slice(menuLastItemIdx, itemsCount);
46+
}
47+
} else if (overflowIndex < itemsCount) {
48+
endDisplayedItems = items.slice(overflowIndex, itemsCount);
4549
}
4650

4751
return {

0 commit comments

Comments
 (0)