@esri/solutions-components 0.4.3 → 0.4.5
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/public-notification/resources.json +5 -5
- package/dist/assets/t9n/public-notification/resources_en.json +5 -5
- package/dist/cjs/calcite-input-message_5.cjs.entry.js +1 -17
- package/dist/cjs/{downloadUtils-ae182e3a.js → downloadUtils-d05b069f.js} +91 -42
- package/dist/cjs/{index.es-b71e9071.js → index.es-e47b660c.js} +1 -1
- package/dist/cjs/layer-table.cjs.entry.js +1 -1
- package/dist/cjs/public-notification.cjs.entry.js +3 -11
- package/dist/collection/components/map-select-tools/map-select-tools.js +0 -16
- package/dist/collection/components/public-notification/public-notification.js +3 -11
- package/dist/collection/utils/downloadUtils.js +90 -41
- package/dist/collection/utils/downloadUtils.ts +123 -52
- package/dist/components/downloadUtils.js +90 -41
- package/dist/components/map-select-tools2.js +0 -16
- package/dist/components/public-notification.js +3 -11
- package/dist/esm/calcite-input-message_5.entry.js +1 -17
- package/dist/esm/{downloadUtils-8d64719e.js → downloadUtils-a9b39194.js} +91 -42
- package/dist/esm/{index.es-1d777745.js → index.es-4904465f.js} +1 -1
- package/dist/esm/layer-table.entry.js +1 -1
- package/dist/esm/public-notification.entry.js +3 -11
- package/dist/solutions-components/p-20c73673.entry.js +6 -0
- package/dist/solutions-components/{p-702e1915.js → p-25eb36dc.js} +1 -1
- package/dist/solutions-components/p-59caff67.entry.js +17 -0
- package/dist/solutions-components/{p-048a4c91.entry.js → p-a606221a.entry.js} +1 -1
- package/dist/solutions-components/{p-01215468.js → p-e7b3a4d9.js} +3 -3
- package/dist/solutions-components/solutions-components.esm.js +1 -1
- package/dist/solutions-components/utils/downloadUtils.ts +123 -52
- package/dist/types/components/json-editor/assets/monaco-editor/monaco.d.ts +8262 -0
- package/package.json +1 -1
- package/dist/solutions-components/p-4bfcd9ea.entry.js +0 -17
- package/dist/solutions-components/p-a99ca396.entry.js +0 -6
@@ -17,15 +17,15 @@
|
|
17
17
|
"selectedAddresses": "{{n}} selected addresses from {{layer}}",
|
18
18
|
"selectionLoading": "Selection loading",
|
19
19
|
"selectPDFLabelOption": "Select PDF label option",
|
20
|
-
"refineTip": "
|
20
|
+
"refineTip": "Refine and finalize your lists by using sketch tools to add or remove features across all selection sets.",
|
21
21
|
"refineTipNoSelections": "There are no selections to refine. Go to My lists to create a list of features.",
|
22
22
|
"removeDuplicate": "Remove duplicate addresses",
|
23
|
-
"selectLayerAndAdd": "Choose
|
24
|
-
"selectSearchTip": "Search for an address, place, or feature
|
23
|
+
"selectLayerAndAdd": "Choose a layer, click Add, and select features to create a list that you can export to CSV or PDF for download.",
|
24
|
+
"selectSearchTip": "Search for an address, place, or feature to make a selection.",
|
25
25
|
"selectLayerTip": "Draw shapes to select features from the chosen selection layer; the results will be used to select features from the addressee layer",
|
26
|
-
"selectSketchTip": "
|
26
|
+
"selectSketchTip": "Use sketch tools to draw graphics in the map to select intersecting features in the addressee layer.",
|
27
27
|
"optionalSearchDistance": "and optionally add search distance.",
|
28
|
-
"listHasSetsTip": "
|
28
|
+
"listHasSetsTip": "Edit or delete existing lists or choose a layer and click Add to create a notification list.",
|
29
29
|
"uniqueCout": "Unique Count: {{n}}",
|
30
30
|
"shouldProceed": "Would you like to proceed?",
|
31
31
|
"proceed": "Proceed",
|
@@ -17,15 +17,15 @@
|
|
17
17
|
"selectedAddresses": "{{n}} selected addresses from {{layer}}",
|
18
18
|
"selectionLoading": "Selection loading",
|
19
19
|
"selectPDFLabelOption": "Select PDF label option",
|
20
|
-
"refineTip": "
|
20
|
+
"refineTip": "Refine and finalize your lists by using sketch tools to add or remove features across all selection sets.",
|
21
21
|
"refineTipNoSelections": "There are no selections to refine. Go to My lists to create a list of features.",
|
22
22
|
"removeDuplicate": "Remove duplicate addresses",
|
23
|
-
"selectLayerAndAdd": "Choose
|
24
|
-
"selectSearchTip": "Search for an address, place, or feature
|
23
|
+
"selectLayerAndAdd": "Choose a layer, click Add, and select features to create a list that you can export to CSV or PDF for download.",
|
24
|
+
"selectSearchTip": "Search for an address, place, or feature to make a selection.",
|
25
25
|
"selectLayerTip": "Draw shapes to select features from the chosen selection layer; the results will be used to select features from the addressee layer",
|
26
|
-
"selectSketchTip": "
|
26
|
+
"selectSketchTip": "Use sketch tools to draw graphics in the map to select intersecting features in the addressee layer.",
|
27
27
|
"optionalSearchDistance": "and optionally add search distance.",
|
28
|
-
"listHasSetsTip": "
|
28
|
+
"listHasSetsTip": "Edit or delete existing lists or choose a layer and click Add to create a notification list.",
|
29
29
|
"uniqueCout": "Unique Count: {{n}}",
|
30
30
|
"shouldProceed": "Would you like to proceed?",
|
31
31
|
"proceed": "Proceed",
|
@@ -16,7 +16,7 @@ const mapViewUtils = require('./mapViewUtils-d250b1ed.js');
|
|
16
16
|
const interfaces$1 = require('./interfaces-17c631bf.js');
|
17
17
|
const publicNotificationStore = require('./publicNotificationStore-20e924f5.js');
|
18
18
|
const locale = require('./locale-04da9a8c.js');
|
19
|
-
const downloadUtils = require('./downloadUtils-
|
19
|
+
const downloadUtils = require('./downloadUtils-d05b069f.js');
|
20
20
|
const publicNotificationUtils = require('./publicNotificationUtils-9d585d8d.js');
|
21
21
|
require('./resources-b56bce71.js');
|
22
22
|
require('./guid-84ac4d91.js');
|
@@ -296,11 +296,6 @@ const MapSelectTools = class {
|
|
296
296
|
* @returns Promise when complete
|
297
297
|
*/
|
298
298
|
async watchSearchConfigurationHandler(newValue, oldValue) {
|
299
|
-
console.log("watchSearchConfigurationHandler");
|
300
|
-
console.log("newValue");
|
301
|
-
console.log(newValue);
|
302
|
-
console.log("oldValue");
|
303
|
-
console.log(oldValue);
|
304
299
|
if (JSON.stringify(newValue) !== JSON.stringify(oldValue)) {
|
305
300
|
this._initSearchWidget();
|
306
301
|
}
|
@@ -367,7 +362,6 @@ const MapSelectTools = class {
|
|
367
362
|
* Handle changes to the search configuration
|
368
363
|
*/
|
369
364
|
searchConfigurationChangeChanged(event) {
|
370
|
-
console.log("searchConfigurationChange listener");
|
371
365
|
this.searchConfiguration = event.detail;
|
372
366
|
}
|
373
367
|
/**
|
@@ -500,16 +494,8 @@ const MapSelectTools = class {
|
|
500
494
|
* @protected
|
501
495
|
*/
|
502
496
|
_initSearchWidget() {
|
503
|
-
console.log("_initSearchWidget");
|
504
|
-
console.log("this.mapView");
|
505
|
-
console.log(this.mapView);
|
506
|
-
console.log("this._searchElement");
|
507
|
-
console.log(this._searchElement);
|
508
497
|
if (this.mapView && this._searchElement) {
|
509
|
-
console.log("this._getSearchConfig");
|
510
498
|
const searchConfiguration = this._getSearchConfig(this.searchConfiguration, this.mapView);
|
511
|
-
console.log("searchConfiguration");
|
512
|
-
console.log(searchConfiguration);
|
513
499
|
const searchOptions = Object.assign({ view: this.mapView, container: this._searchElement, searchTerm: this._searchTerm }, searchConfiguration);
|
514
500
|
this._searchWidget = new this.Search(searchOptions);
|
515
501
|
this._searchWidget.popupEnabled = false;
|
@@ -549,11 +535,9 @@ const MapSelectTools = class {
|
|
549
535
|
? view.map.findLayerById(layerSource.layer.id)
|
550
536
|
: null;
|
551
537
|
if (layerFromMap) {
|
552
|
-
console.log("layerFromMap");
|
553
538
|
layerSource.layer = layerFromMap;
|
554
539
|
}
|
555
540
|
else if ((_b = layerSource === null || layerSource === void 0 ? void 0 : layerSource.layer) === null || _b === void 0 ? void 0 : _b.url) {
|
556
|
-
console.log("create new");
|
557
541
|
layerSource.layer = new this.FeatureLayer((_c = layerSource === null || layerSource === void 0 ? void 0 : layerSource.layer) === null || _c === void 0 ? void 0 : _c.url);
|
558
542
|
}
|
559
543
|
}
|
@@ -1082,7 +1082,7 @@ function(t){var e=function(t){for(var e=t.length,r=new Uint8Array(e),n=0;n<e;n++
|
|
1082
1082
|
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
1083
1083
|
* ====================================================================
|
1084
1084
|
*/
|
1085
|
-
function(t){function e(){return (n.canvg?Promise.resolve(n.canvg):Promise.resolve().then(function () { return require('./index.es-
|
1085
|
+
function(t){function e(){return (n.canvg?Promise.resolve(n.canvg):Promise.resolve().then(function () { return require('./index.es-e47b660c.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},
|
1086
1086
|
/** ====================================================================
|
1087
1087
|
* @license
|
1088
1088
|
* jsPDF XMP metadata plugin
|
@@ -2124,6 +2124,7 @@ function _downloadPDFFile(labels, labelPageDescription, fileTitle) {
|
|
2124
2124
|
* See the License for the specific language governing permissions and
|
2125
2125
|
* limitations under the License.
|
2126
2126
|
*/
|
2127
|
+
const lineSeparatorChar = "|";
|
2127
2128
|
//#endregion
|
2128
2129
|
//#region Public functions
|
2129
2130
|
/**
|
@@ -2156,7 +2157,12 @@ async function downloadCSV(selectionSetNames, layer, ids, formatUsingLayerPopup,
|
|
2156
2157
|
*/
|
2157
2158
|
async function downloadPDF(selectionSetNames, layer, ids, removeDuplicates, labelPageDescription) {
|
2158
2159
|
console.log("downloadPDF using selectionSetNames " + JSON.stringify(selectionSetNames)); //???
|
2159
|
-
|
2160
|
+
let labels = await _prepareLabels(layer, ids, removeDuplicates);
|
2161
|
+
labels =
|
2162
|
+
// Remove empty lines in labels
|
2163
|
+
labels.map(labelLines => labelLines.filter(line => line.length > 0))
|
2164
|
+
// Remove empty labels
|
2165
|
+
.filter(label => label.length > 0);
|
2160
2166
|
exportPDF(labels, labelPageDescription);
|
2161
2167
|
return Promise.resolve();
|
2162
2168
|
}
|
@@ -2167,7 +2173,7 @@ async function downloadPDF(selectionSetNames, layer, ids, removeDuplicates, labe
|
|
2167
2173
|
*
|
2168
2174
|
* @param fieldInfos Layer's fieldInfos structure
|
2169
2175
|
* @param bypassFieldVisiblity Indicates if the configured fieldInfo visibility property should be ignored
|
2170
|
-
* @return Label spec
|
2176
|
+
* @return Label spec with lines separated by `lineSeparatorChar`
|
2171
2177
|
*/
|
2172
2178
|
function _convertPopupFieldsToLabelSpec(fieldInfos, bypassFieldVisiblity = false) {
|
2173
2179
|
const labelSpec = [];
|
@@ -2177,7 +2183,7 @@ function _convertPopupFieldsToLabelSpec(fieldInfos, bypassFieldVisiblity = false
|
|
2177
2183
|
labelSpec.push(`{${fieldInfo.fieldName}}`);
|
2178
2184
|
}
|
2179
2185
|
});
|
2180
|
-
return labelSpec;
|
2186
|
+
return labelSpec.join(lineSeparatorChar);
|
2181
2187
|
}
|
2182
2188
|
/**
|
2183
2189
|
* Converts the text of a custom popup into a multiline label specification; conversion splits text into
|
@@ -2185,22 +2191,19 @@ function _convertPopupFieldsToLabelSpec(fieldInfos, bypassFieldVisiblity = false
|
|
2185
2191
|
*
|
2186
2192
|
* @param popupInfo Layer's popupInfo structure containing description, fieldInfos, and expressionInfos, e.g.,
|
2187
2193
|
* "<div style='text-align: left;'>{NAME}<br />{STREET}<br />{CITY}, {STATE} {ZIP} <br /></div>"
|
2188
|
-
* @return Label spec
|
2194
|
+
* @return Label spec with lines separated by `lineSeparatorChar`
|
2189
2195
|
*/
|
2190
2196
|
function _convertPopupTextToLabelSpec(popupInfo) {
|
2191
|
-
// Replace <br>, <br/> with
|
2192
|
-
popupInfo = popupInfo.replace(/<br\s*\/?>/gi,
|
2193
|
-
// Remove remaining HTML tags, replace 0xA0 that popup uses for spaces, replace some char representations,
|
2197
|
+
// Replace <br>, <br/> with the line separator character
|
2198
|
+
popupInfo = popupInfo.replace(/<br\s*\/?>/gi, lineSeparatorChar);
|
2199
|
+
// Remove remaining HTML tags, replace 0xA0 that popup uses for spaces, and replace some char representations,
|
2194
2200
|
// and split the label back into individual lines
|
2195
|
-
|
2201
|
+
const labelSpec = popupInfo
|
2196
2202
|
.replace(/<[\s.]*[^<>]*\/?>/gi, "")
|
2197
2203
|
.replace(/\xA0/gi, " ")
|
2198
2204
|
.replace(/</gi, "<")
|
2199
2205
|
.replace(/>/gi, ">")
|
2200
|
-
.replace(/ /gi, " ")
|
2201
|
-
.split("|");
|
2202
|
-
// Trim lines and remove empties
|
2203
|
-
labelSpec = labelSpec.map(line => line.trim()).filter(line => line.length > 0);
|
2206
|
+
.replace(/ /gi, " ");
|
2204
2207
|
return labelSpec;
|
2205
2208
|
}
|
2206
2209
|
/**
|
@@ -2219,7 +2222,7 @@ async function _createArcadeExecutors(labelFormat, layer) {
|
|
2219
2222
|
}
|
2220
2223
|
// Are there any Arcade expressions in the label format?
|
2221
2224
|
const arcadeExpressionRegExp = /\{expression\/\w+\}/g;
|
2222
|
-
const arcadeExpressionsMatches = labelFormat.
|
2225
|
+
const arcadeExpressionsMatches = labelFormat.match(arcadeExpressionRegExp);
|
2223
2226
|
if (!arcadeExpressionsMatches) {
|
2224
2227
|
return Promise.resolve(arcadeExecutors);
|
2225
2228
|
}
|
@@ -2246,6 +2249,39 @@ async function _createArcadeExecutors(labelFormat, layer) {
|
|
2246
2249
|
return arcadeExecutors;
|
2247
2250
|
});
|
2248
2251
|
}
|
2252
|
+
/**
|
2253
|
+
* Prepares an attribute's value by applying domain and type information.
|
2254
|
+
*
|
2255
|
+
* @param attributeValue Value of attribute
|
2256
|
+
* @param attributeType Type of attribute
|
2257
|
+
* @param attributeDomain Domain info for attribute, if any
|
2258
|
+
* @return Attribute value modified appropriate to domain and type
|
2259
|
+
*/
|
2260
|
+
function _prepareAttributeValue(attributeValue, attributeType, attributeDomain, intl) {
|
2261
|
+
if (attributeDomain && attributeDomain.type === "coded-value") {
|
2262
|
+
// "coded-value" domain field
|
2263
|
+
const value = attributeDomain.getName(attributeValue);
|
2264
|
+
return value;
|
2265
|
+
}
|
2266
|
+
else {
|
2267
|
+
// Non-domain field or unsupported domain type
|
2268
|
+
let value = attributeValue;
|
2269
|
+
switch (attributeType) {
|
2270
|
+
case "date":
|
2271
|
+
// Format date produces odd characters for the space between the time and the AM/PM text,
|
2272
|
+
// e.g., "12/31/1969, 4:00 PM"
|
2273
|
+
value = intl.formatDate(value).replace(/\xe2\x80\xaf/g, "");
|
2274
|
+
break;
|
2275
|
+
case "double":
|
2276
|
+
case "integer":
|
2277
|
+
case "long":
|
2278
|
+
case "small-integer":
|
2279
|
+
value = intl.formatNumber(value);
|
2280
|
+
break;
|
2281
|
+
}
|
2282
|
+
return value;
|
2283
|
+
}
|
2284
|
+
}
|
2249
2285
|
/**
|
2250
2286
|
* Creates labels from items.
|
2251
2287
|
*
|
@@ -2262,6 +2298,13 @@ async function _prepareLabels(layer, ids, removeDuplicates = true, formatUsingLa
|
|
2262
2298
|
const [intl] = await loadModules.loadModules(["esri/intl"]);
|
2263
2299
|
// Get the features to export
|
2264
2300
|
const featureSet = await mapViewUtils.queryFeaturesByID(ids, layer);
|
2301
|
+
// Get field data types. Do we have any domain-based fields?
|
2302
|
+
const attributeTypes = {};
|
2303
|
+
const attributeDomains = {};
|
2304
|
+
layer.fields.forEach(field => {
|
2305
|
+
attributeTypes[field.name] = field.type;
|
2306
|
+
attributeDomains[field.name] = field.domain;
|
2307
|
+
});
|
2265
2308
|
// Get the label formatting, if any
|
2266
2309
|
let labelFormat;
|
2267
2310
|
let arcadeExecutors = {};
|
@@ -2275,7 +2318,7 @@ async function _prepareLabels(layer, ids, removeDuplicates = true, formatUsingLa
|
|
2275
2318
|
// Can we use the popup title?
|
2276
2319
|
// eslint-disable-next-line unicorn/prefer-ternary
|
2277
2320
|
if (typeof layer.popupTemplate.title === "string") {
|
2278
|
-
labelFormat =
|
2321
|
+
labelFormat = layer.popupTemplate.title;
|
2279
2322
|
// Otherwise revert to using attributes
|
2280
2323
|
}
|
2281
2324
|
else {
|
@@ -2294,35 +2337,43 @@ async function _prepareLabels(layer, ids, removeDuplicates = true, formatUsingLa
|
|
2294
2337
|
// eslint-disable-next-line unicorn/prefer-ternary
|
2295
2338
|
if (labelFormat) {
|
2296
2339
|
const arcadeExpressionRegExp = /\{expression\/\w+\}/g;
|
2297
|
-
|
2340
|
+
const attributeRegExp = /\{\w+\}/g;
|
2341
|
+
// Find the label fields that we need to replace with values
|
2342
|
+
const arcadeExpressionMatches = labelFormat.match(arcadeExpressionRegExp);
|
2343
|
+
const attributeMatches = labelFormat.match(attributeRegExp);
|
2344
|
+
// Convert feature attributes into an array of labels
|
2298
2345
|
labels = featureSet.features.map(feature => {
|
2299
|
-
|
2300
|
-
|
2301
|
-
|
2302
|
-
|
2303
|
-
|
2304
|
-
|
2305
|
-
|
2306
|
-
|
2307
|
-
|
2308
|
-
|
2309
|
-
|
2310
|
-
|
2311
|
-
|
2312
|
-
|
2313
|
-
|
2314
|
-
|
2315
|
-
|
2316
|
-
|
2346
|
+
let labelPrep = labelFormat;
|
2347
|
+
// Replace Arcade expressions
|
2348
|
+
if (arcadeExpressionMatches) {
|
2349
|
+
arcadeExpressionMatches.forEach((match) => {
|
2350
|
+
const expressionName = match.substring(match.indexOf("/") + 1, match.length - 1);
|
2351
|
+
const value = arcadeExecutors[expressionName].execute({ "$feature": feature });
|
2352
|
+
labelPrep = labelPrep.replace(match, value);
|
2353
|
+
});
|
2354
|
+
}
|
2355
|
+
// Replace non-Arcade fields
|
2356
|
+
if (attributeMatches) {
|
2357
|
+
attributeMatches.forEach((match) => {
|
2358
|
+
const attributeName = match.substring(1, match.length - 1);
|
2359
|
+
const value = _prepareAttributeValue(feature.attributes[attributeName], attributeTypes[attributeName], attributeDomains[attributeName], intl);
|
2360
|
+
labelPrep = labelPrep.replace(match, value);
|
2361
|
+
});
|
2362
|
+
}
|
2363
|
+
// Split label into lines
|
2364
|
+
let label = labelPrep.split(lineSeparatorChar);
|
2365
|
+
// Trim lines
|
2366
|
+
label = label.map(line => line.trim());
|
2317
2367
|
return label;
|
2318
|
-
})
|
2319
|
-
// Remove empty labels
|
2320
|
-
.filter(label => label.length > 0);
|
2368
|
+
});
|
2321
2369
|
}
|
2322
2370
|
else {
|
2323
2371
|
// Export all attributes
|
2324
2372
|
labels = featureSet.features.map(feature => {
|
2325
|
-
return Object.
|
2373
|
+
return Object.keys(feature.attributes).map((attributeName) => {
|
2374
|
+
const value = _prepareAttributeValue(feature.attributes[attributeName], attributeTypes[attributeName], attributeDomains[attributeName], intl);
|
2375
|
+
return `${value}`;
|
2376
|
+
});
|
2326
2377
|
});
|
2327
2378
|
}
|
2328
2379
|
// Remove duplicates
|
@@ -2335,14 +2386,12 @@ async function _prepareLabels(layer, ids, removeDuplicates = true, formatUsingLa
|
|
2335
2386
|
if (includeHeaderNames) {
|
2336
2387
|
let headerNames = [];
|
2337
2388
|
if (labelFormat) {
|
2338
|
-
headerNames = labelFormat.
|
2389
|
+
headerNames = labelFormat.replace(/\{/g, "").replace(/\}/g, "").split(lineSeparatorChar);
|
2339
2390
|
}
|
2340
2391
|
else {
|
2341
2392
|
const featuresAttrs = featureSet.features[0].attributes;
|
2342
2393
|
Object.keys(featuresAttrs).forEach(k => {
|
2343
|
-
|
2344
|
-
headerNames.push(k);
|
2345
|
-
}
|
2394
|
+
headerNames.push(k);
|
2346
2395
|
});
|
2347
2396
|
}
|
2348
2397
|
labels.unshift(headerNames);
|
@@ -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-d05b069f.js');
|
10
10
|
require('./index-c6979cbb.js');
|
11
11
|
require('./loadModules-0806a34f.js');
|
12
12
|
require('./locale-04da9a8c.js');
|
@@ -10,7 +10,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
10
10
|
const index = require('./index-c6979cbb.js');
|
11
11
|
const locale = require('./locale-04da9a8c.js');
|
12
12
|
const mapViewUtils = require('./mapViewUtils-d250b1ed.js');
|
13
|
-
const downloadUtils = require('./downloadUtils-
|
13
|
+
const downloadUtils = require('./downloadUtils-d05b069f.js');
|
14
14
|
require('./_commonjsHelpers-384729db.js');
|
15
15
|
require('./interfaces-17c631bf.js');
|
16
16
|
require('./loadModules-0806a34f.js');
|
@@ -69,17 +69,9 @@ const PublicNotification = class {
|
|
69
69
|
* @returns Promise when complete
|
70
70
|
*/
|
71
71
|
async watchSearchConfigurationHandler(newValue, oldValue) {
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
console.log("PN watchSearchConfigurationHandler");
|
76
|
-
console.log("PN newValue");
|
77
|
-
console.log(newValue);
|
78
|
-
console.log("PN oldValue");
|
79
|
-
console.log(oldValue);
|
80
|
-
if (JSON.stringify(newValue) !== JSON.stringify(oldValue)) {
|
81
|
-
console.log("Emit event from parent");
|
82
|
-
this._searchConfiguration = Object.assign({}, newValue);
|
72
|
+
const s_newValue = JSON.stringify(newValue);
|
73
|
+
if (s_newValue !== JSON.stringify(oldValue)) {
|
74
|
+
this._searchConfiguration = JSON.parse(s_newValue);
|
83
75
|
this.searchConfigurationChange.emit(this._searchConfiguration);
|
84
76
|
}
|
85
77
|
}
|
@@ -78,11 +78,6 @@ export class MapSelectTools {
|
|
78
78
|
* @returns Promise when complete
|
79
79
|
*/
|
80
80
|
async watchSearchConfigurationHandler(newValue, oldValue) {
|
81
|
-
console.log("watchSearchConfigurationHandler");
|
82
|
-
console.log("newValue");
|
83
|
-
console.log(newValue);
|
84
|
-
console.log("oldValue");
|
85
|
-
console.log(oldValue);
|
86
81
|
if (JSON.stringify(newValue) !== JSON.stringify(oldValue)) {
|
87
82
|
this._initSearchWidget();
|
88
83
|
}
|
@@ -149,7 +144,6 @@ export class MapSelectTools {
|
|
149
144
|
* Handle changes to the search configuration
|
150
145
|
*/
|
151
146
|
searchConfigurationChangeChanged(event) {
|
152
|
-
console.log("searchConfigurationChange listener");
|
153
147
|
this.searchConfiguration = event.detail;
|
154
148
|
}
|
155
149
|
/**
|
@@ -282,16 +276,8 @@ export class MapSelectTools {
|
|
282
276
|
* @protected
|
283
277
|
*/
|
284
278
|
_initSearchWidget() {
|
285
|
-
console.log("_initSearchWidget");
|
286
|
-
console.log("this.mapView");
|
287
|
-
console.log(this.mapView);
|
288
|
-
console.log("this._searchElement");
|
289
|
-
console.log(this._searchElement);
|
290
279
|
if (this.mapView && this._searchElement) {
|
291
|
-
console.log("this._getSearchConfig");
|
292
280
|
const searchConfiguration = this._getSearchConfig(this.searchConfiguration, this.mapView);
|
293
|
-
console.log("searchConfiguration");
|
294
|
-
console.log(searchConfiguration);
|
295
281
|
const searchOptions = Object.assign({ view: this.mapView, container: this._searchElement, searchTerm: this._searchTerm }, searchConfiguration);
|
296
282
|
this._searchWidget = new this.Search(searchOptions);
|
297
283
|
this._searchWidget.popupEnabled = false;
|
@@ -331,11 +317,9 @@ export class MapSelectTools {
|
|
331
317
|
? view.map.findLayerById(layerSource.layer.id)
|
332
318
|
: null;
|
333
319
|
if (layerFromMap) {
|
334
|
-
console.log("layerFromMap");
|
335
320
|
layerSource.layer = layerFromMap;
|
336
321
|
}
|
337
322
|
else if ((_b = layerSource === null || layerSource === void 0 ? void 0 : layerSource.layer) === null || _b === void 0 ? void 0 : _b.url) {
|
338
|
-
console.log("create new");
|
339
323
|
layerSource.layer = new this.FeatureLayer((_c = layerSource === null || layerSource === void 0 ? void 0 : layerSource.layer) === null || _c === void 0 ? void 0 : _c.url);
|
340
324
|
}
|
341
325
|
}
|
@@ -73,17 +73,9 @@ export class PublicNotification {
|
|
73
73
|
* @returns Promise when complete
|
74
74
|
*/
|
75
75
|
async watchSearchConfigurationHandler(newValue, oldValue) {
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
console.log("PN watchSearchConfigurationHandler");
|
80
|
-
console.log("PN newValue");
|
81
|
-
console.log(newValue);
|
82
|
-
console.log("PN oldValue");
|
83
|
-
console.log(oldValue);
|
84
|
-
if (JSON.stringify(newValue) !== JSON.stringify(oldValue)) {
|
85
|
-
console.log("Emit event from parent");
|
86
|
-
this._searchConfiguration = Object.assign({}, newValue);
|
76
|
+
const s_newValue = JSON.stringify(newValue);
|
77
|
+
if (s_newValue !== JSON.stringify(oldValue)) {
|
78
|
+
this._searchConfiguration = JSON.parse(s_newValue);
|
87
79
|
this.searchConfigurationChange.emit(this._searchConfiguration);
|
88
80
|
}
|
89
81
|
}
|