UNPKG

@itwin/core-bentley

Version:

Bentley JavaScript core components

56 lines 2.31 kB
"use strict"; /*--------------------------------------------------------------------------------------------- * 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 */ Object.defineProperty(exports, "__esModule", { value: true }); exports.ObservableSet = void 0; const BeEvent_1 = require("./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 */ class ObservableSet extends Set { /** Emitted after `item` is added to this set. */ onAdded = new BeEvent_1.BeEvent(); /** Emitted after `item` is deleted from this set. */ onDeleted = new BeEvent_1.BeEvent(); /** Emitted after this set's contents are cleared. */ onCleared = new BeEvent_1.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(); } } } exports.ObservableSet = ObservableSet; //# sourceMappingURL=ObservableSet.js.map