1718
1719
constructor(
1721
>
onAddItem: Event<TItem>,
1722
>
onRemoveItem: Event<TItem>,
1723
>
getEvent: (item: TItem) => Event<TEventType>
1724
>
) {
1725
>
const multiplexer = this._store.add(new EventMultiplexer<TEventType>());
1726
>
const itemListeners = this._store.add(new DisposableMap<TItem, IDisposable>());
1727
>
1728
>
function addItem(instance: TItem) {
1729
>
itemListeners.set(instance, multiplexer.add(getEvent(instance)));
1730
>
}
1731
>
1732
>
// Existing items
1733
>
for (const instance of items) {
1734
>
addItem(instance);
1735
>
}
1736
>
1737
>
// Added items
1738
>
this._store.add(onAddItem(instance => {
1739
addItem(instance);
1741
>
1742
>
// Removed items
1743
>
this._store.add(onRemoveItem(instance => {
1744
itemListeners.deleteAndDispose(instance);
1746
>
1747
>
this.event = multiplexer.event;
1748
>
}
1749
1750
dispose() {
1752
>
}
1753
}
1754