@itwin/tree-widget-react 4.0.0-alpha.17 → 4.0.0-alpha.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.js +6 -1
- package/lib/esm/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.js +6 -1
- package/lib/esm/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/SkeletonTree.d.ts +4 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/SkeletonTree.js +4 -1
- package/lib/esm/tree-widget-react/components/trees/common/components/SkeletonTree.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js +2 -2
- package/lib/esm/tree-widget-react/components/trees/common/internal/VisibilityUtils.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.js +1 -1
- package/lib/esm/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/index.d.ts +1 -0
- package/lib/esm/tree-widget-react/components/trees/index.js +1 -0
- package/lib/esm/tree-widget-react/components/trees/index.js.map +1 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.js +6 -1
- package/lib/esm/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.js.map +1 -1
- package/package.json +1 -1
|
@@ -230,7 +230,12 @@ export class CategoriesTreeVisibilityHandler {
|
|
|
230
230
|
}
|
|
231
231
|
getSubModels(props) {
|
|
232
232
|
if ("modelIds" in props) {
|
|
233
|
-
return from(Id64.iterable(props.modelIds)).pipe(mergeMap((modelId) =>
|
|
233
|
+
return from(Id64.iterable(props.modelIds)).pipe(mergeMap((modelId) => {
|
|
234
|
+
if (props.categoryId) {
|
|
235
|
+
return from(this.#props.idsCache.getCategoriesModeledElements(modelId, props.categoryId)).pipe(map((subModels) => ({ id: modelId, subModels })));
|
|
236
|
+
}
|
|
237
|
+
return from(this.#props.idsCache.getModelCategoryIds(modelId)).pipe(mergeMap((categoryIds) => from(this.#props.idsCache.getCategoriesModeledElements(modelId, categoryIds))), map((subModels) => ({ id: modelId, subModels })));
|
|
238
|
+
}));
|
|
234
239
|
}
|
|
235
240
|
if (props.modelId) {
|
|
236
241
|
return from(Id64.iterable(props.categoryIds)).pipe(mergeMap((categoryId) => from(this.#props.idsCache.getCategoriesModeledElements(props.modelId, categoryId)).pipe(map((subModels) => ({ id: categoryId, subModels })))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CategoriesTreeVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../../../src/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,8BAA8B,EAAE,MAAM,8DAA8D,CAAC;AAC9G,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AACpG,OAAO,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AACrF,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAqBjE;;;;;GAKG;AACH,MAAM,OAAO,+BAA+B;IACjC,MAAM,CAAuC;IACtD,iBAAiB,CAAiC;IAClD,YAAY,CAA8C;IAC1D,aAAa,CAAwC;IACrD,UAAU,CAA0C;IACpD,YAAY,gBAAsD;QAChE,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC;QAC/B,6EAA6E;QAC7E,mDAAmD;QACnD,MAAM,YAAY,GAAiB;YACjC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YACnD,gBAAgB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC/C,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YACzD,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAC3C,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YACzD,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YACjD,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC;SACtE,CAAC;QACF,IAAI,CAAC,iBAAiB,GAAG,IAAI,8BAA8B,CAAC;YAC1D,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC9B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC9B,8BAA8B,EAAE,IAAI,CAAC,MAAM,CAAC,8BAA8B;YAC1E,YAAY;SACb,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,CAAC;QACzG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC;QACpG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACrG,CAAC;IAEM,CAAC,MAAM,CAAC,OAAO,CAAC;QACrB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3C,CAAC;IAEM,mCAAmC,CAAC,OAAoC,EAAE,EAAW;QAC1F,OAAO,KAAK,CAAC,GAAG,EAAE;YAChB,MAAM,EAAE,sBAAsB,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;YAC1F,MAAM,WAAW,GAAG,IAAI,KAAK,EAAoB,CAAC;YAClD,IAAI,sBAAsB,EAAE,IAAI,EAAE,CAAC;gBACjC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,0CAA0C,CAAC,EAAE,sBAAsB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YACtH,CAAC;YAED,IAAI,QAAQ,EAAE,IAAI,EAAE,CAAC;gBACnB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,4BAA4B,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1F,CAAC;YAED,IAAI,UAAU,EAAE,MAAM,EAAE,CAAC;gBACvB,WAAW,CAAC,IAAI,CACd,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CACrJ,CAAC;YACJ,CAAC;YAED,IAAI,aAAa,EAAE,MAAM,EAAE,CAAC;gBAC1B,WAAW,CAAC,IAAI,CACd,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CACtB,QAAQ,CAAC,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,mCAAmC,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAC7I,CACF,CAAC;YACJ,CAAC;YAED,IAAI,QAAQ,EAAE,MAAM,EAAE,CAAC;gBACrB,WAAW,CAAC,IAAI,CACd,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CACjB,6BAA6B,CAAC,EAAE,CAAC,EACjC,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,8BAA8B,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAClJ,CACF,CAAC;YACJ,CAAC;YAED,OAAO,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,mBAAmB,CAAC,IAAmB;QAC5C,IAAI,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC,iBAAiB,CAAC,kCAAkC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACrJ,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,kBAAkB,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC,iBAAiB,CAAC,uCAAuC,CAAC;gBACpE,sBAAsB,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;aACnF,CAAC,CAAC;QACL,CAAC;QAED,IAAI,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,CAAC;gBACtD,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;gBACpE,IAAI,EAAE,IAAI,CAAC,UAAU;aACtB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC,iBAAiB,CAAC,6BAA6B,CAAC;gBAC1D,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;gBACvE,OAAO,EAAE,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC;gBAC5C,IAAI,EAAE,IAAI,CAAC,aAAa;aACzB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,EAAE,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,iBAAiB,CAAC,gCAAgC,CAAC;gBAC7D,UAAU;gBACV,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;aAC3E,CAAC,CAAC;QACL,CAAC;QAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,CAAC,iBAAiB,CAAC,2BAA2B,CAAC;YACxD,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;YACtE,OAAO;YACP,UAAU;YACV,IAAI,EAAE,IAAI,CAAC,YAAY;SACxB,CAAC,CAAC;IACL,CAAC;IAED,oEAAoE;IAC7D,sBAAsB,CAAC,IAAmB,EAAE,EAAW;QAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE;YAC3B,IAAI,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBAChD,OAAO,IAAI,CAAC,iBAAiB,CAAC,qCAAqC,CAAC;oBAClE,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;oBAC3C,EAAE;iBACH,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,kBAAkB,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvD,OAAO,IAAI,CAAC,iBAAiB,CAAC,0CAA0C,CAAC;oBACvE,sBAAsB,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;oBAClF,EAAE;iBACH,CAAC,CAAC;YACL,CAAC;YAED,IAAI,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,OAAO,IAAI,CAAC,iBAAiB,CAAC,4BAA4B,CAAC;oBACzD,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;oBACnD,EAAE;iBACH,CAAC,CAAC;YACL,CAAC;YAED,IAAI,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5C,OAAO,IAAI,CAAC,iBAAiB,CAAC,gCAAgC,CAAC;oBAC7D,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;oBACvE,OAAO,EAAE,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC;oBAC5C,EAAE;iBACH,CAAC,CAAC;YACL,CAAC;YAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/C,OAAO,IAAI,CAAC,iBAAiB,CAAC,mCAAmC,CAAC;oBAChE,UAAU;oBACV,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC1E,EAAE;iBACH,CAAC,CAAC;YACL,CAAC;YAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC,iBAAiB,CAAC,8BAA8B,CAAC;gBAC3D,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;gBACrD,OAAO;gBACP,UAAU;gBACV,EAAE;aACH,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;YAChD,OAAO,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,0BAA0B,EAAE,EAAE,SAAS,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,gCAAgC,CAAC,OAAoC;QAC1E,OAAO,KAAK,CAAC,GAAG,EAAE;YAChB,MAAM,EAAE,sBAAsB,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;YAC1F,MAAM,WAAW,GAAG,IAAI,KAAK,EAAgC,CAAC;YAC9D,IAAI,sBAAsB,EAAE,IAAI,EAAE,CAAC;gBACjC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,uCAAuC,CAAC,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC;YAC/G,CAAC;YAED,IAAI,QAAQ,EAAE,IAAI,EAAE,CAAC;gBACnB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAC1G,CAAC;YAED,IAAI,UAAU,EAAE,MAAM,EAAE,CAAC;gBACvB,WAAW,CAAC,IAAI,CACd,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CACnB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CACpC,IAAI,CAAC,iBAAiB,CAAC,6BAA6B,CAAC;oBACnD,WAAW;oBACX,OAAO;oBACP,IAAI,EAAE,IAAI,CAAC,aAAa;iBACzB,CAAC,CACH,CACF,CACF,CAAC;YACJ,CAAC;YAED,IAAI,aAAa,EAAE,MAAM,EAAE,CAAC;gBAC1B,WAAW,CAAC,IAAI,CACd,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CACtB,QAAQ,CAAC,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC,CACtI,CACF,CAAC;YACJ,CAAC;YAED,IAAI,QAAQ,EAAE,MAAM,EAAE,CAAC;gBACrB,WAAW,CAAC,IAAI,CACd,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CACjB,6BAA6B,CAAC,EAAE,CAAC,EACjC,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,CAC/C,IAAI,CAAC,iBAAiB,CAAC,2BAA2B,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CACjH,CACF,CACF,CAAC;YACJ,CAAC;YAED,OAAO,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACnC,CAAC;IAEO,aAAa,CAAC,KAAmD;QACvE,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAC7C,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CACnB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAC1D,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACnB,EAAE,EAAE,OAAO;YACX,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC;SACpH,CAAC,CAAC,CACJ,CACF,CACF,CAAC;IACJ,CAAC;IAEO,gBAAgB;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CACvD,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;YACjB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;gBAC3C,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC;YAC3C,CAAC;YACD,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC;QAC3C,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,KAAsD;QAC7E,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9F,CAAC;IAEO,SAAS,CAAC,KAA+C;QAC/D,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAChD,QAAQ,CAAC,CAAC,UAAU,EAAE,EAAE,CACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAC1E,QAAQ,CAAC,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAC1G,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC,CACtE,CACF,CACF,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,KAAsD;QAC7E,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAChD,QAAQ,CAAC,CAAC,UAAU,EAAE,EAAE,CACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAC1D,QAAQ,CAAC,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC,wBAAwB,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAC/H,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC,CAC5D,CACF,CACF,CAAC;IACJ,CAAC;IAEO,YAAY,CAAC,KAAkD;QACrE,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAC7C,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CACnB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAC1D,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,4BAA4B,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,EACxG,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CACjD,CACF,CACF,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAChD,QAAQ,CAAC,CAAC,UAAU,EAAE,EAAE,CACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,4BAA4B,CAAC,KAAK,CAAC,OAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAC9I,CACF,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAChD,QAAQ,CAAC,CAAC,UAAU,EAAE,EAAE,CACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CACpE,QAAQ,CAAC,CAAC,iBAAiB,EAAE,EAAE;YAC7B,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACjD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YACtD,CAAC;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CACtB,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,4BAA4B,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,EACnG,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CACpD,CAAC;QACJ,CAAC,CAAC,CACH,CACF,CACF,CAAC;IACJ,CAAC;IAEO,mBAAmB,CAAC,IAA2B;QACrD,MAAM,gBAAgB,GAAiC,IAAI,CAAC,YAAY,EAAE,gBAAgB,CAAC;QAC3F,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC;QACjD,MAAM,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;QAE3C,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC;IAC1C,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,qCAAqC,CAAC,KAKrD;IACC,OAAO,IAAI,8BAA8B,CAA8B;QACrE,eAAe,EAAE,GAAmE,EAAE;YACpF,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;gBACzB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACrH,OAAO,4BAA4B,CAAC;gBAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,cAAc,EAAE,KAAK,CAAC,aAAa;gBACnC,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,iBAAiB,EAAE,aAAa;gBAChC,wBAAwB,EAAE,YAAY;gBACtC,sBAAsB,EAAE,UAAU;aACnC,CAAC,CAAC;QACL,CAAC;QACD,gCAAgC,EAAE,CAAC,IAAI,EAAE,EAAE;YACzC,OAAO,IAAI,+BAA+B,CAAC;gBACzC,8BAA8B,EAAE,IAAI;gBACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACzB,CAAC,CAAC;QACL,CAAC;QACD,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC,CAAC;AACL,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { concat, defer, EMPTY, from, map, merge, mergeMap, of } from \"rxjs\";\nimport { assert, Id64 } from \"@itwin/core-bentley\";\nimport { HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { createVisibilityStatus } from \"../../../common/internal/Tooltip.js\";\nimport { HierarchyVisibilityHandlerImpl } from \"../../../common/internal/useTreeHooks/UseCachedVisibility.js\";\nimport { getClassesByView, releaseMainThreadOnItemsCount } from \"../../../common/internal/Utils.js\";\nimport { mergeVisibilityStatuses } from \"../../../common/internal/VisibilityUtils.js\";\nimport { CategoriesTreeNode } from \"../CategoriesTreeNode.js\";\nimport { CategoriesTreeVisibilityHelper } from \"./CategoriesTreeVisibilityHelper.js\";\nimport { createFilteredCategoriesTree } from \"./FilteredTree.js\";\n\nimport type { Observable } from \"rxjs\";\nimport type { GroupingHierarchyNode, HierarchyFilteringPath } from \"@itwin/presentation-hierarchies\";\nimport type { ECClassHierarchyInspector } from \"@itwin/presentation-shared\";\nimport type { AlwaysAndNeverDrawnElementInfo } from \"../../../common/internal/AlwaysAndNeverDrawnElementInfo.js\";\nimport type { ElementId, ModelId } from \"../../../common/internal/Types.js\";\nimport type { VisibilityStatus } from \"../../../common/UseHierarchyVisibility.js\";\nimport type { FilteredTree } from \"../../../common/internal/visibility/BaseFilteredTree.js\";\nimport type { BaseIdsCache, TreeSpecificVisibilityHandler } from \"../../../common/internal/visibility/BaseVisibilityHelper.js\";\nimport type { TreeWidgetViewport } from \"../../../common/TreeWidgetViewport.js\";\nimport type { CategoriesTreeIdsCache } from \"../CategoriesTreeIdsCache.js\";\nimport type { CategoriesTreeFilterTargets } from \"./FilteredTree.js\";\n\n/** @internal */\nexport interface CategoriesTreeVisibilityHandlerProps {\n idsCache: CategoriesTreeIdsCache;\n viewport: TreeWidgetViewport;\n alwaysAndNeverDrawnElementInfo: AlwaysAndNeverDrawnElementInfo;\n}\n\n/**\n * Handles visibility status of categories tree nodes.\n *\n * This handler knows how to get and change visibility status of nodes created by hierarchy definition.\n * @internal\n */\nexport class CategoriesTreeVisibilityHandler implements Disposable, TreeSpecificVisibilityHandler<CategoriesTreeFilterTargets> {\n readonly #props: CategoriesTreeVisibilityHandlerProps;\n #visibilityHelper: CategoriesTreeVisibilityHelper;\n #elementType: \"GeometricElement3d\" | \"GeometricElement2d\";\n #categoryType: \"DrawingCategory\" | \"SpatialCategory\";\n #modelType: \"GeometricModel3d\" | \"GeometricModel2d\";\n constructor(constructorProps: CategoriesTreeVisibilityHandlerProps) {\n this.#props = constructorProps;\n // Remove after https://github.com/iTwin/viewer-components-react/issues/1421.\n // We won't need to create a custom base ids cache.\n const baseIdsCache: BaseIdsCache = {\n getCategories: (props) => this.getCategories(props),\n getAllCategories: () => this.getAllCategories(),\n getElementsCount: (props) => this.getElementsCount(props),\n getModels: (props) => this.getModels(props),\n getSubCategories: (props) => this.getSubCategories(props),\n getSubModels: (props) => this.getSubModels(props),\n hasSubModel: async (props) => this.#props.idsCache.hasSubModel(props),\n };\n this.#visibilityHelper = new CategoriesTreeVisibilityHelper({\n viewport: this.#props.viewport,\n idsCache: this.#props.idsCache,\n alwaysAndNeverDrawnElementInfo: this.#props.alwaysAndNeverDrawnElementInfo,\n baseIdsCache,\n });\n\n this.#elementType = this.#props.viewport.viewType === \"2d\" ? \"GeometricElement2d\" : \"GeometricElement3d\";\n this.#categoryType = this.#props.viewport.viewType === \"2d\" ? \"DrawingCategory\" : \"SpatialCategory\";\n this.#modelType = this.#props.viewport.viewType === \"2d\" ? \"GeometricModel2d\" : \"GeometricModel3d\";\n }\n\n public [Symbol.dispose]() {\n this.#visibilityHelper[Symbol.dispose]();\n }\n\n public changeFilterTargetsVisibilityStatus(targets: CategoriesTreeFilterTargets, on: boolean): Observable<void> {\n return defer(() => {\n const { definitionContainerIds, subCategories, modelIds, categories, elements } = targets;\n const observables = new Array<Observable<void>>();\n if (definitionContainerIds?.size) {\n observables.push(this.#visibilityHelper.changeDefinitionContainersVisibilityStatus({ definitionContainerIds, on }));\n }\n\n if (modelIds?.size) {\n observables.push(this.#visibilityHelper.changeModelsVisibilityStatus({ modelIds, on }));\n }\n\n if (categories?.length) {\n observables.push(\n from(categories).pipe(mergeMap(({ modelId, categoryIds }) => this.#visibilityHelper.changeCategoriesVisibilityStatus({ categoryIds, modelId, on }))),\n );\n }\n\n if (subCategories?.length) {\n observables.push(\n from(subCategories).pipe(\n mergeMap(({ categoryId, subCategoryIds }) => this.#visibilityHelper.changeSubCategoriesVisibilityStatus({ subCategoryIds, categoryId, on })),\n ),\n );\n }\n\n if (elements?.length) {\n observables.push(\n from(elements).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(({ modelId, elementIds, categoryId }) => this.#visibilityHelper.changeElementsVisibilityStatus({ modelId, categoryId, elementIds, on })),\n ),\n );\n }\n\n return merge(...observables);\n });\n }\n\n public getVisibilityStatus(node: HierarchyNode): Observable<VisibilityStatus> {\n if (HierarchyNode.isClassGroupingNode(node)) {\n const nodeInfo = this.getGroupingNodeInfo(node);\n return this.#visibilityHelper.getGroupedElementsVisibilityStatus({ categoryId: nodeInfo.categoryId, modelElementsMap: nodeInfo.modelElementsMap });\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (CategoriesTreeNode.isDefinitionContainerNode(node)) {\n return this.#visibilityHelper.getDefinitionContainersVisibilityStatus({\n definitionContainerIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n });\n }\n\n if (CategoriesTreeNode.isModelNode(node)) {\n return this.#visibilityHelper.getModelsVisibilityStatus({\n modelIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n type: this.#modelType,\n });\n }\n\n if (CategoriesTreeNode.isCategoryNode(node)) {\n return this.#visibilityHelper.getCategoriesVisibilityStatus({\n categoryIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n modelId: CategoriesTreeNode.getModelId(node),\n type: this.#categoryType,\n });\n }\n\n const categoryId = CategoriesTreeNode.getCategoryId(node);\n if (!categoryId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (CategoriesTreeNode.isSubCategoryNode(node)) {\n return this.#visibilityHelper.getSubCategoriesVisibilityStatus({\n categoryId,\n subCategoryIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n });\n }\n\n const modelId = CategoriesTreeNode.getModelId(node);\n if (!modelId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n return this.#visibilityHelper.getElementsVisibilityStatus({\n elementIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n modelId,\n categoryId,\n type: this.#elementType,\n });\n }\n\n /** Changes visibility of the items represented by the tree node. */\n public changeVisibilityStatus(node: HierarchyNode, on: boolean): Observable<void> {\n const changeObs = defer(() => {\n if (HierarchyNode.isClassGroupingNode(node)) {\n const nodeInfo = this.getGroupingNodeInfo(node);\n return this.#visibilityHelper.changeGroupedElementsVisibilityStatus({\n categoryId: nodeInfo.categoryId,\n modelElementsMap: nodeInfo.modelElementsMap,\n on,\n });\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (CategoriesTreeNode.isDefinitionContainerNode(node)) {\n return this.#visibilityHelper.changeDefinitionContainersVisibilityStatus({\n definitionContainerIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n on,\n });\n }\n\n if (CategoriesTreeNode.isModelNode(node)) {\n return this.#visibilityHelper.changeModelsVisibilityStatus({\n modelIds: node.key.instanceKeys.map(({ id }) => id),\n on,\n });\n }\n\n if (CategoriesTreeNode.isCategoryNode(node)) {\n return this.#visibilityHelper.changeCategoriesVisibilityStatus({\n categoryIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n modelId: CategoriesTreeNode.getModelId(node),\n on,\n });\n }\n\n const categoryId = CategoriesTreeNode.getCategoryId(node);\n if (!categoryId) {\n return EMPTY;\n }\n\n if (CategoriesTreeNode.isSubCategoryNode(node)) {\n return this.#visibilityHelper.changeSubCategoriesVisibilityStatus({\n categoryId,\n subCategoryIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n on,\n });\n }\n\n const modelId = CategoriesTreeNode.getModelId(node);\n if (!modelId) {\n return EMPTY;\n }\n\n return this.#visibilityHelper.changeElementsVisibilityStatus({\n elementIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n categoryId,\n on,\n });\n });\n\n if (this.#props.viewport.isAlwaysDrawnExclusive) {\n return concat(this.#visibilityHelper.removeAlwaysDrawnExclusive(), changeObs);\n }\n return changeObs;\n }\n\n public getFilterTargetsVisibilityStatus(targets: CategoriesTreeFilterTargets): Observable<VisibilityStatus> {\n return defer(() => {\n const { definitionContainerIds, subCategories, modelIds, categories, elements } = targets;\n const observables = new Array<Observable<VisibilityStatus>>();\n if (definitionContainerIds?.size) {\n observables.push(this.#visibilityHelper.getDefinitionContainersVisibilityStatus({ definitionContainerIds }));\n }\n\n if (modelIds?.size) {\n observables.push(this.#visibilityHelper.getModelsVisibilityStatus({ modelIds, type: this.#modelType }));\n }\n\n if (categories?.length) {\n observables.push(\n from(categories).pipe(\n mergeMap(({ modelId, categoryIds }) =>\n this.#visibilityHelper.getCategoriesVisibilityStatus({\n categoryIds,\n modelId,\n type: this.#categoryType,\n }),\n ),\n ),\n );\n }\n\n if (subCategories?.length) {\n observables.push(\n from(subCategories).pipe(\n mergeMap(({ categoryId, subCategoryIds }) => this.#visibilityHelper.getSubCategoriesVisibilityStatus({ subCategoryIds, categoryId })),\n ),\n );\n }\n\n if (elements?.length) {\n observables.push(\n from(elements).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(({ modelId, elementIds, categoryId }) =>\n this.#visibilityHelper.getElementsVisibilityStatus({ modelId, categoryId, elementIds, type: this.#elementType }),\n ),\n ),\n );\n }\n\n return merge(...observables);\n }).pipe(mergeVisibilityStatuses);\n }\n\n private getCategories(props: Parameters<BaseIdsCache[\"getCategories\"]>[0]): ReturnType<BaseIdsCache[\"getCategories\"]> {\n return from(Id64.iterable(props.modelIds)).pipe(\n mergeMap((modelId) =>\n from(this.#props.idsCache.getModelCategoryIds(modelId)).pipe(\n map((categories) => ({\n id: modelId,\n ...(this.#props.viewport.viewType === \"2d\" ? { drawingCategories: categories } : { spatialCategories: categories }),\n })),\n ),\n ),\n );\n }\n\n private getAllCategories(): ReturnType<BaseIdsCache[\"getAllCategories\"]> {\n return from(this.#props.idsCache.getAllCategories()).pipe(\n map((categories) => {\n if (this.#props.viewport.viewType === \"2d\") {\n return { drawingCategories: categories };\n }\n return { spatialCategories: categories };\n }),\n );\n }\n\n private getElementsCount(props: Parameters<BaseIdsCache[\"getElementsCount\"]>[0]): ReturnType<BaseIdsCache[\"getElementsCount\"]> {\n return from(this.#props.idsCache.getCategoryElementsCount(props.modelId, props.categoryId));\n }\n\n private getModels(props: Parameters<BaseIdsCache[\"getModels\"]>[0]): ReturnType<BaseIdsCache[\"getModels\"]> {\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n from(this.#props.idsCache.getCategoriesElementModels(categoryId, true)).pipe(\n mergeMap((categoryModelsMap) => (categoryModelsMap.size > 0 ? categoryModelsMap.values() : of(undefined))),\n map((categoryModels) => ({ id: categoryId, models: categoryModels })),\n ),\n ),\n );\n }\n\n private getSubCategories(props: Parameters<BaseIdsCache[\"getSubCategories\"]>[0]): ReturnType<BaseIdsCache[\"getSubCategories\"]> {\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n from(this.#props.idsCache.getSubCategories(categoryId)).pipe(\n mergeMap((categorySubCategoriesMap) => (categorySubCategoriesMap.size > 0 ? categorySubCategoriesMap.values() : of(undefined))),\n map((subCategories) => ({ id: categoryId, subCategories })),\n ),\n ),\n );\n }\n\n private getSubModels(props: Parameters<BaseIdsCache[\"getSubModels\"]>[0]): ReturnType<BaseIdsCache[\"getSubModels\"]> {\n if (\"modelIds\" in props) {\n return from(Id64.iterable(props.modelIds)).pipe(\n mergeMap((modelId) =>\n from(this.#props.idsCache.getModelCategoryIds(modelId)).pipe(\n mergeMap((categoryIds) => from(this.#props.idsCache.getCategoriesModeledElements(modelId, categoryIds))),\n map((subModels) => ({ id: modelId, subModels })),\n ),\n ),\n );\n }\n\n if (props.modelId) {\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n from(this.#props.idsCache.getCategoriesModeledElements(props.modelId!, categoryId)).pipe(map((subModels) => ({ id: categoryId, subModels }))),\n ),\n );\n }\n\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n from(this.#props.idsCache.getCategoriesElementModels(categoryId)).pipe(\n mergeMap((categoryModelsMap) => {\n const models = categoryModelsMap.get(categoryId);\n if (!models) {\n return of({ id: categoryId, subModels: undefined });\n }\n return from(models).pipe(\n mergeMap((modelId) => from(this.#props.idsCache.getCategoriesModeledElements(modelId, categoryId))),\n map((subModels) => ({ id: categoryId, subModels })),\n );\n }),\n ),\n ),\n );\n }\n\n private getGroupingNodeInfo(node: GroupingHierarchyNode) {\n const modelElementsMap: Map<ModelId, Set<ElementId>> = node.extendedData?.modelElementsMap;\n const categoryId = node.extendedData?.categoryId;\n assert(!!modelElementsMap && !!categoryId);\n\n return { modelElementsMap, categoryId };\n }\n}\n\n/**\n * Creates categories tree visibility handler. Is used by integration and performance tests.\n * @internal\n */\nexport function createCategoriesTreeVisibilityHandler(props: {\n viewport: TreeWidgetViewport;\n idsCache: CategoriesTreeIdsCache;\n imodelAccess: ECClassHierarchyInspector;\n filteredPaths?: HierarchyFilteringPath[];\n}) {\n return new HierarchyVisibilityHandlerImpl<CategoriesTreeFilterTargets>({\n getFilteredTree: (): undefined | Promise<FilteredTree<CategoriesTreeFilterTargets>> => {\n if (!props.filteredPaths) {\n return undefined;\n }\n const { categoryClass, elementClass, modelClass } = getClassesByView(props.viewport.viewType === \"2d\" ? \"2d\" : \"3d\");\n return createFilteredCategoriesTree({\n idsCache: props.idsCache,\n filteringPaths: props.filteredPaths,\n imodelAccess: props.imodelAccess,\n categoryClassName: categoryClass,\n categoryElementClassName: elementClass,\n categoryModelClassName: modelClass,\n });\n },\n getTreeSpecificVisibilityHandler: (info) => {\n return new CategoriesTreeVisibilityHandler({\n alwaysAndNeverDrawnElementInfo: info,\n idsCache: props.idsCache,\n viewport: props.viewport,\n });\n },\n viewport: props.viewport,\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"CategoriesTreeVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../../../src/tree-widget-react/components/trees/categories-tree/internal/visibility/CategoriesTreeVisibilityHandler.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { concat, defer, EMPTY, from, map, merge, mergeMap, of } from \"rxjs\";\nimport { assert, Id64 } from \"@itwin/core-bentley\";\nimport { HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { createVisibilityStatus } from \"../../../common/internal/Tooltip.js\";\nimport { HierarchyVisibilityHandlerImpl } from \"../../../common/internal/useTreeHooks/UseCachedVisibility.js\";\nimport { getClassesByView, releaseMainThreadOnItemsCount } from \"../../../common/internal/Utils.js\";\nimport { mergeVisibilityStatuses } from \"../../../common/internal/VisibilityUtils.js\";\nimport { CategoriesTreeNode } from \"../CategoriesTreeNode.js\";\nimport { CategoriesTreeVisibilityHelper } from \"./CategoriesTreeVisibilityHelper.js\";\nimport { createFilteredCategoriesTree } from \"./FilteredTree.js\";\n\nimport type { Observable } from \"rxjs\";\nimport type { GroupingHierarchyNode, HierarchyFilteringPath } from \"@itwin/presentation-hierarchies\";\nimport type { ECClassHierarchyInspector } from \"@itwin/presentation-shared\";\nimport type { AlwaysAndNeverDrawnElementInfo } from \"../../../common/internal/AlwaysAndNeverDrawnElementInfo.js\";\nimport type { ElementId, ModelId } from \"../../../common/internal/Types.js\";\nimport type { VisibilityStatus } from \"../../../common/UseHierarchyVisibility.js\";\nimport type { FilteredTree } from \"../../../common/internal/visibility/BaseFilteredTree.js\";\nimport type { BaseIdsCache, TreeSpecificVisibilityHandler } from \"../../../common/internal/visibility/BaseVisibilityHelper.js\";\nimport type { TreeWidgetViewport } from \"../../../common/TreeWidgetViewport.js\";\nimport type { CategoriesTreeIdsCache } from \"../CategoriesTreeIdsCache.js\";\nimport type { CategoriesTreeFilterTargets } from \"./FilteredTree.js\";\n\n/** @internal */\nexport interface CategoriesTreeVisibilityHandlerProps {\n idsCache: CategoriesTreeIdsCache;\n viewport: TreeWidgetViewport;\n alwaysAndNeverDrawnElementInfo: AlwaysAndNeverDrawnElementInfo;\n}\n\n/**\n * Handles visibility status of categories tree nodes.\n *\n * This handler knows how to get and change visibility status of nodes created by hierarchy definition.\n * @internal\n */\nexport class CategoriesTreeVisibilityHandler implements Disposable, TreeSpecificVisibilityHandler<CategoriesTreeFilterTargets> {\n readonly #props: CategoriesTreeVisibilityHandlerProps;\n #visibilityHelper: CategoriesTreeVisibilityHelper;\n #elementType: \"GeometricElement3d\" | \"GeometricElement2d\";\n #categoryType: \"DrawingCategory\" | \"SpatialCategory\";\n #modelType: \"GeometricModel3d\" | \"GeometricModel2d\";\n constructor(constructorProps: CategoriesTreeVisibilityHandlerProps) {\n this.#props = constructorProps;\n // Remove after https://github.com/iTwin/viewer-components-react/issues/1421.\n // We won't need to create a custom base ids cache.\n const baseIdsCache: BaseIdsCache = {\n getCategories: (props) => this.getCategories(props),\n getAllCategories: () => this.getAllCategories(),\n getElementsCount: (props) => this.getElementsCount(props),\n getModels: (props) => this.getModels(props),\n getSubCategories: (props) => this.getSubCategories(props),\n getSubModels: (props) => this.getSubModels(props),\n hasSubModel: async (props) => this.#props.idsCache.hasSubModel(props),\n };\n this.#visibilityHelper = new CategoriesTreeVisibilityHelper({\n viewport: this.#props.viewport,\n idsCache: this.#props.idsCache,\n alwaysAndNeverDrawnElementInfo: this.#props.alwaysAndNeverDrawnElementInfo,\n baseIdsCache,\n });\n\n this.#elementType = this.#props.viewport.viewType === \"2d\" ? \"GeometricElement2d\" : \"GeometricElement3d\";\n this.#categoryType = this.#props.viewport.viewType === \"2d\" ? \"DrawingCategory\" : \"SpatialCategory\";\n this.#modelType = this.#props.viewport.viewType === \"2d\" ? \"GeometricModel2d\" : \"GeometricModel3d\";\n }\n\n public [Symbol.dispose]() {\n this.#visibilityHelper[Symbol.dispose]();\n }\n\n public changeFilterTargetsVisibilityStatus(targets: CategoriesTreeFilterTargets, on: boolean): Observable<void> {\n return defer(() => {\n const { definitionContainerIds, subCategories, modelIds, categories, elements } = targets;\n const observables = new Array<Observable<void>>();\n if (definitionContainerIds?.size) {\n observables.push(this.#visibilityHelper.changeDefinitionContainersVisibilityStatus({ definitionContainerIds, on }));\n }\n\n if (modelIds?.size) {\n observables.push(this.#visibilityHelper.changeModelsVisibilityStatus({ modelIds, on }));\n }\n\n if (categories?.length) {\n observables.push(\n from(categories).pipe(mergeMap(({ modelId, categoryIds }) => this.#visibilityHelper.changeCategoriesVisibilityStatus({ categoryIds, modelId, on }))),\n );\n }\n\n if (subCategories?.length) {\n observables.push(\n from(subCategories).pipe(\n mergeMap(({ categoryId, subCategoryIds }) => this.#visibilityHelper.changeSubCategoriesVisibilityStatus({ subCategoryIds, categoryId, on })),\n ),\n );\n }\n\n if (elements?.length) {\n observables.push(\n from(elements).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(({ modelId, elementIds, categoryId }) => this.#visibilityHelper.changeElementsVisibilityStatus({ modelId, categoryId, elementIds, on })),\n ),\n );\n }\n\n return merge(...observables);\n });\n }\n\n public getVisibilityStatus(node: HierarchyNode): Observable<VisibilityStatus> {\n if (HierarchyNode.isClassGroupingNode(node)) {\n const nodeInfo = this.getGroupingNodeInfo(node);\n return this.#visibilityHelper.getGroupedElementsVisibilityStatus({ categoryId: nodeInfo.categoryId, modelElementsMap: nodeInfo.modelElementsMap });\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (CategoriesTreeNode.isDefinitionContainerNode(node)) {\n return this.#visibilityHelper.getDefinitionContainersVisibilityStatus({\n definitionContainerIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n });\n }\n\n if (CategoriesTreeNode.isModelNode(node)) {\n return this.#visibilityHelper.getModelsVisibilityStatus({\n modelIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n type: this.#modelType,\n });\n }\n\n if (CategoriesTreeNode.isCategoryNode(node)) {\n return this.#visibilityHelper.getCategoriesVisibilityStatus({\n categoryIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n modelId: CategoriesTreeNode.getModelId(node),\n type: this.#categoryType,\n });\n }\n\n const categoryId = CategoriesTreeNode.getCategoryId(node);\n if (!categoryId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (CategoriesTreeNode.isSubCategoryNode(node)) {\n return this.#visibilityHelper.getSubCategoriesVisibilityStatus({\n categoryId,\n subCategoryIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n });\n }\n\n const modelId = CategoriesTreeNode.getModelId(node);\n if (!modelId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n return this.#visibilityHelper.getElementsVisibilityStatus({\n elementIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n modelId,\n categoryId,\n type: this.#elementType,\n });\n }\n\n /** Changes visibility of the items represented by the tree node. */\n public changeVisibilityStatus(node: HierarchyNode, on: boolean): Observable<void> {\n const changeObs = defer(() => {\n if (HierarchyNode.isClassGroupingNode(node)) {\n const nodeInfo = this.getGroupingNodeInfo(node);\n return this.#visibilityHelper.changeGroupedElementsVisibilityStatus({\n categoryId: nodeInfo.categoryId,\n modelElementsMap: nodeInfo.modelElementsMap,\n on,\n });\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (CategoriesTreeNode.isDefinitionContainerNode(node)) {\n return this.#visibilityHelper.changeDefinitionContainersVisibilityStatus({\n definitionContainerIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n on,\n });\n }\n\n if (CategoriesTreeNode.isModelNode(node)) {\n return this.#visibilityHelper.changeModelsVisibilityStatus({\n modelIds: node.key.instanceKeys.map(({ id }) => id),\n on,\n });\n }\n\n if (CategoriesTreeNode.isCategoryNode(node)) {\n return this.#visibilityHelper.changeCategoriesVisibilityStatus({\n categoryIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n modelId: CategoriesTreeNode.getModelId(node),\n on,\n });\n }\n\n const categoryId = CategoriesTreeNode.getCategoryId(node);\n if (!categoryId) {\n return EMPTY;\n }\n\n if (CategoriesTreeNode.isSubCategoryNode(node)) {\n return this.#visibilityHelper.changeSubCategoriesVisibilityStatus({\n categoryId,\n subCategoryIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n on,\n });\n }\n\n const modelId = CategoriesTreeNode.getModelId(node);\n if (!modelId) {\n return EMPTY;\n }\n\n return this.#visibilityHelper.changeElementsVisibilityStatus({\n elementIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n categoryId,\n on,\n });\n });\n\n if (this.#props.viewport.isAlwaysDrawnExclusive) {\n return concat(this.#visibilityHelper.removeAlwaysDrawnExclusive(), changeObs);\n }\n return changeObs;\n }\n\n public getFilterTargetsVisibilityStatus(targets: CategoriesTreeFilterTargets): Observable<VisibilityStatus> {\n return defer(() => {\n const { definitionContainerIds, subCategories, modelIds, categories, elements } = targets;\n const observables = new Array<Observable<VisibilityStatus>>();\n if (definitionContainerIds?.size) {\n observables.push(this.#visibilityHelper.getDefinitionContainersVisibilityStatus({ definitionContainerIds }));\n }\n\n if (modelIds?.size) {\n observables.push(this.#visibilityHelper.getModelsVisibilityStatus({ modelIds, type: this.#modelType }));\n }\n\n if (categories?.length) {\n observables.push(\n from(categories).pipe(\n mergeMap(({ modelId, categoryIds }) =>\n this.#visibilityHelper.getCategoriesVisibilityStatus({\n categoryIds,\n modelId,\n type: this.#categoryType,\n }),\n ),\n ),\n );\n }\n\n if (subCategories?.length) {\n observables.push(\n from(subCategories).pipe(\n mergeMap(({ categoryId, subCategoryIds }) => this.#visibilityHelper.getSubCategoriesVisibilityStatus({ subCategoryIds, categoryId })),\n ),\n );\n }\n\n if (elements?.length) {\n observables.push(\n from(elements).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(({ modelId, elementIds, categoryId }) =>\n this.#visibilityHelper.getElementsVisibilityStatus({ modelId, categoryId, elementIds, type: this.#elementType }),\n ),\n ),\n );\n }\n\n return merge(...observables);\n }).pipe(mergeVisibilityStatuses);\n }\n\n private getCategories(props: Parameters<BaseIdsCache[\"getCategories\"]>[0]): ReturnType<BaseIdsCache[\"getCategories\"]> {\n return from(Id64.iterable(props.modelIds)).pipe(\n mergeMap((modelId) =>\n from(this.#props.idsCache.getModelCategoryIds(modelId)).pipe(\n map((categories) => ({\n id: modelId,\n ...(this.#props.viewport.viewType === \"2d\" ? { drawingCategories: categories } : { spatialCategories: categories }),\n })),\n ),\n ),\n );\n }\n\n private getAllCategories(): ReturnType<BaseIdsCache[\"getAllCategories\"]> {\n return from(this.#props.idsCache.getAllCategories()).pipe(\n map((categories) => {\n if (this.#props.viewport.viewType === \"2d\") {\n return { drawingCategories: categories };\n }\n return { spatialCategories: categories };\n }),\n );\n }\n\n private getElementsCount(props: Parameters<BaseIdsCache[\"getElementsCount\"]>[0]): ReturnType<BaseIdsCache[\"getElementsCount\"]> {\n return from(this.#props.idsCache.getCategoryElementsCount(props.modelId, props.categoryId));\n }\n\n private getModels(props: Parameters<BaseIdsCache[\"getModels\"]>[0]): ReturnType<BaseIdsCache[\"getModels\"]> {\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n from(this.#props.idsCache.getCategoriesElementModels(categoryId, true)).pipe(\n mergeMap((categoryModelsMap) => (categoryModelsMap.size > 0 ? categoryModelsMap.values() : of(undefined))),\n map((categoryModels) => ({ id: categoryId, models: categoryModels })),\n ),\n ),\n );\n }\n\n private getSubCategories(props: Parameters<BaseIdsCache[\"getSubCategories\"]>[0]): ReturnType<BaseIdsCache[\"getSubCategories\"]> {\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n from(this.#props.idsCache.getSubCategories(categoryId)).pipe(\n mergeMap((categorySubCategoriesMap) => (categorySubCategoriesMap.size > 0 ? categorySubCategoriesMap.values() : of(undefined))),\n map((subCategories) => ({ id: categoryId, subCategories })),\n ),\n ),\n );\n }\n\n private getSubModels(props: Parameters<BaseIdsCache[\"getSubModels\"]>[0]): ReturnType<BaseIdsCache[\"getSubModels\"]> {\n if (\"modelIds\" in props) {\n return from(Id64.iterable(props.modelIds)).pipe(\n mergeMap((modelId) => {\n if (props.categoryId) {\n return from(this.#props.idsCache.getCategoriesModeledElements(modelId, props.categoryId)).pipe(map((subModels) => ({ id: modelId, subModels })));\n }\n return from(this.#props.idsCache.getModelCategoryIds(modelId)).pipe(\n mergeMap((categoryIds) => from(this.#props.idsCache.getCategoriesModeledElements(modelId, categoryIds))),\n map((subModels) => ({ id: modelId, subModels })),\n );\n }),\n );\n }\n\n if (props.modelId) {\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n from(this.#props.idsCache.getCategoriesModeledElements(props.modelId!, categoryId)).pipe(map((subModels) => ({ id: categoryId, subModels }))),\n ),\n );\n }\n\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n from(this.#props.idsCache.getCategoriesElementModels(categoryId)).pipe(\n mergeMap((categoryModelsMap) => {\n const models = categoryModelsMap.get(categoryId);\n if (!models) {\n return of({ id: categoryId, subModels: undefined });\n }\n return from(models).pipe(\n mergeMap((modelId) => from(this.#props.idsCache.getCategoriesModeledElements(modelId, categoryId))),\n map((subModels) => ({ id: categoryId, subModels })),\n );\n }),\n ),\n ),\n );\n }\n\n private getGroupingNodeInfo(node: GroupingHierarchyNode) {\n const modelElementsMap: Map<ModelId, Set<ElementId>> = node.extendedData?.modelElementsMap;\n const categoryId = node.extendedData?.categoryId;\n assert(!!modelElementsMap && !!categoryId);\n\n return { modelElementsMap, categoryId };\n }\n}\n\n/**\n * Creates categories tree visibility handler. Is used by integration and performance tests.\n * @internal\n */\nexport function createCategoriesTreeVisibilityHandler(props: {\n viewport: TreeWidgetViewport;\n idsCache: CategoriesTreeIdsCache;\n imodelAccess: ECClassHierarchyInspector;\n filteredPaths?: HierarchyFilteringPath[];\n}) {\n return new HierarchyVisibilityHandlerImpl<CategoriesTreeFilterTargets>({\n getFilteredTree: (): undefined | Promise<FilteredTree<CategoriesTreeFilterTargets>> => {\n if (!props.filteredPaths) {\n return undefined;\n }\n const { categoryClass, elementClass, modelClass } = getClassesByView(props.viewport.viewType === \"2d\" ? \"2d\" : \"3d\");\n return createFilteredCategoriesTree({\n idsCache: props.idsCache,\n filteringPaths: props.filteredPaths,\n imodelAccess: props.imodelAccess,\n categoryClassName: categoryClass,\n categoryElementClassName: elementClass,\n categoryModelClassName: modelClass,\n });\n },\n getTreeSpecificVisibilityHandler: (info) => {\n return new CategoriesTreeVisibilityHandler({\n alwaysAndNeverDrawnElementInfo: info,\n idsCache: props.idsCache,\n viewport: props.viewport,\n });\n },\n viewport: props.viewport,\n });\n}\n"]}
|
|
@@ -153,7 +153,12 @@ export class ClassificationsTreeVisibilityHandler {
|
|
|
153
153
|
}
|
|
154
154
|
getSubModels(props) {
|
|
155
155
|
if ("modelIds" in props) {
|
|
156
|
-
return from(Id64.iterable(props.modelIds)).pipe(mergeMap((modelId) =>
|
|
156
|
+
return from(Id64.iterable(props.modelIds)).pipe(mergeMap((modelId) => {
|
|
157
|
+
if (props.categoryId) {
|
|
158
|
+
return from(this.#props.idsCache.getCategoriesModeledElements(modelId, props.categoryId)).pipe(map((subModels) => ({ id: modelId, subModels })));
|
|
159
|
+
}
|
|
160
|
+
return from(this.#props.idsCache.getModelCategoryIds(modelId)).pipe(mergeMap(({ drawing, spatial }) => merge(drawing, spatial)), toArray(), mergeMap((categoryIds) => from(this.#props.idsCache.getCategoriesModeledElements(modelId, categoryIds))), map((subModels) => ({ id: modelId, subModels })));
|
|
161
|
+
}));
|
|
157
162
|
}
|
|
158
163
|
if (props.modelId) {
|
|
159
164
|
return from(Id64.iterable(props.categoryIds)).pipe(mergeMap((categoryId) => from(this.#props.idsCache.getCategoriesModeledElements(props.modelId, categoryId)).pipe(map((subModels) => ({ id: categoryId, subModels })))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClassificationsTreeVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../../../src/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { concat, defer, EMPTY, from, map, merge, mergeMap, of, toArray } from \"rxjs\";\nimport { Id64 } from \"@itwin/core-bentley\";\nimport { HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { releaseMainThreadOnItemsCount } from \"../../../common/internal/Utils.js\";\nimport { mergeVisibilityStatuses } from \"../../../common/internal/VisibilityUtils.js\";\nimport { ClassificationsTreeNode } from \"../ClassificationsTreeNode.js\";\nimport { ClassificationsTreeVisibilityHelper } from \"./ClassificationsTreeVisibilityHelper.js\";\n\nimport type { Observable } from \"rxjs\";\nimport type { AlwaysAndNeverDrawnElementInfo } from \"../../../common/internal/AlwaysAndNeverDrawnElementInfo.js\";\nimport type { ModelId } from \"../../../common/internal/Types.js\";\nimport type { BaseIdsCache, TreeSpecificVisibilityHandler } from \"../../../common/internal/visibility/BaseVisibilityHelper.js\";\nimport type { TreeWidgetViewport } from \"../../../common/TreeWidgetViewport.js\";\nimport type { VisibilityStatus } from \"../../../common/UseHierarchyVisibility.js\";\nimport type { ClassificationsTreeIdsCache } from \"../ClassificationsTreeIdsCache.js\";\nimport type { ClassificationsTreeFilterTargets } from \"./FilteredTree.js\";\n\n/** @internal */\nexport interface ClassificationsTreeVisibilityHandlerProps {\n idsCache: ClassificationsTreeIdsCache;\n viewport: TreeWidgetViewport;\n alwaysAndNeverDrawnElementInfo: AlwaysAndNeverDrawnElementInfo;\n}\n\n/**\n * Handles visibility status of classifications tree nodes.\n *\n * This handler knows how to get and change visibility status of nodes created by hierarchy definition.\n * @internal\n */\nexport class ClassificationsTreeVisibilityHandler implements Disposable, TreeSpecificVisibilityHandler<ClassificationsTreeFilterTargets> {\n readonly #props: ClassificationsTreeVisibilityHandlerProps;\n #visibilityHelper: ClassificationsTreeVisibilityHelper;\n\n constructor(constructorProps: ClassificationsTreeVisibilityHandlerProps) {\n this.#props = constructorProps;\n // Remove after https://github.com/iTwin/viewer-components-react/issues/1421.\n // We won't need to create a custom base ids cache.\n const baseIdsCache: BaseIdsCache = {\n getCategories: (props) => this.getCategories(props),\n getAllCategories: () => this.getAllCategories(),\n getElementsCount: (props) => this.getElementsCount(props),\n getModels: (props) => this.getModels(props),\n getSubCategories: (props) => this.getSubCategories(props),\n getSubModels: (props) => this.getSubModels(props),\n hasSubModel: async (props) => this.#props.idsCache.hasSubModel(props),\n };\n this.#visibilityHelper = new ClassificationsTreeVisibilityHelper({\n viewport: this.#props.viewport,\n idsCache: this.#props.idsCache,\n alwaysAndNeverDrawnElementInfo: this.#props.alwaysAndNeverDrawnElementInfo,\n baseIdsCache,\n });\n }\n\n public [Symbol.dispose]() {\n this.#visibilityHelper[Symbol.dispose]();\n }\n\n public changeFilterTargetsVisibilityStatus(targets: ClassificationsTreeFilterTargets, on: boolean): Observable<void> {\n return defer(() => {\n const { classificationIds, classificationTableIds, elements2d, elements3d } = targets;\n const observables = new Array<Observable<void>>();\n if (classificationTableIds?.size) {\n observables.push(this.#visibilityHelper.changeClassificationTablesVisibilityStatus({ classificationTableIds, on }));\n }\n\n if (classificationIds?.size) {\n observables.push(this.#visibilityHelper.changeClassificationsVisibilityStatus({ classificationIds, on }));\n }\n\n if (elements2d?.length) {\n observables.push(\n from(elements2d).pipe(\n mergeMap(({ modelId, categoryId, elementIds }) => this.#visibilityHelper.changeElementsVisibilityStatus({ modelId, categoryId, elementIds, on })),\n ),\n );\n }\n\n if (elements3d?.length) {\n observables.push(\n from(elements3d).pipe(\n mergeMap(({ modelId, categoryId, elementIds }) => this.#visibilityHelper.changeElementsVisibilityStatus({ modelId, categoryId, elementIds, on })),\n ),\n );\n }\n\n return merge(...observables);\n });\n }\n\n public getVisibilityStatus(node: HierarchyNode): Observable<VisibilityStatus> {\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (ClassificationsTreeNode.isClassificationTableNode(node)) {\n return this.#visibilityHelper.getClassificationTablesVisibilityStatus({\n classificationTableIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n });\n }\n\n if (ClassificationsTreeNode.isClassificationNode(node)) {\n return this.#visibilityHelper.getClassificationsVisibilityStatus({\n classificationIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n });\n }\n\n return this.#visibilityHelper.getElementsVisibilityStatus({\n elementIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n modelId: ClassificationsTreeNode.getModelId(node),\n categoryId: ClassificationsTreeNode.getCategoryId(node),\n type: node.extendedData?.type,\n });\n }\n\n /** Changes visibility of the items represented by the tree node. */\n public changeVisibilityStatus(node: HierarchyNode, on: boolean): Observable<void> {\n const changeObs = defer(() => {\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (ClassificationsTreeNode.isClassificationTableNode(node)) {\n return this.#visibilityHelper.changeClassificationTablesVisibilityStatus({\n classificationTableIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n on,\n });\n }\n\n if (ClassificationsTreeNode.isClassificationNode(node)) {\n return this.#visibilityHelper.changeClassificationsVisibilityStatus({\n classificationIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n on,\n });\n }\n\n return this.#visibilityHelper.changeElementsVisibilityStatus({\n elementIds: node.key.instanceKeys.map(({ id }) => id),\n modelId: ClassificationsTreeNode.getModelId(node),\n categoryId: ClassificationsTreeNode.getCategoryId(node),\n on,\n });\n });\n if (this.#props.viewport.isAlwaysDrawnExclusive) {\n return concat(this.#visibilityHelper.removeAlwaysDrawnExclusive(), changeObs);\n }\n return changeObs;\n }\n\n public getFilterTargetsVisibilityStatus(targets: ClassificationsTreeFilterTargets): Observable<VisibilityStatus> {\n return defer(() => {\n const { classificationIds, classificationTableIds, elements2d, elements3d } = targets;\n const observables = new Array<Observable<VisibilityStatus>>();\n if (classificationTableIds?.size) {\n observables.push(this.#visibilityHelper.getClassificationTablesVisibilityStatus({ classificationTableIds }));\n }\n\n if (classificationIds?.size) {\n observables.push(this.#visibilityHelper.getClassificationsVisibilityStatus({ classificationIds }));\n }\n if (elements2d?.length) {\n observables.push(\n from(elements2d).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(({ modelId, categoryId, elementIds }) => {\n return from(elementIds).pipe(\n releaseMainThreadOnItemsCount(1000),\n mergeMap((elementId) =>\n this.#visibilityHelper.getElementsVisibilityStatus({ modelId, categoryId, elementIds: elementId, type: \"GeometricElement2d\" }),\n ),\n );\n }),\n ),\n );\n }\n\n if (elements3d?.length) {\n observables.push(\n from(elements3d).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(({ modelId, categoryId, elementIds }) => {\n return from(elementIds).pipe(\n releaseMainThreadOnItemsCount(1000),\n mergeMap((elementId) =>\n this.#visibilityHelper.getElementsVisibilityStatus({ modelId, categoryId, elementIds: elementId, type: \"GeometricElement3d\" }),\n ),\n );\n }),\n ),\n );\n }\n\n return merge(...observables);\n }).pipe(mergeVisibilityStatuses);\n }\n\n private getCategories(props: Parameters<BaseIdsCache[\"getCategories\"]>[0]): ReturnType<BaseIdsCache[\"getCategories\"]> {\n return from(Id64.iterable(props.modelIds)).pipe(\n mergeMap((modelId) =>\n from(this.#props.idsCache.getModelCategoryIds(modelId)).pipe(\n map(({ spatial, drawing }) => ({ id: modelId, drawingCategories: drawing, spatialCategories: spatial })),\n ),\n ),\n );\n }\n\n private getAllCategories(): ReturnType<BaseIdsCache[\"getAllCategories\"]> {\n return from(this.#props.idsCache.getAllCategories()).pipe(\n map(({ drawing, spatial }) => {\n return { drawingCategories: drawing, spatialCategories: spatial };\n }),\n );\n }\n\n private getElementsCount(props: Parameters<BaseIdsCache[\"getElementsCount\"]>[0]): ReturnType<BaseIdsCache[\"getElementsCount\"]> {\n return from(this.#props.idsCache.getCategoryElementsCount(props.modelId, props.categoryId));\n }\n\n private getModels(props: Parameters<BaseIdsCache[\"getModels\"]>[0]): ReturnType<BaseIdsCache[\"getModels\"]> {\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n from(this.#props.idsCache.getCategoriesElementModels(categoryId, true)).pipe(\n mergeMap((categoryModelsMap) => (categoryModelsMap.size > 0 ? categoryModelsMap.values() : of(new Array<ModelId>()))),\n map((categoryModels) => ({ id: categoryId, models: categoryModels })),\n ),\n ),\n );\n }\n\n private getSubCategories(props: Parameters<BaseIdsCache[\"getSubCategories\"]>[0]): ReturnType<BaseIdsCache[\"getSubCategories\"]> {\n return from(Id64.iterable(props.categoryIds)).pipe(map((categoryId) => ({ id: categoryId, subCategories: undefined })));\n }\n\n private getSubModels(props: Parameters<BaseIdsCache[\"getSubModels\"]>[0]): ReturnType<BaseIdsCache[\"getSubModels\"]> {\n if (\"modelIds\" in props) {\n return from(Id64.iterable(props.modelIds)).pipe(\n mergeMap((modelId) =>\n from(this.#props.idsCache.getModelCategoryIds(modelId)).pipe(\n mergeMap(({ drawing, spatial }) => merge(drawing, spatial)),\n toArray(),\n mergeMap((categoryIds) => from(this.#props.idsCache.getCategoriesModeledElements(modelId, categoryIds))),\n map((subModels) => ({ id: modelId, subModels })),\n ),\n ),\n );\n }\n\n if (props.modelId) {\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n from(this.#props.idsCache.getCategoriesModeledElements(props.modelId!, categoryId)).pipe(map((subModels) => ({ id: categoryId, subModels }))),\n ),\n );\n }\n\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n from(this.#props.idsCache.getCategoriesElementModels(categoryId)).pipe(\n mergeMap((categoryModelsMap) => {\n const models = categoryModelsMap.get(categoryId);\n if (!models) {\n return of({ id: categoryId, subModels: undefined });\n }\n return from(models).pipe(\n mergeMap((modelId) => from(this.#props.idsCache.getCategoriesModeledElements(modelId, categoryId))),\n map((subModels) => ({ id: categoryId, subModels })),\n );\n }),\n ),\n ),\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ClassificationsTreeVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../../../src/tree-widget-react/components/trees/classifications-tree/internal/visibility/ClassificationsTreeVisibilityHandler.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { concat, defer, EMPTY, from, map, merge, mergeMap, of, toArray } from \"rxjs\";\nimport { Id64 } from \"@itwin/core-bentley\";\nimport { HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { releaseMainThreadOnItemsCount } from \"../../../common/internal/Utils.js\";\nimport { mergeVisibilityStatuses } from \"../../../common/internal/VisibilityUtils.js\";\nimport { ClassificationsTreeNode } from \"../ClassificationsTreeNode.js\";\nimport { ClassificationsTreeVisibilityHelper } from \"./ClassificationsTreeVisibilityHelper.js\";\n\nimport type { Observable } from \"rxjs\";\nimport type { AlwaysAndNeverDrawnElementInfo } from \"../../../common/internal/AlwaysAndNeverDrawnElementInfo.js\";\nimport type { ModelId } from \"../../../common/internal/Types.js\";\nimport type { BaseIdsCache, TreeSpecificVisibilityHandler } from \"../../../common/internal/visibility/BaseVisibilityHelper.js\";\nimport type { TreeWidgetViewport } from \"../../../common/TreeWidgetViewport.js\";\nimport type { VisibilityStatus } from \"../../../common/UseHierarchyVisibility.js\";\nimport type { ClassificationsTreeIdsCache } from \"../ClassificationsTreeIdsCache.js\";\nimport type { ClassificationsTreeFilterTargets } from \"./FilteredTree.js\";\n\n/** @internal */\nexport interface ClassificationsTreeVisibilityHandlerProps {\n idsCache: ClassificationsTreeIdsCache;\n viewport: TreeWidgetViewport;\n alwaysAndNeverDrawnElementInfo: AlwaysAndNeverDrawnElementInfo;\n}\n\n/**\n * Handles visibility status of classifications tree nodes.\n *\n * This handler knows how to get and change visibility status of nodes created by hierarchy definition.\n * @internal\n */\nexport class ClassificationsTreeVisibilityHandler implements Disposable, TreeSpecificVisibilityHandler<ClassificationsTreeFilterTargets> {\n readonly #props: ClassificationsTreeVisibilityHandlerProps;\n #visibilityHelper: ClassificationsTreeVisibilityHelper;\n\n constructor(constructorProps: ClassificationsTreeVisibilityHandlerProps) {\n this.#props = constructorProps;\n // Remove after https://github.com/iTwin/viewer-components-react/issues/1421.\n // We won't need to create a custom base ids cache.\n const baseIdsCache: BaseIdsCache = {\n getCategories: (props) => this.getCategories(props),\n getAllCategories: () => this.getAllCategories(),\n getElementsCount: (props) => this.getElementsCount(props),\n getModels: (props) => this.getModels(props),\n getSubCategories: (props) => this.getSubCategories(props),\n getSubModels: (props) => this.getSubModels(props),\n hasSubModel: async (props) => this.#props.idsCache.hasSubModel(props),\n };\n this.#visibilityHelper = new ClassificationsTreeVisibilityHelper({\n viewport: this.#props.viewport,\n idsCache: this.#props.idsCache,\n alwaysAndNeverDrawnElementInfo: this.#props.alwaysAndNeverDrawnElementInfo,\n baseIdsCache,\n });\n }\n\n public [Symbol.dispose]() {\n this.#visibilityHelper[Symbol.dispose]();\n }\n\n public changeFilterTargetsVisibilityStatus(targets: ClassificationsTreeFilterTargets, on: boolean): Observable<void> {\n return defer(() => {\n const { classificationIds, classificationTableIds, elements2d, elements3d } = targets;\n const observables = new Array<Observable<void>>();\n if (classificationTableIds?.size) {\n observables.push(this.#visibilityHelper.changeClassificationTablesVisibilityStatus({ classificationTableIds, on }));\n }\n\n if (classificationIds?.size) {\n observables.push(this.#visibilityHelper.changeClassificationsVisibilityStatus({ classificationIds, on }));\n }\n\n if (elements2d?.length) {\n observables.push(\n from(elements2d).pipe(\n mergeMap(({ modelId, categoryId, elementIds }) => this.#visibilityHelper.changeElementsVisibilityStatus({ modelId, categoryId, elementIds, on })),\n ),\n );\n }\n\n if (elements3d?.length) {\n observables.push(\n from(elements3d).pipe(\n mergeMap(({ modelId, categoryId, elementIds }) => this.#visibilityHelper.changeElementsVisibilityStatus({ modelId, categoryId, elementIds, on })),\n ),\n );\n }\n\n return merge(...observables);\n });\n }\n\n public getVisibilityStatus(node: HierarchyNode): Observable<VisibilityStatus> {\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (ClassificationsTreeNode.isClassificationTableNode(node)) {\n return this.#visibilityHelper.getClassificationTablesVisibilityStatus({\n classificationTableIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n });\n }\n\n if (ClassificationsTreeNode.isClassificationNode(node)) {\n return this.#visibilityHelper.getClassificationsVisibilityStatus({\n classificationIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n });\n }\n\n return this.#visibilityHelper.getElementsVisibilityStatus({\n elementIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n modelId: ClassificationsTreeNode.getModelId(node),\n categoryId: ClassificationsTreeNode.getCategoryId(node),\n type: node.extendedData?.type,\n });\n }\n\n /** Changes visibility of the items represented by the tree node. */\n public changeVisibilityStatus(node: HierarchyNode, on: boolean): Observable<void> {\n const changeObs = defer(() => {\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (ClassificationsTreeNode.isClassificationTableNode(node)) {\n return this.#visibilityHelper.changeClassificationTablesVisibilityStatus({\n classificationTableIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n on,\n });\n }\n\n if (ClassificationsTreeNode.isClassificationNode(node)) {\n return this.#visibilityHelper.changeClassificationsVisibilityStatus({\n classificationIds: node.key.instanceKeys.map((instanceKey) => instanceKey.id),\n on,\n });\n }\n\n return this.#visibilityHelper.changeElementsVisibilityStatus({\n elementIds: node.key.instanceKeys.map(({ id }) => id),\n modelId: ClassificationsTreeNode.getModelId(node),\n categoryId: ClassificationsTreeNode.getCategoryId(node),\n on,\n });\n });\n if (this.#props.viewport.isAlwaysDrawnExclusive) {\n return concat(this.#visibilityHelper.removeAlwaysDrawnExclusive(), changeObs);\n }\n return changeObs;\n }\n\n public getFilterTargetsVisibilityStatus(targets: ClassificationsTreeFilterTargets): Observable<VisibilityStatus> {\n return defer(() => {\n const { classificationIds, classificationTableIds, elements2d, elements3d } = targets;\n const observables = new Array<Observable<VisibilityStatus>>();\n if (classificationTableIds?.size) {\n observables.push(this.#visibilityHelper.getClassificationTablesVisibilityStatus({ classificationTableIds }));\n }\n\n if (classificationIds?.size) {\n observables.push(this.#visibilityHelper.getClassificationsVisibilityStatus({ classificationIds }));\n }\n if (elements2d?.length) {\n observables.push(\n from(elements2d).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(({ modelId, categoryId, elementIds }) => {\n return from(elementIds).pipe(\n releaseMainThreadOnItemsCount(1000),\n mergeMap((elementId) =>\n this.#visibilityHelper.getElementsVisibilityStatus({ modelId, categoryId, elementIds: elementId, type: \"GeometricElement2d\" }),\n ),\n );\n }),\n ),\n );\n }\n\n if (elements3d?.length) {\n observables.push(\n from(elements3d).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(({ modelId, categoryId, elementIds }) => {\n return from(elementIds).pipe(\n releaseMainThreadOnItemsCount(1000),\n mergeMap((elementId) =>\n this.#visibilityHelper.getElementsVisibilityStatus({ modelId, categoryId, elementIds: elementId, type: \"GeometricElement3d\" }),\n ),\n );\n }),\n ),\n );\n }\n\n return merge(...observables);\n }).pipe(mergeVisibilityStatuses);\n }\n\n private getCategories(props: Parameters<BaseIdsCache[\"getCategories\"]>[0]): ReturnType<BaseIdsCache[\"getCategories\"]> {\n return from(Id64.iterable(props.modelIds)).pipe(\n mergeMap((modelId) =>\n from(this.#props.idsCache.getModelCategoryIds(modelId)).pipe(\n map(({ spatial, drawing }) => ({ id: modelId, drawingCategories: drawing, spatialCategories: spatial })),\n ),\n ),\n );\n }\n\n private getAllCategories(): ReturnType<BaseIdsCache[\"getAllCategories\"]> {\n return from(this.#props.idsCache.getAllCategories()).pipe(\n map(({ drawing, spatial }) => {\n return { drawingCategories: drawing, spatialCategories: spatial };\n }),\n );\n }\n\n private getElementsCount(props: Parameters<BaseIdsCache[\"getElementsCount\"]>[0]): ReturnType<BaseIdsCache[\"getElementsCount\"]> {\n return from(this.#props.idsCache.getCategoryElementsCount(props.modelId, props.categoryId));\n }\n\n private getModels(props: Parameters<BaseIdsCache[\"getModels\"]>[0]): ReturnType<BaseIdsCache[\"getModels\"]> {\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n from(this.#props.idsCache.getCategoriesElementModels(categoryId, true)).pipe(\n mergeMap((categoryModelsMap) => (categoryModelsMap.size > 0 ? categoryModelsMap.values() : of(new Array<ModelId>()))),\n map((categoryModels) => ({ id: categoryId, models: categoryModels })),\n ),\n ),\n );\n }\n\n private getSubCategories(props: Parameters<BaseIdsCache[\"getSubCategories\"]>[0]): ReturnType<BaseIdsCache[\"getSubCategories\"]> {\n return from(Id64.iterable(props.categoryIds)).pipe(map((categoryId) => ({ id: categoryId, subCategories: undefined })));\n }\n\n private getSubModels(props: Parameters<BaseIdsCache[\"getSubModels\"]>[0]): ReturnType<BaseIdsCache[\"getSubModels\"]> {\n if (\"modelIds\" in props) {\n return from(Id64.iterable(props.modelIds)).pipe(\n mergeMap((modelId) => {\n if (props.categoryId) {\n return from(this.#props.idsCache.getCategoriesModeledElements(modelId, props.categoryId)).pipe(map((subModels) => ({ id: modelId, subModels })));\n }\n return from(this.#props.idsCache.getModelCategoryIds(modelId)).pipe(\n mergeMap(({ drawing, spatial }) => merge(drawing, spatial)),\n toArray(),\n mergeMap((categoryIds) => from(this.#props.idsCache.getCategoriesModeledElements(modelId, categoryIds))),\n map((subModels) => ({ id: modelId, subModels })),\n );\n }),\n );\n }\n\n if (props.modelId) {\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n from(this.#props.idsCache.getCategoriesModeledElements(props.modelId!, categoryId)).pipe(map((subModels) => ({ id: categoryId, subModels }))),\n ),\n );\n }\n\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n from(this.#props.idsCache.getCategoriesElementModels(categoryId)).pipe(\n mergeMap((categoryModelsMap) => {\n const models = categoryModelsMap.get(categoryId);\n if (!models) {\n return of({ id: categoryId, subModels: undefined });\n }\n return from(models).pipe(\n mergeMap((modelId) => from(this.#props.idsCache.getCategoriesModeledElements(modelId, categoryId))),\n map((subModels) => ({ id: categoryId, subModels })),\n );\n }),\n ),\n ),\n );\n }\n}\n"]}
|
|
@@ -6,7 +6,10 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
6
6
|
import "./SkeletonTree.css";
|
|
7
7
|
import { Skeleton, VisuallyHidden } from "@stratakit/bricks";
|
|
8
8
|
import { TreeWidget } from "../../../../TreeWidget.js";
|
|
9
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Represents the loaded tree content before it finishes loading.
|
|
11
|
+
* @beta
|
|
12
|
+
*/
|
|
10
13
|
export function SkeletonTree() {
|
|
11
14
|
return (_jsxs("div", { className: "tw-skeleton-container", children: [Array.from({ length: 20 }, (_, index) => (_jsx(SkeletonRow, {}, index))), _jsx(VisuallyHidden, { id: "tw-progress-bar", children: TreeWidget.translate("loading.skeleton") })] }));
|
|
12
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SkeletonTree.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/common/components/SkeletonTree.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAEhG,OAAO,oBAAoB,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD
|
|
1
|
+
{"version":3,"file":"SkeletonTree.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/common/components/SkeletonTree.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAEhG,OAAO,oBAAoB,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,CACL,eAAK,SAAS,EAAC,uBAAuB,aACnC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CACxC,KAAC,WAAW,MAAM,KAAK,CAAI,CAC5B,CAAC,EACF,KAAC,cAAc,IAAC,EAAE,EAAE,iBAAiB,YAAG,UAAU,CAAC,SAAS,CAAC,kBAAkB,CAAC,GAAkB,IAC9F,CACP,CAAC;AACJ,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,CACL,eAAK,SAAS,EAAC,iBAAiB,aAC9B,KAAC,QAAQ,IAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,GAAI,EAC9C,KAAC,QAAQ,IAAC,OAAO,EAAE,MAAM,GAAI,IACzB,CACP,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport \"./SkeletonTree.css\";\nimport { Skeleton, VisuallyHidden } from \"@stratakit/bricks\";\nimport { TreeWidget } from \"../../../../TreeWidget.js\";\n\n/**\n * Represents the loaded tree content before it finishes loading.\n * @beta\n */\nexport function SkeletonTree() {\n return (\n <div className=\"tw-skeleton-container\">\n {Array.from({ length: 20 }, (_, index) => (\n <SkeletonRow key={index} />\n ))}\n <VisuallyHidden id={\"tw-progress-bar\"}>{TreeWidget.translate(\"loading.skeleton\")}</VisuallyHidden>\n </div>\n );\n}\n\nfunction SkeletonRow() {\n return (\n <div className=\"tw-skeleton-row\">\n <Skeleton variant={\"object\"} size={\"small\"} />\n <Skeleton variant={\"text\"} />\n </div>\n );\n}\n"]}
|
|
@@ -157,11 +157,11 @@ export async function loadCategoriesFromViewport(vp) {
|
|
|
157
157
|
const rows = await (async () => {
|
|
158
158
|
const result = new Array();
|
|
159
159
|
for await (const row of vp.iModel.createQueryReader(ecsql, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {
|
|
160
|
-
result.push(row);
|
|
160
|
+
result.push(row.id);
|
|
161
161
|
}
|
|
162
162
|
return result;
|
|
163
163
|
})();
|
|
164
|
-
(await vp.iModel.categories.getCategoryInfo(rows
|
|
164
|
+
(await vp.iModel.categories.getCategoryInfo(rows)).forEach((val) => {
|
|
165
165
|
categories.push({ categoryId: val.id, subCategoryIds: val.subCategories.size ? [...val.subCategories.keys()] : undefined });
|
|
166
166
|
});
|
|
167
167
|
return categories;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisibilityUtils.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/common/internal/VisibilityUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { map, reduce } from \"rxjs\";\nimport { Id64 } from \"@itwin/core-bentley\";\nimport { QueryRowFormat } from \"@itwin/core-common\";\nimport { reduceWhile } from \"./Rxjs.js\";\nimport { createVisibilityStatus } from \"./Tooltip.js\";\nimport { getClassesByView, releaseMainThreadOnItemsCount } from \"./Utils.js\";\n\nimport type { Observable, OperatorFunction } from \"rxjs\";\nimport type { Id64Arg, Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport type { CategoryInfo } from \"../CategoriesVisibilityUtils.js\";\nimport type { TreeWidgetViewport } from \"../TreeWidgetViewport.js\";\nimport type { VisibilityStatus } from \"../UseHierarchyVisibility.js\";\nimport type { Visibility } from \"./Tooltip.js\";\nimport type { ElementId, ModelId } from \"./Types.js\";\n\nfunction mergeVisibilities(obs: Observable<Visibility>): Observable<Visibility | \"empty\"> {\n return obs.pipe(\n reduceWhile(\n (x) => x.allVisible || x.allHidden,\n (acc, val) => {\n acc.allVisible &&= val === \"visible\";\n acc.allHidden &&= val === \"hidden\";\n return acc;\n },\n { allVisible: true, allHidden: true },\n ),\n map((x) => {\n if (!x) {\n return \"empty\";\n }\n return x.allVisible ? \"visible\" : x.allHidden ? \"hidden\" : \"partial\";\n }),\n );\n}\n\n/** @internal */\nexport function mergeVisibilityStatuses(obs: Observable<VisibilityStatus>): Observable<VisibilityStatus> {\n return obs.pipe(\n map((visibilityStatus) => visibilityStatus.state),\n mergeVisibilities,\n map((visibility) => createVisibilityStatus(visibility === \"empty\" ? \"disabled\" : visibility)),\n );\n}\n\n/** @internal */\nexport function changeElementStateNoChildrenOperator(props: {\n on: boolean;\n isDisplayedByDefault: boolean;\n viewport: TreeWidgetViewport;\n}): OperatorFunction<string, void> {\n return (elementIds: Observable<Id64String>) => {\n const { on, isDisplayedByDefault } = props;\n const isAlwaysDrawnExclusive = props.viewport.isAlwaysDrawnExclusive;\n return elementIds.pipe(\n releaseMainThreadOnItemsCount(500),\n reduce<\n string,\n { changedNeverDrawn: boolean; changedAlwaysDrawn: boolean; neverDrawn: Set<ElementId> | undefined; alwaysDrawn: Set<ElementId> | undefined }\n >(\n (acc, elementId) => {\n if (acc.alwaysDrawn === undefined || acc.neverDrawn === undefined) {\n acc.alwaysDrawn = new Set(props.viewport.alwaysDrawn || []);\n acc.neverDrawn = new Set(props.viewport.neverDrawn || []);\n }\n if (on) {\n const wasRemoved = acc.neverDrawn.delete(elementId);\n acc.changedNeverDrawn ||= wasRemoved;\n // If exclusive mode is enabled, we must add the element to the always drawn list.\n if ((!isDisplayedByDefault || isAlwaysDrawnExclusive) && !acc.alwaysDrawn.has(elementId)) {\n acc.alwaysDrawn.add(elementId);\n acc.changedAlwaysDrawn = true;\n }\n } else {\n const wasRemoved = acc.alwaysDrawn.delete(elementId);\n acc.changedAlwaysDrawn ||= wasRemoved;\n // If exclusive mode is not enabled, we have to add the element to the never drawn list.\n if (isDisplayedByDefault && !isAlwaysDrawnExclusive && !acc.neverDrawn.has(elementId)) {\n acc.neverDrawn.add(elementId);\n acc.changedNeverDrawn = true;\n }\n }\n return acc;\n },\n {\n changedNeverDrawn: false,\n changedAlwaysDrawn: false,\n neverDrawn: undefined,\n alwaysDrawn: undefined,\n },\n ),\n map((state) => {\n state.changedNeverDrawn && state.neverDrawn && props.viewport.setNeverDrawn({ elementIds: state.neverDrawn });\n state.changedAlwaysDrawn &&\n state.alwaysDrawn &&\n props.viewport.setAlwaysDrawn({ elementIds: state.alwaysDrawn, exclusive: props.viewport.isAlwaysDrawnExclusive });\n }),\n );\n };\n}\n\n/** @internal */\nexport function getVisibilityFromAlwaysAndNeverDrawnElementsImpl(\n props: {\n alwaysDrawn: Set<ElementId> | undefined;\n neverDrawn: Set<ElementId> | undefined;\n totalCount: number;\n viewport: TreeWidgetViewport;\n } & GetVisibilityFromAlwaysAndNeverDrawnElementsProps,\n): VisibilityStatus {\n const { alwaysDrawn, neverDrawn, totalCount, viewport } = props;\n if (totalCount === 0) {\n return props.defaultStatus();\n }\n if (neverDrawn?.size === totalCount) {\n return createVisibilityStatus(\"hidden\");\n }\n\n if (alwaysDrawn?.size === totalCount) {\n return createVisibilityStatus(\"visible\");\n }\n\n if (viewport.isAlwaysDrawnExclusive) {\n return createVisibilityStatus(alwaysDrawn?.size ? \"partial\" : \"hidden\");\n }\n\n const status = props.defaultStatus();\n if ((status.state === \"visible\" && neverDrawn?.size) || (status.state === \"hidden\" && alwaysDrawn?.size)) {\n return createVisibilityStatus(\"partial\");\n }\n return status;\n}\n\n/** @internal */\nexport interface GetVisibilityFromAlwaysAndNeverDrawnElementsProps {\n /** Status when always/never lists are empty and exclusive mode is off */\n defaultStatus: (categoryId?: string) => VisibilityStatus;\n}\n\n/**\n * Toggles visibility of categories to show or hide.\n * @internal\n */\nexport async function toggleAllCategories(viewport: TreeWidgetViewport, display: boolean) {\n const categoryIds = await getCategoryIds(viewport);\n if (categoryIds.length === 0) {\n return;\n }\n\n await enableCategoryDisplay(viewport, categoryIds, display);\n}\n\n/**\n * Gets ids of all categories from specified imodel and viewport.\n * @internal\n */\nasync function getCategoryIds(viewport: TreeWidgetViewport): Promise<Id64Array> {\n const categories = await loadCategoriesFromViewport(viewport);\n return categories.map((category) => category.categoryId);\n}\n\n/**\n * Changes category display in the viewport.\n * @internal\n */\nexport async function enableCategoryDisplay(viewport: TreeWidgetViewport, categoryIds: Id64Arg, enabled: boolean, enableAllSubCategories = true) {\n viewport.changeCategoryDisplay({ categoryIds, display: enabled, enableAllSubCategories });\n\n // remove category overrides per model\n const modelsContainingOverrides = new Array<ModelId>();\n for (const override of viewport.perModelCategoryOverrides) {\n if (Id64.has(categoryIds, override.categoryId)) {\n modelsContainingOverrides.push(override.modelId);\n }\n }\n viewport.setPerModelCategoryOverride({ modelIds: modelsContainingOverrides, categoryIds, override: \"none\" });\n\n // changeCategoryDisplay only enables subcategories, it does not disabled them. So we must do that ourselves.\n if (false === enabled) {\n (await viewport.iModel.categories.getCategoryInfo(Id64.iterable(categoryIds))).forEach((categoryInfo) => {\n categoryInfo.subCategories.forEach((value) => enableSubCategoryDisplay(viewport, value.id, false));\n });\n }\n}\n\n/**\n * Changes subcategory display in the viewport\n * @internal\n */\nexport function enableSubCategoryDisplay(viewport: TreeWidgetViewport, subCategoryId: Id64String, enabled: boolean) {\n viewport.changeSubCategoryDisplay({ subCategoryId, display: enabled });\n}\n\n/** @internal */\nexport async function loadCategoriesFromViewport(vp: TreeWidgetViewport) {\n // Query categories and add them to state\n if (vp.viewType === \"other\") {\n return [];\n }\n const { categoryClass, elementClass } = getClassesByView(vp.viewType);\n const ecsql = `\n SELECT ECInstanceId as id\n FROM ${categoryClass}\n WHERE\n ECInstanceId IN (\n SELECT DISTINCT Category.Id\n FROM ${elementClass}\n WHERE\n Category.Id IN (SELECT ECInstanceId FROM ${categoryClass})\n ${vp.viewType !== \"2d\" ? \"\" : \"AND Model.Id=?\"}\n )\n `;\n\n const categories: CategoryInfo[] = [];\n const rows = await (async () => {\n const result = new Array<any>();\n for await (const row of vp.iModel.createQueryReader(ecsql, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n result.push(row);\n }\n return result;\n })();\n (await vp.iModel.categories.getCategoryInfo(rows.map((row) => row.id))).forEach((val) => {\n categories.push({ categoryId: val.id, subCategoryIds: val.subCategories.size ? [...val.subCategories.keys()] : undefined });\n });\n return categories;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"VisibilityUtils.js","sourceRoot":"","sources":["../../../../../../../src/tree-widget-react/components/trees/common/internal/VisibilityUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { map, reduce } from \"rxjs\";\nimport { Id64 } from \"@itwin/core-bentley\";\nimport { QueryRowFormat } from \"@itwin/core-common\";\nimport { reduceWhile } from \"./Rxjs.js\";\nimport { createVisibilityStatus } from \"./Tooltip.js\";\nimport { getClassesByView, releaseMainThreadOnItemsCount } from \"./Utils.js\";\n\nimport type { Observable, OperatorFunction } from \"rxjs\";\nimport type { Id64Arg, Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport type { CategoryInfo } from \"../CategoriesVisibilityUtils.js\";\nimport type { TreeWidgetViewport } from \"../TreeWidgetViewport.js\";\nimport type { VisibilityStatus } from \"../UseHierarchyVisibility.js\";\nimport type { Visibility } from \"./Tooltip.js\";\nimport type { ElementId, ModelId } from \"./Types.js\";\n\nfunction mergeVisibilities(obs: Observable<Visibility>): Observable<Visibility | \"empty\"> {\n return obs.pipe(\n reduceWhile(\n (x) => x.allVisible || x.allHidden,\n (acc, val) => {\n acc.allVisible &&= val === \"visible\";\n acc.allHidden &&= val === \"hidden\";\n return acc;\n },\n { allVisible: true, allHidden: true },\n ),\n map((x) => {\n if (!x) {\n return \"empty\";\n }\n return x.allVisible ? \"visible\" : x.allHidden ? \"hidden\" : \"partial\";\n }),\n );\n}\n\n/** @internal */\nexport function mergeVisibilityStatuses(obs: Observable<VisibilityStatus>): Observable<VisibilityStatus> {\n return obs.pipe(\n map((visibilityStatus) => visibilityStatus.state),\n mergeVisibilities,\n map((visibility) => createVisibilityStatus(visibility === \"empty\" ? \"disabled\" : visibility)),\n );\n}\n\n/** @internal */\nexport function changeElementStateNoChildrenOperator(props: {\n on: boolean;\n isDisplayedByDefault: boolean;\n viewport: TreeWidgetViewport;\n}): OperatorFunction<string, void> {\n return (elementIds: Observable<Id64String>) => {\n const { on, isDisplayedByDefault } = props;\n const isAlwaysDrawnExclusive = props.viewport.isAlwaysDrawnExclusive;\n return elementIds.pipe(\n releaseMainThreadOnItemsCount(500),\n reduce<\n string,\n { changedNeverDrawn: boolean; changedAlwaysDrawn: boolean; neverDrawn: Set<ElementId> | undefined; alwaysDrawn: Set<ElementId> | undefined }\n >(\n (acc, elementId) => {\n if (acc.alwaysDrawn === undefined || acc.neverDrawn === undefined) {\n acc.alwaysDrawn = new Set(props.viewport.alwaysDrawn || []);\n acc.neverDrawn = new Set(props.viewport.neverDrawn || []);\n }\n if (on) {\n const wasRemoved = acc.neverDrawn.delete(elementId);\n acc.changedNeverDrawn ||= wasRemoved;\n // If exclusive mode is enabled, we must add the element to the always drawn list.\n if ((!isDisplayedByDefault || isAlwaysDrawnExclusive) && !acc.alwaysDrawn.has(elementId)) {\n acc.alwaysDrawn.add(elementId);\n acc.changedAlwaysDrawn = true;\n }\n } else {\n const wasRemoved = acc.alwaysDrawn.delete(elementId);\n acc.changedAlwaysDrawn ||= wasRemoved;\n // If exclusive mode is not enabled, we have to add the element to the never drawn list.\n if (isDisplayedByDefault && !isAlwaysDrawnExclusive && !acc.neverDrawn.has(elementId)) {\n acc.neverDrawn.add(elementId);\n acc.changedNeverDrawn = true;\n }\n }\n return acc;\n },\n {\n changedNeverDrawn: false,\n changedAlwaysDrawn: false,\n neverDrawn: undefined,\n alwaysDrawn: undefined,\n },\n ),\n map((state) => {\n state.changedNeverDrawn && state.neverDrawn && props.viewport.setNeverDrawn({ elementIds: state.neverDrawn });\n state.changedAlwaysDrawn &&\n state.alwaysDrawn &&\n props.viewport.setAlwaysDrawn({ elementIds: state.alwaysDrawn, exclusive: props.viewport.isAlwaysDrawnExclusive });\n }),\n );\n };\n}\n\n/** @internal */\nexport function getVisibilityFromAlwaysAndNeverDrawnElementsImpl(\n props: {\n alwaysDrawn: Set<ElementId> | undefined;\n neverDrawn: Set<ElementId> | undefined;\n totalCount: number;\n viewport: TreeWidgetViewport;\n } & GetVisibilityFromAlwaysAndNeverDrawnElementsProps,\n): VisibilityStatus {\n const { alwaysDrawn, neverDrawn, totalCount, viewport } = props;\n if (totalCount === 0) {\n return props.defaultStatus();\n }\n if (neverDrawn?.size === totalCount) {\n return createVisibilityStatus(\"hidden\");\n }\n\n if (alwaysDrawn?.size === totalCount) {\n return createVisibilityStatus(\"visible\");\n }\n\n if (viewport.isAlwaysDrawnExclusive) {\n return createVisibilityStatus(alwaysDrawn?.size ? \"partial\" : \"hidden\");\n }\n\n const status = props.defaultStatus();\n if ((status.state === \"visible\" && neverDrawn?.size) || (status.state === \"hidden\" && alwaysDrawn?.size)) {\n return createVisibilityStatus(\"partial\");\n }\n return status;\n}\n\n/** @internal */\nexport interface GetVisibilityFromAlwaysAndNeverDrawnElementsProps {\n /** Status when always/never lists are empty and exclusive mode is off */\n defaultStatus: (categoryId?: string) => VisibilityStatus;\n}\n\n/**\n * Toggles visibility of categories to show or hide.\n * @internal\n */\nexport async function toggleAllCategories(viewport: TreeWidgetViewport, display: boolean) {\n const categoryIds = await getCategoryIds(viewport);\n if (categoryIds.length === 0) {\n return;\n }\n\n await enableCategoryDisplay(viewport, categoryIds, display);\n}\n\n/**\n * Gets ids of all categories from specified imodel and viewport.\n * @internal\n */\nasync function getCategoryIds(viewport: TreeWidgetViewport): Promise<Id64Array> {\n const categories = await loadCategoriesFromViewport(viewport);\n return categories.map((category) => category.categoryId);\n}\n\n/**\n * Changes category display in the viewport.\n * @internal\n */\nexport async function enableCategoryDisplay(viewport: TreeWidgetViewport, categoryIds: Id64Arg, enabled: boolean, enableAllSubCategories = true) {\n viewport.changeCategoryDisplay({ categoryIds, display: enabled, enableAllSubCategories });\n\n // remove category overrides per model\n const modelsContainingOverrides = new Array<ModelId>();\n for (const override of viewport.perModelCategoryOverrides) {\n if (Id64.has(categoryIds, override.categoryId)) {\n modelsContainingOverrides.push(override.modelId);\n }\n }\n viewport.setPerModelCategoryOverride({ modelIds: modelsContainingOverrides, categoryIds, override: \"none\" });\n\n // changeCategoryDisplay only enables subcategories, it does not disabled them. So we must do that ourselves.\n if (false === enabled) {\n (await viewport.iModel.categories.getCategoryInfo(Id64.iterable(categoryIds))).forEach((categoryInfo) => {\n categoryInfo.subCategories.forEach((value) => enableSubCategoryDisplay(viewport, value.id, false));\n });\n }\n}\n\n/**\n * Changes subcategory display in the viewport\n * @internal\n */\nexport function enableSubCategoryDisplay(viewport: TreeWidgetViewport, subCategoryId: Id64String, enabled: boolean) {\n viewport.changeSubCategoryDisplay({ subCategoryId, display: enabled });\n}\n\n/** @internal */\nexport async function loadCategoriesFromViewport(vp: TreeWidgetViewport) {\n // Query categories and add them to state\n if (vp.viewType === \"other\") {\n return [];\n }\n const { categoryClass, elementClass } = getClassesByView(vp.viewType);\n const ecsql = `\n SELECT ECInstanceId as id\n FROM ${categoryClass}\n WHERE\n ECInstanceId IN (\n SELECT DISTINCT Category.Id\n FROM ${elementClass}\n WHERE\n Category.Id IN (SELECT ECInstanceId FROM ${categoryClass})\n ${vp.viewType !== \"2d\" ? \"\" : \"AND Model.Id=?\"}\n )\n `;\n\n const categories: CategoryInfo[] = [];\n const rows = await (async () => {\n const result = new Array<Id64String>();\n for await (const row of vp.iModel.createQueryReader(ecsql, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n result.push(row.id);\n }\n return result;\n })();\n (await vp.iModel.categories.getCategoryInfo(rows)).forEach((val) => {\n categories.push({ categoryId: val.id, subCategoryIds: val.subCategories.size ? [...val.subCategories.keys()] : undefined });\n });\n return categories;\n}\n"]}
|
|
@@ -217,7 +217,7 @@ export class BaseVisibilityHelper {
|
|
|
217
217
|
return merge(
|
|
218
218
|
// For hidden models we only need to check subModels
|
|
219
219
|
hiddenModels.length > 0
|
|
220
|
-
? this.#props.baseIdsCache.getSubModels({ modelIds: hiddenModels }).pipe(mergeMap(({ subModels }) => {
|
|
220
|
+
? this.#props.baseIdsCache.getSubModels({ modelIds: hiddenModels, categoryId }).pipe(mergeMap(({ subModels }) => {
|
|
221
221
|
if (subModels && Id64.sizeOf(subModels) > 0) {
|
|
222
222
|
return this.getModelsVisibilityStatus({
|
|
223
223
|
modelIds: subModels,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseVisibilityHelper.js","sourceRoot":"","sources":["../../../../../../../../src/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport {\n concat,\n concatAll,\n defaultIfEmpty,\n defer,\n EMPTY,\n filter,\n forkJoin,\n from,\n map,\n merge,\n mergeMap,\n of,\n reduce,\n shareReplay,\n startWith,\n Subject,\n take,\n takeUntil,\n tap,\n} from \"rxjs\";\nimport { assert, Id64 } from \"@itwin/core-bentley\";\nimport { createVisibilityStatus } from \"../Tooltip.js\";\nimport { getSetFromId64Arg, setDifference, setIntersection } from \"../Utils.js\";\nimport {\n changeElementStateNoChildrenOperator,\n enableCategoryDisplay,\n getVisibilityFromAlwaysAndNeverDrawnElementsImpl,\n mergeVisibilityStatuses,\n} from \"../VisibilityUtils.js\";\n\nimport type { Observable, Subscription } from \"rxjs\";\nimport type { Id64Arg, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport type { HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport type { TreeWidgetViewport } from \"../../TreeWidgetViewport.js\";\nimport type { HierarchyVisibilityHandlerOverridableMethod, HierarchyVisibilityOverrideHandler, VisibilityStatus } from \"../../UseHierarchyVisibility.js\";\nimport type { AlwaysAndNeverDrawnElementInfo } from \"../AlwaysAndNeverDrawnElementInfo.js\";\nimport type { CategoryId, ModelId } from \"../Types.js\";\nimport type { GetVisibilityFromAlwaysAndNeverDrawnElementsProps } from \"../VisibilityUtils.js\";\n\n/**\n * Functionality of tree visibility handler methods that can be overridden.\n * Each callback is provided original implementation and reference to a `HierarchyVisibilityHandler`.\n * @beta\n */\nexport interface BaseTreeVisibilityHandlerOverrides {\n getModelsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { modelIds: Id64Arg }) => Promise<VisibilityStatus>>;\n getCategoriesVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<\n (props: { categoryIds: Id64Arg; modelId?: Id64String }) => Promise<VisibilityStatus>\n >;\n getElementsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<\n (props: { elementIds: Id64Arg; modelId: Id64String; categoryId: Id64String }) => Promise<VisibilityStatus>\n >;\n\n changeModelsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { modelIds: Id64Arg; on: boolean }) => Promise<void>>;\n changeCategoriesVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<\n (props: { categoryIds: Id64Arg; modelId?: Id64String; on: boolean }) => Promise<void>\n >;\n changeElementsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<\n (props: { elementIds: Id64Arg; modelId: Id64String; categoryId: Id64String; on: boolean }) => Promise<void>\n >;\n}\n\n/** @internal */\nexport interface BaseIdsCache {\n hasSubModel: (elementId: Id64String) => Promise<boolean>;\n getElementsCount: (props: { modelId: Id64String; categoryId: Id64String }) => Observable<number>;\n getSubCategories: (props: { categoryIds: Id64Arg }) => Observable<{ id: Id64String; subCategories: Id64Arg | undefined }>;\n getModels: (props: { categoryIds: Id64Arg }) => Observable<{ id: Id64String; models: Id64Arg | undefined }>;\n getCategories: (props: { modelIds: Id64Arg }) => Observable<{ id: Id64String; drawingCategories?: Id64Arg; spatialCategories?: Id64Arg }>;\n getSubModels: (\n props: { modelIds: Id64Arg } | { categoryIds: Id64Arg; modelId: Id64String | undefined },\n ) => Observable<{ id: Id64String; subModels: Id64Arg | undefined }>;\n getAllCategories: () => Observable<{ drawingCategories?: Id64Set; spatialCategories?: Id64Set }>;\n}\n\n/**\n * Interface for a tree visibility handler that provides methods to get and change visibility status of hierarchy nodes.\n * @internal\n */\nexport interface TreeSpecificVisibilityHandler<TFilterTargets> {\n getVisibilityStatus: (node: HierarchyNode) => Observable<VisibilityStatus>;\n changeVisibilityStatus: (node: HierarchyNode, on: boolean) => Observable<void>;\n getFilterTargetsVisibilityStatus: (targets: TFilterTargets) => Observable<VisibilityStatus>;\n changeFilterTargetsVisibilityStatus: (targets: TFilterTargets, on: boolean) => Observable<void>;\n}\n\n/** @internal */\nexport interface BaseVisibilityHelperProps {\n viewport: TreeWidgetViewport;\n alwaysAndNeverDrawnElementInfo: AlwaysAndNeverDrawnElementInfo;\n overrideHandler?: HierarchyVisibilityOverrideHandler;\n overrides?: BaseTreeVisibilityHandlerOverrides;\n baseIdsCache: BaseIdsCache;\n}\n\n/**\n * Base class for visibility status getters and modifiers.\n *\n * It provides methods that help retrieve and change visibility status of models, categories, elements.\n * @internal\n */\nexport class BaseVisibilityHelper implements Disposable {\n readonly #props: BaseVisibilityHelperProps;\n readonly #alwaysAndNeverDrawnElements: AlwaysAndNeverDrawnElementInfo;\n #elementChangeQueue = new Subject<Observable<void>>();\n #subscriptions: Subscription[] = [];\n\n constructor(props: BaseVisibilityHelperProps) {\n this.#props = props;\n this.#alwaysAndNeverDrawnElements = this.#props.alwaysAndNeverDrawnElementInfo;\n this.#subscriptions.push(this.#elementChangeQueue.pipe(concatAll()).subscribe());\n }\n\n public [Symbol.dispose]() {\n this.#subscriptions.forEach((x) => x.unsubscribe());\n }\n\n /**\n * Removes \"always drawn exclusive\" mode from the viewport without affecting any visibilities.\n *\n * This is achieved by:\n * - Resets `alwaysDrawn` exclusive flag to `false`;\n * - Turns off all categories;\n * - Clears always drawn list;\n * - Removes all per-model category overrides. */\n public removeAlwaysDrawnExclusive(): Observable<void> {\n return from(this.#props.baseIdsCache.getAllCategories()).pipe(\n map(({ drawingCategories, spatialCategories }) => {\n const categoriesToTurnOff = this.#props.viewport.viewType === \"2d\" ? drawingCategories : spatialCategories;\n if (categoriesToTurnOff) {\n this.#props.viewport.changeCategoryDisplay({ categoryIds: categoriesToTurnOff, display: false, enableAllSubCategories: false });\n }\n this.#props.viewport.clearNeverDrawn();\n this.#props.viewport.clearPerModelCategoryOverrides();\n this.#props.viewport.setAlwaysDrawn({ elementIds: this.#props.viewport.alwaysDrawn ? new Set([...this.#props.viewport.alwaysDrawn]) : new Set() });\n }),\n );\n }\n\n /**\n * Returns visibility status of models.\n *\n * Determines visibility status by checking:\n * - Models visibility in the viewport;\n * - Models' subModels visibility (if elements' modelId is in the provided modelIds, and element is itself a model, then it is considered a subModel);\n * - Categories visibility in the viewport (if elements' modelId is in the provided modelIds, then its' category gets checked).\n */\n public getModelsVisibilityStatus(props: { modelIds: Id64Arg; type: \"GeometricModel3d\" | \"GeometricModel2d\" }): Observable<VisibilityStatus> {\n const result = defer(() => {\n const { modelIds, type } = props;\n if ((type === \"GeometricModel3d\" && this.#props.viewport.viewType !== \"3d\") || (type === \"GeometricModel2d\" && this.#props.viewport.viewType !== \"2d\")) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n return from(Id64.iterable(modelIds)).pipe(\n mergeMap((modelId) => {\n // For hidden models we only need to check subModels\n if (!this.#props.viewport.viewsModel(modelId)) {\n return this.#props.baseIdsCache.getSubModels({ modelIds: modelId }).pipe(\n mergeMap(({ subModels }) => {\n if (subModels && Id64.sizeOf(subModels) > 0) {\n return this.getModelsVisibilityStatus({ modelIds: subModels, type }).pipe(\n map((subModelsVisibilityStatus) =>\n subModelsVisibilityStatus.state !== \"hidden\" ? createVisibilityStatus(\"partial\") : createVisibilityStatus(\"hidden\"),\n ),\n );\n }\n return of(createVisibilityStatus(\"hidden\"));\n }),\n );\n }\n // For visible models we need to check all categories\n return this.#props.baseIdsCache.getCategories({ modelIds: modelId }).pipe(\n mergeMap(({ drawingCategories, spatialCategories }) =>\n merge(\n drawingCategories\n ? of(drawingCategories).pipe(mergeMap((categoryIds) => this.getCategoriesVisibilityStatus({ modelId, categoryIds, type: \"DrawingCategory\" })))\n : EMPTY,\n spatialCategories\n ? of(spatialCategories).pipe(mergeMap((categoryIds) => this.getCategoriesVisibilityStatus({ modelId, categoryIds, type: \"SpatialCategory\" })))\n : EMPTY,\n ),\n ),\n defaultIfEmpty(createVisibilityStatus(\"visible\")),\n );\n }),\n mergeVisibilityStatuses,\n );\n });\n return this.#props.overrideHandler\n ? this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: { modelIds: props.modelIds },\n nonOverriddenResult: result,\n override: this.#props.overrides?.getModelsVisibilityStatus,\n })\n : result;\n }\n\n /**\n * Gets visibility status of a model's categories, assuming model is visible.\n *\n * Determines visibility status by checking:\n * - Elements in the viewports' always/never drawn lists;\n * - Default categories visibility status in the viewport;\n * - SubModels that are related to the modelId and categoryIds\n */\n private getVisibleModelCategoriesVisibilityStatus({\n modelId,\n categoryIds,\n type,\n }: {\n modelId: Id64String;\n categoryIds: Id64Arg;\n type: \"GeometricModel3d\" | \"GeometricModel2d\";\n }) {\n return merge(\n this.getVisibilityFromAlwaysAndNeverDrawnElements({\n queryProps: { modelId, categoryIds },\n defaultStatus: () => this.getVisibleModelCategoriesDirectVisibilityStatus({ modelId, categoryIds }),\n }),\n this.#props.baseIdsCache.getSubModels({ modelId, categoryIds }).pipe(\n mergeMap(({ subModels }) => {\n if (subModels && Id64.sizeOf(subModels) > 0) {\n return this.getModelsVisibilityStatus({ modelIds: subModels, type });\n }\n return EMPTY;\n }),\n ),\n ).pipe(mergeVisibilityStatuses);\n }\n\n /** Gets visibility status of sub-categories, assuming category is visible. */\n private getVisibleCategorySubCategoriesVisibilityStatus(props: { subCategoryIds: Id64Arg }): VisibilityStatus {\n const { subCategoryIds } = props;\n let subCategoryVisibility: \"visible\" | \"hidden\" | \"unknown\" = \"unknown\";\n for (const subCategoryId of Id64.iterable(subCategoryIds)) {\n const isSubCategoryVisible = this.#props.viewport.viewsSubCategory(subCategoryId);\n if (isSubCategoryVisible && subCategoryVisibility === \"hidden\") {\n return createVisibilityStatus(\"partial\");\n }\n if (!isSubCategoryVisible && subCategoryVisibility === \"visible\") {\n return createVisibilityStatus(\"partial\");\n }\n subCategoryVisibility = isSubCategoryVisible ? \"visible\" : \"hidden\";\n }\n // If visibility is unknown, no subCategories were provided,\n // Since category is visible we return visible\n return createVisibilityStatus(subCategoryVisibility === \"unknown\" ? \"visible\" : subCategoryVisibility);\n }\n\n /**\n * Gets visibility status of sub-categories.\n *\n * Determines visibility status by checking:\n * - Models that contain the category visibility;\n * - Per model category visibility overrides;\n * - Category selector visibility in the viewport.\n * - Sub-categories visibility in the viewport.\n */\n public getSubCategoriesVisibilityStatus(props: { subCategoryIds: Id64Arg; categoryId: Id64String; modelId?: Id64String }): Observable<VisibilityStatus> {\n return (\n props.modelId ? of({ id: props.categoryId, models: props.modelId }) : from(this.#props.baseIdsCache.getModels({ categoryIds: props.categoryId }))\n ).pipe(\n map(({ models }) => {\n let visibility: \"visible\" | \"hidden\" | \"unknown\" = \"unknown\";\n let nonDefaultModelDisplayStatesCount = 0;\n for (const modelId of Id64.iterable(models ?? [])) {\n if (!this.#props.viewport.viewsModel(modelId)) {\n if (visibility === \"visible\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = \"hidden\";\n ++nonDefaultModelDisplayStatesCount;\n continue;\n }\n const override = this.#props.viewport.getPerModelCategoryOverride({ modelId, categoryId: props.categoryId });\n if (override === \"show\") {\n if (visibility === \"hidden\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = \"visible\";\n ++nonDefaultModelDisplayStatesCount;\n continue;\n }\n if (override === \"hide\") {\n if (visibility === \"visible\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = \"hidden\";\n ++nonDefaultModelDisplayStatesCount;\n continue;\n }\n }\n if (models && Id64.sizeOf(models) > 0 && nonDefaultModelDisplayStatesCount === Id64.sizeOf(models)) {\n assert(visibility === \"visible\" || visibility === \"hidden\");\n return createVisibilityStatus(visibility);\n }\n if (!this.#props.viewport.viewsCategory(props.categoryId)) {\n return createVisibilityStatus(visibility === \"visible\" ? \"partial\" : \"hidden\");\n }\n\n if (Id64.sizeOf(props.subCategoryIds) === 0) {\n if (visibility === \"hidden\") {\n return createVisibilityStatus(\"partial\");\n }\n return createVisibilityStatus(\"visible\");\n }\n\n const subCategoriesVisibility = this.getVisibleCategorySubCategoriesVisibilityStatus({ subCategoryIds: props.subCategoryIds });\n return subCategoriesVisibility.state === visibility || visibility === \"unknown\" ? subCategoriesVisibility : createVisibilityStatus(\"partial\");\n }),\n mergeVisibilityStatuses,\n );\n }\n\n /**\n * Gets visibility status of categories.\n *\n * Determines visibility status by checking:\n * - Categories visibility;\n * - Visibility of models that are related to the categories;\n * - sub-categories visibility.\n */\n public getCategoriesVisibilityStatus(props: {\n categoryIds: Id64Arg;\n modelId: Id64String | undefined;\n type: \"DrawingCategory\" | \"SpatialCategory\";\n }): Observable<VisibilityStatus> {\n const result = defer(() => {\n const { categoryIds, modelId: modelIdFromProps, type } = props;\n if (Id64.sizeOf(categoryIds) === 0 || this.#props.viewport.viewType === \"other\") {\n return EMPTY;\n }\n\n const isSupportedInView =\n (this.#props.viewport.viewType === \"3d\" && type === \"SpatialCategory\") || (this.#props.viewport.viewType === \"2d\" && type === \"DrawingCategory\");\n if (!isSupportedInView) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n return (\n modelIdFromProps\n ? from(Id64.iterable(categoryIds)).pipe(map((categoryId) => ({ id: categoryId, models: modelIdFromProps })))\n : this.#props.baseIdsCache.getModels({ categoryIds })\n ).pipe(\n map(({ id, models }) => {\n const acc = { categoryId: id, visibleModels: new Array<Id64String>(), hiddenModels: new Array<Id64String>() };\n if (!models) {\n return acc;\n }\n for (const modelId of Id64.iterable(models)) {\n if (this.#props.viewport.viewsModel(modelId)) {\n acc.visibleModels.push(modelId);\n } else {\n acc.hiddenModels.push(modelId);\n }\n }\n return acc;\n }),\n mergeMap(({ categoryId, visibleModels, hiddenModels }) => {\n return merge(\n // For hidden models we only need to check subModels\n hiddenModels.length > 0\n ? this.#props.baseIdsCache.getSubModels({ modelIds: hiddenModels }).pipe(\n mergeMap(({ subModels }) => {\n if (subModels && Id64.sizeOf(subModels) > 0) {\n return this.getModelsVisibilityStatus({\n modelIds: subModels,\n type: this.#props.viewport.viewType === \"2d\" ? \"GeometricModel2d\" : \"GeometricModel3d\",\n }).pipe(\n map((subModelsVisibilityStatus) =>\n subModelsVisibilityStatus.state !== \"hidden\" ? createVisibilityStatus(\"partial\") : createVisibilityStatus(\"hidden\"),\n ),\n );\n }\n return of(createVisibilityStatus(\"hidden\"));\n }),\n )\n : EMPTY,\n // For visible models we need to check all categories\n visibleModels.length > 0\n ? from(visibleModels).pipe(\n mergeMap((modelId) =>\n this.getVisibleModelCategoriesVisibilityStatus({\n modelId,\n categoryIds: categoryId,\n type: this.#props.viewport.viewType === \"2d\" ? \"GeometricModel2d\" : \"GeometricModel3d\",\n }),\n ),\n )\n : EMPTY,\n // We need to check subCategories as well\n this.#props.baseIdsCache.getSubCategories({ categoryIds: categoryId }).pipe(\n mergeMap(({ subCategories }) => {\n if (subCategories && Id64.sizeOf(subCategories) > 0) {\n return this.getSubCategoriesVisibilityStatus({ categoryId, modelId: modelIdFromProps, subCategoryIds: subCategories });\n }\n\n return EMPTY;\n }),\n ),\n ).pipe(defaultIfEmpty(createVisibilityStatus(this.#props.viewport.viewsCategory(categoryId) ? \"visible\" : \"hidden\")));\n }),\n mergeVisibilityStatuses,\n );\n });\n\n return this.#props.overrideHandler\n ? this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: props,\n nonOverriddenResult: result,\n override: this.#props.overrides?.getCategoriesVisibilityStatus,\n })\n : result;\n }\n\n /**\n * Gets visibility status of categories, assuming model is visible.\n *\n * Determines visibility status by checking:\n * - Per model category visibility overrides;\n * - Category selector visibility in the viewport.\n */\n public getVisibleModelCategoriesDirectVisibilityStatus({ modelId, categoryIds }: { categoryIds: Id64Arg; modelId: Id64String }): VisibilityStatus {\n const viewport = this.#props.viewport;\n\n let visibleCount = 0;\n for (const categoryId of Id64.iterable(categoryIds)) {\n const override = this.#props.viewport.getPerModelCategoryOverride({ modelId, categoryId });\n if (override === \"show\" || (override === \"none\" && viewport.viewsCategory(categoryId))) {\n ++visibleCount;\n continue;\n }\n if (visibleCount > 0) {\n return createVisibilityStatus(\"partial\");\n }\n }\n return visibleCount > 0 ? createVisibilityStatus(\"visible\") : createVisibilityStatus(\"hidden\");\n }\n\n /**\n * Gets visibility status of elements.\n *\n * Determines visibility status by checking:\n * - Elements in the viewports' always/never drawn lists;\n * - Related categories and models visibility status;\n * - Sub-models that are related to the specified elements.\n */\n public getElementsVisibilityStatus(props: {\n elementIds: Id64Arg;\n modelId: Id64String;\n categoryId: Id64String;\n type: \"GeometricElement3d\" | \"GeometricElement2d\";\n }): Observable<VisibilityStatus> {\n const result = defer(() => {\n const { elementIds, modelId, categoryId, type } = props;\n if (this.#props.viewport.viewType === \"other\") {\n return EMPTY;\n }\n\n const isSupportedInView =\n (this.#props.viewport.viewType === \"3d\" && type === \"GeometricElement3d\") || (this.#props.viewport.viewType === \"2d\" && type === \"GeometricElement2d\");\n if (!isSupportedInView) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n // TODO: check child elements that are subModels\n if (!this.#props.viewport.viewsModel(modelId)) {\n return from(elementIds).pipe(\n mergeMap((elementId) =>\n from(this.#props.baseIdsCache.hasSubModel(elementId)).pipe(\n mergeMap((isSubModel) => {\n if (isSubModel) {\n return this.getModelsVisibilityStatus({\n modelIds: elementId,\n type: this.#props.viewport.viewType === \"2d\" ? \"GeometricModel2d\" : \"GeometricModel3d\",\n }).pipe(\n map((subModelVisibilityStatus) =>\n subModelVisibilityStatus.state !== \"hidden\" ? createVisibilityStatus(\"partial\") : createVisibilityStatus(\"hidden\"),\n ),\n );\n }\n return of(createVisibilityStatus(\"hidden\"));\n }),\n ),\n ),\n mergeVisibilityStatuses,\n );\n }\n // TODO: check child elements\n // TODO: check child element categories\n // TODO: check child elements that are subModels\n return this.getVisibilityFromAlwaysAndNeverDrawnElements({\n elements: elementIds,\n defaultStatus: () => this.getVisibleModelCategoriesDirectVisibilityStatus({ categoryIds: categoryId, modelId }),\n }).pipe(\n mergeMap((visibilityStatusAlwaysAndNeverDraw) => {\n return from(Id64.iterable(elementIds)).pipe(\n mergeMap((elementId) =>\n from(this.#props.baseIdsCache.hasSubModel(elementId)).pipe(\n mergeMap((isSubModel) => {\n if (isSubModel) {\n return this.getModelsVisibilityStatus({\n modelIds: elementId,\n type: this.#props.viewport.viewType === \"2d\" ? \"GeometricModel2d\" : \"GeometricModel3d\",\n }).pipe(\n map((subModelVisibilityStatus) =>\n subModelVisibilityStatus.state !== visibilityStatusAlwaysAndNeverDraw.state\n ? createVisibilityStatus(\"partial\")\n : visibilityStatusAlwaysAndNeverDraw,\n ),\n );\n }\n return of(visibilityStatusAlwaysAndNeverDraw);\n }),\n ),\n ),\n mergeVisibilityStatuses,\n );\n }),\n );\n });\n return this.#props.overrideHandler\n ? this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: props,\n nonOverriddenResult: result,\n override: this.#props.overrides?.getElementsVisibilityStatus,\n })\n : result;\n }\n\n /** Gets visibility status of elements based on viewport's always/never drawn elements and related categories and models. */\n private getVisibilityFromAlwaysAndNeverDrawnElements(\n props: GetVisibilityFromAlwaysAndNeverDrawnElementsProps & ({ elements: Id64Arg } | { queryProps: { modelId: Id64String; categoryIds: Id64Arg } }),\n ): Observable<VisibilityStatus> {\n const viewport = this.#props.viewport;\n if (viewport.isAlwaysDrawnExclusive) {\n if (!viewport?.alwaysDrawn?.size) {\n return of(createVisibilityStatus(\"hidden\"));\n }\n } else if (!viewport?.neverDrawn?.size && !viewport?.alwaysDrawn?.size) {\n return of(props.defaultStatus());\n }\n\n if (\"elements\" in props) {\n return of(\n getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n alwaysDrawn: viewport.alwaysDrawn?.size ? setIntersection(Id64.iterable(props.elements), viewport.alwaysDrawn) : undefined,\n neverDrawn: viewport.neverDrawn?.size ? setIntersection(Id64.iterable(props.elements), viewport.neverDrawn) : undefined,\n totalCount: Id64.sizeOf(props.elements),\n viewport,\n }),\n );\n }\n const { modelId, categoryIds } = props.queryProps;\n const totalCount = from(Id64.iterable(categoryIds)).pipe(\n mergeMap((categoryId) => this.#props.baseIdsCache.getElementsCount({ modelId, categoryId })),\n reduce((acc, specificModelCategoryCount) => {\n return acc + specificModelCategoryCount;\n }, 0),\n );\n return forkJoin({\n totalCount,\n alwaysDrawn: this.#alwaysAndNeverDrawnElements.getAlwaysDrawnElements(props.queryProps),\n neverDrawn: this.#alwaysAndNeverDrawnElements.getNeverDrawnElements(props.queryProps),\n }).pipe(\n // There is a known bug:\n // Categories that don't have root elements will make visibility result incorrect\n // E.g.:\n // - CategoryA\n // - ElementA (CategoryA is visible)\n // - ChildElementB (CategoryB is hidden) ChildElementB is in always drawn list\n // Result will be \"partial\" because CategoryB will return hidden visibility, even though all elements are visible\n // TODO fix with: https://github.com/iTwin/viewer-components-react/issues/1100\n map((state) => {\n return getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n ...state,\n viewport,\n });\n }),\n );\n }\n\n /**\n * Changes visibility status of models.\n *\n * Also, changes visibility status of related categories and sub-models.\n */\n public changeModelsVisibilityStatus(props: { modelIds: Id64Arg; on: boolean }): Observable<void> {\n const result = defer(() => {\n const { modelIds, on } = props;\n\n if (Id64.sizeOf(modelIds) === 0) {\n return EMPTY;\n }\n\n const viewport = this.#props.viewport;\n\n viewport.clearPerModelCategoryOverrides({ modelIds });\n if (!on) {\n viewport.changeModelDisplay({ modelIds, display: false });\n return this.#props.baseIdsCache\n .getSubModels({ modelIds })\n .pipe(mergeMap(({ subModels }) => (subModels ? this.changeModelsVisibilityStatus({ modelIds: subModels, on }) : EMPTY)));\n }\n\n viewport.changeModelDisplay({ modelIds, display: true });\n return this.#props.baseIdsCache.getCategories({ modelIds }).pipe(\n mergeMap(({ id, drawingCategories, spatialCategories }) => {\n return merge(\n drawingCategories ? this.changeCategoriesVisibilityStatus({ categoryIds: drawingCategories, modelId: id, on }) : EMPTY,\n spatialCategories ? this.changeCategoriesVisibilityStatus({ categoryIds: spatialCategories, modelId: id, on }) : EMPTY,\n );\n }),\n );\n });\n return this.#props.overrideHandler\n ? this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: props,\n nonOverriddenResult: result,\n override: this.#props.overrides?.changeModelsVisibilityStatus,\n })\n : result;\n }\n\n /** Turns model on and turns off elements with categories related to that model. */\n private showModelWithoutAnyCategoriesOrElements(modelId: Id64String, categoriesToNotOverride?: Id64Arg): Observable<void> {\n const viewport = this.#props.viewport;\n return forkJoin({\n allModelCategories: this.#props.baseIdsCache.getCategories({ modelIds: modelId }).pipe(\n reduce((acc, { drawingCategories, spatialCategories }) => {\n for (const category of Id64.iterable(drawingCategories ?? [])) {\n acc.add(category);\n }\n for (const category of Id64.iterable(spatialCategories ?? [])) {\n acc.add(category);\n }\n return acc;\n }, new Set<Id64String>()),\n ),\n modelAlwaysDrawnElements: this.#alwaysAndNeverDrawnElements.getAlwaysDrawnElements({ modelId }),\n }).pipe(\n mergeMap(async ({ allModelCategories, modelAlwaysDrawnElements }) => {\n const alwaysDrawn = this.#props.viewport.alwaysDrawn;\n if (alwaysDrawn && modelAlwaysDrawnElements) {\n viewport.setAlwaysDrawn({ elementIds: setDifference(alwaysDrawn, modelAlwaysDrawnElements) });\n }\n const categoriesToOverride = categoriesToNotOverride\n ? setDifference(allModelCategories, getSetFromId64Arg(categoriesToNotOverride))\n : allModelCategories;\n categoriesToOverride.forEach((categoryId) => {\n this.changeCategoryStateInViewportAccordingToModelVisibility(modelId, categoryId, false, false);\n });\n viewport.changeModelDisplay({ modelIds: modelId, display: true });\n }),\n );\n }\n\n /** Adds per-model category overrides based on category visibility in category selector. */\n private changeCategoryStateInViewportAccordingToModelVisibility(modelId: string, categoryId: string, on: boolean, changeSubCategories: boolean) {\n const viewport = this.#props.viewport;\n const isDisplayedInSelector = viewport.viewsCategory(categoryId);\n const override = on === isDisplayedInSelector ? \"none\" : on ? \"show\" : \"hide\";\n viewport.setPerModelCategoryOverride({ modelIds: modelId, categoryIds: categoryId, override });\n\n if (override === \"none\" && on) {\n // we took off the override which means the category is displayed in selector, but\n // doesn't mean all its subcategories are displayed - this call ensures that\n viewport.changeCategoryDisplay({ categoryIds: categoryId, display: true, enableAllSubCategories: changeSubCategories });\n }\n }\n\n /**\n * Changes categories visibility status.\n *\n * Also:\n * - Turns on models in cases where categories need to be turned on and models are not already on.\n * - Removed related elements from always/never drawn elements.\n * - changes visibility of sub-models that are related to the specified categories.\n */\n public changeCategoriesVisibilityStatus(props: { modelId: Id64String | undefined; categoryIds: Id64Arg; on: boolean }): Observable<void> {\n const result = defer(() => {\n const { modelId: modelIdFromProps, categoryIds, on } = props;\n const viewport = this.#props.viewport;\n const modelIdsObservable = (\n modelIdFromProps\n ? of(new Map<ModelId, Set<CategoryId>>([[modelIdFromProps, getSetFromId64Arg(categoryIds)]]))\n : this.#props.baseIdsCache.getModels({ categoryIds }).pipe(\n reduce((acc, { id, models }) => {\n if (!models) {\n return acc;\n }\n for (const modelId of Id64.iterable(models)) {\n let entry = acc.get(modelId);\n if (!entry) {\n entry = new Set();\n acc.set(modelId, entry);\n }\n entry.add(id);\n }\n return acc;\n }, new Map<ModelId, Set<CategoryId>>()),\n )\n ).pipe(\n mergeMap((modelCategoriesMap) => modelCategoriesMap.entries()),\n shareReplay(),\n );\n return concat(\n // If modelId was provided: add override\n // If modelId was not provided: change categoryDisplay and remove categories per model overrides\n modelIdFromProps\n ? of(\n viewport.setPerModelCategoryOverride({\n modelIds: modelIdFromProps,\n categoryIds,\n override: on ? \"show\" : \"hide\",\n }),\n )\n : concat(\n from(enableCategoryDisplay(viewport, categoryIds, on, on)),\n modelIdsObservable.pipe(\n map(([modelId, modelCategories]) => {\n viewport.setPerModelCategoryOverride({ modelIds: modelId, categoryIds: modelCategories, override: \"none\" });\n }),\n ),\n ),\n // If categories visibility needs to be turned on, we need to turn on models without turning on unrelated elements or categories for that model\n on\n ? modelIdsObservable.pipe(\n mergeMap(([modelId, categories]) => {\n if (!viewport.viewsModel(modelId)) {\n return this.showModelWithoutAnyCategoriesOrElements(modelId, categories);\n }\n return EMPTY;\n }),\n )\n : EMPTY,\n this.#alwaysAndNeverDrawnElements.clearAlwaysAndNeverDrawnElements({ categoryIds, modelId: modelIdFromProps }),\n this.#props.baseIdsCache\n .getSubModels({ categoryIds, modelId: modelIdFromProps })\n .pipe(mergeMap(({ subModels }) => (subModels ? this.changeModelsVisibilityStatus({ modelIds: subModels, on }) : EMPTY))),\n );\n });\n return this.#props.overrideHandler\n ? this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: props,\n nonOverriddenResult: result,\n override: this.#props.overrides?.changeCategoriesVisibilityStatus,\n })\n : result;\n }\n\n /**\n * Changes visibility status of elements by adding them to the viewport's always/never drawn elements.\n *\n * Also, changes visibility status of specified elements that are models.\n */\n public changeElementsVisibilityStatus(props: { elementIds: Id64Arg; modelId: Id64String; categoryId: Id64String; on: boolean }): Observable<void> {\n const result = defer(() => {\n const { modelId, categoryId, elementIds, on } = props;\n const viewport = this.#props.viewport;\n // TODO: change child elements\n // TODO: change child element categories\n // TODO: change child subModels\n return concat(\n // Change elements state\n defer(() => {\n if (!viewport.viewsModel(modelId)) {\n if (!on) {\n return this.queueElementsVisibilityChange(elementIds, on, false);\n }\n\n return this.showModelWithoutAnyCategoriesOrElements(modelId).pipe(\n mergeMap(() => {\n const defaultVisibility = this.getVisibleModelCategoriesDirectVisibilityStatus({\n categoryIds: categoryId,\n modelId,\n });\n const displayedByDefault = defaultVisibility.state === \"visible\";\n return this.queueElementsVisibilityChange(elementIds, on, displayedByDefault);\n }),\n );\n }\n\n const categoryVisibility = this.getVisibleModelCategoriesDirectVisibilityStatus({ categoryIds: categoryId, modelId });\n const isDisplayedByDefault = categoryVisibility.state === \"visible\";\n return this.queueElementsVisibilityChange(elementIds, on, isDisplayedByDefault);\n }),\n // Change visibility of elements that are models\n from(Id64.iterable(elementIds)).pipe(\n mergeMap((elementId) =>\n from(this.#props.baseIdsCache.hasSubModel(elementId)).pipe(\n mergeMap((isSubModel) => {\n if (isSubModel) {\n return this.changeModelsVisibilityStatus({ modelIds: elementId, on });\n }\n return EMPTY;\n }),\n ),\n ),\n ),\n );\n });\n return this.#props.overrideHandler\n ? this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: props,\n nonOverriddenResult: result,\n override: this.#props.overrides?.changeElementsVisibilityStatus,\n })\n : result;\n }\n\n /** Queues visibility change for elements. */\n private queueElementsVisibilityChange(elementIds: Id64Arg, on: boolean, visibleByDefault: boolean) {\n const finishedSubject = new Subject<boolean>();\n // observable to track if visibility change is finished/cancelled\n const changeFinished = finishedSubject.pipe(\n startWith(false),\n shareReplay(1),\n filter((finished) => finished),\n );\n\n const changeObservable = from(Id64.iterable(elementIds)).pipe(\n // check if visibility change is not finished (cancelled) due to change overall change request being cancelled\n takeUntil(changeFinished),\n changeElementStateNoChildrenOperator({ on, isDisplayedByDefault: visibleByDefault, viewport: this.#props.viewport }),\n tap({\n next: () => {\n // notify that visibility change is finished\n finishedSubject.next(true);\n },\n }),\n );\n\n // queue visibility change. `changeObservable` will be subscribed to when other queue changes are finished\n this.#elementChangeQueue.next(changeObservable);\n\n // return observable that will emit when visibility change is finished\n return changeFinished.pipe(\n take(1),\n tap({\n unsubscribe: () => {\n // if this observable is unsubscribed before visibility change is finished, we have to notify that it queued change request is cancelled\n finishedSubject.next(true);\n },\n }),\n map(() => undefined),\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"BaseVisibilityHelper.js","sourceRoot":"","sources":["../../../../../../../../src/tree-widget-react/components/trees/common/internal/visibility/BaseVisibilityHelper.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport {\n concat,\n concatAll,\n defaultIfEmpty,\n defer,\n EMPTY,\n filter,\n forkJoin,\n from,\n map,\n merge,\n mergeMap,\n of,\n reduce,\n shareReplay,\n startWith,\n Subject,\n take,\n takeUntil,\n tap,\n} from \"rxjs\";\nimport { assert, Id64 } from \"@itwin/core-bentley\";\nimport { createVisibilityStatus } from \"../Tooltip.js\";\nimport { getSetFromId64Arg, setDifference, setIntersection } from \"../Utils.js\";\nimport {\n changeElementStateNoChildrenOperator,\n enableCategoryDisplay,\n getVisibilityFromAlwaysAndNeverDrawnElementsImpl,\n mergeVisibilityStatuses,\n} from \"../VisibilityUtils.js\";\n\nimport type { Observable, Subscription } from \"rxjs\";\nimport type { Id64Arg, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport type { HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport type { TreeWidgetViewport } from \"../../TreeWidgetViewport.js\";\nimport type { HierarchyVisibilityHandlerOverridableMethod, HierarchyVisibilityOverrideHandler, VisibilityStatus } from \"../../UseHierarchyVisibility.js\";\nimport type { AlwaysAndNeverDrawnElementInfo } from \"../AlwaysAndNeverDrawnElementInfo.js\";\nimport type { CategoryId, ModelId } from \"../Types.js\";\nimport type { GetVisibilityFromAlwaysAndNeverDrawnElementsProps } from \"../VisibilityUtils.js\";\n\n/**\n * Functionality of tree visibility handler methods that can be overridden.\n * Each callback is provided original implementation and reference to a `HierarchyVisibilityHandler`.\n * @beta\n */\nexport interface BaseTreeVisibilityHandlerOverrides {\n getModelsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { modelIds: Id64Arg }) => Promise<VisibilityStatus>>;\n getCategoriesVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<\n (props: { categoryIds: Id64Arg; modelId?: Id64String }) => Promise<VisibilityStatus>\n >;\n getElementsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<\n (props: { elementIds: Id64Arg; modelId: Id64String; categoryId: Id64String }) => Promise<VisibilityStatus>\n >;\n\n changeModelsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { modelIds: Id64Arg; on: boolean }) => Promise<void>>;\n changeCategoriesVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<\n (props: { categoryIds: Id64Arg; modelId?: Id64String; on: boolean }) => Promise<void>\n >;\n changeElementsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<\n (props: { elementIds: Id64Arg; modelId: Id64String; categoryId: Id64String; on: boolean }) => Promise<void>\n >;\n}\n\n/** @internal */\nexport interface BaseIdsCache {\n hasSubModel: (elementId: Id64String) => Promise<boolean>;\n getElementsCount: (props: { modelId: Id64String; categoryId: Id64String }) => Observable<number>;\n getSubCategories: (props: { categoryIds: Id64Arg }) => Observable<{ id: Id64String; subCategories: Id64Arg | undefined }>;\n getModels: (props: { categoryIds: Id64Arg }) => Observable<{ id: Id64String; models: Id64Arg | undefined }>;\n getCategories: (props: { modelIds: Id64Arg }) => Observable<{ id: Id64String; drawingCategories?: Id64Arg; spatialCategories?: Id64Arg }>;\n getSubModels: (\n props: { modelIds: Id64Arg; categoryId?: Id64String } | { categoryIds: Id64Arg; modelId: Id64String | undefined },\n ) => Observable<{ id: Id64String; subModels: Id64Arg | undefined }>;\n getAllCategories: () => Observable<{ drawingCategories?: Id64Set; spatialCategories?: Id64Set }>;\n}\n\n/**\n * Interface for a tree visibility handler that provides methods to get and change visibility status of hierarchy nodes.\n * @internal\n */\nexport interface TreeSpecificVisibilityHandler<TFilterTargets> {\n getVisibilityStatus: (node: HierarchyNode) => Observable<VisibilityStatus>;\n changeVisibilityStatus: (node: HierarchyNode, on: boolean) => Observable<void>;\n getFilterTargetsVisibilityStatus: (targets: TFilterTargets) => Observable<VisibilityStatus>;\n changeFilterTargetsVisibilityStatus: (targets: TFilterTargets, on: boolean) => Observable<void>;\n}\n\n/** @internal */\nexport interface BaseVisibilityHelperProps {\n viewport: TreeWidgetViewport;\n alwaysAndNeverDrawnElementInfo: AlwaysAndNeverDrawnElementInfo;\n overrideHandler?: HierarchyVisibilityOverrideHandler;\n overrides?: BaseTreeVisibilityHandlerOverrides;\n baseIdsCache: BaseIdsCache;\n}\n\n/**\n * Base class for visibility status getters and modifiers.\n *\n * It provides methods that help retrieve and change visibility status of models, categories, elements.\n * @internal\n */\nexport class BaseVisibilityHelper implements Disposable {\n readonly #props: BaseVisibilityHelperProps;\n readonly #alwaysAndNeverDrawnElements: AlwaysAndNeverDrawnElementInfo;\n #elementChangeQueue = new Subject<Observable<void>>();\n #subscriptions: Subscription[] = [];\n\n constructor(props: BaseVisibilityHelperProps) {\n this.#props = props;\n this.#alwaysAndNeverDrawnElements = this.#props.alwaysAndNeverDrawnElementInfo;\n this.#subscriptions.push(this.#elementChangeQueue.pipe(concatAll()).subscribe());\n }\n\n public [Symbol.dispose]() {\n this.#subscriptions.forEach((x) => x.unsubscribe());\n }\n\n /**\n * Removes \"always drawn exclusive\" mode from the viewport without affecting any visibilities.\n *\n * This is achieved by:\n * - Resets `alwaysDrawn` exclusive flag to `false`;\n * - Turns off all categories;\n * - Clears always drawn list;\n * - Removes all per-model category overrides. */\n public removeAlwaysDrawnExclusive(): Observable<void> {\n return from(this.#props.baseIdsCache.getAllCategories()).pipe(\n map(({ drawingCategories, spatialCategories }) => {\n const categoriesToTurnOff = this.#props.viewport.viewType === \"2d\" ? drawingCategories : spatialCategories;\n if (categoriesToTurnOff) {\n this.#props.viewport.changeCategoryDisplay({ categoryIds: categoriesToTurnOff, display: false, enableAllSubCategories: false });\n }\n this.#props.viewport.clearNeverDrawn();\n this.#props.viewport.clearPerModelCategoryOverrides();\n this.#props.viewport.setAlwaysDrawn({ elementIds: this.#props.viewport.alwaysDrawn ? new Set([...this.#props.viewport.alwaysDrawn]) : new Set() });\n }),\n );\n }\n\n /**\n * Returns visibility status of models.\n *\n * Determines visibility status by checking:\n * - Models visibility in the viewport;\n * - Models' subModels visibility (if elements' modelId is in the provided modelIds, and element is itself a model, then it is considered a subModel);\n * - Categories visibility in the viewport (if elements' modelId is in the provided modelIds, then its' category gets checked).\n */\n public getModelsVisibilityStatus(props: { modelIds: Id64Arg; type: \"GeometricModel3d\" | \"GeometricModel2d\" }): Observable<VisibilityStatus> {\n const result = defer(() => {\n const { modelIds, type } = props;\n if ((type === \"GeometricModel3d\" && this.#props.viewport.viewType !== \"3d\") || (type === \"GeometricModel2d\" && this.#props.viewport.viewType !== \"2d\")) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n return from(Id64.iterable(modelIds)).pipe(\n mergeMap((modelId) => {\n // For hidden models we only need to check subModels\n if (!this.#props.viewport.viewsModel(modelId)) {\n return this.#props.baseIdsCache.getSubModels({ modelIds: modelId }).pipe(\n mergeMap(({ subModels }) => {\n if (subModels && Id64.sizeOf(subModels) > 0) {\n return this.getModelsVisibilityStatus({ modelIds: subModels, type }).pipe(\n map((subModelsVisibilityStatus) =>\n subModelsVisibilityStatus.state !== \"hidden\" ? createVisibilityStatus(\"partial\") : createVisibilityStatus(\"hidden\"),\n ),\n );\n }\n return of(createVisibilityStatus(\"hidden\"));\n }),\n );\n }\n // For visible models we need to check all categories\n return this.#props.baseIdsCache.getCategories({ modelIds: modelId }).pipe(\n mergeMap(({ drawingCategories, spatialCategories }) =>\n merge(\n drawingCategories\n ? of(drawingCategories).pipe(mergeMap((categoryIds) => this.getCategoriesVisibilityStatus({ modelId, categoryIds, type: \"DrawingCategory\" })))\n : EMPTY,\n spatialCategories\n ? of(spatialCategories).pipe(mergeMap((categoryIds) => this.getCategoriesVisibilityStatus({ modelId, categoryIds, type: \"SpatialCategory\" })))\n : EMPTY,\n ),\n ),\n defaultIfEmpty(createVisibilityStatus(\"visible\")),\n );\n }),\n mergeVisibilityStatuses,\n );\n });\n return this.#props.overrideHandler\n ? this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: { modelIds: props.modelIds },\n nonOverriddenResult: result,\n override: this.#props.overrides?.getModelsVisibilityStatus,\n })\n : result;\n }\n\n /**\n * Gets visibility status of a model's categories, assuming model is visible.\n *\n * Determines visibility status by checking:\n * - Elements in the viewports' always/never drawn lists;\n * - Default categories visibility status in the viewport;\n * - SubModels that are related to the modelId and categoryIds\n */\n private getVisibleModelCategoriesVisibilityStatus({\n modelId,\n categoryIds,\n type,\n }: {\n modelId: Id64String;\n categoryIds: Id64Arg;\n type: \"GeometricModel3d\" | \"GeometricModel2d\";\n }) {\n return merge(\n this.getVisibilityFromAlwaysAndNeverDrawnElements({\n queryProps: { modelId, categoryIds },\n defaultStatus: () => this.getVisibleModelCategoriesDirectVisibilityStatus({ modelId, categoryIds }),\n }),\n this.#props.baseIdsCache.getSubModels({ modelId, categoryIds }).pipe(\n mergeMap(({ subModels }) => {\n if (subModels && Id64.sizeOf(subModels) > 0) {\n return this.getModelsVisibilityStatus({ modelIds: subModels, type });\n }\n return EMPTY;\n }),\n ),\n ).pipe(mergeVisibilityStatuses);\n }\n\n /** Gets visibility status of sub-categories, assuming category is visible. */\n private getVisibleCategorySubCategoriesVisibilityStatus(props: { subCategoryIds: Id64Arg }): VisibilityStatus {\n const { subCategoryIds } = props;\n let subCategoryVisibility: \"visible\" | \"hidden\" | \"unknown\" = \"unknown\";\n for (const subCategoryId of Id64.iterable(subCategoryIds)) {\n const isSubCategoryVisible = this.#props.viewport.viewsSubCategory(subCategoryId);\n if (isSubCategoryVisible && subCategoryVisibility === \"hidden\") {\n return createVisibilityStatus(\"partial\");\n }\n if (!isSubCategoryVisible && subCategoryVisibility === \"visible\") {\n return createVisibilityStatus(\"partial\");\n }\n subCategoryVisibility = isSubCategoryVisible ? \"visible\" : \"hidden\";\n }\n // If visibility is unknown, no subCategories were provided,\n // Since category is visible we return visible\n return createVisibilityStatus(subCategoryVisibility === \"unknown\" ? \"visible\" : subCategoryVisibility);\n }\n\n /**\n * Gets visibility status of sub-categories.\n *\n * Determines visibility status by checking:\n * - Models that contain the category visibility;\n * - Per model category visibility overrides;\n * - Category selector visibility in the viewport.\n * - Sub-categories visibility in the viewport.\n */\n public getSubCategoriesVisibilityStatus(props: { subCategoryIds: Id64Arg; categoryId: Id64String; modelId?: Id64String }): Observable<VisibilityStatus> {\n return (\n props.modelId ? of({ id: props.categoryId, models: props.modelId }) : from(this.#props.baseIdsCache.getModels({ categoryIds: props.categoryId }))\n ).pipe(\n map(({ models }) => {\n let visibility: \"visible\" | \"hidden\" | \"unknown\" = \"unknown\";\n let nonDefaultModelDisplayStatesCount = 0;\n for (const modelId of Id64.iterable(models ?? [])) {\n if (!this.#props.viewport.viewsModel(modelId)) {\n if (visibility === \"visible\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = \"hidden\";\n ++nonDefaultModelDisplayStatesCount;\n continue;\n }\n const override = this.#props.viewport.getPerModelCategoryOverride({ modelId, categoryId: props.categoryId });\n if (override === \"show\") {\n if (visibility === \"hidden\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = \"visible\";\n ++nonDefaultModelDisplayStatesCount;\n continue;\n }\n if (override === \"hide\") {\n if (visibility === \"visible\") {\n return createVisibilityStatus(\"partial\");\n }\n visibility = \"hidden\";\n ++nonDefaultModelDisplayStatesCount;\n continue;\n }\n }\n if (models && Id64.sizeOf(models) > 0 && nonDefaultModelDisplayStatesCount === Id64.sizeOf(models)) {\n assert(visibility === \"visible\" || visibility === \"hidden\");\n return createVisibilityStatus(visibility);\n }\n if (!this.#props.viewport.viewsCategory(props.categoryId)) {\n return createVisibilityStatus(visibility === \"visible\" ? \"partial\" : \"hidden\");\n }\n\n if (Id64.sizeOf(props.subCategoryIds) === 0) {\n if (visibility === \"hidden\") {\n return createVisibilityStatus(\"partial\");\n }\n return createVisibilityStatus(\"visible\");\n }\n\n const subCategoriesVisibility = this.getVisibleCategorySubCategoriesVisibilityStatus({ subCategoryIds: props.subCategoryIds });\n return subCategoriesVisibility.state === visibility || visibility === \"unknown\" ? subCategoriesVisibility : createVisibilityStatus(\"partial\");\n }),\n mergeVisibilityStatuses,\n );\n }\n\n /**\n * Gets visibility status of categories.\n *\n * Determines visibility status by checking:\n * - Categories visibility;\n * - Visibility of models that are related to the categories;\n * - sub-categories visibility.\n */\n public getCategoriesVisibilityStatus(props: {\n categoryIds: Id64Arg;\n modelId: Id64String | undefined;\n type: \"DrawingCategory\" | \"SpatialCategory\";\n }): Observable<VisibilityStatus> {\n const result = defer(() => {\n const { categoryIds, modelId: modelIdFromProps, type } = props;\n if (Id64.sizeOf(categoryIds) === 0 || this.#props.viewport.viewType === \"other\") {\n return EMPTY;\n }\n\n const isSupportedInView =\n (this.#props.viewport.viewType === \"3d\" && type === \"SpatialCategory\") || (this.#props.viewport.viewType === \"2d\" && type === \"DrawingCategory\");\n if (!isSupportedInView) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n return (\n modelIdFromProps\n ? from(Id64.iterable(categoryIds)).pipe(map((categoryId) => ({ id: categoryId, models: modelIdFromProps })))\n : this.#props.baseIdsCache.getModels({ categoryIds })\n ).pipe(\n map(({ id, models }) => {\n const acc = { categoryId: id, visibleModels: new Array<Id64String>(), hiddenModels: new Array<Id64String>() };\n if (!models) {\n return acc;\n }\n for (const modelId of Id64.iterable(models)) {\n if (this.#props.viewport.viewsModel(modelId)) {\n acc.visibleModels.push(modelId);\n } else {\n acc.hiddenModels.push(modelId);\n }\n }\n return acc;\n }),\n mergeMap(({ categoryId, visibleModels, hiddenModels }) => {\n return merge(\n // For hidden models we only need to check subModels\n hiddenModels.length > 0\n ? this.#props.baseIdsCache.getSubModels({ modelIds: hiddenModels, categoryId }).pipe(\n mergeMap(({ subModels }) => {\n if (subModels && Id64.sizeOf(subModels) > 0) {\n return this.getModelsVisibilityStatus({\n modelIds: subModels,\n type: this.#props.viewport.viewType === \"2d\" ? \"GeometricModel2d\" : \"GeometricModel3d\",\n }).pipe(\n map((subModelsVisibilityStatus) =>\n subModelsVisibilityStatus.state !== \"hidden\" ? createVisibilityStatus(\"partial\") : createVisibilityStatus(\"hidden\"),\n ),\n );\n }\n return of(createVisibilityStatus(\"hidden\"));\n }),\n )\n : EMPTY,\n // For visible models we need to check all categories\n visibleModels.length > 0\n ? from(visibleModels).pipe(\n mergeMap((modelId) =>\n this.getVisibleModelCategoriesVisibilityStatus({\n modelId,\n categoryIds: categoryId,\n type: this.#props.viewport.viewType === \"2d\" ? \"GeometricModel2d\" : \"GeometricModel3d\",\n }),\n ),\n )\n : EMPTY,\n // We need to check subCategories as well\n this.#props.baseIdsCache.getSubCategories({ categoryIds: categoryId }).pipe(\n mergeMap(({ subCategories }) => {\n if (subCategories && Id64.sizeOf(subCategories) > 0) {\n return this.getSubCategoriesVisibilityStatus({ categoryId, modelId: modelIdFromProps, subCategoryIds: subCategories });\n }\n\n return EMPTY;\n }),\n ),\n ).pipe(defaultIfEmpty(createVisibilityStatus(this.#props.viewport.viewsCategory(categoryId) ? \"visible\" : \"hidden\")));\n }),\n mergeVisibilityStatuses,\n );\n });\n\n return this.#props.overrideHandler\n ? this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: props,\n nonOverriddenResult: result,\n override: this.#props.overrides?.getCategoriesVisibilityStatus,\n })\n : result;\n }\n\n /**\n * Gets visibility status of categories, assuming model is visible.\n *\n * Determines visibility status by checking:\n * - Per model category visibility overrides;\n * - Category selector visibility in the viewport.\n */\n public getVisibleModelCategoriesDirectVisibilityStatus({ modelId, categoryIds }: { categoryIds: Id64Arg; modelId: Id64String }): VisibilityStatus {\n const viewport = this.#props.viewport;\n\n let visibleCount = 0;\n for (const categoryId of Id64.iterable(categoryIds)) {\n const override = this.#props.viewport.getPerModelCategoryOverride({ modelId, categoryId });\n if (override === \"show\" || (override === \"none\" && viewport.viewsCategory(categoryId))) {\n ++visibleCount;\n continue;\n }\n if (visibleCount > 0) {\n return createVisibilityStatus(\"partial\");\n }\n }\n return visibleCount > 0 ? createVisibilityStatus(\"visible\") : createVisibilityStatus(\"hidden\");\n }\n\n /**\n * Gets visibility status of elements.\n *\n * Determines visibility status by checking:\n * - Elements in the viewports' always/never drawn lists;\n * - Related categories and models visibility status;\n * - Sub-models that are related to the specified elements.\n */\n public getElementsVisibilityStatus(props: {\n elementIds: Id64Arg;\n modelId: Id64String;\n categoryId: Id64String;\n type: \"GeometricElement3d\" | \"GeometricElement2d\";\n }): Observable<VisibilityStatus> {\n const result = defer(() => {\n const { elementIds, modelId, categoryId, type } = props;\n if (this.#props.viewport.viewType === \"other\") {\n return EMPTY;\n }\n\n const isSupportedInView =\n (this.#props.viewport.viewType === \"3d\" && type === \"GeometricElement3d\") || (this.#props.viewport.viewType === \"2d\" && type === \"GeometricElement2d\");\n if (!isSupportedInView) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n // TODO: check child elements that are subModels\n if (!this.#props.viewport.viewsModel(modelId)) {\n return from(elementIds).pipe(\n mergeMap((elementId) =>\n from(this.#props.baseIdsCache.hasSubModel(elementId)).pipe(\n mergeMap((isSubModel) => {\n if (isSubModel) {\n return this.getModelsVisibilityStatus({\n modelIds: elementId,\n type: this.#props.viewport.viewType === \"2d\" ? \"GeometricModel2d\" : \"GeometricModel3d\",\n }).pipe(\n map((subModelVisibilityStatus) =>\n subModelVisibilityStatus.state !== \"hidden\" ? createVisibilityStatus(\"partial\") : createVisibilityStatus(\"hidden\"),\n ),\n );\n }\n return of(createVisibilityStatus(\"hidden\"));\n }),\n ),\n ),\n mergeVisibilityStatuses,\n );\n }\n // TODO: check child elements\n // TODO: check child element categories\n // TODO: check child elements that are subModels\n return this.getVisibilityFromAlwaysAndNeverDrawnElements({\n elements: elementIds,\n defaultStatus: () => this.getVisibleModelCategoriesDirectVisibilityStatus({ categoryIds: categoryId, modelId }),\n }).pipe(\n mergeMap((visibilityStatusAlwaysAndNeverDraw) => {\n return from(Id64.iterable(elementIds)).pipe(\n mergeMap((elementId) =>\n from(this.#props.baseIdsCache.hasSubModel(elementId)).pipe(\n mergeMap((isSubModel) => {\n if (isSubModel) {\n return this.getModelsVisibilityStatus({\n modelIds: elementId,\n type: this.#props.viewport.viewType === \"2d\" ? \"GeometricModel2d\" : \"GeometricModel3d\",\n }).pipe(\n map((subModelVisibilityStatus) =>\n subModelVisibilityStatus.state !== visibilityStatusAlwaysAndNeverDraw.state\n ? createVisibilityStatus(\"partial\")\n : visibilityStatusAlwaysAndNeverDraw,\n ),\n );\n }\n return of(visibilityStatusAlwaysAndNeverDraw);\n }),\n ),\n ),\n mergeVisibilityStatuses,\n );\n }),\n );\n });\n return this.#props.overrideHandler\n ? this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: props,\n nonOverriddenResult: result,\n override: this.#props.overrides?.getElementsVisibilityStatus,\n })\n : result;\n }\n\n /** Gets visibility status of elements based on viewport's always/never drawn elements and related categories and models. */\n private getVisibilityFromAlwaysAndNeverDrawnElements(\n props: GetVisibilityFromAlwaysAndNeverDrawnElementsProps & ({ elements: Id64Arg } | { queryProps: { modelId: Id64String; categoryIds: Id64Arg } }),\n ): Observable<VisibilityStatus> {\n const viewport = this.#props.viewport;\n if (viewport.isAlwaysDrawnExclusive) {\n if (!viewport?.alwaysDrawn?.size) {\n return of(createVisibilityStatus(\"hidden\"));\n }\n } else if (!viewport?.neverDrawn?.size && !viewport?.alwaysDrawn?.size) {\n return of(props.defaultStatus());\n }\n\n if (\"elements\" in props) {\n return of(\n getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n alwaysDrawn: viewport.alwaysDrawn?.size ? setIntersection(Id64.iterable(props.elements), viewport.alwaysDrawn) : undefined,\n neverDrawn: viewport.neverDrawn?.size ? setIntersection(Id64.iterable(props.elements), viewport.neverDrawn) : undefined,\n totalCount: Id64.sizeOf(props.elements),\n viewport,\n }),\n );\n }\n const { modelId, categoryIds } = props.queryProps;\n const totalCount = from(Id64.iterable(categoryIds)).pipe(\n mergeMap((categoryId) => this.#props.baseIdsCache.getElementsCount({ modelId, categoryId })),\n reduce((acc, specificModelCategoryCount) => {\n return acc + specificModelCategoryCount;\n }, 0),\n );\n return forkJoin({\n totalCount,\n alwaysDrawn: this.#alwaysAndNeverDrawnElements.getAlwaysDrawnElements(props.queryProps),\n neverDrawn: this.#alwaysAndNeverDrawnElements.getNeverDrawnElements(props.queryProps),\n }).pipe(\n // There is a known bug:\n // Categories that don't have root elements will make visibility result incorrect\n // E.g.:\n // - CategoryA\n // - ElementA (CategoryA is visible)\n // - ChildElementB (CategoryB is hidden) ChildElementB is in always drawn list\n // Result will be \"partial\" because CategoryB will return hidden visibility, even though all elements are visible\n // TODO fix with: https://github.com/iTwin/viewer-components-react/issues/1100\n map((state) => {\n return getVisibilityFromAlwaysAndNeverDrawnElementsImpl({\n ...props,\n ...state,\n viewport,\n });\n }),\n );\n }\n\n /**\n * Changes visibility status of models.\n *\n * Also, changes visibility status of related categories and sub-models.\n */\n public changeModelsVisibilityStatus(props: { modelIds: Id64Arg; on: boolean }): Observable<void> {\n const result = defer(() => {\n const { modelIds, on } = props;\n\n if (Id64.sizeOf(modelIds) === 0) {\n return EMPTY;\n }\n\n const viewport = this.#props.viewport;\n\n viewport.clearPerModelCategoryOverrides({ modelIds });\n if (!on) {\n viewport.changeModelDisplay({ modelIds, display: false });\n return this.#props.baseIdsCache\n .getSubModels({ modelIds })\n .pipe(mergeMap(({ subModels }) => (subModels ? this.changeModelsVisibilityStatus({ modelIds: subModels, on }) : EMPTY)));\n }\n\n viewport.changeModelDisplay({ modelIds, display: true });\n return this.#props.baseIdsCache.getCategories({ modelIds }).pipe(\n mergeMap(({ id, drawingCategories, spatialCategories }) => {\n return merge(\n drawingCategories ? this.changeCategoriesVisibilityStatus({ categoryIds: drawingCategories, modelId: id, on }) : EMPTY,\n spatialCategories ? this.changeCategoriesVisibilityStatus({ categoryIds: spatialCategories, modelId: id, on }) : EMPTY,\n );\n }),\n );\n });\n return this.#props.overrideHandler\n ? this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: props,\n nonOverriddenResult: result,\n override: this.#props.overrides?.changeModelsVisibilityStatus,\n })\n : result;\n }\n\n /** Turns model on and turns off elements with categories related to that model. */\n private showModelWithoutAnyCategoriesOrElements(modelId: Id64String, categoriesToNotOverride?: Id64Arg): Observable<void> {\n const viewport = this.#props.viewport;\n return forkJoin({\n allModelCategories: this.#props.baseIdsCache.getCategories({ modelIds: modelId }).pipe(\n reduce((acc, { drawingCategories, spatialCategories }) => {\n for (const category of Id64.iterable(drawingCategories ?? [])) {\n acc.add(category);\n }\n for (const category of Id64.iterable(spatialCategories ?? [])) {\n acc.add(category);\n }\n return acc;\n }, new Set<Id64String>()),\n ),\n modelAlwaysDrawnElements: this.#alwaysAndNeverDrawnElements.getAlwaysDrawnElements({ modelId }),\n }).pipe(\n mergeMap(async ({ allModelCategories, modelAlwaysDrawnElements }) => {\n const alwaysDrawn = this.#props.viewport.alwaysDrawn;\n if (alwaysDrawn && modelAlwaysDrawnElements) {\n viewport.setAlwaysDrawn({ elementIds: setDifference(alwaysDrawn, modelAlwaysDrawnElements) });\n }\n const categoriesToOverride = categoriesToNotOverride\n ? setDifference(allModelCategories, getSetFromId64Arg(categoriesToNotOverride))\n : allModelCategories;\n categoriesToOverride.forEach((categoryId) => {\n this.changeCategoryStateInViewportAccordingToModelVisibility(modelId, categoryId, false, false);\n });\n viewport.changeModelDisplay({ modelIds: modelId, display: true });\n }),\n );\n }\n\n /** Adds per-model category overrides based on category visibility in category selector. */\n private changeCategoryStateInViewportAccordingToModelVisibility(modelId: string, categoryId: string, on: boolean, changeSubCategories: boolean) {\n const viewport = this.#props.viewport;\n const isDisplayedInSelector = viewport.viewsCategory(categoryId);\n const override = on === isDisplayedInSelector ? \"none\" : on ? \"show\" : \"hide\";\n viewport.setPerModelCategoryOverride({ modelIds: modelId, categoryIds: categoryId, override });\n\n if (override === \"none\" && on) {\n // we took off the override which means the category is displayed in selector, but\n // doesn't mean all its subcategories are displayed - this call ensures that\n viewport.changeCategoryDisplay({ categoryIds: categoryId, display: true, enableAllSubCategories: changeSubCategories });\n }\n }\n\n /**\n * Changes categories visibility status.\n *\n * Also:\n * - Turns on models in cases where categories need to be turned on and models are not already on.\n * - Removed related elements from always/never drawn elements.\n * - changes visibility of sub-models that are related to the specified categories.\n */\n public changeCategoriesVisibilityStatus(props: { modelId: Id64String | undefined; categoryIds: Id64Arg; on: boolean }): Observable<void> {\n const result = defer(() => {\n const { modelId: modelIdFromProps, categoryIds, on } = props;\n const viewport = this.#props.viewport;\n const modelIdsObservable = (\n modelIdFromProps\n ? of(new Map<ModelId, Set<CategoryId>>([[modelIdFromProps, getSetFromId64Arg(categoryIds)]]))\n : this.#props.baseIdsCache.getModels({ categoryIds }).pipe(\n reduce((acc, { id, models }) => {\n if (!models) {\n return acc;\n }\n for (const modelId of Id64.iterable(models)) {\n let entry = acc.get(modelId);\n if (!entry) {\n entry = new Set();\n acc.set(modelId, entry);\n }\n entry.add(id);\n }\n return acc;\n }, new Map<ModelId, Set<CategoryId>>()),\n )\n ).pipe(\n mergeMap((modelCategoriesMap) => modelCategoriesMap.entries()),\n shareReplay(),\n );\n return concat(\n // If modelId was provided: add override\n // If modelId was not provided: change categoryDisplay and remove categories per model overrides\n modelIdFromProps\n ? of(\n viewport.setPerModelCategoryOverride({\n modelIds: modelIdFromProps,\n categoryIds,\n override: on ? \"show\" : \"hide\",\n }),\n )\n : concat(\n from(enableCategoryDisplay(viewport, categoryIds, on, on)),\n modelIdsObservable.pipe(\n map(([modelId, modelCategories]) => {\n viewport.setPerModelCategoryOverride({ modelIds: modelId, categoryIds: modelCategories, override: \"none\" });\n }),\n ),\n ),\n // If categories visibility needs to be turned on, we need to turn on models without turning on unrelated elements or categories for that model\n on\n ? modelIdsObservable.pipe(\n mergeMap(([modelId, categories]) => {\n if (!viewport.viewsModel(modelId)) {\n return this.showModelWithoutAnyCategoriesOrElements(modelId, categories);\n }\n return EMPTY;\n }),\n )\n : EMPTY,\n this.#alwaysAndNeverDrawnElements.clearAlwaysAndNeverDrawnElements({ categoryIds, modelId: modelIdFromProps }),\n this.#props.baseIdsCache\n .getSubModels({ categoryIds, modelId: modelIdFromProps })\n .pipe(mergeMap(({ subModels }) => (subModels ? this.changeModelsVisibilityStatus({ modelIds: subModels, on }) : EMPTY))),\n );\n });\n return this.#props.overrideHandler\n ? this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: props,\n nonOverriddenResult: result,\n override: this.#props.overrides?.changeCategoriesVisibilityStatus,\n })\n : result;\n }\n\n /**\n * Changes visibility status of elements by adding them to the viewport's always/never drawn elements.\n *\n * Also, changes visibility status of specified elements that are models.\n */\n public changeElementsVisibilityStatus(props: { elementIds: Id64Arg; modelId: Id64String; categoryId: Id64String; on: boolean }): Observable<void> {\n const result = defer(() => {\n const { modelId, categoryId, elementIds, on } = props;\n const viewport = this.#props.viewport;\n // TODO: change child elements\n // TODO: change child element categories\n // TODO: change child subModels\n return concat(\n // Change elements state\n defer(() => {\n if (!viewport.viewsModel(modelId)) {\n if (!on) {\n return this.queueElementsVisibilityChange(elementIds, on, false);\n }\n\n return this.showModelWithoutAnyCategoriesOrElements(modelId).pipe(\n mergeMap(() => {\n const defaultVisibility = this.getVisibleModelCategoriesDirectVisibilityStatus({\n categoryIds: categoryId,\n modelId,\n });\n const displayedByDefault = defaultVisibility.state === \"visible\";\n return this.queueElementsVisibilityChange(elementIds, on, displayedByDefault);\n }),\n );\n }\n\n const categoryVisibility = this.getVisibleModelCategoriesDirectVisibilityStatus({ categoryIds: categoryId, modelId });\n const isDisplayedByDefault = categoryVisibility.state === \"visible\";\n return this.queueElementsVisibilityChange(elementIds, on, isDisplayedByDefault);\n }),\n // Change visibility of elements that are models\n from(Id64.iterable(elementIds)).pipe(\n mergeMap((elementId) =>\n from(this.#props.baseIdsCache.hasSubModel(elementId)).pipe(\n mergeMap((isSubModel) => {\n if (isSubModel) {\n return this.changeModelsVisibilityStatus({ modelIds: elementId, on });\n }\n return EMPTY;\n }),\n ),\n ),\n ),\n );\n });\n return this.#props.overrideHandler\n ? this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: props,\n nonOverriddenResult: result,\n override: this.#props.overrides?.changeElementsVisibilityStatus,\n })\n : result;\n }\n\n /** Queues visibility change for elements. */\n private queueElementsVisibilityChange(elementIds: Id64Arg, on: boolean, visibleByDefault: boolean) {\n const finishedSubject = new Subject<boolean>();\n // observable to track if visibility change is finished/cancelled\n const changeFinished = finishedSubject.pipe(\n startWith(false),\n shareReplay(1),\n filter((finished) => finished),\n );\n\n const changeObservable = from(Id64.iterable(elementIds)).pipe(\n // check if visibility change is not finished (cancelled) due to change overall change request being cancelled\n takeUntil(changeFinished),\n changeElementStateNoChildrenOperator({ on, isDisplayedByDefault: visibleByDefault, viewport: this.#props.viewport }),\n tap({\n next: () => {\n // notify that visibility change is finished\n finishedSubject.next(true);\n },\n }),\n );\n\n // queue visibility change. `changeObservable` will be subscribed to when other queue changes are finished\n this.#elementChangeQueue.next(changeObservable);\n\n // return observable that will emit when visibility change is finished\n return changeFinished.pipe(\n take(1),\n tap({\n unsubscribe: () => {\n // if this observable is unsubscribed before visibility change is finished, we have to notify that it queued change request is cancelled\n finishedSubject.next(true);\n },\n }),\n map(() => undefined),\n );\n }\n}\n"]}
|
|
@@ -19,6 +19,7 @@ export { VisibilityTree } from "./common/components/VisibilityTree.js";
|
|
|
19
19
|
export { VisibilityAction } from "./common/components/TreeNodeVisibilityButton.js";
|
|
20
20
|
export { TreeRenderer } from "./common/components/TreeRenderer.js";
|
|
21
21
|
export { VisibilityTreeRenderer } from "./common/components/VisibilityTreeRenderer.js";
|
|
22
|
+
export { SkeletonTree } from "./common/components/SkeletonTree.js";
|
|
22
23
|
export { HierarchyVisibilityHandler, VisibilityStatus } from "./common/UseHierarchyVisibility.js";
|
|
23
24
|
export { TelemetryContextProvider } from "./common/UseTelemetryContext.js";
|
|
24
25
|
export { FilterLimitExceededError } from "./common/TreeErrors.js";
|
|
@@ -22,6 +22,7 @@ export { VisibilityTree } from "./common/components/VisibilityTree.js";
|
|
|
22
22
|
export { VisibilityAction } from "./common/components/TreeNodeVisibilityButton.js";
|
|
23
23
|
export { TreeRenderer } from "./common/components/TreeRenderer.js";
|
|
24
24
|
export { VisibilityTreeRenderer } from "./common/components/VisibilityTreeRenderer.js";
|
|
25
|
+
export { SkeletonTree } from "./common/components/SkeletonTree.js";
|
|
25
26
|
export { TelemetryContextProvider } from "./common/UseTelemetryContext.js";
|
|
26
27
|
export { FilterLimitExceededError } from "./common/TreeErrors.js";
|
|
27
28
|
// reexport actions from presentation-hierarchies-react to keep naming consistent
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/tree-widget-react/components/trees/index.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAE9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC/F,OAAO,EAAE,4BAA4B,EAAE,MAAM,4CAA4C,CAAC;AAE1F,OAAO,EAAE,4BAA4B,EAAE,MAAM,wDAAwD,CAAC;AACtG,OAAO,EAAE,uBAAuB,EAAE,MAAM,mDAAmD,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAE1F,OAAO,EAAE,0BAA0B,EAAE,MAAM,qDAAqD,CAAC;AACjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAEnF,OAAO,EAAE,4BAA4B,EAAE,MAAM,yDAAyD,CAAC;AACvG,OAAO,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAC;AAGzF,OAAO,EAAE,+BAA+B,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AAElH,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AACnD,OAAO,EAAsB,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iDAAiD,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/tree-widget-react/components/trees/index.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAE9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC/F,OAAO,EAAE,4BAA4B,EAAE,MAAM,4CAA4C,CAAC;AAE1F,OAAO,EAAE,4BAA4B,EAAE,MAAM,wDAAwD,CAAC;AACtG,OAAO,EAAE,uBAAuB,EAAE,MAAM,mDAAmD,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAE1F,OAAO,EAAE,0BAA0B,EAAE,MAAM,qDAAqD,CAAC;AACjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAEnF,OAAO,EAAE,4BAA4B,EAAE,MAAM,yDAAyD,CAAC;AACvG,OAAO,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAC;AAGzF,OAAO,EAAE,+BAA+B,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AAElH,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AACnD,OAAO,EAAsB,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iDAAiD,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAEnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAIlE,iFAAiF;AACjF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nexport { ModelsTreeComponent } from \"./models-tree/ModelsTreeComponent.js\";\nexport { useModelsTree, ModelsTreeIcon } from \"./models-tree/UseModelsTree.js\";\nexport { useModelsTreeButtonProps } from \"./models-tree/ModelsTreeButtons.js\";\n\nexport { CategoriesTreeComponent } from \"./categories-tree/CategoriesTreeComponent.js\";\nexport { useCategoriesTree, CategoriesTreeIcon } from \"./categories-tree/UseCategoriesTree.js\";\nexport { useCategoriesTreeButtonProps } from \"./categories-tree/CategoriesTreeButtons.js\";\n\nexport { ClassificationsTreeComponent } from \"./classifications-tree/ClassificationsTreeComponent.js\";\nexport { ClassificationsTreeIcon } from \"./classifications-tree/ClassificationsTreeIcon.js\";\nexport { useClassificationsTree } from \"./classifications-tree/UseClassificationsTree.js\";\n\nexport { IModelContentTreeComponent } from \"./imodel-content-tree/IModelContentTreeComponent.js\";\nexport { IModelContentTreeIcon } from \"./imodel-content-tree/IModelContentTree.js\";\n\nexport { ExternalSourcesTreeComponent } from \"./external-sources-tree/ExternalSourcesTreeComponent.js\";\nexport { ExternalSourcesTreeIcon } from \"./external-sources-tree/ExternalSourcesTree.js\";\n\nexport { BaseTreeRendererProps } from \"./common/components/BaseTreeRenderer.js\";\nexport { FocusedInstancesContextProvider, useFocusedInstancesContext } from \"./common/FocusedInstancesContext.js\";\n\nexport { Tree } from \"./common/components/Tree.js\";\nexport { TreeWidgetViewport, createTreeWidgetViewport } from \"./common/TreeWidgetViewport.js\";\nexport { VisibilityTree } from \"./common/components/VisibilityTree.js\";\nexport { VisibilityAction } from \"./common/components/TreeNodeVisibilityButton.js\";\nexport { TreeRenderer } from \"./common/components/TreeRenderer.js\";\nexport { VisibilityTreeRenderer } from \"./common/components/VisibilityTreeRenderer.js\";\nexport { SkeletonTree } from \"./common/components/SkeletonTree.js\";\nexport { HierarchyVisibilityHandler, VisibilityStatus } from \"./common/UseHierarchyVisibility.js\";\nexport { TelemetryContextProvider } from \"./common/UseTelemetryContext.js\";\nexport { FilterLimitExceededError } from \"./common/TreeErrors.js\";\n\nexport { ModelsTreeVisibilityHandlerOverrides } from \"./models-tree/internal/visibility/ModelsTreeVisibilityHandler.js\";\n\n// reexport actions from presentation-hierarchies-react to keep naming consistent\nexport { RenameAction, FilterAction } from \"@itwin/presentation-hierarchies-react\";\n"]}
|
|
@@ -212,7 +212,12 @@ export class ModelsTreeVisibilityHandler {
|
|
|
212
212
|
}
|
|
213
213
|
getSubModels(props) {
|
|
214
214
|
if ("modelIds" in props) {
|
|
215
|
-
return from(Id64.iterable(props.modelIds)).pipe(mergeMap((modelId) =>
|
|
215
|
+
return from(Id64.iterable(props.modelIds)).pipe(mergeMap((modelId) => {
|
|
216
|
+
if (props.categoryId) {
|
|
217
|
+
return from(this.#props.idsCache.getCategoriesModeledElements(modelId, props.categoryId)).pipe(map((subModels) => ({ id: modelId, subModels })));
|
|
218
|
+
}
|
|
219
|
+
return from(this.#props.idsCache.getModelCategoryIds(modelId)).pipe(mergeMap((categoryIds) => from(this.#props.idsCache.getCategoriesModeledElements(modelId, categoryIds))), map((subModels) => ({ id: modelId, subModels })));
|
|
220
|
+
}));
|
|
216
221
|
}
|
|
217
222
|
if (props.modelId) {
|
|
218
223
|
return from(Id64.iterable(props.categoryIds)).pipe(mergeMap((categoryId) => from(this.#props.idsCache.getCategoriesModeledElements(props.modelId, categoryId)).pipe(map((subModels) => ({ id: categoryId, subModels })))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelsTreeVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../../../src/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { concat, defer, EMPTY, from, map, merge, mergeMap, of } from \"rxjs\";\nimport { assert, Id64 } from \"@itwin/core-bentley\";\nimport { HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { createVisibilityStatus } from \"../../../common/internal/Tooltip.js\";\nimport { HierarchyVisibilityHandlerImpl } from \"../../../common/internal/useTreeHooks/UseCachedVisibility.js\";\nimport { releaseMainThreadOnItemsCount } from \"../../../common/internal/Utils.js\";\nimport { mergeVisibilityStatuses } from \"../../../common/internal/VisibilityUtils.js\";\nimport { ModelsTreeNode } from \"../ModelsTreeNode.js\";\nimport { createFilteredModelsTree } from \"./FilteredTree.js\";\nimport { ModelsTreeVisibilityHelper } from \"./ModelsTreeVisibilityHelper.js\";\n\nimport type { Observable } from \"rxjs\";\nimport type { Id64Arg } from \"@itwin/core-bentley\";\nimport type { GroupingHierarchyNode, HierarchyFilteringPath } from \"@itwin/presentation-hierarchies\";\nimport type { ECClassHierarchyInspector } from \"@itwin/presentation-shared\";\nimport type { AlwaysAndNeverDrawnElementInfo } from \"../../../common/internal/AlwaysAndNeverDrawnElementInfo.js\";\nimport type { FilteredTree } from \"../../../common/internal/visibility/BaseFilteredTree.js\";\nimport type {\n BaseIdsCache,\n BaseTreeVisibilityHandlerOverrides,\n TreeSpecificVisibilityHandler,\n} from \"../../../common/internal/visibility/BaseVisibilityHelper.js\";\nimport type { TreeWidgetViewport } from \"../../../common/TreeWidgetViewport.js\";\nimport type {\n HierarchyVisibilityHandlerOverridableMethod,\n HierarchyVisibilityOverrideHandler,\n VisibilityStatus,\n} from \"../../../common/UseHierarchyVisibility.js\";\nimport type { ModelsTreeIdsCache } from \"../ModelsTreeIdsCache.js\";\nimport type { ModelsTreeFilterTargets } from \"./FilteredTree.js\";\n\n/**\n * Functionality of Models tree visibility handler that can be overridden.\n * Each callback is provided original implementation and reference to a `HierarchyVisibilityHandler`.\n * @beta\n */\nexport interface ModelsTreeVisibilityHandlerOverrides extends BaseTreeVisibilityHandlerOverrides {\n getSubjectsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { subjectIds: Id64Arg }) => Promise<VisibilityStatus>>;\n getElementGroupingNodeVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { node: GroupingHierarchyNode }) => Promise<VisibilityStatus>>;\n\n changeSubjectsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { subjectIds: Id64Arg; on: boolean }) => Promise<void>>;\n changeElementGroupingNodeVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<\n (props: { node: GroupingHierarchyNode; on: boolean }) => Promise<void>\n >;\n}\n\n/** @internal */\nexport interface ModelsTreeVisibilityHandlerProps {\n idsCache: ModelsTreeIdsCache;\n viewport: TreeWidgetViewport;\n alwaysAndNeverDrawnElementInfo: AlwaysAndNeverDrawnElementInfo;\n overrideHandler: HierarchyVisibilityOverrideHandler;\n overrides?: ModelsTreeVisibilityHandlerOverrides;\n}\n\n/**\n * Handles visibility status of models tree nodes.\n *\n * It knows how to get and change visibility status of nodes created by hierarchy definition.\n * @internal\n */\nexport class ModelsTreeVisibilityHandler implements Disposable, TreeSpecificVisibilityHandler<ModelsTreeFilterTargets> {\n #visibilityHelper: ModelsTreeVisibilityHelper;\n readonly #props: ModelsTreeVisibilityHandlerProps;\n\n constructor(constructorProps: ModelsTreeVisibilityHandlerProps) {\n this.#props = constructorProps;\n // Remove after https://github.com/iTwin/viewer-components-react/issues/1421.\n // We won't need to create a custom base ids cache.\n const baseIdsCache: BaseIdsCache = {\n getCategories: (props) => this.getCategories(props),\n getElementsCount: (props) => this.getElementsCount(props),\n getModels: (props) => this.getModels(props),\n getSubCategories: (props) => this.getSubCategories(props),\n getSubModels: (props) => this.getSubModels(props),\n hasSubModel: async (props) => this.#props.idsCache.hasSubModel(props),\n getAllCategories: () => this.getAllCategories(),\n };\n this.#visibilityHelper = new ModelsTreeVisibilityHelper({\n viewport: this.#props.viewport,\n idsCache: this.#props.idsCache,\n alwaysAndNeverDrawnElementInfo: this.#props.alwaysAndNeverDrawnElementInfo,\n overrideHandler: this.#props.overrideHandler,\n baseIdsCache,\n overrides: this.#props.overrides,\n });\n }\n\n public [Symbol.dispose]() {\n this.#visibilityHelper[Symbol.dispose]();\n }\n\n public changeFilterTargetsVisibilityStatus(targets: ModelsTreeFilterTargets, on: boolean): Observable<void> {\n return defer(() => {\n const { subjectIds, modelIds, categories, elements } = targets;\n const observables = new Array<Observable<void>>();\n if (subjectIds?.size) {\n observables.push(this.#visibilityHelper.changeSubjectsVisibilityStatus({ subjectIds, on }));\n }\n\n if (modelIds?.size) {\n observables.push(this.#visibilityHelper.changeModelsVisibilityStatus({ modelIds, on }));\n }\n\n if (categories?.length) {\n observables.push(\n from(categories).pipe(\n mergeMap(({ modelId, categoryIds }) =>\n this.#visibilityHelper.changeCategoriesVisibilityStatus({\n categoryIds,\n modelId,\n on,\n }),\n ),\n ),\n );\n }\n\n if (elements?.length) {\n observables.push(\n from(elements).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(({ modelId, elementIds, categoryId }) => this.#visibilityHelper.changeElementsVisibilityStatus({ modelId, categoryId, elementIds, on })),\n ),\n );\n }\n\n return merge(...observables);\n });\n }\n\n public getVisibilityStatus(node: HierarchyNode): Observable<VisibilityStatus> {\n if (HierarchyNode.isClassGroupingNode(node)) {\n const nodeInfo = this.getGroupingNodeInfo(node);\n const result = this.#visibilityHelper.getGroupedElementsVisibilityStatus({\n categoryId: nodeInfo.categoryId,\n modelId: nodeInfo.modelId,\n elementIds: nodeInfo.elementIds,\n });\n return this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: { node },\n nonOverriddenResult: result,\n override: this.#props.overrides?.getElementGroupingNodeVisibilityStatus,\n });\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n // note: subject nodes may be merged to represent multiple subject instances\n return this.#visibilityHelper.getSubjectsVisibilityStatus({ subjectIds: node.key.instanceKeys.map((key) => key.id) });\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.#visibilityHelper.getModelsVisibilityStatus({ modelIds: node.key.instanceKeys.map(({ id }) => id), type: \"GeometricModel3d\" });\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n if (!modelId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.#visibilityHelper.getCategoriesVisibilityStatus({\n categoryIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n type: \"SpatialCategory\",\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n if (!categoryId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n return this.#visibilityHelper.getElementsVisibilityStatus({\n elementIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n categoryId,\n type: \"GeometricElement3d\",\n });\n }\n\n /** Changes visibility of the items represented by the tree node. */\n public changeVisibilityStatus(node: HierarchyNode, on: boolean): Observable<void> {\n const changeObs = defer(() => {\n if (HierarchyNode.isClassGroupingNode(node)) {\n const nodeInfo = this.getGroupingNodeInfo(node);\n const result = this.#visibilityHelper.changeGroupedElementsVisibilityStatus({\n categoryId: nodeInfo.categoryId,\n modelId: nodeInfo.modelId,\n elementIds: nodeInfo.elementIds,\n on,\n });\n return this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: { node, on },\n nonOverriddenResult: result,\n override: this.#props.overrides?.changeElementGroupingNodeVisibilityStatus,\n });\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n return this.#visibilityHelper.changeSubjectsVisibilityStatus({\n subjectIds: node.key.instanceKeys.map((key) => key.id),\n on,\n });\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.#visibilityHelper.changeModelsVisibilityStatus({ modelIds: node.key.instanceKeys.map(({ id }) => id), on });\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n if (!modelId) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.#visibilityHelper.changeCategoriesVisibilityStatus({\n categoryIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n on,\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n if (!categoryId) {\n return EMPTY;\n }\n\n return this.#visibilityHelper.changeElementsVisibilityStatus({\n elementIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n categoryId,\n on,\n });\n });\n\n if (this.#props.viewport.isAlwaysDrawnExclusive) {\n return concat(this.#visibilityHelper.removeAlwaysDrawnExclusive(), changeObs);\n }\n return changeObs;\n }\n\n public getFilterTargetsVisibilityStatus(targets: ModelsTreeFilterTargets): Observable<VisibilityStatus> {\n return defer(() => {\n const { subjectIds, modelIds, categories, elements } = targets;\n const observables = new Array<Observable<VisibilityStatus>>();\n if (subjectIds?.size) {\n observables.push(this.#visibilityHelper.getSubjectsVisibilityStatus({ subjectIds }));\n }\n\n if (modelIds?.size) {\n observables.push(this.#visibilityHelper.getModelsVisibilityStatus({ modelIds, type: \"GeometricModel3d\" }));\n }\n\n if (categories?.length) {\n observables.push(\n from(categories).pipe(\n mergeMap(({ modelId, categoryIds }) =>\n this.#visibilityHelper.getCategoriesVisibilityStatus({\n categoryIds,\n modelId,\n type: \"SpatialCategory\",\n }),\n ),\n ),\n );\n }\n\n if (elements?.length) {\n observables.push(\n from(elements).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(({ modelId, elementIds, categoryId }) =>\n this.#visibilityHelper.getElementsVisibilityStatus({ modelId, categoryId, elementIds, type: \"GeometricElement3d\" }),\n ),\n ),\n );\n }\n\n return merge(...observables);\n }).pipe(mergeVisibilityStatuses);\n }\n\n private getCategories(props: Parameters<BaseIdsCache[\"getCategories\"]>[0]): ReturnType<BaseIdsCache[\"getCategories\"]> {\n return from(Id64.iterable(props.modelIds)).pipe(\n mergeMap((modelId) =>\n from(this.#props.idsCache.getModelCategoryIds(modelId)).pipe(map((categoryIds) => ({ id: modelId, spatialCategories: categoryIds }))),\n ),\n );\n }\n\n private getAllCategories(): ReturnType<BaseIdsCache[\"getAllCategories\"]> {\n return from(this.#props.idsCache.getAllCategories()).pipe(map((categories) => ({ spatialCategories: categories })));\n }\n\n private getElementsCount(props: Parameters<BaseIdsCache[\"getElementsCount\"]>[0]): ReturnType<BaseIdsCache[\"getElementsCount\"]> {\n return from(this.#props.idsCache.getCategoryElementsCount(props.modelId, props.categoryId));\n }\n\n private getModels(props: Parameters<BaseIdsCache[\"getModels\"]>[0]): ReturnType<BaseIdsCache[\"getModels\"]> {\n // Models cache for categories that don't have models still adds them to the final map\n return from(this.#props.idsCache.getCategoriesElementModels(props.categoryIds)).pipe(\n mergeMap((categoryModelsMap) => categoryModelsMap.entries()),\n map(([categoryId, categoryModels]) => ({ id: categoryId, models: categoryModels })),\n );\n }\n\n private getSubCategories(props: Parameters<BaseIdsCache[\"getSubCategories\"]>[0]): ReturnType<BaseIdsCache[\"getSubCategories\"]> {\n return from(Id64.iterable(props.categoryIds)).pipe(map((categoryId) => ({ id: categoryId, subCategories: undefined })));\n }\n\n private getSubModels(props: Parameters<BaseIdsCache[\"getSubModels\"]>[0]): ReturnType<BaseIdsCache[\"getSubModels\"]> {\n if (\"modelIds\" in props) {\n return from(Id64.iterable(props.modelIds)).pipe(\n mergeMap((modelId) =>\n from(this.#props.idsCache.getModelCategoryIds(modelId)).pipe(\n mergeMap((categoryIds) => from(this.#props.idsCache.getCategoriesModeledElements(modelId, categoryIds))),\n map((subModels) => ({ id: modelId, subModels })),\n ),\n ),\n );\n }\n\n if (props.modelId) {\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n from(this.#props.idsCache.getCategoriesModeledElements(props.modelId!, categoryId)).pipe(map((subModels) => ({ id: categoryId, subModels }))),\n ),\n );\n }\n\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n from(this.#props.idsCache.getCategoriesElementModels(categoryId)).pipe(\n mergeMap((categoryModelsMap) => {\n const models = categoryModelsMap.get(categoryId);\n if (!models) {\n return of({ id: categoryId, subModels: undefined });\n }\n return from(models).pipe(\n mergeMap((modelId) => from(this.#props.idsCache.getCategoriesModeledElements(modelId, categoryId))),\n map((subModels) => ({ id: categoryId, subModels })),\n );\n }),\n ),\n ),\n );\n }\n\n private getGroupingNodeInfo(node: GroupingHierarchyNode) {\n const modelId = ModelsTreeNode.getModelId(node);\n const categoryId = ModelsTreeNode.getCategoryId(node);\n assert(!!modelId && !!categoryId);\n\n const elementIds = node.groupedInstanceKeys.map((key) => key.id);\n return { modelId, categoryId, elementIds };\n }\n}\n\n/**\n * Creates models tree visibility handler. Is used by integration and performance tests.\n * @internal\n */\nexport function createModelsTreeVisibilityHandler(props: {\n viewport: TreeWidgetViewport;\n idsCache: ModelsTreeIdsCache;\n imodelAccess: ECClassHierarchyInspector;\n overrides?: ModelsTreeVisibilityHandlerOverrides;\n filteredPaths?: HierarchyFilteringPath[];\n}) {\n return new HierarchyVisibilityHandlerImpl<ModelsTreeFilterTargets>({\n getFilteredTree: (): undefined | Promise<FilteredTree<ModelsTreeFilterTargets>> => {\n if (!props.filteredPaths) {\n return undefined;\n }\n return createFilteredModelsTree({\n filteringPaths: props.filteredPaths,\n imodelAccess: props.imodelAccess,\n });\n },\n getTreeSpecificVisibilityHandler: (info, overrideHandler) => {\n return new ModelsTreeVisibilityHandler({\n alwaysAndNeverDrawnElementInfo: info,\n idsCache: props.idsCache,\n viewport: props.viewport,\n overrideHandler,\n overrides: props.overrides,\n });\n },\n viewport: props.viewport,\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ModelsTreeVisibilityHandler.js","sourceRoot":"","sources":["../../../../../../../../src/tree-widget-react/components/trees/models-tree/internal/visibility/ModelsTreeVisibilityHandler.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { concat, defer, EMPTY, from, map, merge, mergeMap, of } from \"rxjs\";\nimport { assert, Id64 } from \"@itwin/core-bentley\";\nimport { HierarchyNode } from \"@itwin/presentation-hierarchies\";\nimport { createVisibilityStatus } from \"../../../common/internal/Tooltip.js\";\nimport { HierarchyVisibilityHandlerImpl } from \"../../../common/internal/useTreeHooks/UseCachedVisibility.js\";\nimport { releaseMainThreadOnItemsCount } from \"../../../common/internal/Utils.js\";\nimport { mergeVisibilityStatuses } from \"../../../common/internal/VisibilityUtils.js\";\nimport { ModelsTreeNode } from \"../ModelsTreeNode.js\";\nimport { createFilteredModelsTree } from \"./FilteredTree.js\";\nimport { ModelsTreeVisibilityHelper } from \"./ModelsTreeVisibilityHelper.js\";\n\nimport type { Observable } from \"rxjs\";\nimport type { Id64Arg } from \"@itwin/core-bentley\";\nimport type { GroupingHierarchyNode, HierarchyFilteringPath } from \"@itwin/presentation-hierarchies\";\nimport type { ECClassHierarchyInspector } from \"@itwin/presentation-shared\";\nimport type { AlwaysAndNeverDrawnElementInfo } from \"../../../common/internal/AlwaysAndNeverDrawnElementInfo.js\";\nimport type { FilteredTree } from \"../../../common/internal/visibility/BaseFilteredTree.js\";\nimport type {\n BaseIdsCache,\n BaseTreeVisibilityHandlerOverrides,\n TreeSpecificVisibilityHandler,\n} from \"../../../common/internal/visibility/BaseVisibilityHelper.js\";\nimport type { TreeWidgetViewport } from \"../../../common/TreeWidgetViewport.js\";\nimport type {\n HierarchyVisibilityHandlerOverridableMethod,\n HierarchyVisibilityOverrideHandler,\n VisibilityStatus,\n} from \"../../../common/UseHierarchyVisibility.js\";\nimport type { ModelsTreeIdsCache } from \"../ModelsTreeIdsCache.js\";\nimport type { ModelsTreeFilterTargets } from \"./FilteredTree.js\";\n\n/**\n * Functionality of Models tree visibility handler that can be overridden.\n * Each callback is provided original implementation and reference to a `HierarchyVisibilityHandler`.\n * @beta\n */\nexport interface ModelsTreeVisibilityHandlerOverrides extends BaseTreeVisibilityHandlerOverrides {\n getSubjectsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { subjectIds: Id64Arg }) => Promise<VisibilityStatus>>;\n getElementGroupingNodeVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { node: GroupingHierarchyNode }) => Promise<VisibilityStatus>>;\n\n changeSubjectsVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<(props: { subjectIds: Id64Arg; on: boolean }) => Promise<void>>;\n changeElementGroupingNodeVisibilityStatus?: HierarchyVisibilityHandlerOverridableMethod<\n (props: { node: GroupingHierarchyNode; on: boolean }) => Promise<void>\n >;\n}\n\n/** @internal */\nexport interface ModelsTreeVisibilityHandlerProps {\n idsCache: ModelsTreeIdsCache;\n viewport: TreeWidgetViewport;\n alwaysAndNeverDrawnElementInfo: AlwaysAndNeverDrawnElementInfo;\n overrideHandler: HierarchyVisibilityOverrideHandler;\n overrides?: ModelsTreeVisibilityHandlerOverrides;\n}\n\n/**\n * Handles visibility status of models tree nodes.\n *\n * It knows how to get and change visibility status of nodes created by hierarchy definition.\n * @internal\n */\nexport class ModelsTreeVisibilityHandler implements Disposable, TreeSpecificVisibilityHandler<ModelsTreeFilterTargets> {\n #visibilityHelper: ModelsTreeVisibilityHelper;\n readonly #props: ModelsTreeVisibilityHandlerProps;\n\n constructor(constructorProps: ModelsTreeVisibilityHandlerProps) {\n this.#props = constructorProps;\n // Remove after https://github.com/iTwin/viewer-components-react/issues/1421.\n // We won't need to create a custom base ids cache.\n const baseIdsCache: BaseIdsCache = {\n getCategories: (props) => this.getCategories(props),\n getElementsCount: (props) => this.getElementsCount(props),\n getModels: (props) => this.getModels(props),\n getSubCategories: (props) => this.getSubCategories(props),\n getSubModels: (props) => this.getSubModels(props),\n hasSubModel: async (props) => this.#props.idsCache.hasSubModel(props),\n getAllCategories: () => this.getAllCategories(),\n };\n this.#visibilityHelper = new ModelsTreeVisibilityHelper({\n viewport: this.#props.viewport,\n idsCache: this.#props.idsCache,\n alwaysAndNeverDrawnElementInfo: this.#props.alwaysAndNeverDrawnElementInfo,\n overrideHandler: this.#props.overrideHandler,\n baseIdsCache,\n overrides: this.#props.overrides,\n });\n }\n\n public [Symbol.dispose]() {\n this.#visibilityHelper[Symbol.dispose]();\n }\n\n public changeFilterTargetsVisibilityStatus(targets: ModelsTreeFilterTargets, on: boolean): Observable<void> {\n return defer(() => {\n const { subjectIds, modelIds, categories, elements } = targets;\n const observables = new Array<Observable<void>>();\n if (subjectIds?.size) {\n observables.push(this.#visibilityHelper.changeSubjectsVisibilityStatus({ subjectIds, on }));\n }\n\n if (modelIds?.size) {\n observables.push(this.#visibilityHelper.changeModelsVisibilityStatus({ modelIds, on }));\n }\n\n if (categories?.length) {\n observables.push(\n from(categories).pipe(\n mergeMap(({ modelId, categoryIds }) =>\n this.#visibilityHelper.changeCategoriesVisibilityStatus({\n categoryIds,\n modelId,\n on,\n }),\n ),\n ),\n );\n }\n\n if (elements?.length) {\n observables.push(\n from(elements).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(({ modelId, elementIds, categoryId }) => this.#visibilityHelper.changeElementsVisibilityStatus({ modelId, categoryId, elementIds, on })),\n ),\n );\n }\n\n return merge(...observables);\n });\n }\n\n public getVisibilityStatus(node: HierarchyNode): Observable<VisibilityStatus> {\n if (HierarchyNode.isClassGroupingNode(node)) {\n const nodeInfo = this.getGroupingNodeInfo(node);\n const result = this.#visibilityHelper.getGroupedElementsVisibilityStatus({\n categoryId: nodeInfo.categoryId,\n modelId: nodeInfo.modelId,\n elementIds: nodeInfo.elementIds,\n });\n return this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: { node },\n nonOverriddenResult: result,\n override: this.#props.overrides?.getElementGroupingNodeVisibilityStatus,\n });\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n // note: subject nodes may be merged to represent multiple subject instances\n return this.#visibilityHelper.getSubjectsVisibilityStatus({ subjectIds: node.key.instanceKeys.map((key) => key.id) });\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.#visibilityHelper.getModelsVisibilityStatus({ modelIds: node.key.instanceKeys.map(({ id }) => id), type: \"GeometricModel3d\" });\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n if (!modelId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.#visibilityHelper.getCategoriesVisibilityStatus({\n categoryIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n type: \"SpatialCategory\",\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n if (!categoryId) {\n return of(createVisibilityStatus(\"disabled\"));\n }\n\n return this.#visibilityHelper.getElementsVisibilityStatus({\n elementIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n categoryId,\n type: \"GeometricElement3d\",\n });\n }\n\n /** Changes visibility of the items represented by the tree node. */\n public changeVisibilityStatus(node: HierarchyNode, on: boolean): Observable<void> {\n const changeObs = defer(() => {\n if (HierarchyNode.isClassGroupingNode(node)) {\n const nodeInfo = this.getGroupingNodeInfo(node);\n const result = this.#visibilityHelper.changeGroupedElementsVisibilityStatus({\n categoryId: nodeInfo.categoryId,\n modelId: nodeInfo.modelId,\n elementIds: nodeInfo.elementIds,\n on,\n });\n return this.#props.overrideHandler.createVisibilityHandlerResult({\n overrideProps: { node, on },\n nonOverriddenResult: result,\n override: this.#props.overrides?.changeElementGroupingNodeVisibilityStatus,\n });\n }\n\n if (!HierarchyNode.isInstancesNode(node)) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isSubjectNode(node)) {\n return this.#visibilityHelper.changeSubjectsVisibilityStatus({\n subjectIds: node.key.instanceKeys.map((key) => key.id),\n on,\n });\n }\n\n if (ModelsTreeNode.isModelNode(node)) {\n return this.#visibilityHelper.changeModelsVisibilityStatus({ modelIds: node.key.instanceKeys.map(({ id }) => id), on });\n }\n\n const modelId = ModelsTreeNode.getModelId(node);\n if (!modelId) {\n return EMPTY;\n }\n\n if (ModelsTreeNode.isCategoryNode(node)) {\n return this.#visibilityHelper.changeCategoriesVisibilityStatus({\n categoryIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n on,\n });\n }\n\n const categoryId = ModelsTreeNode.getCategoryId(node);\n if (!categoryId) {\n return EMPTY;\n }\n\n return this.#visibilityHelper.changeElementsVisibilityStatus({\n elementIds: node.key.instanceKeys.map(({ id }) => id),\n modelId,\n categoryId,\n on,\n });\n });\n\n if (this.#props.viewport.isAlwaysDrawnExclusive) {\n return concat(this.#visibilityHelper.removeAlwaysDrawnExclusive(), changeObs);\n }\n return changeObs;\n }\n\n public getFilterTargetsVisibilityStatus(targets: ModelsTreeFilterTargets): Observable<VisibilityStatus> {\n return defer(() => {\n const { subjectIds, modelIds, categories, elements } = targets;\n const observables = new Array<Observable<VisibilityStatus>>();\n if (subjectIds?.size) {\n observables.push(this.#visibilityHelper.getSubjectsVisibilityStatus({ subjectIds }));\n }\n\n if (modelIds?.size) {\n observables.push(this.#visibilityHelper.getModelsVisibilityStatus({ modelIds, type: \"GeometricModel3d\" }));\n }\n\n if (categories?.length) {\n observables.push(\n from(categories).pipe(\n mergeMap(({ modelId, categoryIds }) =>\n this.#visibilityHelper.getCategoriesVisibilityStatus({\n categoryIds,\n modelId,\n type: \"SpatialCategory\",\n }),\n ),\n ),\n );\n }\n\n if (elements?.length) {\n observables.push(\n from(elements).pipe(\n releaseMainThreadOnItemsCount(50),\n mergeMap(({ modelId, elementIds, categoryId }) =>\n this.#visibilityHelper.getElementsVisibilityStatus({ modelId, categoryId, elementIds, type: \"GeometricElement3d\" }),\n ),\n ),\n );\n }\n\n return merge(...observables);\n }).pipe(mergeVisibilityStatuses);\n }\n\n private getCategories(props: Parameters<BaseIdsCache[\"getCategories\"]>[0]): ReturnType<BaseIdsCache[\"getCategories\"]> {\n return from(Id64.iterable(props.modelIds)).pipe(\n mergeMap((modelId) =>\n from(this.#props.idsCache.getModelCategoryIds(modelId)).pipe(map((categoryIds) => ({ id: modelId, spatialCategories: categoryIds }))),\n ),\n );\n }\n\n private getAllCategories(): ReturnType<BaseIdsCache[\"getAllCategories\"]> {\n return from(this.#props.idsCache.getAllCategories()).pipe(map((categories) => ({ spatialCategories: categories })));\n }\n\n private getElementsCount(props: Parameters<BaseIdsCache[\"getElementsCount\"]>[0]): ReturnType<BaseIdsCache[\"getElementsCount\"]> {\n return from(this.#props.idsCache.getCategoryElementsCount(props.modelId, props.categoryId));\n }\n\n private getModels(props: Parameters<BaseIdsCache[\"getModels\"]>[0]): ReturnType<BaseIdsCache[\"getModels\"]> {\n // Models cache for categories that don't have models still adds them to the final map\n return from(this.#props.idsCache.getCategoriesElementModels(props.categoryIds)).pipe(\n mergeMap((categoryModelsMap) => categoryModelsMap.entries()),\n map(([categoryId, categoryModels]) => ({ id: categoryId, models: categoryModels })),\n );\n }\n\n private getSubCategories(props: Parameters<BaseIdsCache[\"getSubCategories\"]>[0]): ReturnType<BaseIdsCache[\"getSubCategories\"]> {\n return from(Id64.iterable(props.categoryIds)).pipe(map((categoryId) => ({ id: categoryId, subCategories: undefined })));\n }\n\n private getSubModels(props: Parameters<BaseIdsCache[\"getSubModels\"]>[0]): ReturnType<BaseIdsCache[\"getSubModels\"]> {\n if (\"modelIds\" in props) {\n return from(Id64.iterable(props.modelIds)).pipe(\n mergeMap((modelId) => {\n if (props.categoryId) {\n return from(this.#props.idsCache.getCategoriesModeledElements(modelId, props.categoryId)).pipe(map((subModels) => ({ id: modelId, subModels })));\n }\n return from(this.#props.idsCache.getModelCategoryIds(modelId)).pipe(\n mergeMap((categoryIds) => from(this.#props.idsCache.getCategoriesModeledElements(modelId, categoryIds))),\n map((subModels) => ({ id: modelId, subModels })),\n );\n }),\n );\n }\n\n if (props.modelId) {\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n from(this.#props.idsCache.getCategoriesModeledElements(props.modelId!, categoryId)).pipe(map((subModels) => ({ id: categoryId, subModels }))),\n ),\n );\n }\n\n return from(Id64.iterable(props.categoryIds)).pipe(\n mergeMap((categoryId) =>\n from(this.#props.idsCache.getCategoriesElementModels(categoryId)).pipe(\n mergeMap((categoryModelsMap) => {\n const models = categoryModelsMap.get(categoryId);\n if (!models) {\n return of({ id: categoryId, subModels: undefined });\n }\n return from(models).pipe(\n mergeMap((modelId) => from(this.#props.idsCache.getCategoriesModeledElements(modelId, categoryId))),\n map((subModels) => ({ id: categoryId, subModels })),\n );\n }),\n ),\n ),\n );\n }\n\n private getGroupingNodeInfo(node: GroupingHierarchyNode) {\n const modelId = ModelsTreeNode.getModelId(node);\n const categoryId = ModelsTreeNode.getCategoryId(node);\n assert(!!modelId && !!categoryId);\n\n const elementIds = node.groupedInstanceKeys.map((key) => key.id);\n return { modelId, categoryId, elementIds };\n }\n}\n\n/**\n * Creates models tree visibility handler. Is used by integration and performance tests.\n * @internal\n */\nexport function createModelsTreeVisibilityHandler(props: {\n viewport: TreeWidgetViewport;\n idsCache: ModelsTreeIdsCache;\n imodelAccess: ECClassHierarchyInspector;\n overrides?: ModelsTreeVisibilityHandlerOverrides;\n filteredPaths?: HierarchyFilteringPath[];\n}) {\n return new HierarchyVisibilityHandlerImpl<ModelsTreeFilterTargets>({\n getFilteredTree: (): undefined | Promise<FilteredTree<ModelsTreeFilterTargets>> => {\n if (!props.filteredPaths) {\n return undefined;\n }\n return createFilteredModelsTree({\n filteringPaths: props.filteredPaths,\n imodelAccess: props.imodelAccess,\n });\n },\n getTreeSpecificVisibilityHandler: (info, overrideHandler) => {\n return new ModelsTreeVisibilityHandler({\n alwaysAndNeverDrawnElementInfo: info,\n idsCache: props.idsCache,\n viewport: props.viewport,\n overrideHandler,\n overrides: props.overrides,\n });\n },\n viewport: props.viewport,\n });\n}\n"]}
|