UNPKG

@itwin/presentation-components

Version:

React components based on iTwin.js Presentation library

59 lines 2.22 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 Core */ import "./DisposePolyfill.js"; import { RegisteredRuleset } from "@itwin/presentation-common"; import { Presentation } from "@itwin/presentation-frontend"; import { safeDispose } from "./Utils.js"; /** * A helper class that registers a given ruleset on create and unregisters it on disposal. * @internal */ export class RulesetRegistrationHelper { _rulesetId; _registeredRuleset; _isDisposed; /** Constructor. Registers the ruleset if necessary */ constructor(ruleset) { this._rulesetId = typeof ruleset === "string" ? ruleset : ruleset.id; if (typeof ruleset === "object") { this.registerRuleset(ruleset); // eslint-disable-line @typescript-eslint/no-floating-promises } } #dispose() { this._isDisposed = true; this.disposeRegisteredRuleset(); } /** Destructor. Must be called to clean up. */ [Symbol.dispose]() { this.#dispose(); } /** @deprecated in 5.7. Use `[Symbol.dispose]` instead. */ dispose() { this.#dispose(); } /** Get ID of the ruleset. */ get rulesetId() { return this._rulesetId; } disposeRegisteredRuleset() { if (!this._registeredRuleset) { return; } safeDispose(this._registeredRuleset); this._registeredRuleset = undefined; } async registerRuleset(ruleset) { this._registeredRuleset = await Presentation.presentation.rulesets().add(ruleset instanceof RegisteredRuleset ? ruleset.toJSON() : ruleset); if (this._isDisposed) { // ensure we don't keep a hanging registered ruleset if the instance // gets disposed before the ruleset finishes registration this.disposeRegisteredRuleset(); } } } //# sourceMappingURL=RulesetRegistrationHelper.js.map