@itwin/core-frontend
Version:
iTwin.js frontend components
88 lines • 3.86 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.CategorySelectorState = void 0;
/*---------------------------------------------------------------------------------------------
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
* See LICENSE.md in the project root for license terms and full copyright notice.
*--------------------------------------------------------------------------------------------*/
/** @packageDocumentation
* @module Views
*/
const core_bentley_1 = require("@itwin/core-bentley");
const EntityState_1 = require("./EntityState");
/** A set of Categories to be displayed in a [[ViewState]].
* Elements belonging to categories not specified in the category selector will not be drawn in the view.
* By default, geometry belonging to any [[SubCategory]] of a visible Category is also visible in the view,
* unless the [[SubCategoryAppearance]] or [[SubCategoryOverride]] specifies that it should be invisible.
* @note To change the set of categories visible in a [[ViewState]] currently associated with a [[Viewport]],
* use [[ViewState.changeCategoryDisplay]] to ensure the view updates appropriately on screen.
* @see [[Category]]
* @public
* @extensions
*/
class CategorySelectorState extends EntityState_1.ElementState {
static get className() { return "CategorySelector"; }
_categories = new core_bentley_1.ObservableSet();
constructor(props, iModel) {
super(props, iModel);
if (props.categories)
props.categories.forEach((cat) => this.categories.add(cat));
}
get categories() {
return this._categories;
}
set categories(categories) {
this._categories.clear();
for (const category of categories)
this._categories.add(category);
}
/** @internal */
get observableCategories() {
return this._categories;
}
toJSON() {
const val = super.toJSON();
val.categories = [];
this.categories.forEach((cat) => val.categories.push(cat));
return val;
}
/** Returns true if this category selector is logically equivalent to the specified category selector.
* Two category selectors are logically equivalent if they have the same name and Id and contain the same set of category Ids.
*/
equalState(other) {
if (this.categories.size !== other.categories.size || this.name !== other.name || this.id !== other.id)
return false;
for (const cat of this.categories)
if (!other.categories.has(cat))
return false;
return true;
}
/** The name of this CategorySelector */
get name() { return this.code.value; }
/** Determine whether this CategorySelector includes the specified categoryId string */
has(id) { return this.categories.has(id); }
/** Determine whether this CategorySelector includes the specified category */
isCategoryViewed(categoryId) { return this.has(categoryId); }
/** Add one or more categories to this CategorySelector */
addCategories(arg) {
for (const id of core_bentley_1.Id64.iterable(arg))
this.categories.add(id);
}
/** Remove one or more categories from this CategorySelector */
dropCategories(arg) {
for (const id of core_bentley_1.Id64.iterable(arg))
this.categories.delete(id);
}
/** Add or remove categories from this CategorySelector.
* @param arg The categories to add or remove
* @param add If true, categories will be added; otherwise they will be removed.
*/
changeCategoryDisplay(arg, add) {
if (add)
this.addCategories(arg);
else
this.dropCategories(arg);
}
}
exports.CategorySelectorState = CategorySelectorState;
//# sourceMappingURL=CategorySelectorState.js.map