@itwin/presentation-components
Version:
React components based on iTwin.js Presentation library
63 lines • 2.48 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
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.RulesetRegistrationHelper = void 0;
require("./DisposePolyfill.js");
const presentation_common_1 = require("@itwin/presentation-common");
const presentation_frontend_1 = require("@itwin/presentation-frontend");
const Utils_js_1 = require("./Utils.js");
/**
* A helper class that registers a given ruleset on create and unregisters it on disposal.
* @internal
*/
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;
}
(0, Utils_js_1.safeDispose)(this._registeredRuleset);
this._registeredRuleset = undefined;
}
async registerRuleset(ruleset) {
this._registeredRuleset = await presentation_frontend_1.Presentation.presentation.rulesets().add(ruleset instanceof presentation_common_1.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();
}
}
}
exports.RulesetRegistrationHelper = RulesetRegistrationHelper;
//# sourceMappingURL=RulesetRegistrationHelper.js.map