@esri/solutions-components 0.7.30 → 0.7.32
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} +286 -19
- package/dist/cjs/card-manager_3.cjs.entry.js +1 -1
- package/dist/cjs/crowdsource-reporter.cjs.entry.js +248 -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 +50 -0
- package/dist/collection/components/create-feature/create-feature.js +444 -0
- package/dist/collection/components/crowdsource-reporter/crowdsource-reporter.css +10 -1
- package/dist/collection/components/crowdsource-reporter/crowdsource-reporter.js +287 -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/create-feature.html +90 -0
- 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 +278 -0
- package/dist/components/crowdsource-reporter.js +324 -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} +286 -20
- package/dist/esm/card-manager_3.entry.js +1 -1
- package/dist/esm/crowdsource-reporter.entry.js +249 -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/create-feature.html +90 -0
- 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-d5263cb9.entry.js +17 -0
- package/dist/solutions-components/p-ea17cefb.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 +125 -0
- package/dist/types/components/crowdsource-reporter/crowdsource-reporter.d.ts +146 -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 +102 -0
- package/dist/types/preact.d.ts +7 -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
|
//
|
|
@@ -78,6 +83,7 @@ const CrowdsourceReporter = class {
|
|
|
78
83
|
* @returns Promise when complete
|
|
79
84
|
*/
|
|
80
85
|
async componentWillLoad() {
|
|
86
|
+
this._urlParamsLoaded = false;
|
|
81
87
|
await this._initModules();
|
|
82
88
|
await this._getTranslations();
|
|
83
89
|
}
|
|
@@ -85,7 +91,8 @@ const CrowdsourceReporter = class {
|
|
|
85
91
|
* Renders the component.
|
|
86
92
|
*/
|
|
87
93
|
render() {
|
|
88
|
-
|
|
94
|
+
const themeClass = this.theme === "dark" ? "calcite-mode-dark" : "calcite-mode-light";
|
|
95
|
+
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
96
|
}
|
|
90
97
|
//--------------------------------------------------------------------------
|
|
91
98
|
//
|
|
@@ -105,6 +112,20 @@ const CrowdsourceReporter = class {
|
|
|
105
112
|
]);
|
|
106
113
|
this.reactiveUtils = reactiveUtils;
|
|
107
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* Set the selected layer id and layer name
|
|
117
|
+
* @param layerId string layerId of the selected layer
|
|
118
|
+
* @param layerName string layerName of the selected layer
|
|
119
|
+
*/
|
|
120
|
+
setSelectedLayer(layerId, layerName) {
|
|
121
|
+
this._selectedLayerId = layerId;
|
|
122
|
+
this._selectedLayerName = layerName;
|
|
123
|
+
//show only current layer on map and hide other valid editable layers
|
|
124
|
+
//if layerId is empty then show all the layers on map
|
|
125
|
+
this._validLayers.forEach(layer => {
|
|
126
|
+
layer.set('visible', !layerId || (layer.id === layerId));
|
|
127
|
+
});
|
|
128
|
+
}
|
|
108
129
|
/**
|
|
109
130
|
* Get the reporter app functionality
|
|
110
131
|
* @protected
|
|
@@ -122,6 +143,12 @@ const CrowdsourceReporter = class {
|
|
|
122
143
|
case "feature-details":
|
|
123
144
|
renderLists.push(this.getFeatureDetailsFlowItem());
|
|
124
145
|
break;
|
|
146
|
+
case "reporting-layer-list":
|
|
147
|
+
renderLists.push(this.getChooseCategoryFlowItem());
|
|
148
|
+
break;
|
|
149
|
+
case "feature-create":
|
|
150
|
+
renderLists.push(this.getFeatureCreateFlowItem());
|
|
151
|
+
break;
|
|
125
152
|
}
|
|
126
153
|
});
|
|
127
154
|
const themeClass = this.theme === "dark" ? "calcite-mode-dark" : "calcite-mode-light";
|
|
@@ -138,34 +165,156 @@ const CrowdsourceReporter = class {
|
|
|
138
165
|
return (index.h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: this.reportsHeader }, this._hasValidLayers &&
|
|
139
166
|
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
167
|
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 }))));
|
|
168
|
+
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 }))));
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Get the layer list for creating a report
|
|
172
|
+
* @returns Choose category flow item
|
|
173
|
+
* @protected
|
|
174
|
+
*/
|
|
175
|
+
getChooseCategoryFlowItem() {
|
|
176
|
+
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 }))));
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get Feature create form of the selected feature layer
|
|
180
|
+
* @returns feature create form
|
|
181
|
+
* @protected
|
|
182
|
+
*/
|
|
183
|
+
getFeatureCreateFlowItem() {
|
|
184
|
+
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", { 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, selectedLayerId: this._selectedLayerId }))));
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* When drawing of incident location completed on map show the submit and cancel button
|
|
188
|
+
* @protected
|
|
189
|
+
*/
|
|
190
|
+
onDrawComplete() {
|
|
191
|
+
this._showSubmitCancelButton = true;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* When Add attachment panel is enabled hide the submit and cancel button
|
|
195
|
+
* @protected
|
|
196
|
+
*/
|
|
197
|
+
showSubmitCancelButton(evt) {
|
|
198
|
+
this._showSubmitCancelButton = !evt.detail;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* On back from create feature, call submit editor to destroy the Editor widget instance
|
|
202
|
+
* @protected
|
|
203
|
+
*/
|
|
204
|
+
onSubmitButtonClick() {
|
|
205
|
+
if (this._createFeature) {
|
|
206
|
+
this._createFeature.submit();
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* On back from create feature, call close editor to destroy the Editor widget instance
|
|
211
|
+
* @protected
|
|
212
|
+
*/
|
|
213
|
+
backFromCreateFeaturePanel() {
|
|
214
|
+
if (this._createFeature) {
|
|
215
|
+
this._createFeature.close();
|
|
216
|
+
}
|
|
217
|
+
this.backFromSelectedPanel();
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* On creating the feature is failed, show the error message
|
|
221
|
+
* @param evt Event which has feature failed message
|
|
222
|
+
* @protected
|
|
223
|
+
*/
|
|
224
|
+
createFeatureFailed(evt) {
|
|
225
|
+
console.error(evt.detail);
|
|
226
|
+
this._featureCreationFailedErrorMsg = evt.detail.message;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* On submit report navigate to the layer list home page and refresh the layer list
|
|
230
|
+
* @protected
|
|
231
|
+
*/
|
|
232
|
+
onReportSubmitted() {
|
|
233
|
+
this._reportSubmitted = true;
|
|
234
|
+
this.navigateToHomePage();
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Navigates to layer-list
|
|
238
|
+
* @protected
|
|
239
|
+
*/
|
|
240
|
+
navigateToHomePage() {
|
|
241
|
+
if (this._createFeature) {
|
|
242
|
+
this._createFeature.close();
|
|
243
|
+
}
|
|
244
|
+
if (this._layerList) {
|
|
245
|
+
this._layerList.refresh();
|
|
246
|
+
}
|
|
247
|
+
this.setSelectedFeatures([]);
|
|
248
|
+
this._flowItems = ["layer-list"];
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Update the selected layer id and name
|
|
252
|
+
* @param evt Event which has details of selected layerId and layerName
|
|
253
|
+
* @protected
|
|
254
|
+
*/
|
|
255
|
+
highlightSelectedLayer(evt) {
|
|
256
|
+
this.setSelectedLayer(evt.detail.layerId, evt.detail.layerName);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* On next button click open the feature create flow item
|
|
260
|
+
* @protected
|
|
261
|
+
*/
|
|
262
|
+
async navigateToCreateFeature() {
|
|
263
|
+
this._showSubmitCancelButton = false;
|
|
264
|
+
this._flowItems = [...this._flowItems, "feature-create"];
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* On report an incident button click open the create a report panel with the layer list
|
|
268
|
+
* @protected
|
|
269
|
+
*/
|
|
270
|
+
navigateToChooseCategory() {
|
|
271
|
+
this._flowItems = [...this._flowItems, "reporting-layer-list"];
|
|
142
272
|
}
|
|
143
273
|
/**
|
|
144
274
|
* 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
275
|
* @param evt Event which has list of layers
|
|
146
276
|
* @protected
|
|
147
277
|
*/
|
|
148
|
-
layerListLoaded(evt) {
|
|
278
|
+
async layerListLoaded(evt) {
|
|
149
279
|
const layersListed = evt.detail;
|
|
150
|
-
|
|
280
|
+
//consider only the layers listed in the layer-list component
|
|
281
|
+
const allMapLayers = await mapViewUtils.getAllLayers(this.mapView);
|
|
282
|
+
this._validLayers = [];
|
|
283
|
+
allMapLayers.forEach((eachLayer) => {
|
|
284
|
+
if (layersListed.includes(eachLayer.id)) {
|
|
285
|
+
this._validLayers.push(eachLayer);
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
//handleMap click on layer list loaded
|
|
289
|
+
this.handleMapClick();
|
|
290
|
+
//update the has valid layer state
|
|
151
291
|
this._hasValidLayers = layersListed.length > 0;
|
|
292
|
+
//navigate to the feature details if URL params found
|
|
293
|
+
if (!this._urlParamsLoaded) {
|
|
294
|
+
this._urlParamsLoaded = true;
|
|
295
|
+
await this.loadFeatureFromURLParams();
|
|
296
|
+
}
|
|
152
297
|
}
|
|
153
298
|
/**On click of layer list item show feature list
|
|
154
299
|
* @param evt Event which has details of selected layerId and layerName
|
|
155
300
|
* @protected
|
|
156
301
|
*/
|
|
157
302
|
displayFeaturesList(evt) {
|
|
158
|
-
this.
|
|
159
|
-
this._selectedLayerName = evt.detail.layerName;
|
|
303
|
+
this.setSelectedLayer(evt.detail.layerId, evt.detail.layerName);
|
|
160
304
|
this._flowItems = [...this._flowItems, "feature-list"];
|
|
161
305
|
}
|
|
162
306
|
/**
|
|
163
|
-
* On back from
|
|
307
|
+
* On back from selected panel navigate to the previous panel
|
|
164
308
|
* @protected
|
|
165
309
|
*/
|
|
166
|
-
|
|
310
|
+
backFromSelectedPanel() {
|
|
167
311
|
const updatedFlowItems = [...this._flowItems];
|
|
168
312
|
updatedFlowItems.pop();
|
|
313
|
+
//Back to layer list, and return as the flowItems will be reset in navigateToHomePage
|
|
314
|
+
if (updatedFlowItems.length === 1) {
|
|
315
|
+
this.navigateToHomePage();
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
169
318
|
this._flowItems = [...updatedFlowItems];
|
|
170
319
|
}
|
|
171
320
|
/**
|
|
@@ -181,7 +330,7 @@ const CrowdsourceReporter = class {
|
|
|
181
330
|
* @param evt Event which has details of selected feature
|
|
182
331
|
*/
|
|
183
332
|
async onFeatureSelectFromList(evt) {
|
|
184
|
-
this.
|
|
333
|
+
this.setSelectedFeatures([evt.detail]);
|
|
185
334
|
this._flowItems = [...this._flowItems, "feature-details"];
|
|
186
335
|
}
|
|
187
336
|
/**
|
|
@@ -192,26 +341,50 @@ const CrowdsourceReporter = class {
|
|
|
192
341
|
* @protected
|
|
193
342
|
*/
|
|
194
343
|
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 }))));
|
|
344
|
+
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 &&
|
|
345
|
+
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
346
|
}
|
|
198
347
|
/**
|
|
199
348
|
* Returns the calcite-flow item for feature details
|
|
200
349
|
* @returns Node
|
|
201
350
|
*/
|
|
202
351
|
getFeatureDetailsFlowItem() {
|
|
203
|
-
return (index.h("calcite-flow-item", { collapsed: this.isMobile && this._sidePanelCollapsed, heading: this._selectedLayerName, onCalciteFlowItemBack: this.
|
|
352
|
+
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 }))));
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Sets the selected features and updates the first feature as the current selected feature
|
|
356
|
+
* @param features Graphics array of the features selected
|
|
357
|
+
*/
|
|
358
|
+
setSelectedFeatures(features) {
|
|
359
|
+
this._selectedFeature = features;
|
|
360
|
+
this.setCurrentFeature(this._selectedFeature.length ? this._selectedFeature[0] : null);
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Set the object id of the current selected feature, and also updates the current selected layer details
|
|
364
|
+
* @param selectedFeature Graphic currently shown in feature details
|
|
365
|
+
*/
|
|
366
|
+
setCurrentFeature(selectedFeature) {
|
|
367
|
+
if (selectedFeature && selectedFeature.layer) {
|
|
368
|
+
const layer = selectedFeature.layer;
|
|
369
|
+
this.setSelectedLayer(layer.id, layer.title);
|
|
370
|
+
this._currentFeatureId = selectedFeature.attributes[layer.objectIdField];
|
|
371
|
+
}
|
|
372
|
+
else {
|
|
373
|
+
this.setSelectedLayer('', '');
|
|
374
|
+
this._currentFeatureId = '';
|
|
375
|
+
}
|
|
376
|
+
this._updateShareURL();
|
|
204
377
|
}
|
|
205
378
|
/**
|
|
206
379
|
* On Feature details change update the Layer title and the current selected layer id
|
|
207
380
|
* @param evt Event hold the details of current feature graphic in the info-card
|
|
208
381
|
*/
|
|
209
382
|
featureDetailsChanged(evt) {
|
|
210
|
-
this.
|
|
211
|
-
this._selectedLayerName = evt.detail[0].layer.title;
|
|
383
|
+
this.setCurrentFeature(evt.detail[0]);
|
|
212
384
|
}
|
|
213
385
|
/**
|
|
214
386
|
* Returns the action button to Expand/Collapse side panel in mobile mode
|
|
387
|
+
* @protected
|
|
215
388
|
*/
|
|
216
389
|
getActionToExpandCollapsePanel() {
|
|
217
390
|
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 +408,26 @@ const CrowdsourceReporter = class {
|
|
|
235
408
|
* Handle map click event
|
|
236
409
|
* @param layers Array of layerIds
|
|
237
410
|
*
|
|
238
|
-
*
|
|
411
|
+
* @protected
|
|
239
412
|
*/
|
|
240
|
-
handleMapClick(
|
|
413
|
+
handleMapClick() {
|
|
241
414
|
if (this._mapClickHandle) {
|
|
242
415
|
this._mapClickHandle.remove();
|
|
243
416
|
}
|
|
244
|
-
this._mapClickHandle = this.reactiveUtils.on(() => this.mapView, "click", (
|
|
245
|
-
void this.onMapClick(event, layers);
|
|
246
|
-
});
|
|
417
|
+
this._mapClickHandle = this.reactiveUtils.on(() => this.mapView, "click", this.onMapClick.bind(this));
|
|
247
418
|
}
|
|
248
419
|
/**
|
|
249
420
|
* On map click do hitTest and get the clicked graphics of valid layers and show feature details
|
|
250
|
-
* @param event
|
|
251
|
-
* @param layers
|
|
421
|
+
* @param event IMapClick map click event details
|
|
252
422
|
*
|
|
253
423
|
* @protected
|
|
254
424
|
*/
|
|
255
|
-
async onMapClick(event
|
|
425
|
+
async onMapClick(event) {
|
|
256
426
|
//disable map popup
|
|
257
427
|
this.mapView.popupEnabled = false;
|
|
258
428
|
// 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
429
|
const opts = {
|
|
267
|
-
include:
|
|
430
|
+
include: this._validLayers
|
|
268
431
|
};
|
|
269
432
|
// Perform a hitTest on the View
|
|
270
433
|
const hitTest = await this.mapView.hitTest(event, opts);
|
|
@@ -277,7 +440,7 @@ const CrowdsourceReporter = class {
|
|
|
277
440
|
}
|
|
278
441
|
});
|
|
279
442
|
//update the selectedFeature
|
|
280
|
-
this.
|
|
443
|
+
this.setSelectedFeatures(clickedGraphics);
|
|
281
444
|
//if featureDetails not open then add it to the list else just reInit flowItems which will update details with newly selected features
|
|
282
445
|
// eslint-disable-next-line unicorn/prefer-ternary
|
|
283
446
|
if (this._flowItems.length && this._flowItems[this._flowItems.length - 1] !== "feature-details") {
|
|
@@ -297,6 +460,59 @@ const CrowdsourceReporter = class {
|
|
|
297
460
|
const messages = await locale.getLocaleComponentStrings(this.el);
|
|
298
461
|
this._translations = messages[0];
|
|
299
462
|
}
|
|
463
|
+
/**
|
|
464
|
+
* Updates the share url for current selected feature
|
|
465
|
+
* @protected
|
|
466
|
+
*/
|
|
467
|
+
_updateShareURL() {
|
|
468
|
+
var _a, _b;
|
|
469
|
+
const url = (_a = this._shareNode) === null || _a === void 0 ? void 0 : _a.shareUrl;
|
|
470
|
+
if (!url) {
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
const urlObj = new URL(url);
|
|
474
|
+
//set the selected layers id
|
|
475
|
+
if (this._selectedLayerId) {
|
|
476
|
+
urlObj.searchParams.set("layerid", this._selectedLayerId);
|
|
477
|
+
}
|
|
478
|
+
else {
|
|
479
|
+
urlObj.searchParams.delete("layerid");
|
|
480
|
+
}
|
|
481
|
+
//Set the selected features objectid
|
|
482
|
+
if ((_b = this._selectedFeature) === null || _b === void 0 ? void 0 : _b.length) {
|
|
483
|
+
urlObj.searchParams.set("oid", this._currentFeatureId);
|
|
484
|
+
}
|
|
485
|
+
else {
|
|
486
|
+
urlObj.searchParams.delete("oid");
|
|
487
|
+
}
|
|
488
|
+
//update the url in share component
|
|
489
|
+
this._shareNode.shareUrl = urlObj.href;
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Navigates to selected features detail based on the URL params
|
|
493
|
+
* @protected
|
|
494
|
+
*/
|
|
495
|
+
async loadFeatureFromURLParams() {
|
|
496
|
+
if (this.layerId && this.objectId) {
|
|
497
|
+
const layer = await mapViewUtils.getLayerOrTable(this.mapView, this.layerId);
|
|
498
|
+
if (layer) {
|
|
499
|
+
// only query if we have some ids...query with no ids will result in all features being returned
|
|
500
|
+
const featureSet = await mapViewUtils.queryFeaturesByID([Number(this.objectId)], layer, [], false, this.mapView.spatialReference);
|
|
501
|
+
if (featureSet.length) {
|
|
502
|
+
//update the selectedFeature
|
|
503
|
+
this._selectedFeature = featureSet;
|
|
504
|
+
//if featureDetails not open then add it to the list else just reInit flowItems which will update details with newly selected features
|
|
505
|
+
// eslint-disable-next-line unicorn/prefer-ternary
|
|
506
|
+
if (this._flowItems.length && this._flowItems[this._flowItems.length - 1] !== "feature-details") {
|
|
507
|
+
this._flowItems = [...this._flowItems, "feature-details"];
|
|
508
|
+
}
|
|
509
|
+
else {
|
|
510
|
+
this._flowItems = [...this._flowItems];
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
}
|
|
300
516
|
get el() { return index.getElement(this); }
|
|
301
517
|
static get watchers() { return {
|
|
302
518
|
"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');
|