@itwin/core-bentley
Version:
Bentley JavaScript core components
52 lines • 2.14 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
* See LICENSE.md in the project root for license terms and full copyright notice.
*--------------------------------------------------------------------------------------------*/
/** @packageDocumentation
* @module Collections
*/
import { BeEvent } from "./BeEvent";
/** A standard [Set<T>](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) that emits events when its contents change.
* @public
*/
export class ObservableSet extends Set {
/** Emitted after `item` is added to this set. */
onAdded = new BeEvent();
/** Emitted after `item` is deleted from this set. */
onDeleted = new BeEvent();
/** Emitted after this set's contents are cleared. */
onCleared = new BeEvent();
/** Construct a new ObservableSet.
* @param elements Optional elements with which to populate the new set.
*/
constructor(elements) {
// NB: Set constructor will invoke add(). Do not override until initialized.
super(elements);
this.add = (item) => {
const prevSize = this.size;
const ret = super.add(item);
if (this.size !== prevSize)
this.onAdded.raiseEvent(item);
return ret;
};
}
/** Invokes [Set.delete](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/delete), raising
* the [[onDeleted]] event if the item was removed from the set.
*/
delete(item) {
const ret = super.delete(item);
if (ret)
this.onDeleted.raiseEvent(item);
return ret;
}
/** If this set is not already empty, invokes [Set.clear](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/clear)
* and raises the [[onCleared]] event.
*/
clear() {
if (0 !== this.size) {
super.clear();
this.onCleared.raiseEvent();
}
}
}
//# sourceMappingURL=ObservableSet.js.map