bruce-cesium 0.3.0 → 0.3.3

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.
Files changed (78) hide show
  1. package/README.md +0 -0
  2. package/dist/bruce-cesium.es5.js +294 -10
  3. package/dist/bruce-cesium.es5.js.map +1 -1
  4. package/dist/bruce-cesium.umd.js +292 -8
  5. package/dist/bruce-cesium.umd.js.map +1 -1
  6. package/dist/lib/bruce-cesium.js +30 -30
  7. package/dist/lib/bruce-cesium.js.map +0 -0
  8. package/dist/lib/rendering/entity-render-engine.js +848 -848
  9. package/dist/lib/rendering/entity-render-engine.js.map +0 -0
  10. package/dist/lib/rendering/menu-item-manager.js +252 -247
  11. package/dist/lib/rendering/menu-item-manager.js.map +1 -1
  12. package/dist/lib/rendering/render-addons/measure-addon.js +186 -186
  13. package/dist/lib/rendering/render-addons/measure-addon.js.map +0 -0
  14. package/dist/lib/rendering/render-addons/render-addon.js +2 -2
  15. package/dist/lib/rendering/render-addons/render-addon.js.map +0 -0
  16. package/dist/lib/rendering/render-helper.js +279 -279
  17. package/dist/lib/rendering/render-helper.js.map +0 -0
  18. package/dist/lib/rendering/render-managers/common/shared-getters.js +31 -31
  19. package/dist/lib/rendering/render-managers/common/shared-getters.js.map +0 -0
  20. package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js +144 -144
  21. package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js.map +0 -0
  22. package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js +141 -141
  23. package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js.map +0 -0
  24. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js +232 -232
  25. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js.map +0 -0
  26. package/dist/lib/rendering/render-managers/entities/entity-render-manager.js +138 -138
  27. package/dist/lib/rendering/render-managers/entities/entity-render-manager.js.map +0 -0
  28. package/dist/lib/rendering/render-managers/render-manager.js +50 -50
  29. package/dist/lib/rendering/render-managers/render-manager.js.map +1 -1
  30. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js +230 -230
  31. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js.map +0 -0
  32. package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js +321 -0
  33. package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js.map +1 -0
  34. package/dist/lib/rendering/tile-render-engine.js +542 -542
  35. package/dist/lib/rendering/tile-render-engine.js.map +0 -0
  36. package/dist/lib/rendering/tileset-render-engine.js +472 -472
  37. package/dist/lib/rendering/tileset-render-engine.js.map +0 -0
  38. package/dist/lib/rendering/view-render-engine.js +138 -138
  39. package/dist/lib/rendering/view-render-engine.js.map +0 -0
  40. package/dist/lib/rendering/visuals-register.js +394 -394
  41. package/dist/lib/rendering/visuals-register.js.map +1 -1
  42. package/dist/lib/utils/drawing-utils.js +42 -42
  43. package/dist/lib/utils/drawing-utils.js.map +0 -0
  44. package/dist/lib/utils/entity-utils.js +99 -99
  45. package/dist/lib/utils/entity-utils.js.map +0 -0
  46. package/dist/lib/utils/measure-utils.js +34 -34
  47. package/dist/lib/utils/measure-utils.js.map +0 -0
  48. package/dist/lib/utils/view-utils.js +34 -34
  49. package/dist/lib/utils/view-utils.js.map +0 -0
  50. package/dist/lib/viewer/cesium-view-monitor.js +227 -227
  51. package/dist/lib/viewer/cesium-view-monitor.js.map +0 -0
  52. package/dist/lib/viewer/viewer-utils.js +85 -85
  53. package/dist/lib/viewer/viewer-utils.js.map +0 -0
  54. package/dist/types/bruce-cesium.d.ts +0 -0
  55. package/dist/types/rendering/entity-render-engine.d.ts +0 -0
  56. package/dist/types/rendering/menu-item-manager.d.ts +4 -2
  57. package/dist/types/rendering/render-addons/measure-addon.d.ts +0 -0
  58. package/dist/types/rendering/render-addons/render-addon.d.ts +0 -0
  59. package/dist/types/rendering/render-helper.d.ts +0 -0
  60. package/dist/types/rendering/render-managers/common/shared-getters.d.ts +0 -0
  61. package/dist/types/rendering/render-managers/entities/entities-ids-render-manager.d.ts +0 -0
  62. package/dist/types/rendering/render-managers/entities/entities-loaded-render-manager.d.ts +0 -0
  63. package/dist/types/rendering/render-managers/entities/entities-render-manager.d.ts +0 -0
  64. package/dist/types/rendering/render-managers/entities/entity-render-manager.d.ts +0 -0
  65. package/dist/types/rendering/render-managers/render-manager.d.ts +2 -1
  66. package/dist/types/rendering/render-managers/tilesets/tileset-cad-render-manager.d.ts +0 -0
  67. package/dist/types/rendering/render-managers/tilesets/tileset-osm-render-manager.d.ts +35 -0
  68. package/dist/types/rendering/tile-render-engine.d.ts +0 -0
  69. package/dist/types/rendering/tileset-render-engine.d.ts +0 -0
  70. package/dist/types/rendering/view-render-engine.d.ts +0 -0
  71. package/dist/types/rendering/visuals-register.d.ts +1 -0
  72. package/dist/types/utils/drawing-utils.d.ts +0 -0
  73. package/dist/types/utils/entity-utils.d.ts +0 -0
  74. package/dist/types/utils/measure-utils.d.ts +0 -0
  75. package/dist/types/utils/view-utils.d.ts +0 -0
  76. package/dist/types/viewer/cesium-view-monitor.d.ts +0 -0
  77. package/dist/types/viewer/viewer-utils.d.ts +0 -0
  78. package/package.json +73 -73
package/README.md CHANGED
File without changes
@@ -1,5 +1,5 @@
1
- import { BruceEvent, Cartes, Carto, Geometry, ZoomControl, Style, EntityTag, Calculator, EntityLod, EntityType, ClientFile, DelayQueue, Entity as Entity$1, BatchedDataGetter, ObjectUtils, Tileset, EntityFilterGetter, MenuItem, ProjectView, ProjectViewBookmark, ProjectViewTileSource, Camera, MathUtils } from 'bruce-models';
2
- import { Cartesian2, Cartographic, Math as Math$1, Viewer, ArcGisMapServerImageryProvider, ScreenSpaceEventType, Color, HeightReference, Cartesian3, Entity, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, PolygonHierarchy, ShadowMode, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, Primitive, Cesium3DTileFeature, OrthographicFrustum, HeadingPitchRange, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, createWorldTerrain, CesiumTerrainProvider, EllipsoidTerrainProvider, Matrix4, Cesium3DTileset, EllipsoidGeodesic } from 'cesium';
1
+ import { BruceEvent, Cartes, Carto, Geometry, ZoomControl, Style, EntityTag, Calculator, EntityLod, EntityType, ClientFile, DelayQueue, Entity as Entity$1, BatchedDataGetter, ObjectUtils, Tileset, EntityFilterGetter, EntitySource, MenuItem, ProjectView, ProjectViewBookmark, ProjectViewTileSource, Camera, MathUtils } from 'bruce-models';
2
+ import { Cartesian2, Cartographic, Math as Math$1, Viewer, ArcGisMapServerImageryProvider, ScreenSpaceEventType, Entity, Primitive, Cesium3DTileFeature, Color, Cartesian3, HeadingPitchRange, OrthographicFrustum, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, createWorldTerrain, CesiumTerrainProvider, EllipsoidTerrainProvider, HeightReference, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, PolygonHierarchy, ShadowMode, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, Matrix4, Cesium3DTileset, EllipsoidGeodesic, createOsmBuildings, Cesium3DTileStyle, Rectangle } from 'cesium';
3
3
 
4
4
  var TIME_LAG = 300;
5
5
  var POSITION_CHECK_TIMER = 950;
@@ -2897,6 +2897,286 @@ var SharedGetters;
2897
2897
  SharedGetters.Cache = Cache;
2898
2898
  })(SharedGetters || (SharedGetters = {}));
2899
2899
 
2900
+ var MAX_BATCHES = 2;
2901
+ var BATCH_SIZE = 30;
2902
+ var BATCH_DELAY = 200;
2903
+ var MAX_RANGE = 3000;
2904
+ var TilesetOsmRenderManager;
2905
+ (function (TilesetOsmRenderManager) {
2906
+ var Manager = /** @class */ (function () {
2907
+ function Manager(viewer, visualsManager, apiGetter, monitor, item) {
2908
+ this.disposed = false;
2909
+ this.cTileset = null;
2910
+ this.counter = 0;
2911
+ this._loadedCesiumEntities = {};
2912
+ this.totalLoaded = 0;
2913
+ this.featureQueue = [];
2914
+ this.sourceId = null;
2915
+ this.entityTypeId = null;
2916
+ this.queueCheckInterval = null;
2917
+ this.processingQueue = 0;
2918
+ this.viewer = viewer;
2919
+ this.apiGetter = apiGetter;
2920
+ this.item = item;
2921
+ this.visualsManager = visualsManager;
2922
+ this.monitor = monitor;
2923
+ }
2924
+ Object.defineProperty(Manager.prototype, "Disposed", {
2925
+ get: function () {
2926
+ return this.disposed;
2927
+ },
2928
+ enumerable: false,
2929
+ configurable: true
2930
+ });
2931
+ Object.defineProperty(Manager.prototype, "count", {
2932
+ get: function () {
2933
+ return ++this.counter;
2934
+ },
2935
+ enumerable: false,
2936
+ configurable: true
2937
+ });
2938
+ Manager.prototype.Dispose = function () {
2939
+ if (this.disposed) {
2940
+ return;
2941
+ }
2942
+ clearInterval(this.queueCheckInterval);
2943
+ if (this.cTileset) {
2944
+ this.cTileset.show = false;
2945
+ }
2946
+ this.visualsManager.RemoveByMenuItemId(this.item.id);
2947
+ this.featureQueue = [];
2948
+ };
2949
+ Manager.prototype.Init = function () {
2950
+ var _a, _b;
2951
+ return __awaiter(this, void 0, void 0, function () {
2952
+ var menuItem;
2953
+ var _this = this;
2954
+ return __generator(this, function (_c) {
2955
+ menuItem = this.item;
2956
+ this.sourceId = (_a = menuItem.BruceEntity) === null || _a === void 0 ? void 0 : _a.SourceId;
2957
+ this.entityTypeId = (_b = menuItem.BruceEntity) === null || _b === void 0 ? void 0 : _b["EntityType.ID"];
2958
+ this.cTileset = createOsmBuildings();
2959
+ this.cTileset.show = true;
2960
+ if (this.sourceId) {
2961
+ if (menuItem.ghostLoading == true) {
2962
+ this.cTileset.style = new Cesium3DTileStyle({
2963
+ color: "rgba(255, 255, 250, 0.98)"
2964
+ });
2965
+ }
2966
+ this.viewer.scene.primitives.add(this.cTileset);
2967
+ this.cTileset.tileLoad.addEventListener(function (tile) {
2968
+ _this.mapCTile(tile);
2969
+ });
2970
+ this.queueCheckInterval = setInterval(function () {
2971
+ if (_this.featureQueue.length > 0) {
2972
+ _this.processQueue();
2973
+ }
2974
+ }, 5000);
2975
+ }
2976
+ else {
2977
+ this.viewer.scene.primitives.add(this.cTileset);
2978
+ }
2979
+ return [2 /*return*/];
2980
+ });
2981
+ });
2982
+ };
2983
+ Manager.prototype.mapCTile = function (tile) {
2984
+ return __awaiter(this, void 0, void 0, function () {
2985
+ var content, i, feature;
2986
+ return __generator(this, function (_a) {
2987
+ if (this.sourceId) {
2988
+ content = tile.content;
2989
+ for (i = 0; i < content.featuresLength; i++) {
2990
+ feature = content.getFeature(i);
2991
+ if (feature._counter == null) {
2992
+ feature._counter = this.count;
2993
+ }
2994
+ if (feature._orgColor == null) {
2995
+ feature._orgColor = feature.color;
2996
+ }
2997
+ this.featureQueue.push(feature);
2998
+ }
2999
+ this.processQueue();
3000
+ }
3001
+ return [2 /*return*/];
3002
+ });
3003
+ });
3004
+ };
3005
+ Manager.prototype.processQueue = function () {
3006
+ return __awaiter(this, void 0, void 0, function () {
3007
+ var batch, rerun, e_1;
3008
+ var _this = this;
3009
+ return __generator(this, function (_a) {
3010
+ switch (_a.label) {
3011
+ case 0:
3012
+ if (this.processingQueue >= MAX_BATCHES) {
3013
+ return [2 /*return*/];
3014
+ }
3015
+ else if (this.Disposed) {
3016
+ return [2 /*return*/];
3017
+ }
3018
+ this.processingQueue += 1;
3019
+ batch = [];
3020
+ rerun = false;
3021
+ _a.label = 1;
3022
+ case 1:
3023
+ _a.trys.push([1, 4, 5, 6]);
3024
+ batch = this.getVisualsForBatch();
3025
+ if (!(batch.length > 0)) return [3 /*break*/, 3];
3026
+ return [4 /*yield*/, this.mapTileBatch(batch)];
3027
+ case 2:
3028
+ _a.sent();
3029
+ _a.label = 3;
3030
+ case 3:
3031
+ if (this.totalLoaded > 8000) {
3032
+ rerun = this.removeFarAwayBatch();
3033
+ }
3034
+ else {
3035
+ rerun = this.featureQueue.length > 0 && batch.length > 0;
3036
+ }
3037
+ return [3 /*break*/, 6];
3038
+ case 4:
3039
+ e_1 = _a.sent();
3040
+ console.error(e_1);
3041
+ return [3 /*break*/, 6];
3042
+ case 5:
3043
+ setTimeout(function () {
3044
+ _this.processingQueue -= 1;
3045
+ if (rerun) {
3046
+ _this.processQueue();
3047
+ }
3048
+ }, BATCH_DELAY);
3049
+ return [7 /*endfinally*/];
3050
+ case 6: return [2 /*return*/];
3051
+ }
3052
+ });
3053
+ });
3054
+ };
3055
+ Manager.prototype.getVisualsForBatch = function () {
3056
+ var batch = [];
3057
+ var features = this.featureQueue;
3058
+ var bounds = this.monitor.GetBounds();
3059
+ var rect = (bounds === null || bounds === void 0 ? void 0 : bounds.east) ? new Rectangle(Math$1.toRadians(bounds.west), Math$1.toRadians(bounds.south), Math$1.toRadians(bounds.east), Math$1.toRadians(bounds.north)) : null;
3060
+ if (rect) {
3061
+ for (var i = 0; i < features.length; i++) {
3062
+ var feature = features[i];
3063
+ if (feature) {
3064
+ var featureLon = feature.getProperty("cesium#longitude");
3065
+ var featureLat = feature.getProperty("cesium#latitude");
3066
+ if (featureLon && featureLat) {
3067
+ var carto = Cartographic.fromDegrees(featureLon, featureLat, 0);
3068
+ var isIn = Rectangle.contains(rect, carto);
3069
+ if (isIn) {
3070
+ var isClose = this.getIsVisualWithinRange(feature, MAX_RANGE);
3071
+ if (isClose) {
3072
+ batch.push(feature);
3073
+ if (batch.length >= BATCH_SIZE) {
3074
+ return batch;
3075
+ }
3076
+ }
3077
+ }
3078
+ }
3079
+ }
3080
+ }
3081
+ }
3082
+ return batch;
3083
+ };
3084
+ Manager.prototype.getIsVisualWithinRange = function (visual, range) {
3085
+ var featureLon = visual.getProperty("cesium#longitude");
3086
+ var featureLat = visual.getProperty("cesium#latitude");
3087
+ if (featureLon && featureLat) {
3088
+ var pos = Cartesian3.fromDegrees(featureLon, featureLat, 0);
3089
+ var camPoint = this.monitor.GetTarget();
3090
+ var camPos = (camPoint === null || camPoint === void 0 ? void 0 : camPoint.latitude) ? Cartesian3.fromDegrees(camPoint.longitude, camPoint.latitude, camPoint.altitude) : null;
3091
+ if (camPos && Cartes.ValidateCartes3(camPos) && Cartes.ValidateCartes3(pos)) {
3092
+ var distance = Cartesian3.distance(pos, camPos);
3093
+ if (distance != null && distance <= range) {
3094
+ return true;
3095
+ }
3096
+ }
3097
+ }
3098
+ return false;
3099
+ };
3100
+ Manager.prototype.mapTileBatch = function (features) {
3101
+ return __awaiter(this, void 0, void 0, function () {
3102
+ var featureIds, featureMap, _loop_1, this_1, i, api, bIds, i, id, bId, feature, rego;
3103
+ return __generator(this, function (_a) {
3104
+ switch (_a.label) {
3105
+ case 0:
3106
+ featureIds = [];
3107
+ featureMap = [];
3108
+ _loop_1 = function (i) {
3109
+ var feature = features[i];
3110
+ var featureId = feature.getProperty("elementId");
3111
+ if (featureId) {
3112
+ featureMap.push(feature);
3113
+ featureIds.push(featureId + "");
3114
+ }
3115
+ var index = this_1.featureQueue.findIndex(function (x) { return x._counter == feature._counter; });
3116
+ if (index > -1) {
3117
+ this_1.featureQueue.splice(index, 1);
3118
+ }
3119
+ };
3120
+ this_1 = this;
3121
+ for (i = 0; i < features.length; i++) {
3122
+ _loop_1(i);
3123
+ }
3124
+ api = this.apiGetter.getApi(this.apiGetter.accountId, this.apiGetter.env);
3125
+ return [4 /*yield*/, EntitySource.GetEntityIdsBySourceKeys(api, this.sourceId, featureIds)];
3126
+ case 1:
3127
+ bIds = _a.sent();
3128
+ for (i = 0; i < featureIds.length; i++) {
3129
+ id = featureIds[i];
3130
+ bId = bIds[id];
3131
+ if (!bId) {
3132
+ bId = ObjectUtils.UId();
3133
+ }
3134
+ feature = featureMap[i];
3135
+ if (this.item.ghostLoading == true) {
3136
+ feature.color = feature._orgColor;
3137
+ }
3138
+ rego = {
3139
+ entityId: bId,
3140
+ menuItemId: this.item.id,
3141
+ priority: 0,
3142
+ visual: feature,
3143
+ entityTypeId: this.entityTypeId,
3144
+ sourceId: this.sourceId
3145
+ };
3146
+ this.visualsManager.Add(rego);
3147
+ this._loadedCesiumEntities[bId] = rego;
3148
+ }
3149
+ return [2 /*return*/];
3150
+ }
3151
+ });
3152
+ });
3153
+ };
3154
+ Manager.prototype.removeFarAwayBatch = function () {
3155
+ var removed = 0;
3156
+ var keys = Object.keys(this._loadedCesiumEntities);
3157
+ for (var i = 0; i < keys.length; i++) {
3158
+ var key = keys[i];
3159
+ var rego = this._loadedCesiumEntities[key];
3160
+ if (rego) {
3161
+ if (!this.getIsVisualWithinRange(rego.visual, MAX_RANGE)) {
3162
+ this.visualsManager.Remove(rego.entityId, this.item.id);
3163
+ this._loadedCesiumEntities[key] = null;
3164
+ delete this._loadedCesiumEntities[key];
3165
+ this.totalLoaded -= 1;
3166
+ removed += 1;
3167
+ if (removed >= BATCH_SIZE) {
3168
+ return true;
3169
+ }
3170
+ }
3171
+ }
3172
+ }
3173
+ return removed > 0;
3174
+ };
3175
+ return Manager;
3176
+ }());
3177
+ TilesetOsmRenderManager.Manager = Manager;
3178
+ })(TilesetOsmRenderManager || (TilesetOsmRenderManager = {}));
3179
+
2900
3180
  /**
2901
3181
  * Utility to keep track of enabled menu items within a Cesium viewer.
2902
3182
  */
@@ -2942,18 +3222,19 @@ var MenuItemManager;
2942
3222
  * Renders a given menu item and all ids children.
2943
3223
  * Will return the enabled item id.
2944
3224
  * @param params
3225
+ * @param recursive
2945
3226
  * @returns
2946
3227
  */
2947
- Manager.prototype.RenderItem = function (params) {
3228
+ Manager.prototype.RenderItem = function (params, recursive) {
2948
3229
  var _a, _b;
3230
+ if (recursive === void 0) { recursive = true; }
2949
3231
  return __awaiter(this, void 0, void 0, function () {
2950
3232
  var rItem, i, childId;
2951
3233
  return __generator(this, function (_c) {
2952
3234
  switch (_c.label) {
2953
3235
  case 0:
2954
- if (this.items.find(function (x) { return x.id == params.item.id; })) {
2955
- return [2 /*return*/, params.item.id];
2956
- }
3236
+ rItem = this.items.find(function (x) { return x.id == params.item.id; });
3237
+ if (!!rItem) return [3 /*break*/, 2];
2957
3238
  rItem = {
2958
3239
  id: (_a = params.item.id) !== null && _a !== void 0 ? _a : ObjectUtils.UId(),
2959
3240
  childIds: [],
@@ -2961,6 +3242,7 @@ var MenuItemManager;
2961
3242
  renderManager: null,
2962
3243
  type: params.item.Type
2963
3244
  };
3245
+ this.items.push(rItem);
2964
3246
  switch (params.item.Type) {
2965
3247
  case MenuItem.EType.Entities:
2966
3248
  rItem.renderManager = new EntitiesRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, this.sharedMonitor, params.item, this.sharedGetters);
@@ -2978,7 +3260,7 @@ var MenuItemManager;
2978
3260
  rItem.renderManager = new TilesetCadRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, params.item);
2979
3261
  break;
2980
3262
  case MenuItem.EType.Osm:
2981
- // TODO;
3263
+ rItem.renderManager = new TilesetOsmRenderManager.Manager(this.viewer, this.visualsRegister, params.apiGetter, this.sharedMonitor, params.item);
2982
3264
  break;
2983
3265
  case MenuItem.EType.PointCloud:
2984
3266
  // TODO;
@@ -3001,8 +3283,7 @@ var MenuItemManager;
3001
3283
  _c.sent();
3002
3284
  _c.label = 2;
3003
3285
  case 2:
3004
- this.items.push(rItem);
3005
- if (!params.item.Children) return [3 /*break*/, 6];
3286
+ if (!(params.item.Children && recursive)) return [3 /*break*/, 6];
3006
3287
  i = 0;
3007
3288
  _c.label = 3;
3008
3289
  case 3:
@@ -3026,9 +3307,11 @@ var MenuItemManager;
3026
3307
  * Disables a menu item by ids id.
3027
3308
  * This will disable all children as well.
3028
3309
  * @param id
3310
+ * @param recursive
3029
3311
  */
3030
- Manager.prototype.RemoveItemById = function (id) {
3312
+ Manager.prototype.RemoveItemById = function (id, recursive) {
3031
3313
  var _a, _b;
3314
+ if (recursive === void 0) { recursive = true; }
3032
3315
  return __awaiter(this, void 0, void 0, function () {
3033
3316
  var item, _loop_1, this_1, i;
3034
3317
  return __generator(this, function (_c) {
@@ -3036,6 +3319,7 @@ var MenuItemManager;
3036
3319
  case 0:
3037
3320
  item = this.items.find(function (x) { return x.id === id; });
3038
3321
  if (!item) return [3 /*break*/, 5];
3322
+ if (!recursive) return [3 /*break*/, 4];
3039
3323
  _loop_1 = function (i) {
3040
3324
  var child;
3041
3325
  return __generator(this, function (_a) {