@esri/solutions-components 0.8.7 → 0.8.9

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 (121) hide show
  1. package/dist/assets/t9n/crowdsource-reporter/resources.json +3 -1
  2. package/dist/assets/t9n/crowdsource-reporter/resources_en.json +3 -1
  3. package/dist/cjs/{calcite-action-menu_2.cjs.entry.js → calcite-action-menu_3.cjs.entry.js} +114 -7
  4. package/dist/cjs/calcite-alert_4.cjs.entry.js +46 -5
  5. package/dist/cjs/{calcite-input-date-picker_3.cjs.entry.js → calcite-block_5.cjs.entry.js} +691 -13
  6. package/dist/cjs/{calcite-combobox_5.cjs.entry.js → calcite-combobox_3.cjs.entry.js} +876 -844
  7. package/dist/cjs/calcite-dropdown_4.cjs.entry.js +1023 -0
  8. package/dist/cjs/{calcite-flow_5.cjs.entry.js → calcite-flow_6.cjs.entry.js} +327 -2
  9. package/dist/cjs/card-manager_3.cjs.entry.js +5 -5
  10. package/dist/cjs/crowdsource-manager.cjs.entry.js +5 -1
  11. package/dist/cjs/crowdsource-reporter.cjs.entry.js +122 -23
  12. package/dist/cjs/{downloadUtils-8b05d7cc.js → downloadUtils-dc349b1a.js} +2 -2
  13. package/dist/cjs/{index.es-e7587227.js → index.es-1830a1e6.js} +2 -2
  14. package/dist/cjs/loader.cjs.js +1 -1
  15. package/dist/cjs/map-select-tools_3.cjs.entry.js +8 -8
  16. package/dist/cjs/{mapViewUtils-3e0fa457.js → mapViewUtils-9dc05308.js} +11 -5
  17. package/dist/cjs/public-notification.cjs.entry.js +2 -2
  18. package/dist/cjs/solutions-components.cjs.js +1 -1
  19. package/dist/collection/collection-manifest.json +1 -0
  20. package/dist/collection/components/create-feature/create-feature.js +18 -0
  21. package/dist/collection/components/crowdsource-manager/crowdsource-manager.js +72 -0
  22. package/dist/collection/components/crowdsource-reporter/crowdsource-reporter.css +16 -0
  23. package/dist/collection/components/crowdsource-reporter/crowdsource-reporter.js +155 -71
  24. package/dist/collection/components/feature-details/feature-details.css +18 -0
  25. package/dist/collection/components/feature-details/feature-details.js +500 -0
  26. package/dist/collection/components/feature-details/test/feature-details.e2e.js +14 -0
  27. package/dist/collection/components/feature-details/test/feature-details.spec.js +22 -0
  28. package/dist/collection/components/feature-list/feature-list.js +14 -1
  29. package/dist/collection/components/info-card/info-card.css +15 -5
  30. package/dist/collection/components/info-card/info-card.js +178 -5
  31. package/dist/collection/components/layer-table/layer-table.js +2 -2
  32. package/dist/collection/components/map-card/map-card.js +1 -1
  33. package/dist/collection/components/map-select-tools/map-select-tools.js +5 -5
  34. package/dist/collection/components/refine-selection/refine-selection.js +1 -1
  35. package/dist/collection/demos/crowdsource-reporter.html +115 -1
  36. package/dist/collection/utils/interfaces.ts +4 -4
  37. package/dist/collection/utils/mapViewUtils.js +11 -5
  38. package/dist/collection/utils/mapViewUtils.ts +13 -5
  39. package/dist/components/create-feature2.js +4 -0
  40. package/dist/components/crowdsource-manager.js +8 -0
  41. package/dist/components/crowdsource-reporter.js +270 -85
  42. package/dist/components/feature-details.d.ts +11 -0
  43. package/dist/components/feature-details.js +11 -0
  44. package/dist/components/feature-details2.js +449 -0
  45. package/dist/components/feature-list2.js +14 -1
  46. package/dist/components/info-card2.js +53 -5
  47. package/dist/components/layer-table2.js +2 -2
  48. package/dist/components/map-card2.js +1 -1
  49. package/dist/components/map-select-tools2.js +5 -5
  50. package/dist/components/mapViewUtils.js +11 -5
  51. package/dist/components/refine-selection2.js +1 -1
  52. package/dist/esm/{calcite-action-menu_2.entry.js → calcite-action-menu_3.entry.js} +118 -12
  53. package/dist/esm/calcite-alert_4.entry.js +46 -5
  54. package/dist/esm/{calcite-input-date-picker_3.entry.js → calcite-block_5.entry.js} +688 -12
  55. package/dist/esm/{calcite-combobox_5.entry.js → calcite-combobox_3.entry.js} +878 -844
  56. package/dist/esm/calcite-date-picker-day_3.entry.js +1 -1
  57. package/dist/esm/calcite-dropdown_4.entry.js +1016 -0
  58. package/dist/esm/{calcite-flow_5.entry.js → calcite-flow_6.entry.js} +327 -3
  59. package/dist/esm/card-manager_3.entry.js +5 -5
  60. package/dist/esm/crowdsource-manager.entry.js +5 -1
  61. package/dist/esm/crowdsource-reporter.entry.js +122 -23
  62. package/dist/esm/{date-5630530d.js → date-0c026a8b.js} +1 -1
  63. package/dist/esm/{downloadUtils-0c1e4d7b.js → downloadUtils-df4f21f6.js} +2 -2
  64. package/dist/esm/{index.es-286e3cfa.js → index.es-904fb846.js} +2 -2
  65. package/dist/esm/loader.js +1 -1
  66. package/dist/esm/map-select-tools_3.entry.js +8 -8
  67. package/dist/esm/{mapViewUtils-253178f1.js → mapViewUtils-2ec19fb0.js} +11 -5
  68. package/dist/esm/public-notification.entry.js +2 -2
  69. package/dist/esm/solutions-components.js +1 -1
  70. package/dist/solutions-components/demos/crowdsource-reporter.html +115 -1
  71. package/dist/solutions-components/{p-813fd8a4.entry.js → p-29f518fd.entry.js} +2 -2
  72. package/dist/solutions-components/p-452fd697.entry.js +6 -0
  73. package/dist/solutions-components/p-511b1c91.entry.js +23 -0
  74. package/dist/solutions-components/p-577efb16.js +36 -0
  75. package/dist/solutions-components/{p-94de9279.js → p-5817d78c.js} +1 -1
  76. package/dist/solutions-components/p-602cd811.entry.js +17 -0
  77. package/dist/solutions-components/{p-15f9624a.entry.js → p-6557b703.entry.js} +1 -1
  78. package/dist/solutions-components/p-7269c49b.entry.js +6 -0
  79. package/dist/solutions-components/p-760bd17e.entry.js +6 -0
  80. package/dist/solutions-components/p-95fea07a.entry.js +17 -0
  81. package/dist/solutions-components/{p-212b02e7.js → p-ae4d86e8.js} +1 -1
  82. package/dist/solutions-components/{p-038fcd93.entry.js → p-c273ab7a.entry.js} +1 -1
  83. package/dist/solutions-components/p-d742b915.entry.js +29 -0
  84. package/dist/solutions-components/p-dfad61a8.entry.js +24 -0
  85. package/dist/solutions-components/{p-331b5d1e.js → p-fca434c8.js} +2 -2
  86. package/dist/solutions-components/p-fd82a00f.entry.js +6 -0
  87. package/dist/solutions-components/solutions-components.esm.js +1 -1
  88. package/dist/solutions-components/utils/interfaces.ts +4 -4
  89. package/dist/solutions-components/utils/mapViewUtils.ts +13 -5
  90. package/dist/types/components/create-feature/create-feature.d.ts +4 -4
  91. package/dist/types/components/crowdsource-manager/crowdsource-manager.d.ts +16 -0
  92. package/dist/types/components/crowdsource-reporter/crowdsource-reporter.d.ts +91 -18
  93. package/dist/types/components/feature-details/feature-details.d.ts +151 -0
  94. package/dist/types/components/feature-list/feature-list.d.ts +6 -0
  95. package/dist/types/components/info-card/info-card.d.ts +33 -1
  96. package/dist/types/components.d.ts +161 -28
  97. package/dist/types/preact.d.ts +6 -1
  98. package/dist/types/utils/interfaces.d.ts +4 -4
  99. package/dist/types/utils/mapViewUtils.d.ts +5 -3
  100. package/package.json +1 -1
  101. package/dist/cjs/calcite-block_2.cjs.entry.js +0 -652
  102. package/dist/cjs/calcite-graph_2.cjs.entry.js +0 -1055
  103. package/dist/cjs/calcite-scrim.cjs.entry.js +0 -125
  104. package/dist/cjs/utils-7bc7f595.js +0 -64
  105. package/dist/esm/calcite-block_2.entry.js +0 -647
  106. package/dist/esm/calcite-graph_2.entry.js +0 -1050
  107. package/dist/esm/calcite-scrim.entry.js +0 -121
  108. package/dist/esm/utils-9fb4104a.js +0 -61
  109. package/dist/solutions-components/p-04c37d69.entry.js +0 -17
  110. package/dist/solutions-components/p-0b92e4b1.entry.js +0 -11
  111. package/dist/solutions-components/p-238d3b5f.entry.js +0 -6
  112. package/dist/solutions-components/p-3af79063.js +0 -36
  113. package/dist/solutions-components/p-6db185bf.entry.js +0 -6
  114. package/dist/solutions-components/p-80b11ec1.entry.js +0 -17
  115. package/dist/solutions-components/p-aec06ce4.entry.js +0 -18
  116. package/dist/solutions-components/p-bfdf89c2.js +0 -11
  117. package/dist/solutions-components/p-c4ff3b52.entry.js +0 -17
  118. package/dist/solutions-components/p-ced067bd.entry.js +0 -17
  119. package/dist/solutions-components/p-d136eab0.entry.js +0 -23
  120. package/dist/solutions-components/p-e0446d5b.entry.js +0 -6
  121. package/dist/solutions-components/p-e8f13354.entry.js +0 -6
@@ -13,6 +13,7 @@
13
13
  "components/delete-button/delete-button.js",
14
14
  "components/edit-card/edit-card.js",
15
15
  "components/feature-comments/feature-comments.js",
16
+ "components/feature-details/feature-details.js",
16
17
  "components/feature-form-flow-item/feature-form-flow-item.js",
17
18
  "components/feature-list/feature-list.js",
18
19
  "components/features-flow-item/features-flow-item.js",
@@ -167,6 +167,7 @@ export class CreateFeature {
167
167
  //Add handle to watch featureTemplatesViewModel ready state and then start the creation
168
168
  const handle = this.reactiveUtils.watch(() => this._editor.viewModel.featureTemplatesViewModel.state, (state) => {
169
169
  if (state === 'ready') {
170
+ this.progressStatus.emit(0.5);
170
171
  void this.startCreate();
171
172
  }
172
173
  });
@@ -190,6 +191,7 @@ export class CreateFeature {
190
191
  //once the feature template is selected handle the event for formSubmit and sketch complete
191
192
  //also, hide the headers and footer in the editor as we will be showing our own submit and cancel button
192
193
  this._editor.viewModel.featureTemplatesViewModel.on('select', () => {
194
+ this.progressStatus.emit(0.75);
193
195
  setTimeout(() => {
194
196
  //on form submit
195
197
  this._editor.viewModel.featureFormViewModel.on('submit', this.submitted.bind(this));
@@ -197,6 +199,7 @@ export class CreateFeature {
197
199
  this._editor.viewModel.sketchViewModel.on("create", (evt) => {
198
200
  if (evt.state === "complete") {
199
201
  this.showSearchWidget = false;
202
+ this.progressStatus.emit(1);
200
203
  this.drawComplete.emit();
201
204
  }
202
205
  });
@@ -516,6 +519,21 @@ export class CreateFeature {
516
519
  "resolved": "boolean",
517
520
  "references": {}
518
521
  }
522
+ }, {
523
+ "method": "progressStatus",
524
+ "name": "progressStatus",
525
+ "bubbles": true,
526
+ "cancelable": true,
527
+ "composed": true,
528
+ "docs": {
529
+ "tags": [],
530
+ "text": "Emitted on demand when editor panel changes"
531
+ },
532
+ "complexType": {
533
+ "original": "number",
534
+ "resolved": "number",
535
+ "references": {}
536
+ }
519
537
  }];
520
538
  }
521
539
  static get methods() {
@@ -67,6 +67,10 @@ export class CrowdsourceManager {
67
67
  this.hideMapOnLoad = undefined;
68
68
  this.mapInfos = [];
69
69
  this.onlyShowUpdatableLayers = true;
70
+ this.popupHeaderColor = undefined;
71
+ this.popupHeaderHoverColor = undefined;
72
+ this.popupHeaderHoverTextColor = undefined;
73
+ this.popupHeaderTextColor = undefined;
70
74
  this.searchConfiguration = undefined;
71
75
  this.shareIncludeEmbed = undefined;
72
76
  this.shareIncludeSocial = undefined;
@@ -926,6 +930,74 @@ export class CrowdsourceManager {
926
930
  "reflect": false,
927
931
  "defaultValue": "true"
928
932
  },
933
+ "popupHeaderColor": {
934
+ "type": "string",
935
+ "mutable": false,
936
+ "complexType": {
937
+ "original": "string",
938
+ "resolved": "string",
939
+ "references": {}
940
+ },
941
+ "required": false,
942
+ "optional": false,
943
+ "docs": {
944
+ "tags": [],
945
+ "text": "string: The background color to apply to the popup header"
946
+ },
947
+ "attribute": "popup-header-color",
948
+ "reflect": false
949
+ },
950
+ "popupHeaderHoverColor": {
951
+ "type": "string",
952
+ "mutable": false,
953
+ "complexType": {
954
+ "original": "string",
955
+ "resolved": "string",
956
+ "references": {}
957
+ },
958
+ "required": false,
959
+ "optional": false,
960
+ "docs": {
961
+ "tags": [],
962
+ "text": "string: The color that will be displayed on hover when expanding the popup header"
963
+ },
964
+ "attribute": "popup-header-hover-color",
965
+ "reflect": false
966
+ },
967
+ "popupHeaderHoverTextColor": {
968
+ "type": "string",
969
+ "mutable": false,
970
+ "complexType": {
971
+ "original": "string",
972
+ "resolved": "string",
973
+ "references": {}
974
+ },
975
+ "required": false,
976
+ "optional": false,
977
+ "docs": {
978
+ "tags": [],
979
+ "text": "string: The font color that will be displayed on hover when expanding the popup header"
980
+ },
981
+ "attribute": "popup-header-hover-text-color",
982
+ "reflect": false
983
+ },
984
+ "popupHeaderTextColor": {
985
+ "type": "string",
986
+ "mutable": false,
987
+ "complexType": {
988
+ "original": "string",
989
+ "resolved": "string",
990
+ "references": {}
991
+ },
992
+ "required": false,
993
+ "optional": false,
994
+ "docs": {
995
+ "tags": [],
996
+ "text": "string: The font color to apply to the popup header"
997
+ },
998
+ "attribute": "popup-header-text-color",
999
+ "reflect": false
1000
+ },
929
1001
  "searchConfiguration": {
930
1002
  "type": "unknown",
931
1003
  "mutable": false,
@@ -49,6 +49,10 @@
49
49
  width: calc(100% - 20px);
50
50
  }
51
51
 
52
+ .progress-bar {
53
+ padding: 12px;
54
+ }
55
+
52
56
  .footer-top-button {
53
57
  padding-bottom: 7px;
54
58
  }
@@ -57,6 +61,18 @@
57
61
  height: 35px;
58
62
  }
59
63
 
64
+ .feature-pagination {
65
+ align-items: center;
66
+ margin: 5% 124%;
67
+ display: flex;
68
+ }
69
+
70
+ .pagination-count {
71
+ width: 32px;
72
+ color: var(--calcite-color-brand);
73
+ border-bottom: 1px solid var(--calcite-color-brand);
74
+ }
75
+
60
76
  .report-submitted-msg {
61
77
  position: absolute;
62
78
  z-index: 1000;
@@ -34,15 +34,12 @@ export class CrowdsourceReporter {
34
34
  this.enableComments = undefined;
35
35
  this.enableLogin = undefined;
36
36
  this.enableNewReports = undefined;
37
- this.layers = undefined;
38
37
  this.loginTitle = undefined;
39
38
  this.mapView = undefined;
40
39
  this.layerId = undefined;
41
40
  this.objectId = undefined;
42
41
  this.center = undefined;
43
42
  this.level = undefined;
44
- this.popupHeaderHoverColor = undefined;
45
- this.popupHeaderColor = undefined;
46
43
  this.reportButtonText = undefined;
47
44
  this.reportsHeader = undefined;
48
45
  this.reportingOptions = undefined;
@@ -56,6 +53,7 @@ export class CrowdsourceReporter {
56
53
  this.theme = "light";
57
54
  this.enableZoom = true;
58
55
  this.zoomToScale = undefined;
56
+ this.layerExpressions = undefined;
59
57
  this._mapInfo = undefined;
60
58
  this._flowItems = [];
61
59
  this._sidePanelCollapsed = false;
@@ -64,7 +62,11 @@ export class CrowdsourceReporter {
64
62
  this._selectedLayerName = undefined;
65
63
  this._reportSubmitted = false;
66
64
  this._showSubmitCancelButton = false;
65
+ this._loadingFeatureDetails = undefined;
67
66
  this._featureCreationFailedErrorMsg = undefined;
67
+ this._updatedProgressBarStatus = 0.25;
68
+ this._filterOpen = false;
69
+ this._filterActive = false;
68
70
  }
69
71
  //--------------------------------------------------------------------------
70
72
  //
@@ -85,6 +87,18 @@ export class CrowdsourceReporter {
85
87
  await this.setMapView();
86
88
  });
87
89
  }
90
+ /**
91
+ * On Feature details change update the Layer title and the current selected layer id
92
+ * @param evt Event hold the details of current feature graphic in the info-card
93
+ */
94
+ async selectionChanged(evt) {
95
+ void this.updatingFeatureDetails(true);
96
+ this.setCurrentFeature(evt.detail.selectedFeature[0]);
97
+ void this.highlightOnMap(evt.detail.selectedFeature[0]);
98
+ this.selectedFeatureIndex = evt.detail.selectedFeatureIndex;
99
+ //update the feature details to reflect the like dislike values
100
+ await this._featureDetails.refresh(evt.detail.selectedFeature[0]);
101
+ }
88
102
  //--------------------------------------------------------------------------
89
103
  //
90
104
  // Functions (lifecycle)
@@ -101,6 +115,10 @@ export class CrowdsourceReporter {
101
115
  await this._initModules();
102
116
  await this._getTranslations();
103
117
  await ((_a = this.mapView) === null || _a === void 0 ? void 0 : _a.when(async () => {
118
+ //set configured reporting layers array
119
+ this.layers = this.reportingOptions ? Object.keys(this.reportingOptions).filter((layerId) => {
120
+ return this.reportingOptions[layerId].reporting;
121
+ }) : [];
104
122
  await this.setMapView();
105
123
  }));
106
124
  }
@@ -109,7 +127,7 @@ export class CrowdsourceReporter {
109
127
  */
110
128
  render() {
111
129
  const themeClass = this.theme === "dark" ? "calcite-mode-dark" : "calcite-mode-light";
112
- return (h(Host, null, this._reportSubmitted && h("calcite-alert", { "auto-close": true, class: themeClass + " report-submitted-msg", icon: "check-circle", kind: "success", label: "", onCalciteAlertClose: () => { this._reportSubmitted = false; }, open: true, placement: "top" }, h("div", { slot: "message" }, this.reportSubmittedMessage ? this.reportSubmittedMessage : this._translations.submitMsg)), this._featureCreationFailedErrorMsg && h("calcite-alert", { "auto-close": true, class: themeClass, icon: "x-octagon", kind: "danger", label: "", onCalciteAlertClose: () => { this._featureCreationFailedErrorMsg = ""; }, open: true, placement: "top" }, h("div", { slot: "title" }, this._translations.error), h("div", { slot: "message" }, this._featureCreationFailedErrorMsg)), h("div", null, h("calcite-shell", { "content-behind": true }, this._getReporter()))));
130
+ return (h(Host, null, this._reportSubmitted && h("calcite-alert", { "auto-close": true, class: themeClass + " report-submitted-msg", icon: "check-circle", kind: "success", label: "", onCalciteAlertClose: () => { this._reportSubmitted = false; }, open: true, placement: "top" }, h("div", { slot: "message" }, this.reportSubmittedMessage ? this.reportSubmittedMessage : this._translations.submitMsg)), this._featureCreationFailedErrorMsg && h("calcite-alert", { "auto-close": true, class: themeClass, icon: "x-octagon", kind: "danger", label: "", onCalciteAlertClose: () => { this._featureCreationFailedErrorMsg = ""; }, open: true, placement: "top" }, h("div", { slot: "title" }, this._translations.error), h("div", { slot: "message" }, this._featureCreationFailedErrorMsg)), h("div", null, h("calcite-shell", { "content-behind": true }, this._getReporter())), this.filterModal()));
113
131
  }
114
132
  //--------------------------------------------------------------------------
115
133
  //
@@ -173,6 +191,54 @@ export class CrowdsourceReporter {
173
191
  ? h("calcite-flow", null, (renderLists === null || renderLists === void 0 ? void 0 : renderLists.length) > 0 && renderLists)
174
192
  : h("calcite-loader", { label: "", scale: "m" })));
175
193
  }
194
+ /**
195
+ * Show filter component in modal
196
+ * @returns node to interact with any configured filters for the current layer
197
+ */
198
+ filterModal() {
199
+ var _a, _b;
200
+ //get layer expression for current selected layer
201
+ const currentLayersExpressions = this.layerExpressions ? this.layerExpressions.filter((exp) => exp.id === this._selectedLayerId) : [];
202
+ return (currentLayersExpressions.length > 0 &&
203
+ 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" }, (_b = (_a = this._translations) === null || _a === void 0 ? void 0 : _a.filterLayerTitle) === null || _b === void 0 ? void 0 : _b.replace("{{title}}", this._selectedLayerName)), h("div", { slot: "content" }, h("instant-apps-filter-list", { autoUpdateUrl: false, closeBtn: true, closeBtnOnClick: async () => this._closeFilter(), comboboxOverlayPositioning: "fixed", layerExpressions: currentLayersExpressions, onFilterListReset: () => this._handleFilterListReset(), onFilterUpdate: () => this._handleFilterUpdate(), ref: (el) => this._filterList = el, view: this.mapView, zoomBtn: false }))));
204
+ }
205
+ /**
206
+ * Close the filter modal
207
+ * @protected
208
+ */
209
+ _closeFilter() {
210
+ if (this._filterOpen) {
211
+ this._filterOpen = false;
212
+ }
213
+ }
214
+ /**
215
+ * When true the filter modal will be displayed
216
+ * @protected
217
+ */
218
+ _toggleFilter() {
219
+ this._filterOpen = !this._filterOpen;
220
+ }
221
+ /**
222
+ * Reset the filter active prop
223
+ * @protected
224
+ */
225
+ _handleFilterListReset() {
226
+ //on reset filter list reset the filter active state
227
+ this._filterActive = false;
228
+ //reset the features list to reflect the applied filters
229
+ void this._featureList.refresh();
230
+ }
231
+ /**
232
+ * Check if the layers definitionExpression has been modified
233
+ * @protected
234
+ */
235
+ _handleFilterUpdate() {
236
+ //if filter are applied the url params will be generated
237
+ //set the filter active state based on the length of applied filters
238
+ this._filterActive = this._filterList.urlParams.getAll('filter').length > 0;
239
+ //reset the features list to reflect the applied filters
240
+ void this._featureList.refresh();
241
+ }
176
242
  /**
177
243
  * Get the feature layer list
178
244
  * @returns the layer list items
@@ -189,7 +255,7 @@ export class CrowdsourceReporter {
189
255
  * @protected
190
256
  */
191
257
  getChooseCategoryFlowItem() {
192
- return (h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: this.reportButtonText ? this.reportButtonText : this._translations.createReportButtonText, onCalciteFlowItemBack: this.backFromSelectedPanel.bind(this) }, this.isMobile && this.getActionToExpandCollapsePanel(), h("calcite-panel", { "full-height": true, "full-width": true }, h("calcite-notice", { class: "notice-msg", icon: "lightbulb", kind: "success", open: true }, h("div", { slot: "message" }, this._translations.chooseCategoryMsg)), h("layer-list", { class: "height-full", layers: this.layers, mapView: this.mapView, noLayerErrorMsg: this._noLayerToDisplayErrorMsg, onLayerSelect: this.navigateToCreateFeature.bind(this), showFeatureCount: false, showNextIcon: false }))));
258
+ return (h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: this.reportButtonText ? this.reportButtonText : this._translations.createReportButtonText, onCalciteFlowItemBack: this.backFromSelectedPanel.bind(this) }, this.isMobile && this.getActionToExpandCollapsePanel(), h("calcite-panel", { "full-height": true, "full-width": true }, h("div", { class: "progress-bar" }, h("calcite-progress", { type: "determinate", value: this._updatedProgressBarStatus })), h("calcite-notice", { class: "notice-msg", icon: "lightbulb", kind: "success", open: true }, h("div", { slot: "message" }, this._translations.chooseCategoryMsg)), h("layer-list", { class: "height-full", layers: this.layers, mapView: this.mapView, noLayerErrorMsg: this._noLayerToDisplayErrorMsg, onLayerSelect: this.navigateToCreateFeature.bind(this), showFeatureCount: false, showNextIcon: false }))));
193
259
  }
194
260
  /**
195
261
  * Get Feature create form of the selected feature layer
@@ -197,7 +263,15 @@ export class CrowdsourceReporter {
197
263
  * @protected
198
264
  */
199
265
  getFeatureCreateFlowItem() {
200
- return (h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: this._selectedLayerName, onCalciteFlowItemBack: this.backFromCreateFeaturePanel.bind(this) }, this.isMobile && this.getActionToExpandCollapsePanel(), this._showSubmitCancelButton && h("div", { class: "width-full", slot: "footer" }, h("calcite-button", { appearance: "solid", class: "footer-top-button footer-button", onClick: this.onSubmitButtonClick.bind(this), width: "full" }, this._translations.submit), h("calcite-button", { appearance: "outline", class: "footer-button", onClick: this.backFromCreateFeaturePanel.bind(this), width: "full" }, this._translations.cancel)), h("calcite-panel", { "full-height": true, "full-width": true }, h("calcite-notice", { class: "notice-msg", icon: "lightbulb", kind: "success", open: true }, h("div", { slot: "message" }, this._translations.featureEditFormInfoMsg)), h("create-feature", { customizeSubmit: true, mapView: this.mapView, onDrawComplete: this.onDrawComplete.bind(this), onEditingAttachment: this.showSubmitCancelButton.bind(this), onFail: this.createFeatureFailed.bind(this), onSuccess: this.onReportSubmitted.bind(this), ref: el => this._createFeature = el, searchConfiguration: this.searchConfiguration, selectedLayerId: this._selectedLayerId }))));
266
+ return (h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: this._selectedLayerName, onCalciteFlowItemBack: this.backFromCreateFeaturePanel.bind(this) }, this.isMobile && this.getActionToExpandCollapsePanel(), this._showSubmitCancelButton && h("div", { class: "width-full", slot: "footer" }, h("calcite-button", { appearance: "solid", class: "footer-top-button footer-button", onClick: this.onSubmitButtonClick.bind(this), width: "full" }, this._translations.submit), h("calcite-button", { appearance: "outline", class: "footer-button", onClick: this.backFromCreateFeaturePanel.bind(this), width: "full" }, this._translations.cancel)), h("calcite-panel", { "full-height": true, "full-width": true }, h("div", { class: "progress-bar" }, h("calcite-progress", { type: "determinate", value: this._updatedProgressBarStatus })), h("calcite-notice", { class: "notice-msg", icon: "lightbulb", kind: "success", open: true }, h("div", { slot: "message" }, this._translations.featureEditFormInfoMsg)), h("create-feature", { customizeSubmit: true, mapView: this.mapView, onDrawComplete: this.onDrawComplete.bind(this), onEditingAttachment: this.showSubmitCancelButton.bind(this), onFail: this.createFeatureFailed.bind(this), onProgressStatus: this.updatedProgressStatus.bind(this), onSuccess: this.onReportSubmitted.bind(this), ref: el => this._createFeature = el, searchConfiguration: this.searchConfiguration, selectedLayerId: this._selectedLayerId }))));
267
+ }
268
+ /**
269
+ * Update the progress bar status when editor panel changes
270
+ * @param evt Event which has progress bar status
271
+ * @protected
272
+ */
273
+ updatedProgressStatus(evt) {
274
+ this._updatedProgressBarStatus = evt.detail;
201
275
  }
202
276
  /**
203
277
  * When drawing of incident location completed on map show the submit and cancel button
@@ -219,7 +293,7 @@ export class CrowdsourceReporter {
219
293
  */
220
294
  onSubmitButtonClick() {
221
295
  if (this._createFeature) {
222
- this._createFeature.submit();
296
+ void this._createFeature.submit();
223
297
  }
224
298
  }
225
299
  /**
@@ -228,7 +302,7 @@ export class CrowdsourceReporter {
228
302
  */
229
303
  backFromCreateFeaturePanel() {
230
304
  if (this._createFeature) {
231
- this._createFeature.close();
305
+ void this._createFeature.close();
232
306
  }
233
307
  this.backFromSelectedPanel();
234
308
  }
@@ -255,10 +329,10 @@ export class CrowdsourceReporter {
255
329
  */
256
330
  async navigateToHomePage() {
257
331
  if (this._createFeature) {
258
- this._createFeature.close();
332
+ void this._createFeature.close();
259
333
  }
260
334
  if (this._layerList) {
261
- this._layerList.refresh();
335
+ void this._layerList.refresh();
262
336
  }
263
337
  this.setSelectedFeatures([]);
264
338
  if (this._editableLayerIds.length === 1) {
@@ -326,6 +400,7 @@ export class CrowdsourceReporter {
326
400
  * @protected
327
401
  */
328
402
  backFromSelectedPanel() {
403
+ this._updatedProgressBarStatus = 0.25;
329
404
  const updatedFlowItems = [...this._flowItems];
330
405
  updatedFlowItems.pop();
331
406
  this.clearHighlights();
@@ -352,6 +427,13 @@ export class CrowdsourceReporter {
352
427
  this.setSelectedFeatures([evt.detail]);
353
428
  this._flowItems = [...this._flowItems, "feature-details"];
354
429
  }
430
+ /**
431
+ * Show loading indicator while updating the feature details component
432
+ * @param isLoading is feature detail component loading
433
+ */
434
+ async updatingFeatureDetails(isLoading) {
435
+ this._loadingFeatureDetails = isLoading;
436
+ }
355
437
  /**
356
438
  * Get feature list of the selected feature layer
357
439
  * @param layerId Layer id
@@ -360,7 +442,10 @@ export class CrowdsourceReporter {
360
442
  * @protected
361
443
  */
362
444
  getFeatureListFlowItem(layerId, layerName) {
363
- return (h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: layerName, onCalciteFlowItemBack: this.backFromSelectedPanel.bind(this) }, this.isMobile && this.getActionToExpandCollapsePanel(), this.enableNewReports &&
445
+ var _a;
446
+ const layerExpressions = (_a = this.layerExpressions) === null || _a === void 0 ? void 0 : _a.filter((exp) => exp.id === this._selectedLayerId);
447
+ const showFilterIcon = layerExpressions.length > 0;
448
+ return (h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: layerName, onCalciteFlowItemBack: this.backFromSelectedPanel.bind(this) }, showFilterIcon && h("calcite-action", { icon: "filter", indicator: this._filterActive, onClick: this._toggleFilter.bind(this), slot: this.isMobile ? "header-menu-actions" : "header-actions-end", text: this._translations.filter, "text-enabled": this.isMobile }), this.isMobile && this.getActionToExpandCollapsePanel(), this.enableNewReports &&
364
449
  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", { class: "height-full", highlightOnHover: true, mapView: this.mapView, noFeaturesFoundMsg: this._translations.featureErrorMsg, onFeatureSelect: this.onFeatureSelectFromList.bind(this), pageSize: 30, ref: el => this._featureList = el, selectedLayerId: layerId }))));
365
450
  }
366
451
  /**
@@ -368,7 +453,15 @@ export class CrowdsourceReporter {
368
453
  * @returns Node
369
454
  */
370
455
  getFeatureDetailsFlowItem() {
371
- return (h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: this._selectedLayerName, onCalciteFlowItemBack: this.backFromSelectedPanel.bind(this) }, this.isMobile && this.getActionToExpandCollapsePanel(), h("instant-apps-social-share", { autoUpdateShareUrl: false, embed: false, popoverButtonIconScale: "s", ref: el => this._shareNode = el, scale: "m", shareButtonColor: "neutral", shareButtonType: "action", slot: "header-actions-end", socialMedia: true, view: this.mapView }), h("calcite-panel", { "full-height": true }, h("info-card", { allowEditing: false, graphics: this._selectedFeature, highlightEnabled: false, isLoading: false, isMobile: false, mapView: this.mapView, onSelectionChanged: this.featureDetailsChanged.bind(this), zoomAndScrollToSelected: true }))));
456
+ return (h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: this._selectedLayerName, loading: this._loadingFeatureDetails, onCalciteFlowItemBack: this.backFromSelectedPanel.bind(this) }, this.isMobile && this.getActionToExpandCollapsePanel(), h("instant-apps-social-share", { autoUpdateShareUrl: false, embed: false, popoverButtonIconScale: "s", ref: el => this._shareNode = el, scale: "m", shareButtonColor: "neutral", shareButtonType: "action", slot: "header-actions-end", socialMedia: true, view: this.mapView }), h("calcite-panel", null, this._selectedFeature.length > 1 && this.getFeaturesPagination(), h("feature-details", { class: 'full-height', graphics: this._selectedFeature, mapView: this.mapView, onLoadingStatus: (evt) => { void this.updatingFeatureDetails(evt.detail); }, ref: el => this._featureDetails = el, reportingOptions: this.reportingOptions }))));
457
+ }
458
+ /**
459
+ * Returns the pagination for the multiple features
460
+ * Create pagination to avoid the overlap of like, dislike and comment section
461
+ * @returns Node
462
+ */
463
+ getFeaturesPagination() {
464
+ return (h("div", { class: "feature-pagination", slot: "header-actions-start" }, h("div", null, h("calcite-button", { appearance: 'transparent', disabled: false, iconStart: "chevron-left", id: "solutions-back", onClick: () => void this._featureDetails.back(), scale: "s", width: "full" }), h("calcite-tooltip", { label: "", placement: "top", "reference-element": "solutions-back" }, h("span", null, this._translations.back))), h("calcite-button", { appearance: 'transparent', class: 'pagination-action', onClick: () => void this._featureDetails.toggleListView(), scale: "s" }, h("span", { class: "pagination-count" }, this._getCount())), h("div", null, h("calcite-button", { appearance: "transparent", disabled: false, iconStart: "chevron-right", id: "solutions-next", onClick: () => void this._featureDetails.next(), scale: "s", width: "full" }), h("calcite-tooltip", { placement: "top", "reference-element": "solutions-next" }, h("span", null, this._translations.next)))));
372
465
  }
373
466
  /**
374
467
  * Sets the selected features and updates the first feature as the current selected feature
@@ -396,14 +489,6 @@ export class CrowdsourceReporter {
396
489
  }
397
490
  this._updateShareURL();
398
491
  }
399
- /**
400
- * On Feature details change update the Layer title and the current selected layer id
401
- * @param evt Event hold the details of current feature graphic in the info-card
402
- */
403
- featureDetailsChanged(evt) {
404
- this.setCurrentFeature(evt.detail[0]);
405
- void this.highlightOnMap(evt.detail[0]);
406
- }
407
492
  /**
408
493
  * Highlights the feature on map
409
494
  * @param selectedFeature Graphic currently shown in feature details
@@ -416,8 +501,9 @@ export class CrowdsourceReporter {
416
501
  const selectedLayerView = await getFeatureLayerView(this.mapView, selectedFeature.layer.id);
417
502
  // remove previous highlight options (if any) to highlight the feature by default color
418
503
  selectedLayerView.highlightOptions = null;
419
- this._highlightHandle = await highlightFeatures([selectedFeature.getObjectId()], selectedLayerView, this.mapView, true);
504
+ this._highlightHandle = await highlightFeatures([selectedFeature.getObjectId()], selectedLayerView, this.mapView, true, this.zoomToScale);
420
505
  }
506
+ void this.updatingFeatureDetails(false);
421
507
  }
422
508
  /**
423
509
  * Clears the highlight
@@ -523,6 +609,19 @@ export class CrowdsourceReporter {
523
609
  }
524
610
  }
525
611
  }
612
+ /**
613
+ * Get the current index of total string
614
+ *
615
+ * @returns the index of total string
616
+ * @protected
617
+ */
618
+ _getCount() {
619
+ const index = (this.selectedFeatureIndex + 1).toString();
620
+ const total = this._selectedFeature.length.toString();
621
+ return this._translations.indexOfTotal
622
+ .replace("{{index}}", index)
623
+ .replace("{{total}}", total);
624
+ }
526
625
  /**
527
626
  * Fetches the component's translations
528
627
  * @returns Promise when complete
@@ -771,21 +870,6 @@ export class CrowdsourceReporter {
771
870
  "attribute": "enable-new-reports",
772
871
  "reflect": false
773
872
  },
774
- "layers": {
775
- "type": "unknown",
776
- "mutable": false,
777
- "complexType": {
778
- "original": "string[]",
779
- "resolved": "string[]",
780
- "references": {}
781
- },
782
- "required": false,
783
- "optional": false,
784
- "docs": {
785
- "tags": [],
786
- "text": "string[]: list of layer ids"
787
- }
788
- },
789
873
  "loginTitle": {
790
874
  "type": "string",
791
875
  "mutable": false,
@@ -891,40 +975,6 @@ export class CrowdsourceReporter {
891
975
  "attribute": "level",
892
976
  "reflect": false
893
977
  },
894
- "popupHeaderHoverColor": {
895
- "type": "string",
896
- "mutable": false,
897
- "complexType": {
898
- "original": "string",
899
- "resolved": "string",
900
- "references": {}
901
- },
902
- "required": false,
903
- "optional": false,
904
- "docs": {
905
- "tags": [],
906
- "text": "string: The color that will be displayed on hover when expanding the popup header"
907
- },
908
- "attribute": "popup-header-hover-color",
909
- "reflect": false
910
- },
911
- "popupHeaderColor": {
912
- "type": "string",
913
- "mutable": false,
914
- "complexType": {
915
- "original": "string",
916
- "resolved": "string",
917
- "references": {}
918
- },
919
- "required": false,
920
- "optional": false,
921
- "docs": {
922
- "tags": [],
923
- "text": "string: The background color to apply to the popup header"
924
- },
925
- "attribute": "popup-header-color",
926
- "reflect": false
927
- },
928
978
  "reportButtonText": {
929
979
  "type": "string",
930
980
  "mutable": false,
@@ -1169,6 +1219,27 @@ export class CrowdsourceReporter {
1169
1219
  },
1170
1220
  "attribute": "zoom-to-scale",
1171
1221
  "reflect": false
1222
+ },
1223
+ "layerExpressions": {
1224
+ "type": "unknown",
1225
+ "mutable": false,
1226
+ "complexType": {
1227
+ "original": "ILayerExpression[]",
1228
+ "resolved": "ILayerExpression[]",
1229
+ "references": {
1230
+ "ILayerExpression": {
1231
+ "location": "import",
1232
+ "path": "../../utils/interfaces",
1233
+ "id": "src/utils/interfaces.ts::ILayerExpression"
1234
+ }
1235
+ }
1236
+ },
1237
+ "required": false,
1238
+ "optional": false,
1239
+ "docs": {
1240
+ "tags": [],
1241
+ "text": "ILayerExpression[]: Array of layer expressions for layers (filter configuration)"
1242
+ }
1172
1243
  }
1173
1244
  };
1174
1245
  }
@@ -1182,7 +1253,11 @@ export class CrowdsourceReporter {
1182
1253
  "_selectedLayerName": {},
1183
1254
  "_reportSubmitted": {},
1184
1255
  "_showSubmitCancelButton": {},
1185
- "_featureCreationFailedErrorMsg": {}
1256
+ "_loadingFeatureDetails": {},
1257
+ "_featureCreationFailedErrorMsg": {},
1258
+ "_updatedProgressBarStatus": {},
1259
+ "_filterOpen": {},
1260
+ "_filterActive": {}
1186
1261
  };
1187
1262
  }
1188
1263
  static get events() {
@@ -1213,4 +1288,13 @@ export class CrowdsourceReporter {
1213
1288
  "methodName": "mapViewWatchHandler"
1214
1289
  }];
1215
1290
  }
1291
+ static get listeners() {
1292
+ return [{
1293
+ "name": "selectionChanged",
1294
+ "method": "selectionChanged",
1295
+ "target": "window",
1296
+ "capture": false,
1297
+ "passive": false
1298
+ }];
1299
+ }
1216
1300
  }
@@ -0,0 +1,18 @@
1
+ :host {
2
+ display: block;
3
+ }
4
+
5
+ .buttons{
6
+ align-items: center;
7
+ background-color: white;
8
+ display: flex;
9
+ padding: 10px 0 10px 15px;
10
+ border-block-start: 1px solid var(--calcite-color-border-3);
11
+ border-block-end: 1px solid var(--calcite-color-border-3);
12
+ }
13
+
14
+ .comment-btn{
15
+ display: flex;
16
+ gap: 5px;
17
+ width: 35px;
18
+ }