@esri/solutions-components 0.7.30 → 0.7.31
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.
- package/dist/assets/t9n/crowdsource-reporter/resources.json +7 -5
- package/dist/assets/t9n/crowdsource-reporter/resources_en.json +7 -5
- package/dist/assets/t9n/feature-list/resources.json +1 -1
- package/dist/assets/t9n/feature-list/resources_en.json +1 -1
- package/dist/assets/t9n/layer-list/resources.json +1 -1
- package/dist/assets/t9n/layer-list/resources_en.json +1 -1
- package/dist/cjs/{calcite-flow_4.cjs.entry.js → calcite-flow_5.cjs.entry.js} +235 -19
- package/dist/cjs/card-manager_3.cjs.entry.js +1 -1
- package/dist/cjs/crowdsource-reporter.cjs.entry.js +221 -32
- package/dist/cjs/{downloadUtils-83c6d3c3.js → downloadUtils-10e0de31.js} +2 -2
- package/dist/cjs/{index.es-bd1a93b2.js → index.es-72dc7ab9.js} +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/map-select-tools_3.cjs.entry.js +1 -1
- package/dist/cjs/public-notification.cjs.entry.js +1 -1
- package/dist/cjs/solutions-components.cjs.js +1 -1
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/create-feature/create-feature.css +23 -0
- package/dist/collection/components/create-feature/create-feature.js +361 -0
- package/dist/collection/components/crowdsource-reporter/crowdsource-reporter.css +10 -1
- package/dist/collection/components/crowdsource-reporter/crowdsource-reporter.js +260 -33
- package/dist/collection/components/feature-list/feature-list.js +1 -0
- package/dist/collection/components/layer-list/layer-list.js +60 -16
- package/dist/collection/demos/crowdsource-reporter.html +26 -11
- package/dist/collection/utils/downloadUtils.js +1 -1
- package/dist/collection/utils/downloadUtils.ts +1 -1
- package/dist/components/create-feature.d.ts +11 -0
- package/dist/components/create-feature.js +11 -0
- package/dist/components/create-feature2.js +226 -0
- package/dist/components/crowdsource-reporter.js +297 -90
- package/dist/components/downloadUtils.js +1 -1
- package/dist/components/feature-list2.js +1 -0
- package/dist/components/layer-list2.js +38 -17
- package/dist/esm/{calcite-flow_4.entry.js → calcite-flow_5.entry.js} +235 -20
- package/dist/esm/card-manager_3.entry.js +1 -1
- package/dist/esm/crowdsource-reporter.entry.js +222 -33
- package/dist/esm/{downloadUtils-d070a467.js → downloadUtils-d297078f.js} +2 -2
- package/dist/esm/{index.es-d48535a2.js → index.es-3b4fa9d0.js} +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/map-select-tools_3.entry.js +1 -1
- package/dist/esm/public-notification.entry.js +1 -1
- package/dist/esm/solutions-components.js +1 -1
- package/dist/solutions-components/demos/crowdsource-reporter.html +26 -11
- package/dist/solutions-components/{p-f120ff40.entry.js → p-09ec8c8f.entry.js} +1 -1
- package/dist/solutions-components/{p-55b835a1.js → p-103c5318.js} +2 -2
- package/dist/solutions-components/{p-309cdea1.entry.js → p-57d49d15.entry.js} +1 -1
- package/dist/solutions-components/{p-b913a4fd.js → p-8ec25bf4.js} +1 -1
- package/dist/solutions-components/{p-f22ff57e.entry.js → p-921f21d5.entry.js} +1 -1
- package/dist/solutions-components/p-b4e2cac4.entry.js +17 -0
- package/dist/solutions-components/p-bb6562ab.entry.js +6 -0
- package/dist/solutions-components/solutions-components.esm.js +1 -1
- package/dist/solutions-components/utils/downloadUtils.ts +1 -1
- package/dist/types/components/create-feature/create-feature.d.ts +107 -0
- package/dist/types/components/crowdsource-reporter/crowdsource-reporter.d.ts +132 -12
- package/dist/types/components/feature-list/feature-list.d.ts +1 -0
- package/dist/types/components/layer-list/layer-list.d.ts +6 -0
- package/dist/types/components.d.ts +89 -0
- package/dist/types/preact.d.ts +6 -0
- package/package.json +1 -1
- package/dist/solutions-components/p-2f162664.entry.js +0 -6
- package/dist/solutions-components/p-94ee3ef7.entry.js +0 -17
|
@@ -14,7 +14,7 @@ require('./esri-loader-a91c0ec1.js');
|
|
|
14
14
|
require('./_commonjsHelpers-384729db.js');
|
|
15
15
|
require('./interfaces-7cd0a48a.js');
|
|
16
16
|
|
|
17
|
-
const crowdsourceReporterCss = ":host{display:block;--calcite-label-margin-bottom:0px;--solutions-theme-foreground-color:var(--calcite-color-foreground-1)}.width-full{width:100% !important}.width-0{width:0}.height-full{height:100% !important}.height-0{height:0}.overflow-hidden{overflow:hidden}.border{border:1px solid var(--calcite-color-border-3)}.
|
|
17
|
+
const crowdsourceReporterCss = ":host{display:block;--calcite-label-margin-bottom:0px;--solutions-theme-foreground-color:var(--calcite-color-foreground-1)}.width-full{width:100% !important}.width-0{width:0}.height-full{height:100% !important}.height-0{height:0}.overflow-hidden{overflow:hidden}.border{border:1px solid var(--calcite-color-border-3)}.notice-msg{padding:10px;width:calc(100% - 20px)}.footer-top-button{padding-bottom:7px}.footer-button{height:35px}";
|
|
18
18
|
|
|
19
19
|
const CrowdsourceReporter = class {
|
|
20
20
|
constructor(hostRef) {
|
|
@@ -30,6 +30,8 @@ const CrowdsourceReporter = class {
|
|
|
30
30
|
this.layers = undefined;
|
|
31
31
|
this.loginTitle = undefined;
|
|
32
32
|
this.mapView = undefined;
|
|
33
|
+
this.layerId = undefined;
|
|
34
|
+
this.objectId = undefined;
|
|
33
35
|
this.reportButtonText = undefined;
|
|
34
36
|
this.reportsHeader = undefined;
|
|
35
37
|
this.reportSubmittedMessage = undefined;
|
|
@@ -47,6 +49,9 @@ const CrowdsourceReporter = class {
|
|
|
47
49
|
this._translations = undefined;
|
|
48
50
|
this._hasValidLayers = false;
|
|
49
51
|
this._selectedLayerName = undefined;
|
|
52
|
+
this._reportSubmitted = false;
|
|
53
|
+
this._showSubmitCancelButton = false;
|
|
54
|
+
this._featureCreationFailedErrorMsg = undefined;
|
|
50
55
|
}
|
|
51
56
|
//--------------------------------------------------------------------------
|
|
52
57
|
//
|
|
@@ -85,7 +90,8 @@ const CrowdsourceReporter = class {
|
|
|
85
90
|
* Renders the component.
|
|
86
91
|
*/
|
|
87
92
|
render() {
|
|
88
|
-
|
|
93
|
+
const themeClass = this.theme === "dark" ? "calcite-mode-dark" : "calcite-mode-light";
|
|
94
|
+
return (index.h(index.Host, null, this._reportSubmitted && index.h("calcite-alert", { "auto-close": true, class: themeClass, closable: true, icon: "check-circle", kind: "success", onCalciteAlertClose: () => { this._reportSubmitted = false; }, open: true, placement: "top" }, index.h("div", { slot: "title" }, this._translations.reportSubmit), index.h("div", { slot: "message" }, this._translations.submitMsg)), this._featureCreationFailedErrorMsg && index.h("calcite-alert", { "auto-close": true, class: themeClass, closable: true, icon: "x-octagon", kind: "danger", onCalciteAlertClose: () => { this._featureCreationFailedErrorMsg = ""; }, open: true, placement: "top" }, index.h("div", { slot: "title" }, this._translations.error), index.h("div", { slot: "message" }, this._featureCreationFailedErrorMsg)), index.h("div", null, index.h("calcite-shell", { "content-behind": true }, this._getReporter()))));
|
|
89
95
|
}
|
|
90
96
|
//--------------------------------------------------------------------------
|
|
91
97
|
//
|
|
@@ -105,6 +111,15 @@ const CrowdsourceReporter = class {
|
|
|
105
111
|
]);
|
|
106
112
|
this.reactiveUtils = reactiveUtils;
|
|
107
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Set the selected layer id and layer name
|
|
116
|
+
* @param layerId string layerId of the selected layer
|
|
117
|
+
* @param layerName string layerName of the selected layer
|
|
118
|
+
*/
|
|
119
|
+
setSelectedLayer(layerId, layerName) {
|
|
120
|
+
this._selectedLayerId = layerId;
|
|
121
|
+
this._selectedLayerName = layerName;
|
|
122
|
+
}
|
|
108
123
|
/**
|
|
109
124
|
* Get the reporter app functionality
|
|
110
125
|
* @protected
|
|
@@ -122,6 +137,12 @@ const CrowdsourceReporter = class {
|
|
|
122
137
|
case "feature-details":
|
|
123
138
|
renderLists.push(this.getFeatureDetailsFlowItem());
|
|
124
139
|
break;
|
|
140
|
+
case "reporting-layer-list":
|
|
141
|
+
renderLists.push(this.getChooseCategoryFlowItem());
|
|
142
|
+
break;
|
|
143
|
+
case "feature-create":
|
|
144
|
+
renderLists.push(this.getFeatureCreateFlowItem());
|
|
145
|
+
break;
|
|
125
146
|
}
|
|
126
147
|
});
|
|
127
148
|
const themeClass = this.theme === "dark" ? "calcite-mode-dark" : "calcite-mode-light";
|
|
@@ -138,34 +159,135 @@ const CrowdsourceReporter = class {
|
|
|
138
159
|
return (index.h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: this.reportsHeader }, this._hasValidLayers &&
|
|
139
160
|
index.h("calcite-action", { icon: "sort-ascending-arrow", slot: this.isMobile ? "header-menu-actions" : "header-actions-end", text: this._translations.sort, "text-enabled": this.isMobile }), this._hasValidLayers &&
|
|
140
161
|
index.h("calcite-action", { icon: "filter", slot: this.isMobile ? "header-menu-actions" : "header-actions-end", text: this._translations.filter, "text-enabled": this.isMobile }), this.isMobile && this.getActionToExpandCollapsePanel(), this._hasValidLayers && this.enableNewReports &&
|
|
141
|
-
index.h("calcite-button", { appearance: "secondary", slot: "footer", width: "full" }, this.reportButtonText), index.h("calcite-panel", { "full-height": true, "full-width": true }, index.h("layer-list", { class: "height-full", layers: this.layers, mapView: this.mapView, noLayerErrorMsg: this._translations.noLayerToDisplayErrorMsg, onLayerSelect: this.displayFeaturesList.bind(this), onLayersListLoaded: this.layerListLoaded.bind(this), showFeatureCount: true, showNextIcon: true }))));
|
|
162
|
+
index.h("calcite-button", { appearance: "secondary", onClick: this.navigateToChooseCategory.bind(this), slot: "footer", width: "full" }, this.reportButtonText), index.h("calcite-panel", { "full-height": true, "full-width": true }, index.h("layer-list", { class: "height-full", layers: this.layers, mapView: this.mapView, noLayerErrorMsg: this._translations.noLayerToDisplayErrorMsg, onLayerSelect: this.displayFeaturesList.bind(this), onLayersListLoaded: this.layerListLoaded.bind(this), ref: el => this._layerList = el, showFeatureCount: true, showNextIcon: true }))));
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Get the layer list for creating a report
|
|
166
|
+
* @returns Choose category flow item
|
|
167
|
+
* @protected
|
|
168
|
+
*/
|
|
169
|
+
getChooseCategoryFlowItem() {
|
|
170
|
+
return (index.h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: this._translations.createReportHeader, onCalciteFlowItemBack: this.backFromSelectedPanel.bind(this) }, this.isMobile && this.getActionToExpandCollapsePanel(), index.h("div", { class: "width-full", slot: "footer" }, index.h("calcite-button", { appearance: "secondary", class: "footer-top-button footer-button", disabled: !this._selectedLayerId, onClick: this.navigateToCreateFeature.bind(this), width: "full" }, this._translations.next), index.h("calcite-button", { appearance: "outline", class: "footer-button", onClick: this.backFromSelectedPanel.bind(this), width: "full" }, this._translations.cancel)), index.h("calcite-panel", { "full-height": true, "full-width": true }, index.h("calcite-notice", { class: "notice-msg", icon: "lightbulb", kind: "success", open: true }, index.h("div", { slot: "message" }, this._translations.chooseCategoryMsg)), index.h("layer-list", { class: "height-full", layers: this.layers, mapView: this.mapView, noLayerErrorMsg: this._translations.noLayerToDisplayErrorMsg, onLayerSelect: this.highlightSelectedLayer.bind(this), showFeatureCount: false, showNextIcon: false }))));
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Get Feature create form of the selected feature layer
|
|
174
|
+
* @returns feature create form
|
|
175
|
+
* @protected
|
|
176
|
+
*/
|
|
177
|
+
getFeatureCreateFlowItem() {
|
|
178
|
+
return (index.h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: this._selectedLayerName, onCalciteFlowItemBack: this.backFromCreateFeaturePanel.bind(this) }, this.isMobile && this.getActionToExpandCollapsePanel(), this._showSubmitCancelButton && index.h("div", { class: "width-full", slot: "footer" }, index.h("calcite-button", { appearance: "secondary", class: "footer-top-button footer-button", onClick: this.onSubmitButtonClick.bind(this), width: "full" }, this._translations.submit), index.h("calcite-button", { appearance: "outline", class: "footer-button", onClick: this.backFromCreateFeaturePanel.bind(this), width: "full" }, this._translations.cancel)), index.h("calcite-panel", { "full-height": true, "full-width": true }, index.h("calcite-notice", { class: "notice-msg", icon: "lightbulb", kind: "success", open: true }, index.h("div", { slot: "message" }, this._translations.featureEditFormInfoMsg)), index.h("create-feature", { mapView: this.mapView, onDrawComplete: this.showSubmitCancelButton.bind(this), onFail: this.createFeatureFailed.bind(this), onSuccess: this.navigateHomePage.bind(this), ref: el => this._createFeature = el, selectedLayerId: this._selectedLayerId }))));
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* When drawing of incident location completed on map show the submit and cancel button
|
|
182
|
+
* @protected
|
|
183
|
+
*/
|
|
184
|
+
showSubmitCancelButton() {
|
|
185
|
+
this._showSubmitCancelButton = true;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* On back from create feature, call submit editor to destroy the Editor widget instance
|
|
189
|
+
* @protected
|
|
190
|
+
*/
|
|
191
|
+
onSubmitButtonClick() {
|
|
192
|
+
if (this._createFeature) {
|
|
193
|
+
this._createFeature.submit();
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* On back from create feature, call close editor to destroy the Editor widget instance
|
|
198
|
+
* @protected
|
|
199
|
+
*/
|
|
200
|
+
backFromCreateFeaturePanel() {
|
|
201
|
+
if (this._createFeature) {
|
|
202
|
+
this._createFeature.close();
|
|
203
|
+
}
|
|
204
|
+
this.backFromSelectedPanel();
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* On creating the feature is failed, show the error message
|
|
208
|
+
* @param evt Event which has feature failed message
|
|
209
|
+
* @protected
|
|
210
|
+
*/
|
|
211
|
+
createFeatureFailed(evt) {
|
|
212
|
+
console.error(evt.detail);
|
|
213
|
+
this._featureCreationFailedErrorMsg = evt.detail.message;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* On submit report navigate to the layer list home page and refresh the layer list
|
|
217
|
+
* @protected
|
|
218
|
+
*/
|
|
219
|
+
navigateHomePage() {
|
|
220
|
+
this._reportSubmitted = true;
|
|
221
|
+
if (this._layerList) {
|
|
222
|
+
this._layerList.refresh();
|
|
223
|
+
}
|
|
224
|
+
this._flowItems = ["layer-list"];
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Update the selected layer id and name
|
|
228
|
+
* @param evt Event which has details of selected layerId and layerName
|
|
229
|
+
* @protected
|
|
230
|
+
*/
|
|
231
|
+
highlightSelectedLayer(evt) {
|
|
232
|
+
this.setSelectedLayer(evt.detail.layerId, evt.detail.layerName);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* On next button click open the feature create flow item
|
|
236
|
+
* @protected
|
|
237
|
+
*/
|
|
238
|
+
async navigateToCreateFeature() {
|
|
239
|
+
this._showSubmitCancelButton = false;
|
|
240
|
+
this._flowItems = [...this._flowItems, "feature-create"];
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* On report an incident button click open the create a report panel with the layer list
|
|
244
|
+
* @protected
|
|
245
|
+
*/
|
|
246
|
+
navigateToChooseCategory() {
|
|
247
|
+
this._flowItems = [...this._flowItems, "reporting-layer-list"];
|
|
142
248
|
}
|
|
143
249
|
/**
|
|
144
250
|
* When layer list is loaded, we will receive the list of layers, if its means we don't have any valid layer to be listed
|
|
145
251
|
* @param evt Event which has list of layers
|
|
146
252
|
* @protected
|
|
147
253
|
*/
|
|
148
|
-
layerListLoaded(evt) {
|
|
254
|
+
async layerListLoaded(evt) {
|
|
149
255
|
const layersListed = evt.detail;
|
|
150
|
-
|
|
256
|
+
//consider only the layers listed in the layer-list component
|
|
257
|
+
const allMapLayers = await mapViewUtils.getAllLayers(this.mapView);
|
|
258
|
+
this._validLayers = [];
|
|
259
|
+
allMapLayers.forEach((eachLayer) => {
|
|
260
|
+
if (layersListed.includes(eachLayer.id)) {
|
|
261
|
+
this._validLayers.push(eachLayer);
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
//handleMap click on layer list loaded
|
|
265
|
+
this.handleMapClick();
|
|
266
|
+
//update the has valid layer state
|
|
151
267
|
this._hasValidLayers = layersListed.length > 0;
|
|
268
|
+
//navigate to the feature details if URL params found
|
|
269
|
+
await this.loadFeatureFromURLParams();
|
|
152
270
|
}
|
|
153
271
|
/**On click of layer list item show feature list
|
|
154
272
|
* @param evt Event which has details of selected layerId and layerName
|
|
155
273
|
* @protected
|
|
156
274
|
*/
|
|
157
275
|
displayFeaturesList(evt) {
|
|
158
|
-
this.
|
|
159
|
-
this._selectedLayerName = evt.detail.layerName;
|
|
276
|
+
this.setSelectedLayer(evt.detail.layerId, evt.detail.layerName);
|
|
160
277
|
this._flowItems = [...this._flowItems, "feature-list"];
|
|
161
278
|
}
|
|
162
279
|
/**
|
|
163
|
-
* On back from
|
|
280
|
+
* On back from selected panel navigate to the previous panel
|
|
164
281
|
* @protected
|
|
165
282
|
*/
|
|
166
|
-
|
|
283
|
+
backFromSelectedPanel() {
|
|
167
284
|
const updatedFlowItems = [...this._flowItems];
|
|
168
285
|
updatedFlowItems.pop();
|
|
286
|
+
//clear the selected layer and feature when back to layer list
|
|
287
|
+
if (updatedFlowItems.length === 1) {
|
|
288
|
+
this.setSelectedLayer('', '');
|
|
289
|
+
this.setSelectedFeatures([]);
|
|
290
|
+
}
|
|
169
291
|
this._flowItems = [...updatedFlowItems];
|
|
170
292
|
}
|
|
171
293
|
/**
|
|
@@ -181,7 +303,7 @@ const CrowdsourceReporter = class {
|
|
|
181
303
|
* @param evt Event which has details of selected feature
|
|
182
304
|
*/
|
|
183
305
|
async onFeatureSelectFromList(evt) {
|
|
184
|
-
this.
|
|
306
|
+
this.setSelectedFeatures([evt.detail]);
|
|
185
307
|
this._flowItems = [...this._flowItems, "feature-details"];
|
|
186
308
|
}
|
|
187
309
|
/**
|
|
@@ -192,26 +314,50 @@ const CrowdsourceReporter = class {
|
|
|
192
314
|
* @protected
|
|
193
315
|
*/
|
|
194
316
|
getFeatureListFlowItem(layerId, layerName) {
|
|
195
|
-
return (index.h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: layerName, onCalciteFlowItemBack: this.
|
|
196
|
-
index.h("calcite-button", { appearance: "secondary", slot: "footer", width: "full" }, this.reportButtonText), index.h("calcite-panel", { "full-height": true }, index.h("feature-list", { class: "height-full", highlightOnMap: true, mapView: this.mapView, noFeaturesFoundMsg: this._translations.featureErrorMsg, onFeatureSelect: this.onFeatureSelectFromList.bind(this), pageSize: 30, selectedLayerId: layerId }))));
|
|
317
|
+
return (index.h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: layerName, onCalciteFlowItemBack: this.backFromSelectedPanel.bind(this) }, index.h("calcite-action", { icon: "sort-ascending-arrow", slot: this.isMobile ? "header-menu-actions" : "header-actions-end", text: this._translations.sort, "text-enabled": this.isMobile }), index.h("calcite-action", { icon: "filter", slot: this.isMobile ? "header-menu-actions" : "header-actions-end", text: this._translations.filter, "text-enabled": this.isMobile }), this.isMobile && this.getActionToExpandCollapsePanel(), this.enableNewReports &&
|
|
318
|
+
index.h("calcite-button", { appearance: "secondary", onClick: this.navigateToCreateFeature.bind(this), slot: "footer", width: "full" }, this.reportButtonText), index.h("calcite-panel", { "full-height": true }, index.h("feature-list", { class: "height-full", highlightOnMap: true, mapView: this.mapView, noFeaturesFoundMsg: this._translations.featureErrorMsg, onFeatureSelect: this.onFeatureSelectFromList.bind(this), pageSize: 30, selectedLayerId: layerId }))));
|
|
197
319
|
}
|
|
198
320
|
/**
|
|
199
321
|
* Returns the calcite-flow item for feature details
|
|
200
322
|
* @returns Node
|
|
201
323
|
*/
|
|
202
324
|
getFeatureDetailsFlowItem() {
|
|
203
|
-
return (index.h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: this._selectedLayerName, onCalciteFlowItemBack: this.
|
|
325
|
+
return (index.h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: this._selectedLayerName, onCalciteFlowItemBack: this.backFromSelectedPanel.bind(this) }, this.isMobile && this.getActionToExpandCollapsePanel(), index.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 }), index.h("calcite-panel", { "full-height": true }, index.h("info-card", { allowEditing: false, graphics: this._selectedFeature, isLoading: false, isMobile: false, mapView: this.mapView, onSelectionChanged: this.featureDetailsChanged.bind(this), zoomAndScrollToSelected: true }))));
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Sets the selected features and updates the first feature as the current selected feature
|
|
329
|
+
* @param features Graphics array of the features selected
|
|
330
|
+
*/
|
|
331
|
+
setSelectedFeatures(features) {
|
|
332
|
+
this._selectedFeature = features;
|
|
333
|
+
this.setCurrentFeature(this._selectedFeature.length ? this._selectedFeature[0] : null);
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Set the object id of the current selected feature, and also updates the current selected layer details
|
|
337
|
+
* @param selectedFeature Graphic currently shown in feature details
|
|
338
|
+
*/
|
|
339
|
+
setCurrentFeature(selectedFeature) {
|
|
340
|
+
if (selectedFeature && selectedFeature.layer) {
|
|
341
|
+
const layer = selectedFeature.layer;
|
|
342
|
+
this.setSelectedLayer(layer.id, layer.title);
|
|
343
|
+
this._currentFeatureId = selectedFeature.attributes[layer.objectIdField];
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
this.setSelectedLayer('', '');
|
|
347
|
+
this._currentFeatureId = '';
|
|
348
|
+
}
|
|
349
|
+
this._updateShareURL();
|
|
204
350
|
}
|
|
205
351
|
/**
|
|
206
352
|
* On Feature details change update the Layer title and the current selected layer id
|
|
207
353
|
* @param evt Event hold the details of current feature graphic in the info-card
|
|
208
354
|
*/
|
|
209
355
|
featureDetailsChanged(evt) {
|
|
210
|
-
this.
|
|
211
|
-
this._selectedLayerName = evt.detail[0].layer.title;
|
|
356
|
+
this.setCurrentFeature(evt.detail[0]);
|
|
212
357
|
}
|
|
213
358
|
/**
|
|
214
359
|
* Returns the action button to Expand/Collapse side panel in mobile mode
|
|
360
|
+
* @protected
|
|
215
361
|
*/
|
|
216
362
|
getActionToExpandCollapsePanel() {
|
|
217
363
|
return (index.h("calcite-action", { icon: this._sidePanelCollapsed ? "chevrons-up" : "chevrons-down", onClick: this.toggleSidePanel.bind(this), slot: "header-actions-end", text: this._sidePanelCollapsed ? this._translations.expand : this._translations.collapse }));
|
|
@@ -235,36 +381,26 @@ const CrowdsourceReporter = class {
|
|
|
235
381
|
* Handle map click event
|
|
236
382
|
* @param layers Array of layerIds
|
|
237
383
|
*
|
|
238
|
-
*
|
|
384
|
+
* @protected
|
|
239
385
|
*/
|
|
240
|
-
handleMapClick(
|
|
386
|
+
handleMapClick() {
|
|
241
387
|
if (this._mapClickHandle) {
|
|
242
388
|
this._mapClickHandle.remove();
|
|
243
389
|
}
|
|
244
|
-
this._mapClickHandle = this.reactiveUtils.on(() => this.mapView, "click", (
|
|
245
|
-
void this.onMapClick(event, layers);
|
|
246
|
-
});
|
|
390
|
+
this._mapClickHandle = this.reactiveUtils.on(() => this.mapView, "click", this.onMapClick.bind(this));
|
|
247
391
|
}
|
|
248
392
|
/**
|
|
249
393
|
* On map click do hitTest and get the clicked graphics of valid layers and show feature details
|
|
250
|
-
* @param event
|
|
251
|
-
* @param layers
|
|
394
|
+
* @param event IMapClick map click event details
|
|
252
395
|
*
|
|
253
396
|
* @protected
|
|
254
397
|
*/
|
|
255
|
-
async onMapClick(event
|
|
398
|
+
async onMapClick(event) {
|
|
256
399
|
//disable map popup
|
|
257
400
|
this.mapView.popupEnabled = false;
|
|
258
401
|
// only include graphics from valid layers listed in the layer list widget
|
|
259
|
-
const allMapLayers = await mapViewUtils.getAllLayers(this.mapView);
|
|
260
|
-
const validLayers = [];
|
|
261
|
-
allMapLayers.forEach((eachLayer) => {
|
|
262
|
-
if (layers.includes(eachLayer.id)) {
|
|
263
|
-
validLayers.push(eachLayer);
|
|
264
|
-
}
|
|
265
|
-
});
|
|
266
402
|
const opts = {
|
|
267
|
-
include:
|
|
403
|
+
include: this._validLayers
|
|
268
404
|
};
|
|
269
405
|
// Perform a hitTest on the View
|
|
270
406
|
const hitTest = await this.mapView.hitTest(event, opts);
|
|
@@ -277,7 +413,7 @@ const CrowdsourceReporter = class {
|
|
|
277
413
|
}
|
|
278
414
|
});
|
|
279
415
|
//update the selectedFeature
|
|
280
|
-
this.
|
|
416
|
+
this.setSelectedFeatures(clickedGraphics);
|
|
281
417
|
//if featureDetails not open then add it to the list else just reInit flowItems which will update details with newly selected features
|
|
282
418
|
// eslint-disable-next-line unicorn/prefer-ternary
|
|
283
419
|
if (this._flowItems.length && this._flowItems[this._flowItems.length - 1] !== "feature-details") {
|
|
@@ -297,6 +433,59 @@ const CrowdsourceReporter = class {
|
|
|
297
433
|
const messages = await locale.getLocaleComponentStrings(this.el);
|
|
298
434
|
this._translations = messages[0];
|
|
299
435
|
}
|
|
436
|
+
/**
|
|
437
|
+
* Updates the share url for current selected feature
|
|
438
|
+
* @returns
|
|
439
|
+
* @protected
|
|
440
|
+
*/
|
|
441
|
+
_updateShareURL() {
|
|
442
|
+
var _a, _b;
|
|
443
|
+
const url = (_a = this._shareNode) === null || _a === void 0 ? void 0 : _a.shareUrl;
|
|
444
|
+
if (!url) {
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
const urlObj = new URL(url);
|
|
448
|
+
//set the selected layers id
|
|
449
|
+
if (this._selectedLayerId) {
|
|
450
|
+
urlObj.searchParams.set("layerid", this._selectedLayerId);
|
|
451
|
+
}
|
|
452
|
+
else {
|
|
453
|
+
urlObj.searchParams.delete("layerid");
|
|
454
|
+
}
|
|
455
|
+
//Set the selected features objectid
|
|
456
|
+
if ((_b = this._selectedFeature) === null || _b === void 0 ? void 0 : _b.length) {
|
|
457
|
+
urlObj.searchParams.set("oid", this._currentFeatureId);
|
|
458
|
+
}
|
|
459
|
+
else {
|
|
460
|
+
urlObj.searchParams.delete("oid");
|
|
461
|
+
}
|
|
462
|
+
//update the url in share component
|
|
463
|
+
this._shareNode.shareUrl = urlObj.href;
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Navigates to selected features detail based on the URL params
|
|
467
|
+
*/
|
|
468
|
+
async loadFeatureFromURLParams() {
|
|
469
|
+
if (this.layerId && this.objectId) {
|
|
470
|
+
const layer = await mapViewUtils.getLayerOrTable(this.mapView, this.layerId);
|
|
471
|
+
if (layer) {
|
|
472
|
+
// only query if we have some ids...query with no ids will result in all features being returned
|
|
473
|
+
const featureSet = await mapViewUtils.queryFeaturesByID([Number(this.objectId)], layer, [], false, this.mapView.spatialReference);
|
|
474
|
+
if (featureSet.length) {
|
|
475
|
+
//update the selectedFeature
|
|
476
|
+
this._selectedFeature = featureSet;
|
|
477
|
+
//if featureDetails not open then add it to the list else just reInit flowItems which will update details with newly selected features
|
|
478
|
+
// eslint-disable-next-line unicorn/prefer-ternary
|
|
479
|
+
if (this._flowItems.length && this._flowItems[this._flowItems.length - 1] !== "feature-details") {
|
|
480
|
+
this._flowItems = [...this._flowItems, "feature-details"];
|
|
481
|
+
}
|
|
482
|
+
else {
|
|
483
|
+
this._flowItems = [...this._flowItems];
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
}
|
|
300
489
|
get el() { return index.getElement(this); }
|
|
301
490
|
static get watchers() { return {
|
|
302
491
|
"isMobile": ["isMobileWatchHandler"],
|
|
@@ -1510,7 +1510,7 @@ function(t){var e=function(t){for(var e=t.length,r=new Uint8Array(e),n=0;n<e;n++
|
|
|
1510
1510
|
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
1511
1511
|
* ====================================================================
|
|
1512
1512
|
*/
|
|
1513
|
-
function(t){function e(){return (n.canvg?Promise.resolve(n.canvg):Promise.resolve().then(function () { return require('./index.es-
|
|
1513
|
+
function(t){function e(){return (n.canvg?Promise.resolve(n.canvg):Promise.resolve().then(function () { return require('./index.es-72dc7ab9.js'); })).catch((function(t){return Promise.reject(new Error("Could not load canvg: "+t))})).then((function(t){return t.default?t.default:t}))}E.API.addSvgAsImage=function(t,r,n,i,o,s,c,u){if(isNaN(r)||isNaN(n))throw a.error("jsPDF.addSvgAsImage: Invalid coordinates",arguments),new Error("Invalid coordinates passed to jsPDF.addSvgAsImage");if(isNaN(i)||isNaN(o))throw a.error("jsPDF.addSvgAsImage: Invalid measurements",arguments),new Error("Invalid measurements (width and/or height) passed to jsPDF.addSvgAsImage");var h=document.createElement("canvas");h.width=i,h.height=o;var l=h.getContext("2d");l.fillStyle="#fff",l.fillRect(0,0,h.width,h.height);var f={ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0},d=this;return e().then((function(e){return e.fromString(l,t,f)}),(function(){return Promise.reject(new Error("Could not load canvg."))})).then((function(t){return t.render(f)})).then((function(){d.addImage(h.toDataURL("image/jpeg",1),r,n,i,o,c,u);}))};}(),E.API.putTotalPages=function(t){var e,r=0;parseInt(this.internal.getFont().id.substr(1),10)<15?(e=new RegExp(t,"g"),r=this.internal.getNumberOfPages()):(e=new RegExp(this.pdfEscape16(t,this.internal.getFont()),"g"),r=this.pdfEscape16(this.internal.getNumberOfPages()+"",this.internal.getFont()));for(var n=1;n<=this.internal.getNumberOfPages();n++)for(var i=0;i<this.internal.pages[n].length;i++)this.internal.pages[n][i]=this.internal.pages[n][i].replace(e,r);return this},E.API.viewerPreferences=function(e,r){var n;e=e||{},r=r||!1;var i,a,o,s={HideToolbar:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},HideMenubar:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},HideWindowUI:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},FitWindow:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},CenterWindow:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.3},DisplayDocTitle:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.4},NonFullScreenPageMode:{defaultValue:"UseNone",value:"UseNone",type:"name",explicitSet:!1,valueSet:["UseNone","UseOutlines","UseThumbs","UseOC"],pdfVersion:1.3},Direction:{defaultValue:"L2R",value:"L2R",type:"name",explicitSet:!1,valueSet:["L2R","R2L"],pdfVersion:1.3},ViewArea:{defaultValue:"CropBox",value:"CropBox",type:"name",explicitSet:!1,valueSet:["MediaBox","CropBox","TrimBox","BleedBox","ArtBox"],pdfVersion:1.4},ViewClip:{defaultValue:"CropBox",value:"CropBox",type:"name",explicitSet:!1,valueSet:["MediaBox","CropBox","TrimBox","BleedBox","ArtBox"],pdfVersion:1.4},PrintArea:{defaultValue:"CropBox",value:"CropBox",type:"name",explicitSet:!1,valueSet:["MediaBox","CropBox","TrimBox","BleedBox","ArtBox"],pdfVersion:1.4},PrintClip:{defaultValue:"CropBox",value:"CropBox",type:"name",explicitSet:!1,valueSet:["MediaBox","CropBox","TrimBox","BleedBox","ArtBox"],pdfVersion:1.4},PrintScaling:{defaultValue:"AppDefault",value:"AppDefault",type:"name",explicitSet:!1,valueSet:["AppDefault","None"],pdfVersion:1.6},Duplex:{defaultValue:"",value:"none",type:"name",explicitSet:!1,valueSet:["Simplex","DuplexFlipShortEdge","DuplexFlipLongEdge","none"],pdfVersion:1.7},PickTrayByPDFSize:{defaultValue:!1,value:!1,type:"boolean",explicitSet:!1,valueSet:[!0,!1],pdfVersion:1.7},PrintPageRange:{defaultValue:"",value:"",type:"array",explicitSet:!1,valueSet:null,pdfVersion:1.7},NumCopies:{defaultValue:1,value:1,type:"integer",explicitSet:!1,valueSet:null,pdfVersion:1.7}},c=Object.keys(s),u=[],h=0,l=0,f=0;function d(t,e){var r,n=!1;for(r=0;r<t.length;r+=1)t[r]===e&&(n=!0);return n}if(void 0===this.internal.viewerpreferences&&(this.internal.viewerpreferences={},this.internal.viewerpreferences.configuration=JSON.parse(JSON.stringify(s)),this.internal.viewerpreferences.isSubscribed=!1),n=this.internal.viewerpreferences.configuration,"reset"===e||!0===r){var p=c.length;for(f=0;f<p;f+=1)n[c[f]].value=n[c[f]].defaultValue,n[c[f]].explicitSet=!1;}if("object"===t(e))for(a in e)if(o=e[a],d(c,a)&&void 0!==o){if("boolean"===n[a].type&&"boolean"==typeof o)n[a].value=o;else if("name"===n[a].type&&d(n[a].valueSet,o))n[a].value=o;else if("integer"===n[a].type&&Number.isInteger(o))n[a].value=o;else if("array"===n[a].type){for(h=0;h<o.length;h+=1)if(i=!0,1===o[h].length&&"number"==typeof o[h][0])u.push(String(o[h]-1));else if(o[h].length>1){for(l=0;l<o[h].length;l+=1)"number"!=typeof o[h][l]&&(i=!1);!0===i&&u.push([o[h][0]-1,o[h][1]-1].join(" "));}n[a].value="["+u.join(" ")+"]";}else n[a].value=n[a].defaultValue;n[a].explicitSet=!0;}return !1===this.internal.viewerpreferences.isSubscribed&&(this.internal.events.subscribe("putCatalog",(function(){var t,e=[];for(t in n)!0===n[t].explicitSet&&("name"===n[t].type?e.push("/"+t+" /"+n[t].value):e.push("/"+t+" "+n[t].value));0!==e.length&&this.internal.write("/ViewerPreferences\n<<\n"+e.join("\n")+"\n>>");})),this.internal.viewerpreferences.isSubscribed=!0),this.internal.viewerpreferences.configuration=n,this},
|
|
1514
1514
|
/** ====================================================================
|
|
1515
1515
|
* @license
|
|
1516
1516
|
* jsPDF XMP metadata plugin
|
|
@@ -2861,7 +2861,7 @@ function _prepareAttributeValue(attributeValue, attributeType, attributeDomain,
|
|
|
2861
2861
|
if (attributeDomain && attributeDomain.type === "coded-value") {
|
|
2862
2862
|
// "coded-value" domain field
|
|
2863
2863
|
const value = attributeDomain.getName(attributeValue);
|
|
2864
|
-
return value.toString();
|
|
2864
|
+
return value === null || value === void 0 ? void 0 : value.toString();
|
|
2865
2865
|
}
|
|
2866
2866
|
else {
|
|
2867
2867
|
// Non-domain field or unsupported domain type
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
'use strict';
|
|
7
7
|
|
|
8
8
|
const _commonjsHelpers = require('./_commonjsHelpers-384729db.js');
|
|
9
|
-
const downloadUtils = require('./downloadUtils-
|
|
9
|
+
const downloadUtils = require('./downloadUtils-10e0de31.js');
|
|
10
10
|
require('./index-b8a649fc.js');
|
|
11
11
|
require('./locale-a476e15d.js');
|
|
12
12
|
require('./esri-loader-a91c0ec1.js');
|