Skip to content

Commit e0daf83

Browse files
driskullbenelan
authored andcommitted
fix(list, block-group): drag menu 'Move to' actions broken when list elements have explicit ids (#11515)
**Related Issue:** #11513 ## Summary - Fix keyboard moving `MoveTo` object to always have unique identifiers - Previously, it was using the incorrect id - There's no reason to use the element id so just using a guid makes more sense here - Add tests
1 parent 6c1bdc7 commit e0daf83

File tree

4 files changed

+66
-2
lines changed

4 files changed

+66
-2
lines changed

packages/calcite-components/src/components/block-group/block-group.e2e.ts

+32
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,38 @@ describe("calcite-block-group", () => {
246246

247247
await page.waitForChanges();
248248

249+
const letterBlockSelector = `calcite-block-group[group="letters"] calcite-block`;
250+
const letterBlocks = await findAll(page, letterBlockSelector);
251+
252+
expect(letterBlocks.length).toBe(6);
253+
254+
const moveToItemIds = await page.evaluate((letterBlockSelector) => {
255+
return Array.from(document.querySelectorAll(letterBlockSelector))
256+
.map((item: Block["el"]) => item.moveToItems.map((moveToItem) => moveToItem.id))
257+
.flat();
258+
}, letterBlockSelector);
259+
260+
expect(moveToItemIds.length).toBe(6);
261+
262+
const uniqueMoveToItemIds = new Set(moveToItemIds);
263+
264+
expect(uniqueMoveToItemIds.size).toBe(2);
265+
266+
const moveToItemElementIds = await page.evaluate((letterBlockSelector) => {
267+
return Array.from(document.querySelectorAll(letterBlockSelector))
268+
.map((item: Block["el"]) => item.moveToItems.map((moveToItem) => moveToItem.element.id))
269+
.flat();
270+
}, letterBlockSelector);
271+
272+
expect(moveToItemElementIds.length).toBe(6);
273+
expect(moveToItemElementIds[0]).toBe("second-letters");
274+
expect(moveToItemElementIds[1]).toBe("second-letters");
275+
276+
expect(moveToItemElementIds[2]).toBe("first-letters");
277+
expect(moveToItemElementIds[3]).toBe("first-letters");
278+
expect(moveToItemElementIds[4]).toBe("first-letters");
279+
expect(moveToItemElementIds[5]).toBe("first-letters");
280+
249281
// Workaround for page.spyOnEvent() failing due to drag event payload being serialized and there being circular JSON structures from the payload elements. See: https://github.com/Esri/calcite-design-system/issues/7643
250282
await page.evaluate(() => {
251283
const testWindow = window as TestWindow;

packages/calcite-components/src/components/block-group/block-group.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ export class BlockGroup extends LitElement implements InteractiveComponent, Sort
204204
this.moveToItems = blockGroups.map((element) => ({
205205
element,
206206
label: element.label ?? element.id,
207-
id: el.id || guid(),
207+
id: guid(),
208208
}));
209209
}
210210

packages/calcite-components/src/components/list/list.e2e.ts

+32
Original file line numberDiff line numberDiff line change
@@ -1651,6 +1651,38 @@ describe("calcite-list", () => {
16511651

16521652
await page.waitForChanges();
16531653

1654+
const letterItemSelector = `calcite-list[group="letters"] calcite-list-item`;
1655+
const letterItems = await findAll(page, letterItemSelector);
1656+
1657+
expect(letterItems.length).toBe(6);
1658+
1659+
const moveToItemIds = await page.evaluate((letterItemSelector) => {
1660+
return Array.from(document.querySelectorAll(letterItemSelector))
1661+
.map((item: ListItem["el"]) => item.moveToItems.map((moveToItem) => moveToItem.id))
1662+
.flat();
1663+
}, letterItemSelector);
1664+
1665+
expect(moveToItemIds.length).toBe(6);
1666+
1667+
const uniqueMoveToItemIds = new Set(moveToItemIds);
1668+
1669+
expect(uniqueMoveToItemIds.size).toBe(2);
1670+
1671+
const moveToItemElementIds = await page.evaluate((letterItemSelector) => {
1672+
return Array.from(document.querySelectorAll(letterItemSelector))
1673+
.map((item: ListItem["el"]) => item.moveToItems.map((moveToItem) => moveToItem.element.id))
1674+
.flat();
1675+
}, letterItemSelector);
1676+
1677+
expect(moveToItemElementIds.length).toBe(6);
1678+
expect(moveToItemElementIds[0]).toBe("second-letters");
1679+
expect(moveToItemElementIds[1]).toBe("second-letters");
1680+
1681+
expect(moveToItemElementIds[2]).toBe("first-letters");
1682+
expect(moveToItemElementIds[3]).toBe("first-letters");
1683+
expect(moveToItemElementIds[4]).toBe("first-letters");
1684+
expect(moveToItemElementIds[5]).toBe("first-letters");
1685+
16541686
// Workaround for page.spyOnEvent() failing due to drag event payload being serialized and there being circular JSON structures from the payload elements. See: https://github.com/Esri/calcite-design-system/issues/7643
16551687
await page.evaluate(() => {
16561688
const testWindow = window as TestWindow;

packages/calcite-components/src/components/list/list.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -854,7 +854,7 @@ export class List
854854
this.moveToItems = lists.map((element) => ({
855855
element,
856856
label: element.label ?? element.id,
857-
id: el.id || guid(),
857+
id: guid(),
858858
}));
859859

860860
const groupItems = Array.from(this.el.querySelectorAll(listItemGroupSelector));

0 commit comments

Comments
 (0)