@itwin/presentation-components
Version:
React components based on iTwin.js Presentation library
59 lines • 2.22 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 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