UNPKG

@itwin/core-bentley

Version:

Bentley JavaScript core components

52 lines 2.14 kB
/*--------------------------------------------------------------------------------------------- * 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