UNPKG

@itwin/presentation-backend

Version:

Backend of iTwin.js Presentation library

74 lines 2.63 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 { RegisteredRuleset } from "@itwin/presentation-common"; /** * Presentation ruleset registry implementation. * @internal */ export 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 RegisteredRuleset(ruleset, hash, disposeFunc); this._registeredRulesets.set(newRuleset.id, newRuleset); return newRuleset; } } //# sourceMappingURL=RulesetManager.js.map