@esri/solutions-components 0.10.7 → 0.10.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. package/dist/cjs/basemap-gallery_7.cjs.entry.js +24 -8
  2. package/dist/cjs/buffer-tools_3.cjs.entry.js +1 -1
  3. package/dist/cjs/calcite-combobox_3.cjs.entry.js +354 -967
  4. package/dist/cjs/calcite-graph_2.cjs.entry.js +1082 -0
  5. package/dist/cjs/calcite-shell-panel_14.cjs.entry.js +6 -6
  6. package/dist/cjs/calcite-tree_3.cjs.entry.js +1 -1
  7. package/dist/cjs/card-manager_3.cjs.entry.js +246 -18
  8. package/dist/cjs/crowdsource-manager.cjs.entry.js +169 -49
  9. package/dist/cjs/loader.cjs.js +1 -1
  10. package/dist/cjs/map-select-tools_3.cjs.entry.js +3 -3
  11. package/dist/cjs/pci-calculator.cjs.entry.js +1 -1
  12. package/dist/cjs/public-notification.cjs.entry.js +1 -1
  13. package/dist/cjs/refine-results-flow-item.cjs.entry.js +1 -1
  14. package/dist/cjs/share-item.cjs.entry.js +1 -1
  15. package/dist/cjs/solution-configuration.cjs.entry.js +3 -3
  16. package/dist/cjs/solution-contents_3.cjs.entry.js +3 -3
  17. package/dist/cjs/solutions-components.cjs.js +1 -1
  18. package/dist/cjs/spatial-ref.cjs.entry.js +1 -1
  19. package/dist/collection/assets/t9n/crowdsource-manager/resources.json +5 -1
  20. package/dist/collection/assets/t9n/crowdsource-manager/resources_en.json +5 -1
  21. package/dist/collection/assets/t9n/layer-table/resources.json +1 -0
  22. package/dist/collection/assets/t9n/layer-table/resources_en.json +1 -0
  23. package/dist/collection/assets/t9n/map-card/resources.json +6 -1
  24. package/dist/collection/assets/t9n/map-card/resources_en.json +6 -1
  25. package/dist/collection/components/card-manager/card-manager.js +34 -8
  26. package/dist/collection/components/crowdsource-manager/crowdsource-manager.js +173 -65
  27. package/dist/collection/components/layer-table/layer-table.js +175 -8
  28. package/dist/collection/components/map-card/map-card.css +4 -0
  29. package/dist/collection/components/map-card/map-card.js +368 -3
  30. package/dist/collection/components/map-draw-tools/map-draw-tools.js +1 -1
  31. package/dist/collection/components/map-fullscreen/map-fullscreen.js +1 -1
  32. package/dist/collection/components/map-layer-picker/map-layer-picker.js +9 -3
  33. package/dist/collection/components/map-legend/map-legend.js +1 -1
  34. package/dist/collection/components/map-picker/map-picker.css +8 -0
  35. package/dist/collection/components/map-picker/map-picker.js +74 -3
  36. package/dist/collection/components/map-search/map-search.js +1 -1
  37. package/dist/collection/components/map-select-tools/map-select-tools.js +1 -1
  38. package/dist/collection/components/map-tools/map-tools.js +1 -1
  39. package/dist/collection/components/pci-calculator/pci-calculator.js +1 -1
  40. package/dist/collection/components/pdf-download/pdf-download.js +1 -1
  41. package/dist/collection/components/public-notification/public-notification.js +1 -1
  42. package/dist/collection/components/refine-results-flow-item/refine-results-flow-item.js +1 -1
  43. package/dist/collection/components/refine-selection/refine-selection.js +1 -1
  44. package/dist/collection/components/share-item/share-item.js +1 -1
  45. package/dist/collection/components/solution-configuration/solution-configuration.js +3 -3
  46. package/dist/collection/components/solution-contents/solution-contents.js +1 -1
  47. package/dist/collection/components/solution-item/solution-item.js +1 -1
  48. package/dist/collection/components/solution-item-details/solution-item-details.js +1 -1
  49. package/dist/collection/components/solution-item-icon/solution-item-icon.js +1 -1
  50. package/dist/collection/components/solution-item-sharing/solution-item-sharing.js +1 -1
  51. package/dist/collection/components/solution-organization-variables/solution-organization-variables.js +1 -1
  52. package/dist/collection/components/solution-resource-item/solution-resource-item.js +1 -1
  53. package/dist/collection/components/solution-spatial-ref/solution-spatial-ref.js +1 -1
  54. package/dist/collection/components/solution-template-data/solution-template-data.js +1 -1
  55. package/dist/collection/components/solution-variables/solution-variables.js +1 -1
  56. package/dist/collection/components/spatial-ref/spatial-ref.js +1 -1
  57. package/dist/collection/demos/crowdsource-manager.html +1 -0
  58. package/dist/components/card-manager2.js +20 -8
  59. package/dist/components/crowdsource-manager.js +172 -53
  60. package/dist/components/layer-table2.js +72 -10
  61. package/dist/components/map-card2.js +288 -47
  62. package/dist/components/map-draw-tools2.js +1 -1
  63. package/dist/components/map-fullscreen2.js +1 -1
  64. package/dist/components/map-layer-picker2.js +9 -3
  65. package/dist/components/map-legend2.js +1 -1
  66. package/dist/components/map-picker2.js +24 -5
  67. package/dist/components/map-search2.js +1 -1
  68. package/dist/components/map-select-tools2.js +1 -1
  69. package/dist/components/map-tools2.js +1 -1
  70. package/dist/components/pci-calculator.js +1 -1
  71. package/dist/components/pdf-download2.js +1 -1
  72. package/dist/components/public-notification.js +1 -1
  73. package/dist/components/refine-results-flow-item.js +1 -1
  74. package/dist/components/refine-selection2.js +1 -1
  75. package/dist/components/share-item.js +1 -1
  76. package/dist/components/solution-configuration.js +3 -3
  77. package/dist/components/solution-contents2.js +1 -1
  78. package/dist/components/solution-item-details2.js +1 -1
  79. package/dist/components/solution-item-icon2.js +1 -1
  80. package/dist/components/solution-item-sharing2.js +1 -1
  81. package/dist/components/solution-item2.js +1 -1
  82. package/dist/components/solution-organization-variables2.js +1 -1
  83. package/dist/components/solution-resource-item2.js +1 -1
  84. package/dist/components/solution-spatial-ref2.js +1 -1
  85. package/dist/components/solution-template-data2.js +1 -1
  86. package/dist/components/solution-variables2.js +1 -1
  87. package/dist/components/spatial-ref.js +1 -1
  88. package/dist/esm/basemap-gallery_7.entry.js +24 -8
  89. package/dist/esm/buffer-tools_3.entry.js +1 -1
  90. package/dist/esm/calcite-combobox_3.entry.js +369 -982
  91. package/dist/esm/calcite-graph_2.entry.js +1077 -0
  92. package/dist/esm/calcite-shell-panel_14.entry.js +6 -6
  93. package/dist/esm/calcite-tree_3.entry.js +1 -1
  94. package/dist/esm/card-manager_3.entry.js +248 -20
  95. package/dist/esm/crowdsource-manager.entry.js +170 -50
  96. package/dist/esm/loader.js +1 -1
  97. package/dist/esm/map-select-tools_3.entry.js +3 -3
  98. package/dist/esm/pci-calculator.entry.js +1 -1
  99. package/dist/esm/public-notification.entry.js +1 -1
  100. package/dist/esm/refine-results-flow-item.entry.js +1 -1
  101. package/dist/esm/share-item.entry.js +1 -1
  102. package/dist/esm/solution-configuration.entry.js +3 -3
  103. package/dist/esm/solution-contents_3.entry.js +3 -3
  104. package/dist/esm/solutions-components.js +1 -1
  105. package/dist/esm/spatial-ref.entry.js +1 -1
  106. package/dist/solutions-components/assets/t9n/crowdsource-manager/resources.json +5 -1
  107. package/dist/solutions-components/assets/t9n/crowdsource-manager/resources_en.json +5 -1
  108. package/dist/solutions-components/assets/t9n/layer-table/resources.json +1 -0
  109. package/dist/solutions-components/assets/t9n/layer-table/resources_en.json +1 -0
  110. package/dist/solutions-components/assets/t9n/map-card/resources.json +6 -1
  111. package/dist/solutions-components/assets/t9n/map-card/resources_en.json +6 -1
  112. package/dist/solutions-components/demos/crowdsource-manager.html +1 -0
  113. package/dist/solutions-components/p-0abc1354.entry.js +6 -0
  114. package/dist/solutions-components/p-0f7b5d36.entry.js +6 -0
  115. package/dist/solutions-components/{p-a9818be2.entry.js → p-20c465e9.entry.js} +1 -1
  116. package/dist/solutions-components/{p-db18bce8.entry.js → p-36b50b5b.entry.js} +1 -1
  117. package/dist/solutions-components/{p-85512ae3.entry.js → p-445213cf.entry.js} +1 -1
  118. package/dist/solutions-components/{p-d49f895d.entry.js → p-4a5f0a97.entry.js} +1 -1
  119. package/dist/solutions-components/{p-002c97df.entry.js → p-5d201016.entry.js} +1 -1
  120. package/dist/solutions-components/{p-b7cec3bd.entry.js → p-618bafec.entry.js} +1 -1
  121. package/dist/solutions-components/p-6a66d5a9.entry.js +6 -0
  122. package/dist/solutions-components/p-71a2d5b8.entry.js +6 -0
  123. package/dist/solutions-components/p-7a64b026.entry.js +17 -0
  124. package/dist/solutions-components/p-85c25564.entry.js +6 -0
  125. package/dist/solutions-components/{p-235bf02e.entry.js → p-913413c3.entry.js} +1 -1
  126. package/dist/solutions-components/p-9af1cb14.entry.js +6 -0
  127. package/dist/solutions-components/{p-49aa2929.entry.js → p-bebd4646.entry.js} +1 -1
  128. package/dist/solutions-components/p-ce454f5a.entry.js +11 -0
  129. package/dist/solutions-components/solutions-components.esm.js +1 -1
  130. package/dist/types/components/card-manager/card-manager.d.ts +11 -0
  131. package/dist/types/components/crowdsource-manager/crowdsource-manager.d.ts +86 -20
  132. package/dist/types/components/layer-table/layer-table.d.ts +30 -0
  133. package/dist/types/components/map-card/map-card.d.ts +124 -0
  134. package/dist/types/components/map-layer-picker/map-layer-picker.d.ts +4 -0
  135. package/dist/types/components/map-picker/map-picker.d.ts +12 -0
  136. package/dist/types/components.d.ts +130 -0
  137. package/dist/types/preact.d.ts +4 -2
  138. package/package.json +1 -1
  139. package/dist/cjs/calcite-dropdown-group_2.cjs.entry.js +0 -453
  140. package/dist/esm/calcite-dropdown-group_2.entry.js +0 -448
  141. package/dist/solutions-components/p-129fd80e.entry.js +0 -6
  142. package/dist/solutions-components/p-3b426576.entry.js +0 -6
  143. package/dist/solutions-components/p-72b217f2.entry.js +0 -6
  144. package/dist/solutions-components/p-8b999a2b.entry.js +0 -6
  145. package/dist/solutions-components/p-973ff7b2.entry.js +0 -23
  146. package/dist/solutions-components/p-a001f9c9.entry.js +0 -6
  147. package/dist/solutions-components/p-c683b3fe.entry.js +0 -6
  148. package/dist/solutions-components/p-e9d049bd.entry.js +0 -6
@@ -3,7 +3,7 @@
3
3
  * Licensed under the Apache License, Version 2.0
4
4
  * http://www.apache.org/licenses/LICENSE-2.0
5
5
  */
6
- import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
6
+ import { proxyCustomElement, HTMLElement, createEvent, h, Host, Fragment } from '@stencil/core/internal/client';
7
7
  import { g as getLocaleComponentStrings } from './locale.js';
8
8
  import { a as ELayoutMode } from './interfaces.js';
9
9
  import { g as getLayerOrTable } from './mapViewUtils.js';
@@ -74,7 +74,7 @@ const CrowdsourceManager$1 = /*@__PURE__*/ proxyCustomElement(class CrowdsourceM
74
74
  this.__registerHost();
75
75
  this.showIntroductionWindow = createEvent(this, "showIntroductionWindow", 7);
76
76
  this.showCoverPage = createEvent(this, "showCoverPage", 7);
77
- this.appLayout = undefined;
77
+ this.appLayout = 'splitView';
78
78
  this.appProxies = undefined;
79
79
  this.basemapConfig = undefined;
80
80
  this.coverPageEnabled = undefined;
@@ -111,7 +111,6 @@ const CrowdsourceManager$1 = /*@__PURE__*/ proxyCustomElement(class CrowdsourceM
111
111
  this.theme = "light";
112
112
  this.zoomAndScrollToSelected = false;
113
113
  this.zoomToScale = undefined;
114
- this._expandPopup = false;
115
114
  this._hideFooter = false;
116
115
  this._hideTable = false;
117
116
  this._isMobile = false;
@@ -122,7 +121,7 @@ const CrowdsourceManager$1 = /*@__PURE__*/ proxyCustomElement(class CrowdsourceM
122
121
  this._mapView = undefined;
123
122
  this._panelOpen = true;
124
123
  this._numSelected = 0;
125
- this._tableOnly = false;
124
+ this._filterOpen = false;
126
125
  }
127
126
  get el() { return this; }
128
127
  //--------------------------------------------------------------------------
@@ -161,6 +160,18 @@ const CrowdsourceManager$1 = /*@__PURE__*/ proxyCustomElement(class CrowdsourceM
161
160
  * MapView.when is not fired when mapView is not currently visible
162
161
  */
163
162
  _shouldSetMapView = false;
163
+ /**
164
+ * LayerExpression[]: All layer expressions from the current filter config for the currently selected layer
165
+ */
166
+ _layerExpressions;
167
+ /**
168
+ * HTMLInstantAppsFilterListElement: Component from Instant Apps that supports interacting with the current filter config
169
+ */
170
+ _filterList;
171
+ /**
172
+ * boolean: True when app is directly rendered to map view layout
173
+ */
174
+ _isMapViewOnLoad = false;
164
175
  //--------------------------------------------------------------------------
165
176
  //
166
177
  // Watch handlers
@@ -177,7 +188,6 @@ const CrowdsourceManager$1 = /*@__PURE__*/ proxyCustomElement(class CrowdsourceM
177
188
  */
178
189
  hideMapOnLoadWatchHandler() {
179
190
  this.showHideMapPopupAndTable(this.hideMapOnLoad && !this._isMobile);
180
- this._expandPopup = this.hideMapOnLoad && !this._isMobile;
181
191
  }
182
192
  //--------------------------------------------------------------------------
183
193
  //
@@ -211,16 +221,6 @@ const CrowdsourceManager$1 = /*@__PURE__*/ proxyCustomElement(class CrowdsourceM
211
221
  this.showHideMapPopupAndTable(false);
212
222
  }
213
223
  }
214
- /**
215
- * Listen for idsFound event to be fired so we can know that all layer ids have been fetched
216
- */
217
- async idsFound(evt) {
218
- const ids = evt.detail;
219
- this._tableOnly = ids.tableIds.length > 0 && ids.layerIds.length === 0;
220
- if (this._tableOnly) {
221
- this._expandPopup = true;
222
- }
223
- }
224
224
  /**
225
225
  * Listen for layoutChanged event to be fired so we can adjust the layout
226
226
  */
@@ -236,14 +236,6 @@ const CrowdsourceManager$1 = /*@__PURE__*/ proxyCustomElement(class CrowdsourceM
236
236
  await this._setMapView();
237
237
  });
238
238
  }
239
- /**
240
- * Listen for beforeMapChanged and minimize the popup if it's expanded
241
- */
242
- async beforeMapChanged() {
243
- if (this._expandPopup) {
244
- this._shouldSetMapView = true;
245
- }
246
- }
247
239
  /**
248
240
  * Get the layer for the provided layer id
249
241
  */
@@ -252,13 +244,13 @@ const CrowdsourceManager$1 = /*@__PURE__*/ proxyCustomElement(class CrowdsourceM
252
244
  const layer = await getLayerOrTable(this._mapView, id);
253
245
  await layer.when(() => {
254
246
  this._layer = layer;
247
+ this._initLayerExpressions();
255
248
  });
256
249
  }
257
250
  /**
258
251
  * Update the state expandPopup when mapInfoChange event occurs
259
252
  */
260
253
  async mapInfoChange() {
261
- this._expandPopup = this.hideMapOnLoad && !this._isMobile;
262
254
  this._hideMapOnLoadHonored = false;
263
255
  }
264
256
  //--------------------------------------------------------------------------
@@ -281,7 +273,7 @@ const CrowdsourceManager$1 = /*@__PURE__*/ proxyCustomElement(class CrowdsourceM
281
273
  render() {
282
274
  // only avoid border when we have a header color that is not white
283
275
  const borderClass = this.popupHeaderColor && this.popupHeaderColor !== "#FFFFFF" ? "border-width-0" : "";
284
- return (h(Host, { key: 'f434a8e24b111a32774e9d5683c2446ba35b504b' }, h("calcite-shell", { key: '017843c77fa2c52f0d957760ac3f57808d11d59f', class: "position-relative" }, h("calcite-panel", { key: 'bd8eeec3a013583789b9e1b251fed34e5896171e', class: `width-full height-full ${borderClass}` }, this._getBody(this._layoutMode, this._panelOpen, this._hideTable)), this._getFooter())));
276
+ return (h(Host, { key: 'bbe12b471976652c32fc0cb6277fdfc4171b2cd6' }, h("calcite-shell", { key: '00b85d8e681f5ab021e6efb63b603e3d2442f63c', class: "position-relative" }, h("calcite-panel", { key: 'f1a37f06f3023bb1c63b40eeca739e942c301e63', class: `width-full height-full ${borderClass}` }, this._getBody(this._layoutMode, this._panelOpen, this._hideTable)), this._getFooter()), this._filterModal()));
285
277
  }
286
278
  /**
287
279
  * Called after each render
@@ -300,6 +292,12 @@ const CrowdsourceManager$1 = /*@__PURE__*/ proxyCustomElement(class CrowdsourceM
300
292
  */
301
293
  async componentDidLoad() {
302
294
  this._resizeObserver.observe(this.el);
295
+ // for backward compatibility if hidemaponload is true then render table layout as default
296
+ if (this.hideMapOnLoad) {
297
+ this.appLayout = 'tableView';
298
+ }
299
+ this._isMapViewOnLoad = this.appLayout === 'mapView';
300
+ this._setActiveLayout(this.appLayout);
303
301
  }
304
302
  //--------------------------------------------------------------------------
305
303
  //
@@ -317,6 +315,27 @@ const CrowdsourceManager$1 = /*@__PURE__*/ proxyCustomElement(class CrowdsourceM
317
315
  const deleteEnabled = this._layer?.editingEnabled && this._layer?.capabilities?.operations?.supportsDelete;
318
316
  return this._isMobile && hasSelectedFeatures && !this._hideFooter ? (h("div", { class: `width-100`, slot: "footer" }, h("div", { class: "display-flex padding-1-2" }, h("calcite-button", { appearance: "solid", id: "solutions-show", onClick: () => this.showHideMapPopupAndTable(true), width: "full" }, this._translations.view.replace("{{n}}", this._numSelected.toString())), deleteEnabled ? (h("delete-button", { class: "padding-inline-start-1 width-full", id: "solutions-delete", ids: this._layerTable.selectedIds, layer: this._layer })) : undefined))) : undefined;
319
317
  }
318
+ /**
319
+ * sets the active layout to render
320
+ * @param appLayout new app layout
321
+ *
322
+ * @protected
323
+ */
324
+ _setActiveLayout(appLayout) {
325
+ //When going to splitView layout the panel should be open
326
+ if (appLayout === 'splitView' && !this._panelOpen) {
327
+ this._toggleLayout();
328
+ }
329
+ //Move the map node based on the selected layout
330
+ //for mapView layout show map in full view and or all other layout show in the card view
331
+ //for tableView the map will be hidden using css
332
+ if (appLayout === 'mapView') {
333
+ this._showMapInFullView();
334
+ }
335
+ else {
336
+ this._showMapInCardView();
337
+ }
338
+ }
320
339
  /**
321
340
  * Get the icon name to use for the divider icon based on the current layout
322
341
  *
@@ -442,8 +461,11 @@ const CrowdsourceManager$1 = /*@__PURE__*/ proxyCustomElement(class CrowdsourceM
442
461
  * @protected
443
462
  */
444
463
  _getMapNode(panelOpen) {
445
- const mapContainerClass = this._layoutMode === ELayoutMode.HORIZONTAL && (!this._isMobile || panelOpen) ? "" : "adjusted-height-50";
446
- return (h("div", { class: `${mapContainerClass} overflow-hidden` }, h("map-card", { appProxies: this.appProxies, basemapConfig: this.basemapConfig, class: "width-full", defaultWebmapId: this.defaultWebmap, enableBasemap: this.enableBasemap, enableFloorFilter: this.enableFloorFilter, enableFullscreen: this.enableFullscreen, enableHome: this.enableHome, enableLegend: this.enableLegend, enableSearch: this.enableSearch, enableSingleExpand: true, hidden: this._expandPopup && !this._isMobile, homeZoomIndex: 3, homeZoomPosition: "top-left", homeZoomToolsSize: "s", mapInfos: this.mapInfos?.filter(mapInfo => mapInfo.visible !== false), mapWidgetsIndex: 0, mapWidgetsPosition: "top-right", mapWidgetsSize: "m", stackTools: true, theme: this.theme, toolOrder: ["legend", "search", "fullscreen", "basemap", "floorfilter"] })));
464
+ const isMapLayout = this.appLayout === 'mapView';
465
+ const isTableLayout = this.appLayout === 'tableView';
466
+ const mapContainerClass = (isMapLayout || isTableLayout) ? "position-absolute-0" : this._layoutMode === ELayoutMode.HORIZONTAL && (!this._isMobile || panelOpen) ? "" : "adjusted-height-50";
467
+ const hasMapAndLayer = this.defaultWebmap && this.defaultLayer;
468
+ return (h("div", { class: `${mapContainerClass} overflow-hidden`, id: "card-mapView" }, h("map-card", { appProxies: this.appProxies, basemapConfig: this.basemapConfig, class: "width-full", defaultLayerId: hasMapAndLayer ? this.defaultLayer : "", defaultWebmapId: this.defaultWebmap, enableBasemap: this.enableBasemap, enableFloorFilter: this.enableFloorFilter, enableFullscreen: this.enableFullscreen, enableHome: this.enableHome, enableLegend: this.enableLegend, enableSearch: this.enableSearch, enableSingleExpand: true, hidden: !this._isMobile && isTableLayout, homeZoomIndex: 3, homeZoomPosition: "top-left", homeZoomToolsSize: "s", isMapLayout: isMapLayout, isMobile: this._isMobile, mapInfo: this._mapInfo, mapInfos: this.mapInfos?.filter(mapInfo => mapInfo.visible !== false), mapWidgetsIndex: 0, mapWidgetsPosition: "top-right", mapWidgetsSize: "m", onToggleFilter: this._toggleFilter.bind(this), onlyShowUpdatableLayers: this.onlyShowUpdatableLayers, selectedFeaturesIds: this._layerTable?.selectedIds, selectedLayer: this._layer, stackTools: true, theme: this.theme, toolOrder: ["legend", "search", "fullscreen", "basemap", "floorfilter"], zoomToScale: this.zoomToScale })));
447
469
  }
448
470
  /**
449
471
  * Get the expand node for the popup information
@@ -452,11 +474,7 @@ const CrowdsourceManager$1 = /*@__PURE__*/ proxyCustomElement(class CrowdsourceM
452
474
  * @protected
453
475
  */
454
476
  _getPopupExpandNode() {
455
- const icon = this._expandPopup ? "chevrons-down" : "chevrons-up";
456
- const id = "expand-popup";
457
- const tooltip = this._expandPopup ? this._translations.collapsePopup : this._translations.expandPopup;
458
- const themeClass = this.theme === "dark" ? "calcite-mode-dark" : "calcite-mode-light";
459
- const popupNodeClass = !this._expandPopup ? "height-full" : this.mapInfos?.length === 1 || this._isMobile ? "position-absolute-0" : "position-absolute-50";
477
+ const popupNodeClass = "height-full";
460
478
  const headerClass = this._isMobile ? "display-none height-0" : "";
461
479
  const headerTheme = this.popupHeaderColor ? "" : !this._isMobile ? "calcite-mode-dark" : "calcite-mode-light";
462
480
  const containerClass = this._isMobile && this._hideTable ? "position-absolute-0 width-full height-full" : this._isMobile ? "display-none height-0" : "";
@@ -465,16 +483,7 @@ const CrowdsourceManager$1 = /*@__PURE__*/ proxyCustomElement(class CrowdsourceM
465
483
  '--calcite-color-foreground-2': this.popupHeaderHoverColor, /* background color that will be displayed on button when hovered */
466
484
  '--calcite-color-text-3': this.popupHeaderTextColor, /* font color that will be displayed on button */
467
485
  '--calcite-color-text-2': this.popupHeaderTextColor, /* font color that will be displayed on popup header text*/
468
- } }, h("calcite-panel", null, !this._isMobile ? (h("div", { class: `display-flex align-items-center ${headerClass}`, slot: "header-content" }, h("calcite-icon", { icon: "information", scale: "s" }), h("div", { class: "padding-inline-start-75" }, this._translations.information))) : undefined, h("calcite-action", { class: headerClass, disabled: this._tableOnly, icon: icon, id: id, onClick: () => this._togglePopup(), slot: "header-actions-end", text: "" }), !this._tableOnly ? h("calcite-tooltip", { class: themeClass, label: "", placement: "bottom", "reference-element": id }, h("span", null, tooltip)) : undefined, this._getCardNode())));
469
- }
470
- /**
471
- * Toggle the popup information
472
- *
473
- * @protected
474
- */
475
- _togglePopup() {
476
- this._expandPopup = !this._expandPopup;
477
- this._hideMapOnLoadHonored = true;
486
+ } }, h("calcite-panel", null, !this._isMobile ? (h("div", { class: `display-flex align-items-center ${headerClass}`, slot: "header-content" }, h("calcite-icon", { icon: "information", scale: "s" }), h("div", { class: "padding-inline-start-75" }, this._translations.information))) : undefined, this._getCardNode())));
478
487
  }
479
488
  /**
480
489
  * Get the card node
@@ -483,9 +492,11 @@ const CrowdsourceManager$1 = /*@__PURE__*/ proxyCustomElement(class CrowdsourceM
483
492
  * @protected
484
493
  */
485
494
  _getCardNode() {
486
- const cardManagerHeight = !this._expandPopup && !this._isMobile ? "height-50" : "height-full";
495
+ const isMapLayout = this.appLayout === 'mapView';
496
+ const isTableLayout = this.appLayout === 'tableView';
497
+ const cardManagerHeight = (isMapLayout || isTableLayout) ? "height-full" : !this._isMobile ? "height-50" : "height-full";
487
498
  const themeClass = this.theme === "dark" ? "calcite-mode-dark" : "calcite-mode-light";
488
- return (h("div", { class: `width-50 height-full ${themeClass}` }, h("card-manager", { class: `${cardManagerHeight} width-full`, enableEditGeometry: this?._mapInfo?.enableEditGeometry, isMobile: this._isMobile, mapView: this?._mapView, zoomAndScrollToSelected: this.zoomAndScrollToSelected })));
499
+ return (h("div", { class: `width-50 height-full ${themeClass}` }, h("card-manager", { class: `${cardManagerHeight} width-full`, enableEditGeometry: this?._mapInfo?.enableEditGeometry, isMobile: this._isMobile, layer: this._layer, mapView: this?._mapView, selectedFeaturesIds: this._layerTable?.selectedIds, zoomAndScrollToSelected: this.zoomAndScrollToSelected })));
489
500
  }
490
501
  /**
491
502
  * Get the table node based for the current layout
@@ -497,11 +508,11 @@ const CrowdsourceManager$1 = /*@__PURE__*/ proxyCustomElement(class CrowdsourceM
497
508
  * @protected
498
509
  */
499
510
  _getTable(layoutMode, panelOpen, hideTable) {
500
- const tableClass = hideTable && this._isMobile ? "visibility-hidden" : "";
511
+ const isMapLayout = this.appLayout === 'mapView';
512
+ const isTableLayout = this.appLayout === 'tableView';
513
+ const tableClass = hideTable && this._isMobile ? "visibility-hidden" : isMapLayout ? "display-none" : "";
514
+ const mapClass = isMapLayout ? "height-full width-full" : "display-none";
501
515
  const tableSizeClass = this._getTableSizeClass(layoutMode, panelOpen);
502
- const icon = this._getDividerIcon(layoutMode, panelOpen);
503
- const tooltip = panelOpen ? this._translations.close : this._translations.open;
504
- const id = "toggle-layout";
505
516
  const toggleLayout = layoutMode === ELayoutMode.HORIZONTAL ? "horizontal" : "vertical";
506
517
  const toggleSlot = layoutMode === ELayoutMode.HORIZONTAL ? "header" : "panel-start";
507
518
  const hasMapAndLayer = this.defaultWebmap && this.defaultLayer;
@@ -509,10 +520,74 @@ const CrowdsourceManager$1 = /*@__PURE__*/ proxyCustomElement(class CrowdsourceM
509
520
  this.defaultGlobalId?.indexOf(",") > -1 ? this.defaultGlobalId.split(",") : [this.defaultGlobalId];
510
521
  const defaultOid = !this.defaultOid ? undefined :
511
522
  this.defaultOid?.indexOf(",") > -1 ? this.defaultOid.split(",").map(o => parseInt(o, 10)) : [parseInt(this.defaultOid, 10)];
512
- return (h("calcite-shell", { class: `${tableSizeClass} ${tableClass} border-bottom` }, !this._isMobile ? (h("calcite-action-bar", { class: "border-sides", expandDisabled: true, layout: toggleLayout, slot: toggleSlot }, h("calcite-action", { class: "toggle-node", icon: icon, id: id, onClick: () => this._toggleLayout(), text: "" }), h("calcite-tooltip", { label: tooltip, placement: "bottom", "reference-element": id }, h("span", null, tooltip)))) : undefined, h("div", { class: `width-full height-full position-relative` }, h("layer-table", { defaultGlobalId: hasMapAndLayer ? globalId : undefined, defaultLayerId: hasMapAndLayer ? this.defaultLayer : "", defaultOid: hasMapAndLayer && !globalId ? defaultOid : undefined, enableAutoRefresh: this.enableAutoRefresh, enableCSV: this.enableCSV, enableColumnReorder: this.enableColumnReorder, enableInlineEdit: this?._mapInfo?.enableInlineEdit, enableShare: this.enableShare, isMobile: this._isMobile, mapHidden: this._expandPopup, mapInfo: this._mapInfo, mapView: this?._mapView, onlyShowUpdatableLayers: this.onlyShowUpdatableLayers, ref: (el) => this._layerTable = el, shareIncludeEmbed: this.shareIncludeEmbed, shareIncludeSocial: this.shareIncludeSocial, showNewestFirst: this.showNewestFirst, zoomAndScrollToSelected: this.zoomAndScrollToSelected, zoomToScale: this.zoomToScale }))));
523
+ return (h("calcite-shell", { class: `${tableSizeClass} border-bottom` }, !this._isMobile ? (h("calcite-action-bar", { class: "border-sides", expandDisabled: true, layout: toggleLayout, slot: toggleSlot }, this.getActions(layoutMode, panelOpen))) : undefined, h("div", { class: `width-full height-full position-relative ${tableClass}` }, h("layer-table", { createFilterModal: false, defaultGlobalId: hasMapAndLayer ? globalId : undefined, defaultLayerId: hasMapAndLayer ? this.defaultLayer : "", defaultOid: hasMapAndLayer && !globalId ? defaultOid : undefined, enableAutoRefresh: this.enableAutoRefresh, enableCSV: this.enableCSV, enableColumnReorder: this.enableColumnReorder, enableInlineEdit: this?._mapInfo?.enableInlineEdit, enableShare: this.enableShare, isMobile: this._isMobile, mapHidden: isTableLayout, mapInfo: this._mapInfo, mapView: this?._mapView, onToggleFilter: this._toggleFilter.bind(this), onlyShowUpdatableLayers: this.onlyShowUpdatableLayers, ref: (el) => this._layerTable = el, shareIncludeEmbed: this.shareIncludeEmbed, shareIncludeSocial: this.shareIncludeSocial, showNewestFirst: this.showNewestFirst, zoomAndScrollToSelected: this.zoomAndScrollToSelected, zoomToScale: this.zoomToScale })), h("div", { class: mapClass, id: "full-map-view" })));
524
+ }
525
+ /**
526
+ * Returns the Actions for table's node
527
+ *
528
+ * @returns Node
529
+ * @protected
530
+ */
531
+ getActions(layoutMode, panelOpen) {
532
+ const icon = this._getDividerIcon(layoutMode, panelOpen);
533
+ const tooltip = panelOpen ? this._translations.close : this._translations.open;
534
+ const id = "toggle-layout";
535
+ return (h(Fragment, null, h("calcite-action", { active: this.appLayout === 'splitView', class: "toggle-node", icon: "browser", id: "browser-action", onClick: () => { this._changeLayout('splitView'); }, text: "" }), h("calcite-tooltip", { placement: "right", "reference-element": "browser-action" }, h("span", null, this._translations.splitView)), h("calcite-action", { active: this.appLayout === 'tableView', class: "toggle-node", icon: "dock-left", id: "dock-left-action", onClick: () => { this._changeLayout('tableView'); }, text: "" }), h("calcite-tooltip", { placement: "right", "reference-element": "dock-left-action" }, h("span", null, this._translations.tableView)), h("calcite-action", { active: this.appLayout === 'mapView', class: "toggle-node", icon: "browser-map", id: "browser-map-action", onClick: () => { this._changeLayout('mapView'); }, text: "" }), h("calcite-tooltip", { placement: "right", "reference-element": "browser-map-action" }, h("span", null, this._translations.mapView)), h("calcite-action", { class: "toggle-node", icon: icon, id: id, onClick: () => this._toggleLayout(), slot: "actions-end", text: "" }), h("calcite-tooltip", { placement: "bottom", "reference-element": id }, h("span", null, tooltip))));
536
+ }
537
+ /**
538
+ * Show filter component in modal
539
+ *
540
+ * @returns node to interact with any configured filters for the current layer
541
+ * @protected
542
+ */
543
+ _filterModal() {
544
+ return (h("calcite-modal", { "aria-labelledby": "modal-title", class: "modal", kind: "brand", onCalciteModalClose: () => void this._closeFilter(), open: this._filterOpen, widthScale: "s" }, h("div", { class: "display-flex align-center", id: "modal-title", slot: "header" }, this._translations?.filter?.replace("{{title}}", this._layer?.title)), h("div", { slot: "content" }, h("instant-apps-filter-list", { autoUpdateUrl: false, closeBtn: true, closeBtnOnClick: async () => this._closeFilter(), comboboxOverlayPositioning: "fixed", layerExpressions: this._layerExpressions, onFilterListReset: () => this._handleFilterListReset(), onFilterUpdate: () => void this._layerTable?.filterUpdate(), ref: (el) => this._filterList = el, view: this._mapView, zoomBtn: false }))));
545
+ }
546
+ /**
547
+ * Store any filters for the current layer.
548
+ * Should only occur on layer change
549
+ *
550
+ * @protected
551
+ */
552
+ _initLayerExpressions() {
553
+ const layerExpressions = this._mapInfo?.filterConfig?.layerExpressions;
554
+ this._layerExpressions = layerExpressions ? layerExpressions.filter((exp) => exp.id === this._layer?.id) : [];
555
+ this._filterList.layerExpressions = this._layerExpressions;
556
+ this._layerExpressions.filter(lyrExp => {
557
+ return lyrExp.expressions.filter(exp => exp.active).length > 0;
558
+ }).length > 0;
559
+ }
560
+ /**
561
+ * Toggle the filter modal
562
+ *
563
+ * @protected
564
+ */
565
+ _toggleFilter() {
566
+ this._filterOpen = !this._filterOpen;
567
+ }
568
+ /**
569
+ * Reset the filter active prop
570
+ *
571
+ * @protected
572
+ */
573
+ _handleFilterListReset() {
574
+ void this._layerTable.filterReset();
575
+ }
576
+ /**
577
+ * Close the filter modal
578
+ *
579
+ * @protected
580
+ */
581
+ async _closeFilter() {
582
+ if (this._filterOpen) {
583
+ this._filterOpen = false;
584
+ void this._layerTable.closeFilter();
585
+ }
513
586
  }
514
587
  /**
515
588
  * Update the component layout when its size changes
589
+ *
590
+ * @protected
516
591
  */
517
592
  _onResize() {
518
593
  const isMobile = this.el.offsetWidth < 1024;
@@ -529,22 +604,67 @@ const CrowdsourceManager$1 = /*@__PURE__*/ proxyCustomElement(class CrowdsourceM
529
604
  /**
530
605
  * Open/Close the appropriate panel.
531
606
  * The panel that is toggled is dependent upon the layout mode and if using classic grid or not
607
+ *
608
+ * @protected
532
609
  */
533
610
  _toggleLayout() {
534
611
  this._panelOpen = !this._panelOpen;
535
612
  }
613
+ /**
614
+ * Changes the layout mode
615
+ * @param appLayout selected active app layout
616
+ *
617
+ * @protected
618
+ */
619
+ _changeLayout(appLayout) {
620
+ if (this.appLayout !== appLayout) {
621
+ this._setActiveLayout(appLayout);
622
+ this.appLayout = appLayout;
623
+ if (this._isMapViewOnLoad) {
624
+ void this._layerTable.refresh();
625
+ this._isMapViewOnLoad = false;
626
+ }
627
+ }
628
+ }
629
+ /**
630
+ * shows the map in card view
631
+ *
632
+ * @protected
633
+ */
634
+ _showMapInCardView() {
635
+ if (this.appLayout === 'mapView') {
636
+ const fullMapView = document.getElementById('full-map-view').childNodes[0];
637
+ const splitMapClass = document.getElementById('card-mapView');
638
+ if (fullMapView) {
639
+ splitMapClass.appendChild(fullMapView);
640
+ }
641
+ }
642
+ }
643
+ /**
644
+ * Shows the map in full view
645
+ *
646
+ * @protected
647
+ */
648
+ _showMapInFullView() {
649
+ const splitMap = document.getElementById('card-mapView').childNodes[0];
650
+ const fullMapViewClass = document.getElementById('full-map-view');
651
+ if (splitMap) {
652
+ fullMapViewClass.appendChild(splitMap);
653
+ }
654
+ }
536
655
  /**
537
656
  * Show/Hide the map, popup, and table
538
657
  *
539
658
  * @param show when true the map, popup, and table will be displayed
659
+ * @protected
540
660
  */
541
661
  showHideMapPopupAndTable(show) {
542
- this._expandPopup = false;
543
662
  this._hideTable = show;
544
663
  this._hideFooter = show;
545
664
  }
546
665
  /**
547
666
  * Get the current map info (configuration details) when maps change
667
+ * @param id map changed id
548
668
  *
549
669
  * @returns IMapInfo for the provided id
550
670
  * @protected
@@ -652,7 +772,6 @@ const CrowdsourceManager$1 = /*@__PURE__*/ proxyCustomElement(class CrowdsourceM
652
772
  "theme": [1],
653
773
  "zoomAndScrollToSelected": [4, "zoom-and-scroll-to-selected"],
654
774
  "zoomToScale": [2, "zoom-to-scale"],
655
- "_expandPopup": [32],
656
775
  "_hideFooter": [32],
657
776
  "_hideTable": [32],
658
777
  "_isMobile": [32],
@@ -663,8 +782,8 @@ const CrowdsourceManager$1 = /*@__PURE__*/ proxyCustomElement(class CrowdsourceM
663
782
  "_mapView": [32],
664
783
  "_panelOpen": [32],
665
784
  "_numSelected": [32],
666
- "_tableOnly": [32]
667
- }, [[8, "featureSelectionChange", "featureSelectionChange"], [8, "popupClosed", "popupClosed"], [8, "idsFound", "idsFound"], [8, "layoutChanged", "layoutChanged"], [8, "mapChanged", "mapChanged"], [8, "beforeMapChanged", "beforeMapChanged"], [8, "layerSelectionChange", "layerSelectionChange"], [8, "mapInfoChange", "mapInfoChange"]], {
785
+ "_filterOpen": [32]
786
+ }, [[8, "featureSelectionChange", "featureSelectionChange"], [8, "popupClosed", "popupClosed"], [8, "layoutChanged", "layoutChanged"], [8, "mapChanged", "mapChanged"], [8, "layerSelectionChange", "layerSelectionChange"], [8, "mapInfoChange", "mapInfoChange"]], {
668
787
  "enableZoom": ["enableZoomWatchHandler"],
669
788
  "hideMapOnLoad": ["hideMapOnLoadWatchHandler"]
670
789
  }]);
@@ -57,6 +57,7 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
57
57
  super();
58
58
  this.__registerHost();
59
59
  this.featureSelectionChange = createEvent(this, "featureSelectionChange", 7);
60
+ this.toggleFilter = createEvent(this, "toggleFilter", 7);
60
61
  this.defaultGlobalId = undefined;
61
62
  this.defaultLayerId = undefined;
62
63
  this.defaultOid = undefined;
@@ -76,6 +77,7 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
76
77
  this.showNewestFirst = undefined;
77
78
  this.zoomAndScrollToSelected = undefined;
78
79
  this.zoomToScale = undefined;
80
+ this.createFilterModal = true;
79
81
  this._allIds = [];
80
82
  this._controlsThatFit = undefined;
81
83
  this._csvExporting = false;
@@ -327,7 +329,9 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
327
329
  */
328
330
  async mapInfoWatchHandler() {
329
331
  this._resetColumnTemplates();
330
- this._initLayerExpressions();
332
+ if (this.createFilterModal) {
333
+ this._initLayerExpressions();
334
+ }
331
335
  this._initToolInfos();
332
336
  this._updateToolbar();
333
337
  await this._sortTable();
@@ -357,7 +361,9 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
357
361
  this._floorField = this._layer.floorInfo?.floorField;
358
362
  this._updateFloorDefinitionExpression();
359
363
  await this._resetTable();
360
- this._initLayerExpressions();
364
+ if (this.createFilterModal) {
365
+ this._initLayerExpressions();
366
+ }
361
367
  this._updateShareUrl();
362
368
  this._fetchingData = false;
363
369
  });
@@ -381,6 +387,30 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
381
387
  // Methods (public)
382
388
  //
383
389
  //--------------------------------------------------------------------------
390
+ /**
391
+ * Reset the filter
392
+ */
393
+ async filterReset() {
394
+ void this._handleFilterListReset();
395
+ }
396
+ /**
397
+ * Updates the filter
398
+ */
399
+ async filterUpdate() {
400
+ this._handleFilterUpdate();
401
+ }
402
+ /**
403
+ * Closes the filter
404
+ */
405
+ async closeFilter() {
406
+ await this._closeFilter();
407
+ }
408
+ /**
409
+ * refresh the feature table
410
+ */
411
+ async refresh() {
412
+ await this._refresh();
413
+ }
384
414
  //--------------------------------------------------------------------------
385
415
  //
386
416
  // Events (public)
@@ -390,6 +420,10 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
390
420
  * Emitted on demand when a layer is selected
391
421
  */
392
422
  featureSelectionChange;
423
+ /**
424
+ * Emitted on demand when filter action is clicked
425
+ */
426
+ toggleFilter;
393
427
  /**
394
428
  * Scroll and zoom to the selected feature from the Features widget.
395
429
  *
@@ -421,6 +455,14 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
421
455
  }
422
456
  }
423
457
  }
458
+ /**
459
+ * Handles layer selection change to show new table
460
+ *
461
+ * @param evt CustomEvent the id for the current layer
462
+ */
463
+ async layerSelectionChange(evt) {
464
+ await this._layerSelectionChanged(evt);
465
+ }
424
466
  /**
425
467
  * Refresh the table when edits are completed
426
468
  */
@@ -488,9 +530,9 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
488
530
  const selected = this.selectedIds.length.toString();
489
531
  const tableHeightClass = this.isMobile ? "height-full" : "height-full-adjusted";
490
532
  this._validateActiveActions();
491
- return (h(Host, { key: '547a08c45cc3a0b0bdb5ab841ee202d2d43018dc' }, h("calcite-shell", { key: '7ac39e863586727df7685eb5c3faffd87c46bf9d' }, this._getTableControlRow("header"), h("div", { key: '322dc4820b17365f3f202ce43d85330d25081eb5', class: `width-full ${tableHeightClass}` }, h("calcite-panel", { key: '764955f3cf9371a5ff554821613fffbc9e0bd705', class: "height-full width-full" }, h("calcite-loader", { key: '031fc6520de11b166111626501f0208f1b69c9ff', class: loadingClass, label: this._translations.fetchingData, scale: "l" }), h("div", { key: '8d62258ee356fdf6bc6c03f88848a32270ce5eed', class: tableNodeClass, ref: this.onTableNodeCreate })), !this.isMobile ? (h("div", { class: "bottom-left text-color height-19" }, this._translations.recordsSelected
533
+ return (h(Host, { key: '17071727cb283d84afb8beab8382bd3623f35920' }, h("calcite-shell", { key: 'f8508d67fd4b100fdc3f52b7db63194714cf216b' }, this._getTableControlRow("header"), h("div", { key: '5c1ebcb0530764a9568dc5dae153632a3d9491c8', class: `width-full ${tableHeightClass}` }, h("calcite-panel", { key: '7a6420894e4e50e2b4cda6e5ebe043134f4c0397', class: "height-full width-full" }, h("calcite-loader", { key: '48d4fe7e27fae877ca0e4caa22555968636f6c33', class: loadingClass, label: this._translations.fetchingData, scale: "l" }), h("div", { key: 'cce71356e8ca141d1a18b32944d4fa03af8aae33', class: tableNodeClass, ref: this.onTableNodeCreate })), !this.isMobile ? (h("div", { class: "bottom-left text-color height-19" }, this._translations.recordsSelected
492
534
  .replace("{{total}}", total)
493
- .replace("{{selected}}", selected))) : undefined)), this._filterModal()));
535
+ .replace("{{selected}}", selected))) : undefined)), this.createFilterModal && this._filterModal()));
494
536
  }
495
537
  /**
496
538
  * Called once after the component is loaded
@@ -559,7 +601,7 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
559
601
  _getActionBar() {
560
602
  const containerClass = this.isMobile ? "width-full" : "";
561
603
  const mobileClass = this.isMobile ? "border-top" : "";
562
- return (h("calcite-action-bar", { class: containerClass, expandDisabled: true, expanded: true, id: this._getId("bar"), layout: "horizontal" }, h("div", { class: `border-end ${containerClass} ${mobileClass}`, id: "solutions-map-layer-picker-container" }, h("map-layer-picker", { appearance: "transparent", defaultLayerId: this.defaultLayerId, display: "inline-flex", height: 50, isMobile: this.isMobile, mapView: this.mapView, onLayerSelectionChange: (evt) => void this._layerSelectionChanged(evt), onlyShowUpdatableLayers: this.onlyShowUpdatableLayers, placeholderIcon: "layers", scale: "l", showSingleLayerAsLabel: true, showTables: true, type: "dropdown" })), !this.isMobile ? this._getActions() : undefined));
604
+ return (h("calcite-action-bar", { class: containerClass, expandDisabled: true, expanded: true, id: this._getId("bar"), layout: "horizontal" }, h("div", { class: `border-end ${containerClass} ${mobileClass}`, id: "solutions-map-layer-picker-container" }, h("map-layer-picker", { appearance: "transparent", defaultLayerId: this.defaultLayerId, display: "inline-flex", height: 50, isMobile: this.isMobile, mapView: this.mapView, onlyShowUpdatableLayers: this.onlyShowUpdatableLayers, placeholderIcon: "layers", scale: "l", selectedIds: this._layer ? [this._layer?.id] : [], showSingleLayerAsLabel: true, showTables: true, type: "dropdown" })), !this.isMobile ? this._getActions() : undefined));
563
605
  }
564
606
  /**
565
607
  * Get the actions that are used for various interactions with the table
@@ -604,15 +646,19 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
604
646
  */
605
647
  _validateEnabledActions() {
606
648
  const featuresSelected = this._featuresSelected();
649
+ const showMultipleEdits = this.selectedIds.length > 1 && this._layer?.capabilities?.operations?.supportsUpdate;
607
650
  const selectionDependant = [
608
651
  "zoom-to-object",
652
+ "pencil",
609
653
  "trash",
610
654
  "erase",
611
655
  "selected-items-filter"
612
656
  ];
613
657
  this._toolInfos?.forEach(ti => {
614
658
  if (ti && selectionDependant.indexOf(ti.icon) > -1) {
615
- ti.disabled = !featuresSelected;
659
+ // disable the pencil icon if multiple features are not selected
660
+ // For other icons disable them if any feature is not selected
661
+ ti.disabled = ti.icon === "pencil" ? !showMultipleEdits : !featuresSelected;
616
662
  }
617
663
  });
618
664
  }
@@ -646,6 +692,7 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
646
692
  */
647
693
  _initToolInfos() {
648
694
  const featuresSelected = this._featuresSelected();
695
+ const showMultipleEdits = this.selectedIds.length > 1 && this._layer?.capabilities?.operations?.supportsUpdate;
649
696
  const featuresEmpty = this._featuresEmpty();
650
697
  const hasFilterExpressions = this._hasFilterExpressions();
651
698
  if (this._translations) {
@@ -664,10 +711,20 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
664
711
  icon: "filter",
665
712
  indicator: false,
666
713
  label: this._translations.filters,
667
- func: () => this._toggleFilter(),
714
+ func: () => this.createFilterModal ? this._toggleFilter() : this.toggleFilter.emit(),
668
715
  disabled: false,
669
716
  isOverflow: false
670
717
  } : undefined,
718
+ !this.mapHidden ? {
719
+ active: false,
720
+ icon: "pencil",
721
+ indicator: false,
722
+ label: this._translations.editMultiple,
723
+ func: () => alert(this._translations.editMultiple),
724
+ disabled: !showMultipleEdits,
725
+ isOverflow: false,
726
+ isSublist: false
727
+ } : undefined,
671
728
  this._deleteEnabled ? {
672
729
  active: undefined,
673
730
  icon: "trash",
@@ -852,7 +909,7 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
852
909
  _setControlsThatFit(controlsThatFit, skipControls) {
853
910
  let update = JSON.stringify(controlsThatFit) !== JSON.stringify(this._controlsThatFit);
854
911
  const actionbar = document.getElementById("solutions-action-bar");
855
- actionbar.childNodes.forEach((n) => {
912
+ actionbar?.childNodes?.forEach((n) => {
856
913
  if (skipControls.indexOf(n.id) < 0 && !update) {
857
914
  update = this._controlsThatFit.map(c => c.id).indexOf(n.id) < 0;
858
915
  }
@@ -1721,6 +1778,7 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
1721
1778
  "showNewestFirst": [4, "show-newest-first"],
1722
1779
  "zoomAndScrollToSelected": [4, "zoom-and-scroll-to-selected"],
1723
1780
  "zoomToScale": [2, "zoom-to-scale"],
1781
+ "createFilterModal": [4, "create-filter-modal"],
1724
1782
  "_allIds": [32],
1725
1783
  "_controlsThatFit": [32],
1726
1784
  "_csvExporting": [32],
@@ -1732,8 +1790,12 @@ const LayerTable = /*@__PURE__*/ proxyCustomElement(class LayerTable extends HTM
1732
1790
  "_showHideOpen": [32],
1733
1791
  "_showOnlySelected": [32],
1734
1792
  "_toolInfos": [32],
1735
- "_translations": [32]
1736
- }, [[8, "selectionChanged", "selectionChanged"], [8, "editsComplete", "editsComplete"], [8, "facilityChanged", "facilityChanged"], [8, "levelChanged", "levelChanged"], [8, "siteChanged", "siteChanged"], [8, "noLayersFound", "noLayersFound"]], {
1793
+ "_translations": [32],
1794
+ "filterReset": [64],
1795
+ "filterUpdate": [64],
1796
+ "closeFilter": [64],
1797
+ "refresh": [64]
1798
+ }, [[8, "selectionChanged", "selectionChanged"], [8, "layerSelectionChange", "layerSelectionChange"], [8, "editsComplete", "editsComplete"], [8, "facilityChanged", "facilityChanged"], [8, "levelChanged", "levelChanged"], [8, "siteChanged", "siteChanged"], [8, "noLayersFound", "noLayersFound"]], {
1737
1799
  "defaultOid": ["defaultOidWatchHandler"],
1738
1800
  "defaultGlobalId": ["defaultGlobalIdWatchHandler"],
1739
1801
  "enableCSV": ["enableCSVWatchHandler"],