Skip to content

Commit dc5c7e2

Browse files
authored
refactor: include current nodes in slot observer callback (#7428)
1 parent f35f093 commit dc5c7e2

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

packages/component-base/src/slot-observer.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
export class SlotObserver {
1111
constructor(
1212
slot: HTMLSlotElement,
13-
callback: (info: { addedNodes: Node[]; movedNodes: Node[]; removedNodes: Node[] }) => void,
13+
callback: (info: { addedNodes: Node[]; currentNodes: Node[]; movedNodes: Node[]; removedNodes: Node[] }) => void,
1414
);
1515

1616
/**

packages/component-base/src/slot-observer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ export class SlotObserver {
9797
}
9898

9999
if (addedNodes.length || removedNodes.length || movedNodes.length) {
100-
this.callback({ addedNodes, movedNodes, removedNodes });
100+
this.callback({ addedNodes, currentNodes, movedNodes, removedNodes });
101101
}
102102

103103
this._storedNodes = currentNodes;

packages/component-base/test/slot-observer.test.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,4 +162,28 @@ describe('SlotObserver', () => {
162162

163163
expect(spy.calledOnce).to.be.true;
164164
});
165+
166+
it('should include current nodes in the callback', async () => {
167+
spy = sinon.spy();
168+
observer = new SlotObserver(slot, spy);
169+
expect(spy.called).to.be.false;
170+
171+
await Promise.resolve();
172+
173+
const childNodes = [...host.childNodes];
174+
const currentNodes = spy.firstCall.args[0].currentNodes;
175+
176+
expect(currentNodes).to.be.an('array');
177+
expect(currentNodes.length).to.equal(3);
178+
expect(currentNodes).to.eql(childNodes);
179+
180+
spy.resetHistory();
181+
182+
childNodes[1].remove();
183+
observer.flush();
184+
185+
const newCurrentNodes = spy.firstCall.args[0].currentNodes;
186+
expect(newCurrentNodes.length).to.equal(2);
187+
expect(newCurrentNodes).to.eql([childNodes[0], childNodes[2]]);
188+
});
165189
});

0 commit comments

Comments
 (0)