Skip to content

Commit c0f0e3d

Browse files
committed
fix: remove error when recreating node
1 parent 00b0c80 commit c0f0e3d

2 files changed

Lines changed: 19 additions & 1 deletion

File tree

packages/lib/src/spatial-navigation/components/virtualizedList/helpers/updateVirtualNodeRegistration.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ describe('updateVirtualNodeRegistration', () => {
1111
previousItems,
1212
currentItems,
1313
addVirtualNode: mockAddNode,
14+
removeVirtualNode: jest.fn(),
1415
});
1516

1617
expect(mockAddNode).toHaveBeenCalledTimes(2);
@@ -24,6 +25,7 @@ describe('updateVirtualNodeRegistration', () => {
2425
previousItems,
2526
currentItems,
2627
addVirtualNode: mockAddNode,
28+
removeVirtualNode: jest.fn(),
2729
});
2830

2931
expect(mockAddNode).not.toHaveBeenCalled();

packages/lib/src/spatial-navigation/components/virtualizedList/helpers/updateVirtualNodeRegistration.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,20 @@ const registerNewNode = <T>({
1515
});
1616
};
1717

18+
const unregisterOldNode = <T>({
19+
currentItems,
20+
previousItems,
21+
removeVirtualNode,
22+
}: {
23+
currentItems: Array<T>;
24+
previousItems: Array<T>;
25+
removeVirtualNode: (index: number) => void;
26+
}) => {
27+
for (let index = previousItems.length - 1; index > currentItems.length - 1; index--) {
28+
removeVirtualNode(index);
29+
}
30+
};
31+
1832
/**
1933
* This function aims to compare 2 arrays of items : currentItems and previousItems and :
2034
* - addVirtualNode for every item from currentItems that weren't in previousItems
@@ -26,16 +40,18 @@ export const updateVirtualNodeRegistration = <T>({
2640
currentItems,
2741
previousItems,
2842
addVirtualNode,
43+
removeVirtualNode,
2944
}: {
3045
currentItems: Array<T>;
3146
previousItems: Array<T>;
3247
addVirtualNode: (index: number) => void;
48+
removeVirtualNode: (index: number) => void;
3349
}) => {
3450
// Step 1 : addVirtualNode for every item from currentItems that weren't in previousItems
3551
registerNewNode({ currentItems, previousItems, addVirtualNode });
3652

3753
// Step 2 : removeVirtualNode for every from previousItems that aren't there anymore in currentItems
38-
// TODO
54+
unregisterOldNode({ currentItems, previousItems, removeVirtualNode });
3955

4056
// Step 3 : re-order all the items
4157
// TODO

0 commit comments

Comments
 (0)