@esri/solutions-components 0.10.42 → 0.10.43

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 (112) hide show
  1. package/dist/cjs/calcite-action-pad_2.cjs.entry.js +1 -1
  2. package/dist/cjs/calcite-block_5.cjs.entry.js +25 -26
  3. package/dist/cjs/{constants-51cf394f.js → constants-bed33322.js} +3 -11
  4. package/dist/cjs/crowdsource-reporter.cjs.entry.js +112 -49
  5. package/dist/cjs/{helpers-afcac967.js → helpers-0493759d.js} +1 -1
  6. package/dist/cjs/instant-apps-app-guide.cjs.entry.js +2 -2
  7. package/dist/cjs/instant-apps-ckeditor-wrapper_3.cjs.entry.js +3 -3
  8. package/dist/cjs/instant-apps-control-panel.cjs.entry.js +1 -1
  9. package/dist/cjs/instant-apps-create.cjs.entry.js +2 -2
  10. package/dist/cjs/instant-apps-export-views.cjs.entry.js +2 -2
  11. package/dist/cjs/instant-apps-export.cjs.entry.js +2 -2
  12. package/dist/cjs/instant-apps-interactive-legend-classic.cjs.entry.js +2 -2
  13. package/dist/cjs/instant-apps-interactive-legend-count_2.cjs.entry.js +2 -2
  14. package/dist/cjs/instant-apps-interactive-legend-group-legend-element-caption.cjs.entry.js +2 -2
  15. package/dist/cjs/instant-apps-interactive-legend-group-legend-element_5.cjs.entry.js +21 -7
  16. package/dist/cjs/instant-apps-interactive-legend.cjs.entry.js +3 -3
  17. package/dist/cjs/instant-apps-keyboard-shortcuts.cjs.entry.js +2 -2
  18. package/dist/cjs/instant-apps-language-switcher.cjs.entry.js +7 -7
  19. package/dist/cjs/instant-apps-language-translator.cjs.entry.js +6 -6
  20. package/dist/cjs/instant-apps-measurement.cjs.entry.js +2 -2
  21. package/dist/cjs/instant-apps-popover.cjs.entry.js +2 -2
  22. package/dist/cjs/instant-apps-scoreboard.cjs.entry.js +2 -2
  23. package/dist/cjs/instant-apps-sign-in.cjs.entry.js +2 -2
  24. package/dist/cjs/instant-apps-splash.cjs.entry.js +6 -5
  25. package/dist/cjs/instant-apps-time-filter.cjs.entry.js +2 -2
  26. package/dist/cjs/{loadModules-8567855e.js → loadModules-df8b13ca.js} +1 -1
  27. package/dist/cjs/loader.cjs.js +1 -1
  28. package/dist/cjs/{locale-4a18a858.js → locale-4b820602.js} +1 -1
  29. package/dist/cjs/solution-contents_3.cjs.entry.js +1 -1
  30. package/dist/cjs/solutions-components.cjs.js +1 -1
  31. package/dist/cjs/{utils-fa7ad44b.js → utils-3f10ea6b.js} +2 -2
  32. package/dist/collection/components/crowdsource-reporter/crowdsource-reporter.js +112 -49
  33. package/dist/collection/components/solution-spatial-ref/solution-spatial-ref.js +2 -2
  34. package/dist/components/crowdsource-reporter.js +112 -49
  35. package/dist/components/instant-apps-filter-list2.js +25 -26
  36. package/dist/components/instant-apps-interactive-legend-relationship2.js +19 -5
  37. package/dist/components/instant-apps-language-switcher.js +3 -3
  38. package/dist/components/instant-apps-language-translator2.js +4 -12
  39. package/dist/components/instant-apps-splash.js +4 -3
  40. package/dist/components/loadModules2.js +1 -1
  41. package/dist/components/solution-spatial-ref2.js +2 -2
  42. package/dist/components/utils4.js +1 -1
  43. package/dist/esm/calcite-action-pad_2.entry.js +1 -1
  44. package/dist/esm/calcite-block_5.entry.js +25 -26
  45. package/dist/esm/{constants-886c7c2c.js → constants-637a40f5.js} +3 -11
  46. package/dist/esm/crowdsource-reporter.entry.js +112 -49
  47. package/dist/esm/{helpers-91087955.js → helpers-91ca0f44.js} +1 -1
  48. package/dist/esm/instant-apps-app-guide.entry.js +2 -2
  49. package/dist/esm/instant-apps-ckeditor-wrapper_3.entry.js +3 -3
  50. package/dist/esm/instant-apps-control-panel.entry.js +1 -1
  51. package/dist/esm/instant-apps-create.entry.js +2 -2
  52. package/dist/esm/instant-apps-export-views.entry.js +2 -2
  53. package/dist/esm/instant-apps-export.entry.js +2 -2
  54. package/dist/esm/instant-apps-interactive-legend-classic.entry.js +2 -2
  55. package/dist/esm/instant-apps-interactive-legend-count_2.entry.js +2 -2
  56. package/dist/esm/instant-apps-interactive-legend-group-legend-element-caption.entry.js +2 -2
  57. package/dist/esm/instant-apps-interactive-legend-group-legend-element_5.entry.js +21 -7
  58. package/dist/esm/instant-apps-interactive-legend.entry.js +3 -3
  59. package/dist/esm/instant-apps-keyboard-shortcuts.entry.js +2 -2
  60. package/dist/esm/instant-apps-language-switcher.entry.js +7 -7
  61. package/dist/esm/instant-apps-language-translator.entry.js +6 -6
  62. package/dist/esm/instant-apps-measurement.entry.js +2 -2
  63. package/dist/esm/instant-apps-popover.entry.js +2 -2
  64. package/dist/esm/instant-apps-scoreboard.entry.js +2 -2
  65. package/dist/esm/instant-apps-sign-in.entry.js +2 -2
  66. package/dist/esm/instant-apps-splash.entry.js +6 -5
  67. package/dist/esm/instant-apps-time-filter.entry.js +2 -2
  68. package/dist/esm/{loadModules-03ba7abe.js → loadModules-d5a25252.js} +1 -1
  69. package/dist/esm/loader.js +1 -1
  70. package/dist/esm/{locale-ce177eb8.js → locale-77038bee.js} +1 -1
  71. package/dist/esm/solution-contents_3.entry.js +1 -1
  72. package/dist/esm/solutions-components.js +1 -1
  73. package/dist/esm/{utils-3fc29543.js → utils-0a78d3c9.js} +2 -2
  74. package/dist/node_modules/@esri/instant-apps-components/dist/collection/components/instant-apps-splash/instant-apps-splash.css +7 -0
  75. package/dist/solutions-components/{p-b739f26d.entry.js → p-053effee.entry.js} +1 -1
  76. package/dist/solutions-components/{p-af573e0d.js → p-09543b4e.js} +1 -1
  77. package/dist/solutions-components/p-1b1ff60a.entry.js +6 -0
  78. package/dist/solutions-components/{p-e4107150.entry.js → p-2291bf3f.entry.js} +1 -1
  79. package/dist/solutions-components/p-2cf41651.entry.js +6 -0
  80. package/dist/solutions-components/{p-fe3aea1a.entry.js → p-351c7cbf.entry.js} +1 -1
  81. package/dist/solutions-components/{p-90fc786f.entry.js → p-3d999f0f.entry.js} +1 -1
  82. package/dist/solutions-components/p-3fe6c230.entry.js +6 -0
  83. package/dist/solutions-components/p-4695cfab.js +6 -0
  84. package/dist/solutions-components/{p-43699470.entry.js → p-499489c5.entry.js} +1 -1
  85. package/dist/solutions-components/{p-5ff711ee.js → p-5104cc98.js} +1 -1
  86. package/dist/solutions-components/p-5e694bcc.entry.js +29 -0
  87. package/dist/solutions-components/{p-cbb86cf2.entry.js → p-6a3f2249.entry.js} +1 -1
  88. package/dist/solutions-components/{p-a7f56b28.entry.js → p-6e5ea1cb.entry.js} +1 -1
  89. package/dist/solutions-components/{p-9c170b30.entry.js → p-76a1236d.entry.js} +1 -1
  90. package/dist/solutions-components/{p-1e14b3d0.entry.js → p-78b6d3fe.entry.js} +1 -1
  91. package/dist/solutions-components/{p-c48be45f.entry.js → p-8a1a0f9b.entry.js} +1 -1
  92. package/dist/solutions-components/{p-5cbf3eed.entry.js → p-8d4a4498.entry.js} +1 -1
  93. package/dist/solutions-components/{p-4a02fd45.entry.js → p-9d9e0e74.entry.js} +1 -1
  94. package/dist/solutions-components/{p-50fb7f47.js → p-b49e1a78.js} +1 -1
  95. package/dist/solutions-components/{p-c551ffc5.entry.js → p-c399f2b8.entry.js} +1 -1
  96. package/dist/solutions-components/p-cb27611e.entry.js +6 -0
  97. package/dist/solutions-components/{p-4cd4cb85.js → p-d001e961.js} +1 -1
  98. package/dist/solutions-components/{p-523dcf4b.entry.js → p-d37a68f7.entry.js} +1 -1
  99. package/dist/solutions-components/{p-a2cf9fdc.entry.js → p-db7d5db8.entry.js} +1 -1
  100. package/dist/solutions-components/{p-6438d1ea.entry.js → p-e29e57db.entry.js} +1 -1
  101. package/dist/solutions-components/{p-a5b751e2.entry.js → p-e625aa69.entry.js} +1 -1
  102. package/dist/solutions-components/{p-2542d5c9.entry.js → p-e9fcc194.entry.js} +1 -1
  103. package/dist/solutions-components/{p-374ddead.entry.js → p-f4880179.entry.js} +1 -1
  104. package/dist/solutions-components/solutions-components.esm.js +1 -1
  105. package/dist/types/components/crowdsource-reporter/crowdsource-reporter.d.ts +43 -17
  106. package/package.json +7 -7
  107. package/dist/solutions-components/p-3fc18283.entry.js +0 -6
  108. package/dist/solutions-components/p-442dd59c.entry.js +0 -6
  109. package/dist/solutions-components/p-5585dcd3.entry.js +0 -6
  110. package/dist/solutions-components/p-953afbb3.entry.js +0 -29
  111. package/dist/solutions-components/p-ceb1030b.js +0 -6
  112. package/dist/solutions-components/p-f728af86.entry.js +0 -6
@@ -5,7 +5,7 @@
5
5
  */
6
6
  'use strict';
7
7
 
8
- const locale = require('./locale-4a18a858.js');
8
+ const locale = require('./locale-4b820602.js');
9
9
  const index = require('./index-2b13a4d5.js');
10
10
 
11
11
  exports.EInputType = void 0;
@@ -131,7 +131,7 @@ function initExternalCKEditorStyles() {
131
131
  document.head.appendChild(style);
132
132
  }
133
133
  async function updateLastSave(resource) {
134
- const data = await resource.fetch();
134
+ const data = store.get('portalItemResourceT9n');
135
135
  const lastSave = Date.now();
136
136
  store.set('lastSave', lastSave);
137
137
  const dataStr = JSON.stringify(Object.assign(Object.assign({}, data), { lastSave }));
@@ -213,17 +213,17 @@ export class CrowdsourceReporter {
213
213
  */
214
214
  _formElements = [];
215
215
  /**
216
- * string[]: URL params set by using filters.
216
+ * string: Previous selected layer id
217
217
  */
218
- _filterUrlParams;
218
+ _prevSelectedLayerId;
219
219
  /**
220
- * FilterInitState: filter's init state
220
+ * ILayerExpression[]: current LayerExpressions based on the selected layer
221
221
  */
222
- _filterInitState;
222
+ _currentLayerExpressions;
223
223
  /**
224
- * string: Previous selected layer id
224
+ * { [key: string]: string }: definitionExpressions for each layer
225
225
  */
226
- _prevSelectedLayerId;
226
+ _initDefExpressions;
227
227
  //--------------------------------------------------------------------------
228
228
  //
229
229
  // Watch handlers
@@ -248,6 +248,7 @@ export class CrowdsourceReporter {
248
248
  */
249
249
  async mapViewWatchHandler() {
250
250
  await this.mapView.when(async () => {
251
+ this.setInitExpressions();
251
252
  await this.setMapView();
252
253
  });
253
254
  }
@@ -326,15 +327,25 @@ export class CrowdsourceReporter {
326
327
  this._layers = this.reportingOptions ? Object.keys(this.reportingOptions).filter((layerId) => {
327
328
  return this.reportingOptions[layerId].visible;
328
329
  }) : [];
330
+ this.setInitExpressions();
329
331
  await this.setMapView();
330
332
  });
331
333
  }
334
+ /**
335
+ * StencilJS: Called before every render().
336
+ * Update the filter list's initial definition expressions when the filter list component is available
337
+ */
338
+ componentWillRender() {
339
+ if (this._flowItems.includes('filter-panel')) {
340
+ void this._filterList?.updateInitDefExpressions({ initDefExpressions: this._initDefExpressions });
341
+ }
342
+ }
332
343
  /**
333
344
  * Renders the component.
334
345
  */
335
346
  render() {
336
347
  const themeClass = this.theme === "dark" ? "calcite-mode-dark" : "calcite-mode-light";
337
- return (h(Host, { key: 'fbe7fdc13c462e0fe155107ac784f03b3922d624' }, this._reportSubmitted && h("calcite-alert", { key: '9bcf7856ad01e7bc59142a862c50b9d84c443268', "auto-close": true, class: themeClass + " report-submitted-msg", icon: "check-circle", kind: "success", label: "", onCalciteAlertClose: () => { this._reportSubmitted = false; }, open: true, placement: "top" }, h("div", { key: '7b81a7c8b3d66159a790ab3d13be9f1b65a6202e', slot: "message" }, this.reportSubmittedMessage ? this.reportSubmittedMessage : this._translations.submitMsg)), this._featureCreationFailedErrorMsg && h("calcite-alert", { key: 'ee2f17e3326ef7c60fb2ee06ed313fd28cf7084a', "auto-close": true, class: themeClass, icon: "x-octagon", kind: "danger", label: "", onCalciteAlertClose: () => { this._featureCreationFailedErrorMsg = ""; }, open: true, placement: "top" }, h("div", { key: 'b356832ee6d4d16a84cdea0abb6b1c677f9ca1f6', slot: "title" }, this._translations.error), h("div", { key: '8aa16df1114b75b6a3e2a76de7fb5c7cbc5d3632', slot: "message" }, this._featureCreationFailedErrorMsg)), this._commentSubmitted && h("calcite-alert", { key: 'e99693c23ef18b62daf892fccaacbbfe2486702d', "auto-close": true, class: 'report-submitted ' + themeClass, icon: "check-circle", kind: "success", label: "", onCalciteAlertClose: () => { this._commentSubmitted = false; }, open: true, placement: "top" }, h("div", { key: '58ccda0d3782dbe70d346b973b7648f8ae4c8c8f', slot: "message" }, this.commentSubmittedMessage || this._translations.commentSubmittedMsg)), this._addingCommentFailed && h("calcite-alert", { key: 'e49e9e3b33df17dd90b3263bec6c17566f6f7b1b', "auto-close": true, class: themeClass, icon: "x-octagon", kind: "danger", label: "", onCalciteAlertClose: () => { this._addingCommentFailed = false; }, open: true, placement: "top" }, h("div", { key: 'cfb88dd323ead1398cd73849f68a9c2846ef9d14', slot: "title" }, this._translations.error), h("div", { key: 'b27e8983a74c8613e569400b7c7ad0b14d43f323', slot: "message" }, this._translations.addingCommentFailedMsg)), h("div", { key: '7ac3d49d6383d2a88e54d91fa00e2c81aa91a890' }, h("calcite-shell", { key: '709e673f4e9261b4283c7593926d605c8a049abd', "content-behind": true }, this._getReporter()))));
348
+ return (h(Host, { key: 'f1dd6d85210210a73fff30a5d98370da1834be7b' }, this._reportSubmitted && h("calcite-alert", { key: 'b84760fcbf4bfcf0f038be272f74eda97ce17bd9', "auto-close": true, class: themeClass + " report-submitted-msg", icon: "check-circle", kind: "success", label: "", onCalciteAlertClose: () => { this._reportSubmitted = false; }, open: true, placement: "top" }, h("div", { key: '27aa04dd8575ad27898f7848bc2733a03a33e70f', slot: "message" }, this.reportSubmittedMessage ? this.reportSubmittedMessage : this._translations.submitMsg)), this._featureCreationFailedErrorMsg && h("calcite-alert", { key: '3fc2721bed573ad10bbb1c81af126e2e8ca90b12', "auto-close": true, class: themeClass, icon: "x-octagon", kind: "danger", label: "", onCalciteAlertClose: () => { this._featureCreationFailedErrorMsg = ""; }, open: true, placement: "top" }, h("div", { key: '4993e5c5b52d650b094c2890d0e4516cc87ffb69', slot: "title" }, this._translations.error), h("div", { key: '272b17f4c0239d8b295d6f2c0c02f1ba236d840d', slot: "message" }, this._featureCreationFailedErrorMsg)), this._commentSubmitted && h("calcite-alert", { key: '5b9e1a2bd129888ec0764ad9b05e5056653d3c33', "auto-close": true, class: 'report-submitted ' + themeClass, icon: "check-circle", kind: "success", label: "", onCalciteAlertClose: () => { this._commentSubmitted = false; }, open: true, placement: "top" }, h("div", { key: 'bd428297f5fe85cbf7edc42c61c64c299d7954b7', slot: "message" }, this.commentSubmittedMessage || this._translations.commentSubmittedMsg)), this._addingCommentFailed && h("calcite-alert", { key: '2aa1927ca27f9ec15a16f8e68905a1cf203ef833', "auto-close": true, class: themeClass, icon: "x-octagon", kind: "danger", label: "", onCalciteAlertClose: () => { this._addingCommentFailed = false; }, open: true, placement: "top" }, h("div", { key: '4bff5fb03586edf0f9ea21649d1de4c34034e539', slot: "title" }, this._translations.error), h("div", { key: '7ea6c71dbbac15c2f43242ba00c9e461177051a1', slot: "message" }, this._translations.addingCommentFailedMsg)), h("div", { key: '3aa6bfc19a1e82ab90d2ab42aa9a577b3a2b6d8f' }, h("calcite-shell", { key: 'f27355d4f655c0a0931158f38f0be3eb28f6c4d4', "content-behind": true }, this._getReporter()))));
338
349
  }
339
350
  //--------------------------------------------------------------------------
340
351
  //
@@ -398,7 +409,6 @@ export class CrowdsourceReporter {
398
409
  break;
399
410
  case "filter-panel":
400
411
  renderLists.push(this.getFilterPanel());
401
- void this._restoreFilters();
402
412
  break;
403
413
  case "feature-details":
404
414
  renderLists.push(this.getFeatureDetailsFlowItem());
@@ -445,20 +455,6 @@ export class CrowdsourceReporter {
445
455
  return (h("calcite-popover", { autoClose: true, label: "", offsetDistance: 0, placement: this.isMobile ? "leading-start" : "bottom-start", pointerDisabled: true, referenceElement: "sort-popover" }, h("calcite-list", { "selection-mode": "single" }, h("calcite-list-item", { label: this._translations.sortNewest, onCalciteListItemSelect: () => { void this.sortOptionClick(this._selectedLayer.objectIdField, "desc", "sortNewest"); }, selected: this._updatedSortOption === "sortNewest", value: "sortNewest" }), h("calcite-list-item", { label: this._translations.sortOldest, onCalciteListItemSelect: () => { void this.sortOptionClick(this._selectedLayer.objectIdField, "asc", "sortOldest"); }, selected: this._updatedSortOption === "sortOldest", value: "sortOldest" }), canSortByVotes &&
446
456
  h(Fragment, null, h("calcite-list-item", { label: this._translations.sortHighestVoted, onCalciteListItemSelect: () => { void this.sortOptionClick(this.reportingOptions[this._selectedLayerId].likeField, "desc", "sortHighestVoted"); }, selected: this._updatedSortOption === "sortHighestVoted", value: "sortHighestVoted" }), h("calcite-list-item", { label: this._translations.sortLowestVoted, onCalciteListItemSelect: () => { void this.sortOptionClick(this.reportingOptions[this._selectedLayerId].likeField, "asc", "sortLowestVoted"); }, selected: this._updatedSortOption === "sortLowestVoted", value: "sortLowestVoted" })))));
447
457
  }
448
- /**
449
- * Restores the applied filters
450
- * @protected
451
- */
452
- _restoreFilters() {
453
- // call the restore function when instant-apps-filter-list is ready
454
- setTimeout(() => {
455
- const canRestoreFilter = this._filterList && this._filterUrlParams && this._filterInitState;
456
- if (canRestoreFilter) {
457
- void this._filterList.restoreFilters(this._filterUrlParams[0], this._filterInitState);
458
- }
459
- this._filterInitState = null;
460
- }, 200);
461
- }
462
458
  /**
463
459
  * Reset the filter
464
460
  * @protected
@@ -466,8 +462,6 @@ export class CrowdsourceReporter {
466
462
  async _handleFilterListReset() {
467
463
  //on reset filter list reset the filter states
468
464
  this._filterActive = false;
469
- this._filterUrlParams = null;
470
- this._filterInitState = null;
471
465
  }
472
466
  /**
473
467
  * Check if the layers definitionExpression has been modified and update the feature list depending on the applied filters
@@ -475,9 +469,7 @@ export class CrowdsourceReporter {
475
469
  */
476
470
  async _handleFilterUpdate(active) {
477
471
  this._showLoadingIndicator = true;
478
- //if filters are applied the url params will be generated
479
472
  this._filterActive = active;
480
- this._filterUrlParams = this._filterList.urlParams.getAll('filter');
481
473
  await this._featureList.refresh();
482
474
  this._showLoadingIndicator = false;
483
475
  }
@@ -644,10 +636,6 @@ export class CrowdsourceReporter {
644
636
  if (evt.detail.layerId && evt.detail.layerName) {
645
637
  await this.setSelectedLayer(evt.detail.layerId, evt.detail.layerName);
646
638
  }
647
- // reset the applied filter when switching to another layer
648
- if (this._selectedLayerId !== this._prevSelectedLayerId && this._filterActive) {
649
- await this.resetFilter();
650
- }
651
639
  void this.updateNonVisibleLayersOnMap(true);
652
640
  // get the form template elements to pass in create-feature to create a LEVELID field in feature-form
653
641
  this._getFormElements();
@@ -719,28 +707,18 @@ export class CrowdsourceReporter {
719
707
  };
720
708
  this._updatedSortOption = "sortNewest";
721
709
  await this.setSelectedLayer(evt.detail.layerId, evt.detail.layerName);
710
+ void this.handleSelectedLayersFilter();
722
711
  this._flowItems = [...this._flowItems, "feature-list"];
723
- // reset the applied filter when switching to another layer
724
- if (this._selectedLayerId !== this._prevSelectedLayerId && this._filterActive) {
725
- await this.resetFilter();
726
- }
727
712
  this._prevSelectedLayerId = this._selectedLayerId;
728
713
  }
729
- /**
730
- * Reset's the applied filter
731
- * @protected
732
- */
733
- async resetFilter() {
734
- const prevLayer = await getLayerOrTable(this.mapView, this._prevSelectedLayerId);
735
- prevLayer.definitionExpression = this._filterInitState.initDefExpressions[this._prevSelectedLayerId];
736
- void this._handleFilterListReset();
737
- }
738
714
  /**
739
715
  * On back from filter panel get the filter's init state
740
716
  * @protected
741
717
  */
742
718
  async backFromFilterPanel() {
743
- this._filterInitState = await this._filterList.getFilterInitState();
719
+ if (this._filterList != null) {
720
+ this._currentLayerExpressions = await this._filterList.getCurrentLayerExpressions();
721
+ }
744
722
  await this._featureList.refresh();
745
723
  this.backFromSelectedPanel();
746
724
  }
@@ -855,9 +833,8 @@ export class CrowdsourceReporter {
855
833
  * @protected
856
834
  */
857
835
  getFeatureListFlowItem(layerId, layerName) {
858
- const layerExpressions = this.layerExpressions?.filter((exp) => exp.id === this._selectedLayerId);
859
836
  const canCreateReports = this._getLayersConfig(this._selectedLayerId)?.reporting && this._layerItemsHash[this._selectedLayerId].supportsAdd;
860
- const showFilterIcon = layerExpressions?.length > 0;
837
+ const showFilterIcon = this._currentLayerExpressions?.length > 0;
861
838
  return (h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: layerName, loading: this._showLoadingIndicator, onCalciteFlowItemBack: this.backFromSelectedPanel.bind(this) }, this._toggleSort(), h("calcite-action", { icon: "sort-ascending-arrow", id: "sort-popover", slot: "header-actions-end", text: this._translations.sort, title: this._translations.sort }), showFilterIcon && h("calcite-action", { icon: "filter", indicator: this._filterActive, onClick: () => { this._flowItems = [...this._flowItems, "filter-panel"]; }, slot: "header-actions-end", text: this._translations.filter, title: this._translations.filter }), this.isMobile && this.getActionToExpandCollapsePanel(), this.enableNewReports && canCreateReports &&
862
839
  h("calcite-button", { appearance: "solid", onClick: this.navigateToCreateFeature.bind(this), slot: "footer", width: "full" }, this.reportButtonText ? this.reportButtonText : this._translations.createReportButtonText), h("calcite-panel", { "full-height": true }, h("feature-list", { applyLayerViewFilter: this.showMyReportsOnly, class: "height-full", highlightOnHover: true, locale: this.locale, mapView: this.mapView, noFeaturesFoundMsg: this._translations.featureErrorMsg, onFeatureSelect: this.onFeatureSelectFromList.bind(this), pageSize: 30, ref: el => this._featureList = el, reportingOptions: this.reportingOptions, selectedLayerId: layerId, showFeatureSymbol: this.showFeatureSymbol, sortingInfo: this._updatedSorting }))));
863
840
  }
@@ -867,8 +844,7 @@ export class CrowdsourceReporter {
867
844
  * @protected
868
845
  */
869
846
  getFilterPanel() {
870
- const currentLayersExpressions = this.layerExpressions ? this.layerExpressions.filter((exp) => exp.id === this._selectedLayerId) : [];
871
- return (h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: this._translations?.filterLayerTitle?.replace("{{title}}", this._selectedLayerName), loading: this._showLoadingIndicator, onCalciteFlowItemBack: this.backFromFilterPanel.bind(this) }, this.isMobile && this.getActionToExpandCollapsePanel(), h("div", { class: "width-full", slot: "footer" }, h("div", { class: "width-full", slot: "footer" }, h("calcite-button", { appearance: "solid", class: "footer-top-button footer-button", disabled: !this._filterActive, onClick: () => { void this._filterList?.forceReset(); }, width: "full" }, this._translations.resetFilter), h("calcite-button", { appearance: "outline", class: "footer-button", onClick: this.backFromFilterPanel.bind(this), width: "full" }, this._translations.close))), h("calcite-panel", { "full-height": true }, h("instant-apps-filter-list", { autoUpdateUrl: false, closeBtnOnClick: () => undefined, comboboxOverlayPositioning: "fixed", layerExpressions: currentLayersExpressions, onFilterListReset: () => this._handleFilterListReset(), onFilterUpdate: () => this._handleFilterUpdate(this._filterList.filterCount > 0), ref: (el) => this._filterList = el, resetBtn: false, resetFiltersOnDisconnect: false, view: this.mapView, zoomBtn: false }))));
847
+ return (h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: this._translations?.filterLayerTitle?.replace("{{title}}", this._selectedLayerName), loading: this._showLoadingIndicator, onCalciteFlowItemBack: this.backFromFilterPanel.bind(this) }, this.isMobile && this.getActionToExpandCollapsePanel(), h("div", { class: "width-full", slot: "footer" }, h("div", { class: "width-full", slot: "footer" }, h("calcite-button", { appearance: "solid", class: "footer-top-button footer-button", disabled: !this._filterActive, onClick: this.resetFilterList.bind(this), width: "full" }, this._translations.resetFilter), h("calcite-button", { appearance: "outline", class: "footer-button", onClick: this.backFromFilterPanel.bind(this), width: "full" }, this._translations.close))), h("calcite-panel", { "full-height": true }, h("instant-apps-filter-list", { autoUpdateUrl: false, closeBtnOnClick: () => undefined, comboboxOverlayPositioning: "fixed", layerExpressions: this._currentLayerExpressions, onFilterListReset: () => this._handleFilterListReset(), onFilterUpdate: () => this._handleFilterUpdate(this._filterList.filterCount > 0), ref: (el) => this._filterList = el, resetBtn: false, resetFiltersOnDisconnect: false, view: this.mapView, zoomBtn: false }))));
872
848
  }
873
849
  /**
874
850
  * Returns the calcite-flow item for feature details
@@ -928,6 +904,7 @@ export class CrowdsourceReporter {
928
904
  else {
929
905
  if (this._editableLayerIds.length > 1) {
930
906
  void this.setSelectedLayer('', '');
907
+ void this.handlePrevLayersFilter();
931
908
  }
932
909
  this._currentFeatureId = '';
933
910
  }
@@ -1184,7 +1161,8 @@ export class CrowdsourceReporter {
1184
1161
  detail: this._editableLayerIds
1185
1162
  };
1186
1163
  await this.layerListLoaded(evt);
1187
- void this.setSelectedLayer(this._validLayers[0].id, this._validLayers[0].title);
1164
+ await this.setSelectedLayer(this._validLayers[0].id, this._validLayers[0].title);
1165
+ void this.handleSelectedLayersFilter();
1188
1166
  }
1189
1167
  /**
1190
1168
  * Updates the share url for current selected feature
@@ -1244,6 +1222,91 @@ export class CrowdsourceReporter {
1244
1222
  }
1245
1223
  }
1246
1224
  }
1225
+ /**
1226
+ * Handles updating the current layer expressions and definition expression for the selected layer
1227
+ * @protected
1228
+ */
1229
+ async handleSelectedLayersFilter() {
1230
+ if (this._selectedLayer) {
1231
+ this._currentLayerExpressions = this.layerExpressions ? this.layerExpressions.filter(exp => exp.id === this._selectedLayerId) : [];
1232
+ this.setActiveDefinitionExpressions();
1233
+ }
1234
+ }
1235
+ /**
1236
+ * Handles updating the previous layer's definition expression to it's initial definition expression
1237
+ * @protected
1238
+ */
1239
+ async handlePrevLayersFilter() {
1240
+ if (this._prevSelectedLayerId) {
1241
+ const prevLayer = await getLayerOrTable(this.mapView, this._prevSelectedLayerId);
1242
+ if (prevLayer) {
1243
+ prevLayer.definitionExpression = this._initDefExpressions[this._prevSelectedLayerId];
1244
+ }
1245
+ }
1246
+ }
1247
+ /**
1248
+ * Resets the selected layer's definition expression with the initial definition expression
1249
+ * @protected
1250
+ */
1251
+ resetFilterList() {
1252
+ void this._filterList?.forceReset();
1253
+ if (this._selectedLayer != null) {
1254
+ this._selectedLayer.definitionExpression = this._initDefExpressions[this._selectedLayerId];
1255
+ this._filterActive = false;
1256
+ }
1257
+ }
1258
+ /**
1259
+ * Sets the active definition expressions for the selected layer
1260
+ * @protected
1261
+ */
1262
+ setActiveDefinitionExpressions() {
1263
+ if (this._selectedLayer == null) {
1264
+ return;
1265
+ }
1266
+ const defExpressions = [];
1267
+ if (this._currentLayerExpressions?.length > 0) {
1268
+ const layerExpression = this._currentLayerExpressions[0];
1269
+ for (const expression of layerExpression.expressions) {
1270
+ const { active, definitionExpression } = expression;
1271
+ if (active && definitionExpression) {
1272
+ defExpressions.push(`(${definitionExpression})`);
1273
+ }
1274
+ }
1275
+ this._filterActive = defExpressions.length > 0;
1276
+ this.updateFilterLayerDefExpression(defExpressions, layerExpression.operator);
1277
+ }
1278
+ }
1279
+ /**
1280
+ * Updates the selected layer's definition expression based on the active expressions
1281
+ * @protected
1282
+ */
1283
+ updateFilterLayerDefExpression(defExpressions, operator) {
1284
+ const initDefExpression = this._initDefExpressions[this._selectedLayerId];
1285
+ const combinedExpressions = defExpressions?.length > 0 && initDefExpression != null
1286
+ ? `(${defExpressions.join(operator)}) AND (${initDefExpression})`
1287
+ : defExpressions.length > 0
1288
+ ? defExpressions.join(operator)
1289
+ : initDefExpression;
1290
+ this._selectedLayer.definitionExpression = combinedExpressions;
1291
+ }
1292
+ /**
1293
+ * Sets the initial definition expressions for all the feature layers
1294
+ * @protected
1295
+ */
1296
+ setInitExpressions() {
1297
+ this._initDefExpressions = {};
1298
+ if (this.mapView == null) {
1299
+ return;
1300
+ }
1301
+ const map = this.mapView.map;
1302
+ map.allLayers.concat(map.allTables).forEach(layer => {
1303
+ if (layer.type !== "feature") {
1304
+ return;
1305
+ }
1306
+ const fl = layer;
1307
+ this._initDefExpressions[fl.id] = fl.definitionExpression;
1308
+ });
1309
+ }
1247
1310
  static get is() { return "crowdsource-reporter"; }
1248
1311
  static get originalStyleUrls() {
1249
1312
  return {
@@ -75,7 +75,7 @@ export class SolutionSpatialRef {
75
75
  }
76
76
  render() {
77
77
  this._updateUIFromStore();
78
- return (h(Host, { key: 'c4d6b7debb3852da999002bd1d9394ba4a4f2da8' }, h("label", { key: 'e16a28157db4c3aece6a00460816c3394f1f9198', class: "switch-label" }, h("calcite-switch", { key: '48d3b1c12aa93c50ccf424ccaf0a810855227b8d', checked: this.enabled, class: "spatial-ref-switch", onCalciteSwitchChange: (event) => this.enabled = event.target.checked, scale: "m" }), this._translations.enableSpatialReference), h("br", { key: '0e7eb35accdccef9f17e0a24b17180d25c4f054a' }), h("div", { key: '257e130fdda5e42a8c40662f21c3d315f91562c7', class: "spatial-ref-component", id: "spatialRefDefn" }, this._renderFeatureServicesList(this.featureServices)), h("label", { key: 'd7581971bb310c6c4b0fb1015db59a359da54b90', class: "switch-label spatial-ref-component" }, h("calcite-switch", { key: '3045b179955101fc5baff8ca09cb10d0077e35ca', checked: this.enableDefault, class: "spatial-ref-switch", disabled: !this.enabled, onCalciteSwitchChange: (event) => this.enableDefault = event.target.checked, scale: "m" }), this._translations.enableDefaultSpatialReference)));
78
+ return (h(Host, { key: 'b8775ad1a6a18c0b32d020c02d6f9fe13f5d578a' }, h("label", { key: 'd10fa03d4d127579eed4fec2c6c907dc46166bdf', class: "switch-label" }, h("calcite-switch", { key: 'ce47d98234008f377d674851ce77c68ebaa4fd71', checked: this.enabled, class: "spatial-ref-switch", onCalciteSwitchChange: (event) => this.enabled = event.target.checked, scale: "m" }), this._translations.enableSpatialReference), h("br", { key: '54dc5ccf3fec55650f62d8dbeb09071c8e88805c' }), h("div", { key: '03257e474d254e4d5a0dd10ac7ab6e8b88f85d54', class: "spatial-ref-component", id: "spatialRefDefn" }, this._renderFeatureServicesList(this.featureServices)), h("label", { key: 'fac415766affa3b1620ce6a5c3d5ef900b25944f', class: "switch-label spatial-ref-component" }, h("calcite-switch", { key: '611b69b0895267702a69a70436033274d3d28892', checked: this.enableDefault, class: "spatial-ref-switch", disabled: !this.enabled, onCalciteSwitchChange: (event) => this.enableDefault = event.target.checked, scale: "m" }), this._translations.enableDefaultSpatialReference)));
79
79
  }
80
80
  //--------------------------------------------------------------------------
81
81
  //
@@ -345,7 +345,7 @@ export class SolutionSpatialRef {
345
345
  },
346
346
  "locale": {
347
347
  "type": "string",
348
- "mutable": false,
348
+ "mutable": true,
349
349
  "complexType": {
350
350
  "original": "string",
351
351
  "resolved": "string",
@@ -248,17 +248,17 @@ const CrowdsourceReporter$1 = /*@__PURE__*/ proxyCustomElement(class Crowdsource
248
248
  */
249
249
  _formElements = [];
250
250
  /**
251
- * string[]: URL params set by using filters.
251
+ * string: Previous selected layer id
252
252
  */
253
- _filterUrlParams;
253
+ _prevSelectedLayerId;
254
254
  /**
255
- * FilterInitState: filter's init state
255
+ * ILayerExpression[]: current LayerExpressions based on the selected layer
256
256
  */
257
- _filterInitState;
257
+ _currentLayerExpressions;
258
258
  /**
259
- * string: Previous selected layer id
259
+ * { [key: string]: string }: definitionExpressions for each layer
260
260
  */
261
- _prevSelectedLayerId;
261
+ _initDefExpressions;
262
262
  //--------------------------------------------------------------------------
263
263
  //
264
264
  // Watch handlers
@@ -283,6 +283,7 @@ const CrowdsourceReporter$1 = /*@__PURE__*/ proxyCustomElement(class Crowdsource
283
283
  */
284
284
  async mapViewWatchHandler() {
285
285
  await this.mapView.when(async () => {
286
+ this.setInitExpressions();
286
287
  await this.setMapView();
287
288
  });
288
289
  }
@@ -361,15 +362,25 @@ const CrowdsourceReporter$1 = /*@__PURE__*/ proxyCustomElement(class Crowdsource
361
362
  this._layers = this.reportingOptions ? Object.keys(this.reportingOptions).filter((layerId) => {
362
363
  return this.reportingOptions[layerId].visible;
363
364
  }) : [];
365
+ this.setInitExpressions();
364
366
  await this.setMapView();
365
367
  });
366
368
  }
369
+ /**
370
+ * StencilJS: Called before every render().
371
+ * Update the filter list's initial definition expressions when the filter list component is available
372
+ */
373
+ componentWillRender() {
374
+ if (this._flowItems.includes('filter-panel')) {
375
+ void this._filterList?.updateInitDefExpressions({ initDefExpressions: this._initDefExpressions });
376
+ }
377
+ }
367
378
  /**
368
379
  * Renders the component.
369
380
  */
370
381
  render() {
371
382
  const themeClass = this.theme === "dark" ? "calcite-mode-dark" : "calcite-mode-light";
372
- return (h(Host, { key: 'fbe7fdc13c462e0fe155107ac784f03b3922d624' }, this._reportSubmitted && h("calcite-alert", { key: '9bcf7856ad01e7bc59142a862c50b9d84c443268', "auto-close": true, class: themeClass + " report-submitted-msg", icon: "check-circle", kind: "success", label: "", onCalciteAlertClose: () => { this._reportSubmitted = false; }, open: true, placement: "top" }, h("div", { key: '7b81a7c8b3d66159a790ab3d13be9f1b65a6202e', slot: "message" }, this.reportSubmittedMessage ? this.reportSubmittedMessage : this._translations.submitMsg)), this._featureCreationFailedErrorMsg && h("calcite-alert", { key: 'ee2f17e3326ef7c60fb2ee06ed313fd28cf7084a', "auto-close": true, class: themeClass, icon: "x-octagon", kind: "danger", label: "", onCalciteAlertClose: () => { this._featureCreationFailedErrorMsg = ""; }, open: true, placement: "top" }, h("div", { key: 'b356832ee6d4d16a84cdea0abb6b1c677f9ca1f6', slot: "title" }, this._translations.error), h("div", { key: '8aa16df1114b75b6a3e2a76de7fb5c7cbc5d3632', slot: "message" }, this._featureCreationFailedErrorMsg)), this._commentSubmitted && h("calcite-alert", { key: 'e99693c23ef18b62daf892fccaacbbfe2486702d', "auto-close": true, class: 'report-submitted ' + themeClass, icon: "check-circle", kind: "success", label: "", onCalciteAlertClose: () => { this._commentSubmitted = false; }, open: true, placement: "top" }, h("div", { key: '58ccda0d3782dbe70d346b973b7648f8ae4c8c8f', slot: "message" }, this.commentSubmittedMessage || this._translations.commentSubmittedMsg)), this._addingCommentFailed && h("calcite-alert", { key: 'e49e9e3b33df17dd90b3263bec6c17566f6f7b1b', "auto-close": true, class: themeClass, icon: "x-octagon", kind: "danger", label: "", onCalciteAlertClose: () => { this._addingCommentFailed = false; }, open: true, placement: "top" }, h("div", { key: 'cfb88dd323ead1398cd73849f68a9c2846ef9d14', slot: "title" }, this._translations.error), h("div", { key: 'b27e8983a74c8613e569400b7c7ad0b14d43f323', slot: "message" }, this._translations.addingCommentFailedMsg)), h("div", { key: '7ac3d49d6383d2a88e54d91fa00e2c81aa91a890' }, h("calcite-shell", { key: '709e673f4e9261b4283c7593926d605c8a049abd', "content-behind": true }, this._getReporter()))));
383
+ return (h(Host, { key: 'f1dd6d85210210a73fff30a5d98370da1834be7b' }, this._reportSubmitted && h("calcite-alert", { key: 'b84760fcbf4bfcf0f038be272f74eda97ce17bd9', "auto-close": true, class: themeClass + " report-submitted-msg", icon: "check-circle", kind: "success", label: "", onCalciteAlertClose: () => { this._reportSubmitted = false; }, open: true, placement: "top" }, h("div", { key: '27aa04dd8575ad27898f7848bc2733a03a33e70f', slot: "message" }, this.reportSubmittedMessage ? this.reportSubmittedMessage : this._translations.submitMsg)), this._featureCreationFailedErrorMsg && h("calcite-alert", { key: '3fc2721bed573ad10bbb1c81af126e2e8ca90b12', "auto-close": true, class: themeClass, icon: "x-octagon", kind: "danger", label: "", onCalciteAlertClose: () => { this._featureCreationFailedErrorMsg = ""; }, open: true, placement: "top" }, h("div", { key: '4993e5c5b52d650b094c2890d0e4516cc87ffb69', slot: "title" }, this._translations.error), h("div", { key: '272b17f4c0239d8b295d6f2c0c02f1ba236d840d', slot: "message" }, this._featureCreationFailedErrorMsg)), this._commentSubmitted && h("calcite-alert", { key: '5b9e1a2bd129888ec0764ad9b05e5056653d3c33', "auto-close": true, class: 'report-submitted ' + themeClass, icon: "check-circle", kind: "success", label: "", onCalciteAlertClose: () => { this._commentSubmitted = false; }, open: true, placement: "top" }, h("div", { key: 'bd428297f5fe85cbf7edc42c61c64c299d7954b7', slot: "message" }, this.commentSubmittedMessage || this._translations.commentSubmittedMsg)), this._addingCommentFailed && h("calcite-alert", { key: '2aa1927ca27f9ec15a16f8e68905a1cf203ef833', "auto-close": true, class: themeClass, icon: "x-octagon", kind: "danger", label: "", onCalciteAlertClose: () => { this._addingCommentFailed = false; }, open: true, placement: "top" }, h("div", { key: '4bff5fb03586edf0f9ea21649d1de4c34034e539', slot: "title" }, this._translations.error), h("div", { key: '7ea6c71dbbac15c2f43242ba00c9e461177051a1', slot: "message" }, this._translations.addingCommentFailedMsg)), h("div", { key: '3aa6bfc19a1e82ab90d2ab42aa9a577b3a2b6d8f' }, h("calcite-shell", { key: 'f27355d4f655c0a0931158f38f0be3eb28f6c4d4', "content-behind": true }, this._getReporter()))));
373
384
  }
374
385
  //--------------------------------------------------------------------------
375
386
  //
@@ -433,7 +444,6 @@ const CrowdsourceReporter$1 = /*@__PURE__*/ proxyCustomElement(class Crowdsource
433
444
  break;
434
445
  case "filter-panel":
435
446
  renderLists.push(this.getFilterPanel());
436
- void this._restoreFilters();
437
447
  break;
438
448
  case "feature-details":
439
449
  renderLists.push(this.getFeatureDetailsFlowItem());
@@ -480,20 +490,6 @@ const CrowdsourceReporter$1 = /*@__PURE__*/ proxyCustomElement(class Crowdsource
480
490
  return (h("calcite-popover", { autoClose: true, label: "", offsetDistance: 0, placement: this.isMobile ? "leading-start" : "bottom-start", pointerDisabled: true, referenceElement: "sort-popover" }, h("calcite-list", { "selection-mode": "single" }, h("calcite-list-item", { label: this._translations.sortNewest, onCalciteListItemSelect: () => { void this.sortOptionClick(this._selectedLayer.objectIdField, "desc", "sortNewest"); }, selected: this._updatedSortOption === "sortNewest", value: "sortNewest" }), h("calcite-list-item", { label: this._translations.sortOldest, onCalciteListItemSelect: () => { void this.sortOptionClick(this._selectedLayer.objectIdField, "asc", "sortOldest"); }, selected: this._updatedSortOption === "sortOldest", value: "sortOldest" }), canSortByVotes &&
481
491
  h(Fragment, null, h("calcite-list-item", { label: this._translations.sortHighestVoted, onCalciteListItemSelect: () => { void this.sortOptionClick(this.reportingOptions[this._selectedLayerId].likeField, "desc", "sortHighestVoted"); }, selected: this._updatedSortOption === "sortHighestVoted", value: "sortHighestVoted" }), h("calcite-list-item", { label: this._translations.sortLowestVoted, onCalciteListItemSelect: () => { void this.sortOptionClick(this.reportingOptions[this._selectedLayerId].likeField, "asc", "sortLowestVoted"); }, selected: this._updatedSortOption === "sortLowestVoted", value: "sortLowestVoted" })))));
482
492
  }
483
- /**
484
- * Restores the applied filters
485
- * @protected
486
- */
487
- _restoreFilters() {
488
- // call the restore function when instant-apps-filter-list is ready
489
- setTimeout(() => {
490
- const canRestoreFilter = this._filterList && this._filterUrlParams && this._filterInitState;
491
- if (canRestoreFilter) {
492
- void this._filterList.restoreFilters(this._filterUrlParams[0], this._filterInitState);
493
- }
494
- this._filterInitState = null;
495
- }, 200);
496
- }
497
493
  /**
498
494
  * Reset the filter
499
495
  * @protected
@@ -501,8 +497,6 @@ const CrowdsourceReporter$1 = /*@__PURE__*/ proxyCustomElement(class Crowdsource
501
497
  async _handleFilterListReset() {
502
498
  //on reset filter list reset the filter states
503
499
  this._filterActive = false;
504
- this._filterUrlParams = null;
505
- this._filterInitState = null;
506
500
  }
507
501
  /**
508
502
  * Check if the layers definitionExpression has been modified and update the feature list depending on the applied filters
@@ -510,9 +504,7 @@ const CrowdsourceReporter$1 = /*@__PURE__*/ proxyCustomElement(class Crowdsource
510
504
  */
511
505
  async _handleFilterUpdate(active) {
512
506
  this._showLoadingIndicator = true;
513
- //if filters are applied the url params will be generated
514
507
  this._filterActive = active;
515
- this._filterUrlParams = this._filterList.urlParams.getAll('filter');
516
508
  await this._featureList.refresh();
517
509
  this._showLoadingIndicator = false;
518
510
  }
@@ -679,10 +671,6 @@ const CrowdsourceReporter$1 = /*@__PURE__*/ proxyCustomElement(class Crowdsource
679
671
  if (evt.detail.layerId && evt.detail.layerName) {
680
672
  await this.setSelectedLayer(evt.detail.layerId, evt.detail.layerName);
681
673
  }
682
- // reset the applied filter when switching to another layer
683
- if (this._selectedLayerId !== this._prevSelectedLayerId && this._filterActive) {
684
- await this.resetFilter();
685
- }
686
674
  void this.updateNonVisibleLayersOnMap(true);
687
675
  // get the form template elements to pass in create-feature to create a LEVELID field in feature-form
688
676
  this._getFormElements();
@@ -754,28 +742,18 @@ const CrowdsourceReporter$1 = /*@__PURE__*/ proxyCustomElement(class Crowdsource
754
742
  };
755
743
  this._updatedSortOption = "sortNewest";
756
744
  await this.setSelectedLayer(evt.detail.layerId, evt.detail.layerName);
745
+ void this.handleSelectedLayersFilter();
757
746
  this._flowItems = [...this._flowItems, "feature-list"];
758
- // reset the applied filter when switching to another layer
759
- if (this._selectedLayerId !== this._prevSelectedLayerId && this._filterActive) {
760
- await this.resetFilter();
761
- }
762
747
  this._prevSelectedLayerId = this._selectedLayerId;
763
748
  }
764
- /**
765
- * Reset's the applied filter
766
- * @protected
767
- */
768
- async resetFilter() {
769
- const prevLayer = await getLayerOrTable(this.mapView, this._prevSelectedLayerId);
770
- prevLayer.definitionExpression = this._filterInitState.initDefExpressions[this._prevSelectedLayerId];
771
- void this._handleFilterListReset();
772
- }
773
749
  /**
774
750
  * On back from filter panel get the filter's init state
775
751
  * @protected
776
752
  */
777
753
  async backFromFilterPanel() {
778
- this._filterInitState = await this._filterList.getFilterInitState();
754
+ if (this._filterList != null) {
755
+ this._currentLayerExpressions = await this._filterList.getCurrentLayerExpressions();
756
+ }
779
757
  await this._featureList.refresh();
780
758
  this.backFromSelectedPanel();
781
759
  }
@@ -890,9 +868,8 @@ const CrowdsourceReporter$1 = /*@__PURE__*/ proxyCustomElement(class Crowdsource
890
868
  * @protected
891
869
  */
892
870
  getFeatureListFlowItem(layerId, layerName) {
893
- const layerExpressions = this.layerExpressions?.filter((exp) => exp.id === this._selectedLayerId);
894
871
  const canCreateReports = this._getLayersConfig(this._selectedLayerId)?.reporting && this._layerItemsHash[this._selectedLayerId].supportsAdd;
895
- const showFilterIcon = layerExpressions?.length > 0;
872
+ const showFilterIcon = this._currentLayerExpressions?.length > 0;
896
873
  return (h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: layerName, loading: this._showLoadingIndicator, onCalciteFlowItemBack: this.backFromSelectedPanel.bind(this) }, this._toggleSort(), h("calcite-action", { icon: "sort-ascending-arrow", id: "sort-popover", slot: "header-actions-end", text: this._translations.sort, title: this._translations.sort }), showFilterIcon && h("calcite-action", { icon: "filter", indicator: this._filterActive, onClick: () => { this._flowItems = [...this._flowItems, "filter-panel"]; }, slot: "header-actions-end", text: this._translations.filter, title: this._translations.filter }), this.isMobile && this.getActionToExpandCollapsePanel(), this.enableNewReports && canCreateReports &&
897
874
  h("calcite-button", { appearance: "solid", onClick: this.navigateToCreateFeature.bind(this), slot: "footer", width: "full" }, this.reportButtonText ? this.reportButtonText : this._translations.createReportButtonText), h("calcite-panel", { "full-height": true }, h("feature-list", { applyLayerViewFilter: this.showMyReportsOnly, class: "height-full", highlightOnHover: true, locale: this.locale, mapView: this.mapView, noFeaturesFoundMsg: this._translations.featureErrorMsg, onFeatureSelect: this.onFeatureSelectFromList.bind(this), pageSize: 30, ref: el => this._featureList = el, reportingOptions: this.reportingOptions, selectedLayerId: layerId, showFeatureSymbol: this.showFeatureSymbol, sortingInfo: this._updatedSorting }))));
898
875
  }
@@ -902,8 +879,7 @@ const CrowdsourceReporter$1 = /*@__PURE__*/ proxyCustomElement(class Crowdsource
902
879
  * @protected
903
880
  */
904
881
  getFilterPanel() {
905
- const currentLayersExpressions = this.layerExpressions ? this.layerExpressions.filter((exp) => exp.id === this._selectedLayerId) : [];
906
- return (h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: this._translations?.filterLayerTitle?.replace("{{title}}", this._selectedLayerName), loading: this._showLoadingIndicator, onCalciteFlowItemBack: this.backFromFilterPanel.bind(this) }, this.isMobile && this.getActionToExpandCollapsePanel(), h("div", { class: "width-full", slot: "footer" }, h("div", { class: "width-full", slot: "footer" }, h("calcite-button", { appearance: "solid", class: "footer-top-button footer-button", disabled: !this._filterActive, onClick: () => { void this._filterList?.forceReset(); }, width: "full" }, this._translations.resetFilter), h("calcite-button", { appearance: "outline", class: "footer-button", onClick: this.backFromFilterPanel.bind(this), width: "full" }, this._translations.close))), h("calcite-panel", { "full-height": true }, h("instant-apps-filter-list", { autoUpdateUrl: false, closeBtnOnClick: () => undefined, comboboxOverlayPositioning: "fixed", layerExpressions: currentLayersExpressions, onFilterListReset: () => this._handleFilterListReset(), onFilterUpdate: () => this._handleFilterUpdate(this._filterList.filterCount > 0), ref: (el) => this._filterList = el, resetBtn: false, resetFiltersOnDisconnect: false, view: this.mapView, zoomBtn: false }))));
882
+ return (h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: this._translations?.filterLayerTitle?.replace("{{title}}", this._selectedLayerName), loading: this._showLoadingIndicator, onCalciteFlowItemBack: this.backFromFilterPanel.bind(this) }, this.isMobile && this.getActionToExpandCollapsePanel(), h("div", { class: "width-full", slot: "footer" }, h("div", { class: "width-full", slot: "footer" }, h("calcite-button", { appearance: "solid", class: "footer-top-button footer-button", disabled: !this._filterActive, onClick: this.resetFilterList.bind(this), width: "full" }, this._translations.resetFilter), h("calcite-button", { appearance: "outline", class: "footer-button", onClick: this.backFromFilterPanel.bind(this), width: "full" }, this._translations.close))), h("calcite-panel", { "full-height": true }, h("instant-apps-filter-list", { autoUpdateUrl: false, closeBtnOnClick: () => undefined, comboboxOverlayPositioning: "fixed", layerExpressions: this._currentLayerExpressions, onFilterListReset: () => this._handleFilterListReset(), onFilterUpdate: () => this._handleFilterUpdate(this._filterList.filterCount > 0), ref: (el) => this._filterList = el, resetBtn: false, resetFiltersOnDisconnect: false, view: this.mapView, zoomBtn: false }))));
907
883
  }
908
884
  /**
909
885
  * Returns the calcite-flow item for feature details
@@ -963,6 +939,7 @@ const CrowdsourceReporter$1 = /*@__PURE__*/ proxyCustomElement(class Crowdsource
963
939
  else {
964
940
  if (this._editableLayerIds.length > 1) {
965
941
  void this.setSelectedLayer('', '');
942
+ void this.handlePrevLayersFilter();
966
943
  }
967
944
  this._currentFeatureId = '';
968
945
  }
@@ -1219,7 +1196,8 @@ const CrowdsourceReporter$1 = /*@__PURE__*/ proxyCustomElement(class Crowdsource
1219
1196
  detail: this._editableLayerIds
1220
1197
  };
1221
1198
  await this.layerListLoaded(evt);
1222
- void this.setSelectedLayer(this._validLayers[0].id, this._validLayers[0].title);
1199
+ await this.setSelectedLayer(this._validLayers[0].id, this._validLayers[0].title);
1200
+ void this.handleSelectedLayersFilter();
1223
1201
  }
1224
1202
  /**
1225
1203
  * Updates the share url for current selected feature
@@ -1279,6 +1257,91 @@ const CrowdsourceReporter$1 = /*@__PURE__*/ proxyCustomElement(class Crowdsource
1279
1257
  }
1280
1258
  }
1281
1259
  }
1260
+ /**
1261
+ * Handles updating the current layer expressions and definition expression for the selected layer
1262
+ * @protected
1263
+ */
1264
+ async handleSelectedLayersFilter() {
1265
+ if (this._selectedLayer) {
1266
+ this._currentLayerExpressions = this.layerExpressions ? this.layerExpressions.filter(exp => exp.id === this._selectedLayerId) : [];
1267
+ this.setActiveDefinitionExpressions();
1268
+ }
1269
+ }
1270
+ /**
1271
+ * Handles updating the previous layer's definition expression to it's initial definition expression
1272
+ * @protected
1273
+ */
1274
+ async handlePrevLayersFilter() {
1275
+ if (this._prevSelectedLayerId) {
1276
+ const prevLayer = await getLayerOrTable(this.mapView, this._prevSelectedLayerId);
1277
+ if (prevLayer) {
1278
+ prevLayer.definitionExpression = this._initDefExpressions[this._prevSelectedLayerId];
1279
+ }
1280
+ }
1281
+ }
1282
+ /**
1283
+ * Resets the selected layer's definition expression with the initial definition expression
1284
+ * @protected
1285
+ */
1286
+ resetFilterList() {
1287
+ void this._filterList?.forceReset();
1288
+ if (this._selectedLayer != null) {
1289
+ this._selectedLayer.definitionExpression = this._initDefExpressions[this._selectedLayerId];
1290
+ this._filterActive = false;
1291
+ }
1292
+ }
1293
+ /**
1294
+ * Sets the active definition expressions for the selected layer
1295
+ * @protected
1296
+ */
1297
+ setActiveDefinitionExpressions() {
1298
+ if (this._selectedLayer == null) {
1299
+ return;
1300
+ }
1301
+ const defExpressions = [];
1302
+ if (this._currentLayerExpressions?.length > 0) {
1303
+ const layerExpression = this._currentLayerExpressions[0];
1304
+ for (const expression of layerExpression.expressions) {
1305
+ const { active, definitionExpression } = expression;
1306
+ if (active && definitionExpression) {
1307
+ defExpressions.push(`(${definitionExpression})`);
1308
+ }
1309
+ }
1310
+ this._filterActive = defExpressions.length > 0;
1311
+ this.updateFilterLayerDefExpression(defExpressions, layerExpression.operator);
1312
+ }
1313
+ }
1314
+ /**
1315
+ * Updates the selected layer's definition expression based on the active expressions
1316
+ * @protected
1317
+ */
1318
+ updateFilterLayerDefExpression(defExpressions, operator) {
1319
+ const initDefExpression = this._initDefExpressions[this._selectedLayerId];
1320
+ const combinedExpressions = defExpressions?.length > 0 && initDefExpression != null
1321
+ ? `(${defExpressions.join(operator)}) AND (${initDefExpression})`
1322
+ : defExpressions.length > 0
1323
+ ? defExpressions.join(operator)
1324
+ : initDefExpression;
1325
+ this._selectedLayer.definitionExpression = combinedExpressions;
1326
+ }
1327
+ /**
1328
+ * Sets the initial definition expressions for all the feature layers
1329
+ * @protected
1330
+ */
1331
+ setInitExpressions() {
1332
+ this._initDefExpressions = {};
1333
+ if (this.mapView == null) {
1334
+ return;
1335
+ }
1336
+ const map = this.mapView.map;
1337
+ map.allLayers.concat(map.allTables).forEach(layer => {
1338
+ if (layer.type !== "feature") {
1339
+ return;
1340
+ }
1341
+ const fl = layer;
1342
+ this._initDefExpressions[fl.id] = fl.definitionExpression;
1343
+ });
1344
+ }
1282
1345
  static get watchers() { return {
1283
1346
  "isMobile": ["isMobileWatchHandler"],
1284
1347
  "locale": ["localeWatchHandler"],