@esri/solutions-components 0.8.7 → 0.8.9

Sign up to get free protection for your applications and to get access to all the features.
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
+ }