@itwin/presentation-backend
Version:
Backend of iTwin.js Presentation library
78 lines • 2.82 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.RulesetManagerImpl = void 0;
const presentation_common_1 = require("@itwin/presentation-common");
/**
* Presentation ruleset registry implementation.
* @internal
*/
class RulesetManagerImpl {
_getNativePlatform;
_registeredRulesets = new Map();
constructor(getNativePlatform) {
this._getNativePlatform = getNativePlatform;
}
/**
* Get a ruleset with the specified id.
*/
get(id) {
const foundRuleset = this._registeredRulesets.get(id);
if (foundRuleset) {
return foundRuleset;
}
const serializedRulesetsArray = this._getNativePlatform().getRulesets(id).result;
const rulesetsArray = JSON.parse(serializedRulesetsArray);
if (0 === rulesetsArray.length) {
return undefined;
}
return this.saveRuleset(rulesetsArray[0].ruleset, rulesetsArray[0].hash, (ruleset) => this.remove(ruleset));
}
/**
* Register the supplied ruleset
*/
add(ruleset) {
const foundRuleset = this._registeredRulesets.get(ruleset.id);
if (foundRuleset) {
return foundRuleset;
}
const hash = this._getNativePlatform().addRuleset(JSON.stringify(ruleset)).result;
return this.saveRuleset(ruleset, hash, (r) => this.remove(r));
}
/**
* Unregister the supplied ruleset
*/
remove(ruleset) {
let rulesetId, rulesetIdentifier;
if (Array.isArray(ruleset)) {
rulesetId = ruleset[0];
rulesetIdentifier = ruleset[1];
}
else {
rulesetId = ruleset.id;
rulesetIdentifier = ruleset.uniqueIdentifier;
}
this._registeredRulesets.delete(rulesetId);
return this._getNativePlatform().removeRuleset(rulesetId, rulesetIdentifier).result;
}
/**
* Remove all rulesets registered in this session.
*/
clear() {
this._getNativePlatform().clearRulesets();
this._registeredRulesets.clear();
}
saveRuleset(ruleset, hash, disposeFunc) {
const newRuleset = new presentation_common_1.RegisteredRuleset(ruleset, hash, disposeFunc);
this._registeredRulesets.set(newRuleset.id, newRuleset);
return newRuleset;
}
}
exports.RulesetManagerImpl = RulesetManagerImpl;
//# sourceMappingURL=RulesetManager.js.map
;