@esri/solutions-components 0.10.7 → 0.10.8

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 (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"],