@esri/solutions-components 0.10.32 → 0.10.34
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/cjs/card-manager_3.cjs.entry.js +99 -6
- package/dist/cjs/crowdsource-manager.cjs.entry.js +13 -4
- package/dist/cjs/feature-list.cjs.entry.js +12 -3
- package/dist/cjs/instant-apps-time-filter.cjs.entry.js +2 -2
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/solution-item-icon.cjs.entry.js +4 -1
- package/dist/cjs/solutions-components.cjs.js +1 -1
- package/dist/collection/assets/t9n/map-card/resources.json +2 -1
- package/dist/collection/assets/t9n/map-card/resources_en.json +2 -1
- package/dist/collection/components/card-manager/card-manager.js +2 -2
- package/dist/collection/components/crowdsource-manager/crowdsource-manager.js +36 -4
- package/dist/collection/components/feature-list/feature-list.js +12 -3
- package/dist/collection/components/layer-table/layer-table.js +36 -2
- package/dist/collection/components/map-card/map-card.js +168 -2
- package/dist/collection/components/solution-item-icon/item-icons/group16.png +0 -0
- package/dist/collection/components/solution-item-icon/solution-item-icon.js +4 -1
- package/dist/components/card-manager2.js +2 -2
- package/dist/components/crowdsource-manager.js +14 -4
- package/dist/components/feature-list2.js +12 -3
- package/dist/components/instant-apps-time-filter.js +2 -2
- package/dist/components/layer-table2.js +13 -2
- package/dist/components/map-card2.js +157 -60
- package/dist/components/solution-item-icon2.js +4 -1
- package/dist/esm/card-manager_3.entry.js +99 -6
- package/dist/esm/crowdsource-manager.entry.js +13 -4
- package/dist/esm/feature-list.entry.js +12 -3
- package/dist/esm/instant-apps-time-filter.entry.js +2 -2
- package/dist/esm/loader.js +1 -1
- package/dist/esm/solution-item-icon.entry.js +4 -1
- package/dist/esm/solutions-components.js +1 -1
- package/dist/solutions-components/assets/t9n/map-card/resources.json +2 -1
- package/dist/solutions-components/assets/t9n/map-card/resources_en.json +2 -1
- package/dist/solutions-components/item-icons/group16.png +0 -0
- package/dist/solutions-components/p-3a513c67.entry.js +6 -0
- package/dist/solutions-components/p-4f5913f3.entry.js +6 -0
- package/dist/solutions-components/{p-3900240c.entry.js → p-5fc0e134.entry.js} +1 -1
- package/dist/solutions-components/p-8d2d66d0.entry.js +6 -0
- package/dist/solutions-components/p-cf878a34.entry.js +6 -0
- package/dist/solutions-components/solutions-components.esm.js +1 -1
- package/dist/types/components/crowdsource-manager/crowdsource-manager.d.ts +8 -0
- package/dist/types/components/feature-list/feature-list.d.ts +4 -0
- package/dist/types/components/layer-table/layer-table.d.ts +9 -1
- package/dist/types/components/map-card/map-card.d.ts +46 -1
- package/dist/types/components.d.ts +48 -0
- package/package.json +4 -4
- package/dist/solutions-components/p-3bcdf332.entry.js +0 -6
- package/dist/solutions-components/p-710bd9ec.entry.js +0 -6
- package/dist/solutions-components/p-bd5f3c9e.entry.js +0 -6
- package/dist/solutions-components/p-cc4c013e.entry.js +0 -6
@@ -130,9 +130,9 @@ export class CardManager {
|
|
130
130
|
const messageClass = this._graphics?.length > 0 || this._showCreateFeatureComponent ? "display-none" : "";
|
131
131
|
const isTable = this.layer?.isTable;
|
132
132
|
const heading = isTable ? this._translations.createRecord : this._translations.createFeature;
|
133
|
-
const guideMsg = this.customInfoText
|
133
|
+
const guideMsg = this.customInfoText ? this.customInfoText : this.selectingFeatureFromMap ? this._translations.selectFeaturesFromMapToStart : this._translations.selectFeaturesToStart;
|
134
134
|
const showCreateFeatureOrRecordBtn = this.enableCreateFeatures && this.layer?.capabilities?.operations?.supportsAdd;
|
135
|
-
return (h(Host, { key: '
|
135
|
+
return (h(Host, { key: '7360aa9c48dd0c3e4a14fe0833b99c301388f93c' }, h("div", { key: '9d610f0c4728c238eceb790e97a4e06b77f1a2d1', class: "overflow-auto height-full" }, h("calcite-shell", { key: '4b6a02205a971c7ff61aab567b2f2a3c5d288f8d', class: "position-relative " + featuresClass }, h("div", { key: '96ee8ce138265dd4b562ac0a33b79a0db4497842', class: "position-static z-index-500" }, h("info-card", { key: '7db359bc1016281fd01b737dc5c424fe78995422', enableEditGeometry: this.enableEditGeometry, graphics: this._graphics, isLoading: this._cardLoading, isMobile: this.isMobile, mapView: this.mapView }))), h("calcite-shell", { key: 'afc8d06e9aa3213a9ca10c929497ed4618a28e91', class: "position-relative " + messageClass }, h("calcite-flow-item", { key: '46db92a6e259eefea3293310e3e2f43d7639db97' }, h("calcite-panel", { key: 'd2bc23ae7bcf2b7b7b48a35efc0697e0d1f9e23e' }, h("div", { key: '8f7fd13f9ec99beec1d7231dda03eba403a70a69', class: "padding-1" }, h("calcite-notice", { key: '2fbe94292c1dd91ee1691b8e3d295225ff5b534b', icon: this.selectingFeatureFromMap ? "map" : "table", iconFlipRtl: true, open: true }, h("div", { key: '9f91099e4bfa0675c5b098a73b2f132b80ee76b0', slot: "message" }, guideMsg))), !this.isMobile && showCreateFeatureOrRecordBtn && h("calcite-button", { key: 'c1b04e776f3750712992d736e09726cc26eae5db', disabled: !this.layer, onClick: () => this._createFeatureBtnClicked(), slot: "footer", width: "full" }, isTable ? this._translations.createRecord : this._translations.createFeature)))), h("calcite-shell", { key: 'a71d4b0abd1ec1a4ed14a2cb3dcb10a075f54bf0', class: "position-relative " + createFeatureClass }, h("calcite-flow-item", { key: '85047b527f5995a912b527325f287c3596caf630' }, h("calcite-panel", { key: 'd335be81502e0feb803ee9ad4e501d4c85f184f5', heading: heading }, h("calcite-action", { key: 'b179c3185dbada3bd052d38b98b75cf29240655c', class: "back-button hydrated", icon: "chevron-left", onClick: this._backFromCreateFeature.bind(this), scale: "s", slot: "header-actions-start", text: "" }), this.getEditorComponent(), this._showSubmitBtn && h("calcite-button", { key: 'f3b6655e3effdb6b09e64acd651a09d6028a6df9', appearance: "solid", class: "footer-top-button footer-button", onClick: () => void this._createFeature.submit(), slot: "footer", width: "full" }, this._translations.create)))))));
|
136
136
|
}
|
137
137
|
/**
|
138
138
|
* Returns the editor component for adding feature
|
@@ -29,6 +29,7 @@ export class CrowdsourceManager {
|
|
29
29
|
this.basemapConfig = undefined;
|
30
30
|
this.coverPageEnabled = undefined;
|
31
31
|
this.customInfoText = undefined;
|
32
|
+
this.defaultAppLayout = undefined;
|
32
33
|
this.defaultCenter = "";
|
33
34
|
this.defaultGlobalId = "";
|
34
35
|
this.defaultLayer = "";
|
@@ -89,6 +90,10 @@ export class CrowdsourceManager {
|
|
89
90
|
// Properties (protected)
|
90
91
|
//
|
91
92
|
//--------------------------------------------------------------------------
|
93
|
+
/**
|
94
|
+
* boolean: When true the default appLayout has been applied and should no longer override
|
95
|
+
*/
|
96
|
+
_defaultAppLayoutHonored = false;
|
92
97
|
/**
|
93
98
|
* boolean: When true the map view will be set after render due to popup obstructing the view
|
94
99
|
* MapView.when is not fired when mapView is not currently visible
|
@@ -238,7 +243,7 @@ export class CrowdsourceManager {
|
|
238
243
|
render() {
|
239
244
|
// only avoid border when we have a header color that is not white
|
240
245
|
const borderClass = this.popupHeaderColor && this.popupHeaderColor !== "#FFFFFF" ? "border-width-0" : "";
|
241
|
-
return (h(Host, { key: '
|
246
|
+
return (h(Host, { key: 'ddb8bb35d74ab89ffd62d7bd0468b5a757fa5ba1' }, h("calcite-shell", { key: '74d941a3b1d4149a57c88cea263a2fd7e2b4f840', class: "position-relative" }, h("calcite-panel", { key: '3ff44942eab43c6f3a1cd92c918c0e2bae3d500a', class: `width-full height-full ${borderClass}`, loading: this._isLoading }, this._getBody(this._layoutMode, this._panelOpen, this._hideTable)), this._getFooter()), this._filterModal()));
|
242
247
|
}
|
243
248
|
/**
|
244
249
|
* Called after each render
|
@@ -257,7 +262,11 @@ export class CrowdsourceManager {
|
|
257
262
|
*/
|
258
263
|
async componentDidLoad() {
|
259
264
|
this._resizeObserver.observe(this.el);
|
260
|
-
if (this.
|
265
|
+
if (!this._defaultAppLayoutHonored && this.defaultAppLayout) {
|
266
|
+
this._defaultAppLayoutHonored = true;
|
267
|
+
this.appLayout = this.defaultAppLayout;
|
268
|
+
}
|
269
|
+
else if (this.hideMapOnLoad && !this.appLayout) {
|
261
270
|
this.appLayout = 'tableView';
|
262
271
|
}
|
263
272
|
else if (!this.appLayout) {
|
@@ -433,7 +442,7 @@ export class CrowdsourceManager {
|
|
433
442
|
const isTableLayout = this.appLayout === 'tableView';
|
434
443
|
const mapContainerClass = (isMapLayout || isTableLayout) ? "position-absolute-0" : this._layoutMode === ELayoutMode.HORIZONTAL && (!this._isPortraitMobile || panelOpen) ? "" : "adjusted-height-50";
|
435
444
|
const hasMapAndLayer = this.defaultWebmap && this.defaultLayer;
|
436
|
-
return (h("div", { class: `${mapContainerClass} overflow-hidden`, id: "card-mapView" }, h("map-card", { appProxies: this.appProxies, basemapConfig: this.basemapConfig, class: "width-full", defaultLayerId: hasMapAndLayer ? this.defaultLayer : "", defaultWebmapId: this.defaultWebmap, enableBasemap: this.enableBasemap, enableFloorFilter: this.enableFloorFilter, enableFullscreen: this.enableFullscreen, enableHome: this.enableHome, enableLegend: this.enableLegend, enableSearch: this.enableSearch, enableSingleExpand: true, hidden: !this._isPortraitMobile && isTableLayout, homeZoomIndex: 3, homeZoomPosition: "top-left", homeZoomToolsSize: "s", isMapLayout: isMapLayout, isMobile: this._isMobile, mapInfo: this._mapInfo, mapInfos: this.mapInfos?.filter(mapInfo => mapInfo.visible !== false), mapWidgetsIndex: 0, mapWidgetsPosition: "top-right", mapWidgetsSize: "m", onToggleFilter: this._toggleFilter.bind(this), onlyShowUpdatableLayers: this.onlyShowUpdatableLayers, ref: (el) => this._mapCard = el, selectedFeaturesIds: this._layerTable?.selectedIds, selectedLayer: this._layer, stackTools: true, theme: this.theme, toolOrder: ["legend", "search", "fullscreen", "basemap", "floorfilter"], zoomToScale: this.zoomToScale })));
|
445
|
+
return (h("div", { class: `${mapContainerClass} overflow-hidden`, id: "card-mapView" }, h("map-card", { appLayout: this.appLayout, appProxies: this.appProxies, basemapConfig: this.basemapConfig, class: "width-full", defaultLayerId: hasMapAndLayer ? this.defaultLayer : "", defaultWebmapId: this.defaultWebmap, enableBasemap: this.enableBasemap, enableFloorFilter: this.enableFloorFilter, enableFullscreen: this.enableFullscreen, enableHome: this.enableHome, enableLegend: this.enableLegend, enableSearch: this.enableSearch, enableShare: this.enableShare, enableSingleExpand: true, hidden: !this._isPortraitMobile && isTableLayout, homeZoomIndex: 3, homeZoomPosition: "top-left", homeZoomToolsSize: "s", isMapLayout: isMapLayout, isMobile: this._isMobile, mapInfo: this._mapInfo, mapInfos: this.mapInfos?.filter(mapInfo => mapInfo.visible !== false), mapWidgetsIndex: 0, mapWidgetsPosition: "top-right", mapWidgetsSize: "m", onToggleFilter: this._toggleFilter.bind(this), onlyShowUpdatableLayers: this.onlyShowUpdatableLayers, ref: (el) => this._mapCard = el, selectedFeaturesIds: this._layerTable?.selectedIds, selectedLayer: this._layer, shareIncludeEmbed: this.shareIncludeEmbed, shareIncludeSocial: this.shareIncludeSocial, stackTools: true, theme: this.theme, toolOrder: ["legend", "search", "fullscreen", "basemap", "floorfilter"], zoomToScale: this.zoomToScale })));
|
437
446
|
}
|
438
447
|
/**
|
439
448
|
* Get the expand node for the popup information
|
@@ -495,7 +504,7 @@ export class CrowdsourceManager {
|
|
495
504
|
this.defaultGlobalId?.indexOf(",") > -1 ? this.defaultGlobalId.split(",") : [this.defaultGlobalId];
|
496
505
|
const defaultOid = !this.defaultOid ? undefined :
|
497
506
|
this.defaultOid?.indexOf(",") > -1 ? this.defaultOid.split(",").map(o => parseInt(o, 10)) : [parseInt(this.defaultOid, 10)];
|
498
|
-
return (h("calcite-shell", { class: `${tableSizeClass} border-bottom` }, !this._isMobile ? (h("calcite-action-bar", { class: "border-sides", expandDisabled: true, layout: toggleLayout, slot: toggleSlot }, this.getActions(layoutMode, panelOpen))) : undefined, h("div", { class: `width-full height-full position-relative z-index-0 ${tableClass}` }, h("layer-table", { createFilterModal: false, defaultGlobalId: hasMapAndLayer ? globalId : undefined, defaultLayerId: hasMapAndLayer ? this.defaultLayer : "", defaultOid: hasMapAndLayer && !globalId ? defaultOid : undefined, enableAutoRefresh: this.enableAutoRefresh, enableCSV: this.enableCSV, enableColumnReorder: this.enableColumnReorder, enableInlineEdit: this?._mapInfo?.enableInlineEdit, enableShare: this.enableShare, isMobile: this._isPortraitMobile, mapHidden: isTableLayout, mapInfo: this._mapInfo, mapView: this?._mapView, onToggleFilter: this._toggleFilter.bind(this), onlyShowUpdatableLayers: this.onlyShowUpdatableLayers, ref: (el) => this._layerTable = el, shareIncludeEmbed: this.shareIncludeEmbed, shareIncludeSocial: this.shareIncludeSocial, showNewestFirst: this.showNewestFirst, zoomAndScrollToSelected: this.zoomAndScrollToSelected, zoomToScale: this.zoomToScale })), h("div", { class: mapClass, id: "full-map-view" })));
|
507
|
+
return (h("calcite-shell", { class: `${tableSizeClass} border-bottom` }, !this._isMobile ? (h("calcite-action-bar", { class: "border-sides", expandDisabled: true, layout: toggleLayout, slot: toggleSlot }, this.getActions(layoutMode, panelOpen))) : undefined, h("div", { class: `width-full height-full position-relative z-index-0 ${tableClass}` }, h("layer-table", { appLayout: this.appLayout, createFilterModal: false, defaultGlobalId: hasMapAndLayer ? globalId : undefined, defaultLayerId: hasMapAndLayer ? this.defaultLayer : "", defaultOid: hasMapAndLayer && !globalId ? defaultOid : undefined, enableAutoRefresh: this.enableAutoRefresh, enableCSV: this.enableCSV, enableColumnReorder: this.enableColumnReorder, enableInlineEdit: this?._mapInfo?.enableInlineEdit, enableShare: this.enableShare, isMobile: this._isPortraitMobile, mapHidden: isTableLayout, mapInfo: this._mapInfo, mapView: this?._mapView, onToggleFilter: this._toggleFilter.bind(this), onlyShowUpdatableLayers: this.onlyShowUpdatableLayers, ref: (el) => this._layerTable = el, shareIncludeEmbed: this.shareIncludeEmbed, shareIncludeSocial: this.shareIncludeSocial, showNewestFirst: this.showNewestFirst, zoomAndScrollToSelected: this.zoomAndScrollToSelected, zoomToScale: this.zoomToScale })), h("div", { class: mapClass, id: "full-map-view" })));
|
499
508
|
}
|
500
509
|
/**
|
501
510
|
* Returns the Actions for table's node
|
@@ -828,6 +837,29 @@ export class CrowdsourceManager {
|
|
828
837
|
"attribute": "custom-info-text",
|
829
838
|
"reflect": false
|
830
839
|
},
|
840
|
+
"defaultAppLayout": {
|
841
|
+
"type": "string",
|
842
|
+
"mutable": false,
|
843
|
+
"complexType": {
|
844
|
+
"original": "AppLayout",
|
845
|
+
"resolved": "\"mapView\" | \"splitView\" | \"tableView\"",
|
846
|
+
"references": {
|
847
|
+
"AppLayout": {
|
848
|
+
"location": "import",
|
849
|
+
"path": "../../utils/interfaces",
|
850
|
+
"id": "src/utils/interfaces.ts::AppLayout"
|
851
|
+
}
|
852
|
+
}
|
853
|
+
},
|
854
|
+
"required": false,
|
855
|
+
"optional": false,
|
856
|
+
"docs": {
|
857
|
+
"tags": [],
|
858
|
+
"text": "string: default layout the application should use"
|
859
|
+
},
|
860
|
+
"attribute": "default-app-layout",
|
861
|
+
"reflect": false
|
862
|
+
},
|
831
863
|
"defaultCenter": {
|
832
864
|
"type": "string",
|
833
865
|
"mutable": false,
|
@@ -83,6 +83,10 @@ export class FeatureList {
|
|
83
83
|
* __esri.Handle: Highlight handle of the selections
|
84
84
|
*/
|
85
85
|
_highlightHandle;
|
86
|
+
/**
|
87
|
+
* __esri.Collection: Highlight options for the selected layer
|
88
|
+
*/
|
89
|
+
_highlights;
|
86
90
|
/**
|
87
91
|
* HTMLCalcitePaginationElement: Calcite pagination element instance
|
88
92
|
*/
|
@@ -183,9 +187,9 @@ export class FeatureList {
|
|
183
187
|
* Renders the component.
|
184
188
|
*/
|
185
189
|
render() {
|
186
|
-
return (h("calcite-panel", { key: '
|
187
|
-
h("calcite-notice", { key: '
|
188
|
-
h("div", { key: '
|
190
|
+
return (h("calcite-panel", { key: '381f7da40e715848d4601810aacedbe3a7a46d6d', "full-height": true, "full-width": true }, this._isLoading && h("calcite-loader", { key: '62d128eee1b0a987fe24764b8cfbff148dcf9084', label: "", scale: "m" }), this.showErrorWhenNoFeatures && this._featureItems.length === 0 && !this._isLoading &&
|
191
|
+
h("calcite-notice", { key: '975aef0b4c33676fc2be4aa85a51641d0b203cd4', class: "error-msg", icon: "feature-details", kind: "info", open: true }, h("div", { key: 'c002eb4d59d8bab086d91266ca4a0ca56a185db3', slot: "message" }, this.noFeaturesFoundMsg ? this.noFeaturesFoundMsg : this._translations.featureErrorMsg)), h("calcite-list", { key: '50f0c269f30e9619561ea61f462fb964f91a93a9', "selection-appearance": "border", "selection-mode": "none" }, !this._isLoading && this._featureItems.length > 0 && this._featureItems), this._featuresCount > this.pageSize &&
|
192
|
+
h("div", { key: '97f837035b89d3045efd2771c0ef77d12fbb333b', class: "width-full", slot: "footer" }, h("calcite-pagination", { key: 'd88adbe6499b358395bd7bf5917c3d0c1506d8b1', class: "pagination", "full-width": true, onCalcitePaginationChange: this.pageChanged.bind(this), "page-size": this.pageSize, ref: el => this._pagination = el, "start-item": "1", "total-items": this._featuresCount }))));
|
189
193
|
}
|
190
194
|
//--------------------------------------------------------------------------
|
191
195
|
//
|
@@ -304,7 +308,12 @@ export class FeatureList {
|
|
304
308
|
if (this.highlightOnHover) {
|
305
309
|
const oId = selectedFeature.getObjectId();
|
306
310
|
const selectedLayerView = await getFeatureLayerView(this.mapView, this.selectedLayerId);
|
311
|
+
// this is a workaround added for https://github.com/Esri/solutions-components/issues/920
|
312
|
+
if (this._highlights) {
|
313
|
+
selectedLayerView.highlights = JSON.parse(this._highlights);
|
314
|
+
}
|
307
315
|
selectedLayerView.highlightOptions = { color: new this.Color("#FFFF00") };
|
316
|
+
this._highlights = JSON.stringify(selectedLayerView.highlights);
|
308
317
|
this._highlightHandle = selectedLayerView.highlight([oId]);
|
309
318
|
}
|
310
319
|
}
|
@@ -27,6 +27,7 @@ import * as downloadUtils from "../../utils/downloadUtils";
|
|
27
27
|
import "@esri/instant-apps-components/dist/components/instant-apps-social-share";
|
28
28
|
export class LayerTable {
|
29
29
|
constructor() {
|
30
|
+
this.appLayout = undefined;
|
30
31
|
this.defaultGlobalId = undefined;
|
31
32
|
this.defaultLayerId = undefined;
|
32
33
|
this.defaultOid = undefined;
|
@@ -235,6 +236,12 @@ export class LayerTable {
|
|
235
236
|
// Watch handlers
|
236
237
|
//
|
237
238
|
//--------------------------------------------------------------------------
|
239
|
+
/**
|
240
|
+
* Update the url params when the appLayout changes
|
241
|
+
*/
|
242
|
+
appLayoutWatchHandler() {
|
243
|
+
this._updateShareUrl();
|
244
|
+
}
|
238
245
|
/**
|
239
246
|
* Handle url defaults when defaultOid is set
|
240
247
|
*/
|
@@ -521,8 +528,8 @@ export class LayerTable {
|
|
521
528
|
const tableHeightClass = this.isMobile ? "height-full" : "height-full-adjusted";
|
522
529
|
const showSearch = this._canShowFullTextSearch();
|
523
530
|
this._validateActiveActions();
|
524
|
-
return (h(Host, { key: '
|
525
|
-
h("div", { key: '
|
531
|
+
return (h(Host, { key: 'aa79d91e6c569393334a38f937a493de227a0e5b' }, h("calcite-shell", { key: '4b7460fc764c5a6027ad5aa8da826bd188e5490e' }, this._getTableControlRow("header"), h("div", { key: '66ea361c6c2c3a5d05c4403a5d3dd1dea5a9e70b', class: `width-full ${tableHeightClass}` }, h("calcite-panel", { key: 'b213a696294c94504f394b54082f0183b46691ce', class: "height-full width-full" }, showSearch &&
|
532
|
+
h("div", { key: '866dd2a69bc9e504b459ca8639d13f5babfa65fa', class: "search-container" }, h("calcite-input", { key: '26f80276d08106981ef8c769fd4334528a37d881', class: "search", clearable: true, icon: "search", onCalciteInputChange: (evt) => void this._searchTextChanged(evt), placeholder: this._searchPlaceHolder, title: this._searchPlaceHolder, type: "search" })), h("calcite-loader", { key: 'a3d2e215cee3e370ef5645b6422c95eef32beedf', class: loadingClass, label: this._translations.fetchingData, scale: "l" }), h("div", { key: 'e48c86ee1ebcc23121eab08903e55cc41270c4c8', class: tableNodeClass, ref: this.onTableNodeCreate }))), !this.isMobile ? (h("div", { class: "bottom-left text-color height-19" }, this._translations.recordsSelected
|
526
533
|
.replace("{{total}}", total)
|
527
534
|
.replace("{{selected}}", selected))) : undefined), this.createFilterModal && this._filterModal()));
|
528
535
|
}
|
@@ -1131,6 +1138,7 @@ export class LayerTable {
|
|
1131
1138
|
else {
|
1132
1139
|
urlObj.searchParams.delete("oid");
|
1133
1140
|
}
|
1141
|
+
urlObj.searchParams.set("applayout", this.appLayout);
|
1134
1142
|
this._shareNode.shareUrl = urlObj.href;
|
1135
1143
|
}
|
1136
1144
|
/**
|
@@ -1887,6 +1895,29 @@ export class LayerTable {
|
|
1887
1895
|
}
|
1888
1896
|
static get properties() {
|
1889
1897
|
return {
|
1898
|
+
"appLayout": {
|
1899
|
+
"type": "string",
|
1900
|
+
"mutable": false,
|
1901
|
+
"complexType": {
|
1902
|
+
"original": "AppLayout",
|
1903
|
+
"resolved": "\"mapView\" | \"splitView\" | \"tableView\"",
|
1904
|
+
"references": {
|
1905
|
+
"AppLayout": {
|
1906
|
+
"location": "import",
|
1907
|
+
"path": "../../utils/interfaces",
|
1908
|
+
"id": "src/utils/interfaces.ts::AppLayout"
|
1909
|
+
}
|
1910
|
+
}
|
1911
|
+
},
|
1912
|
+
"required": false,
|
1913
|
+
"optional": false,
|
1914
|
+
"docs": {
|
1915
|
+
"tags": [],
|
1916
|
+
"text": "AppLayout: the current app layout"
|
1917
|
+
},
|
1918
|
+
"attribute": "app-layout",
|
1919
|
+
"reflect": false
|
1920
|
+
},
|
1890
1921
|
"defaultGlobalId": {
|
1891
1922
|
"type": "unknown",
|
1892
1923
|
"mutable": false,
|
@@ -2360,6 +2391,9 @@ export class LayerTable {
|
|
2360
2391
|
static get elementRef() { return "el"; }
|
2361
2392
|
static get watchers() {
|
2362
2393
|
return [{
|
2394
|
+
"propName": "appLayout",
|
2395
|
+
"methodName": "appLayoutWatchHandler"
|
2396
|
+
}, {
|
2363
2397
|
"propName": "defaultOid",
|
2364
2398
|
"methodName": "defaultOidWatchHandler"
|
2365
2399
|
}, {
|
@@ -23,6 +23,7 @@ import { loadModules } from "../../utils/loadModules";
|
|
23
23
|
import { joinAppProxies } from "templates-common-library-esm/functionality/proxy";
|
24
24
|
import { getLocaleComponentStrings } from "../../utils/locale";
|
25
25
|
import { getFeatureLayerView, goToSelection } from "../../utils/mapViewUtils";
|
26
|
+
import "@esri/instant-apps-components/dist/components/instant-apps-social-share";
|
26
27
|
// TODO navigation and accessability isn't right for the map list
|
27
28
|
// tab does not go into the list when it's open
|
28
29
|
// focus is not set when it opens
|
@@ -31,6 +32,7 @@ import { getFeatureLayerView, goToSelection } from "../../utils/mapViewUtils";
|
|
31
32
|
// TODO map list should close if the user clicks something else...hope this will be easy when I figure out how to set focus when it opens
|
32
33
|
export class MapCard {
|
33
34
|
constructor() {
|
35
|
+
this.appLayout = undefined;
|
34
36
|
this.appProxies = undefined;
|
35
37
|
this.defaultWebmapId = "";
|
36
38
|
this.defaultLayerId = undefined;
|
@@ -38,6 +40,7 @@ export class MapCard {
|
|
38
40
|
this.enableLegend = undefined;
|
39
41
|
this.enableFloorFilter = undefined;
|
40
42
|
this.enableFullscreen = undefined;
|
43
|
+
this.enableShare = false;
|
41
44
|
this.enableSingleExpand = true;
|
42
45
|
this.enableSearch = undefined;
|
43
46
|
this.enableBasemap = undefined;
|
@@ -55,6 +58,8 @@ export class MapCard {
|
|
55
58
|
this.theme = undefined;
|
56
59
|
this.toolOrder = undefined;
|
57
60
|
this.isMapLayout = undefined;
|
61
|
+
this.shareIncludeEmbed = undefined;
|
62
|
+
this.shareIncludeSocial = undefined;
|
58
63
|
this.selectedFeaturesIds = undefined;
|
59
64
|
this.selectedLayer = undefined;
|
60
65
|
this.zoomToScale = undefined;
|
@@ -143,6 +148,10 @@ export class MapCard {
|
|
143
148
|
* ResizeObserver: The observer that watches for toolbar size changes
|
144
149
|
*/
|
145
150
|
_resizeObserver;
|
151
|
+
/**
|
152
|
+
* HTMLInstantAppsSocialShareElement: Element to support app sharing to social media
|
153
|
+
*/
|
154
|
+
_shareNode;
|
146
155
|
/**
|
147
156
|
* HTMLCalciteDropdownElement: Dropdown the will support show/hide of table columns
|
148
157
|
*/
|
@@ -172,12 +181,36 @@ export class MapCard {
|
|
172
181
|
// Watch handlers
|
173
182
|
//
|
174
183
|
//--------------------------------------------------------------------------
|
184
|
+
/**
|
185
|
+
* Update the url params when the appLayout changes
|
186
|
+
*/
|
187
|
+
appLayoutWatchHandler() {
|
188
|
+
this._updateShareUrl();
|
189
|
+
}
|
175
190
|
/**
|
176
191
|
* Add/remove home widget
|
177
192
|
*/
|
178
193
|
enableHomeWatchHandler() {
|
179
194
|
this._initHome();
|
180
195
|
}
|
196
|
+
/**
|
197
|
+
* Update the toolbar when the share button is enabled/disabled
|
198
|
+
*/
|
199
|
+
enableShareWatchHandler() {
|
200
|
+
// this should be caught by component did render and is when I test locally
|
201
|
+
// however have had reported case where it is not somehow on devext so adding explicit check here
|
202
|
+
if (this._toolbar) {
|
203
|
+
this._updateToolbar();
|
204
|
+
}
|
205
|
+
}
|
206
|
+
/**
|
207
|
+
* watch for changes in map view and get the first layer
|
208
|
+
*/
|
209
|
+
async mapViewWatchHandler() {
|
210
|
+
if (this.mapView) {
|
211
|
+
this._updateShareUrl();
|
212
|
+
}
|
213
|
+
}
|
181
214
|
/**
|
182
215
|
* watch for changes in layer view and verify if it has editing enabled
|
183
216
|
*/
|
@@ -190,6 +223,7 @@ export class MapCard {
|
|
190
223
|
* watch for features ids changes
|
191
224
|
*/
|
192
225
|
async selectedFeaturesIdsWatchHandler() {
|
226
|
+
this._updateShareUrl();
|
193
227
|
this._validateEnabledActions();
|
194
228
|
}
|
195
229
|
/**
|
@@ -218,12 +252,14 @@ export class MapCard {
|
|
218
252
|
*/
|
219
253
|
async resetFilter() {
|
220
254
|
this._filterActive = false;
|
255
|
+
this._updateShareUrl();
|
221
256
|
}
|
222
257
|
/**
|
223
258
|
* updates the filter
|
224
259
|
*/
|
225
260
|
async updateFilterState() {
|
226
261
|
this._filterActive = this._definitionExpression !== this.selectedLayer.definitionExpression;
|
262
|
+
this._updateShareUrl();
|
227
263
|
}
|
228
264
|
/**
|
229
265
|
* updates the layer in map layer picker
|
@@ -299,7 +335,7 @@ export class MapCard {
|
|
299
335
|
const mapHeightClass = this.mapInfos?.length > 1 || this.isMapLayout ? "map-height" : "height-full";
|
300
336
|
const progressClass = this.isMapLayout ? "" : "display-none";
|
301
337
|
this._validateActiveActions();
|
302
|
-
return (h(Host, { key: '
|
338
|
+
return (h(Host, { key: '790599924cf104116f6961380103aef7c55e6d76' }, h("div", { key: '5467a5d4e3998807fdf243ada3088dba8e69941f', class: `${mapContainerClass} width-full`, ref: (el) => this._toolbar = el }, this._getActionBar(), !this.isMobile && this.isMapLayout && this._getDropdown("more-table-options"), this.enableShare && !this.isMobile && this.isMapLayout ? this._getShare("share") : undefined), h("calcite-progress", { key: '5c82042e0206be05e12d29ba588b26344b1017b8', class: progressClass, value: 0 }), h("div", { key: '0831bc4593f5a7680a8599a9868990734cb013b9', class: `${mapHeightClass} ${mapClass}`, ref: (el) => (this._mapDiv = el) }), h("map-tools", { key: '5bbf14428cc845d8b889e72d707672250f820686', basemapConfig: this.basemapConfig, class: `box-shadow ${themeClass}`, enableBasemap: this.enableBasemap, enableFloorFilter: this.enableFloorFilter, enableFullscreen: this.enableFullscreen, enableHome: this.enableHome, enableLegend: this.enableLegend, enableSearch: this.enableSearch, enableSingleExpand: this.enableSingleExpand, homeZoomToolsSize: this.homeZoomToolsSize, mapView: this.mapView, mapWidgetsSize: this.mapWidgetsSize, position: this.mapWidgetsPosition, ref: (el) => this._mapTools = el, searchConfiguration: this._searchConfiguration, stackTools: this.stackTools, toolOrder: this.toolOrder })));
|
303
339
|
}
|
304
340
|
/**
|
305
341
|
* Called each time after the component is loaded
|
@@ -318,6 +354,7 @@ export class MapCard {
|
|
318
354
|
this._resizeObserver.observe(this._toolbar);
|
319
355
|
this._observerSet = true;
|
320
356
|
}
|
357
|
+
this._updateShareUrl();
|
321
358
|
}
|
322
359
|
//--------------------------------------------------------------------------
|
323
360
|
//
|
@@ -396,6 +433,7 @@ export class MapCard {
|
|
396
433
|
mapView: this.mapView
|
397
434
|
});
|
398
435
|
}
|
436
|
+
this._updateShareUrl();
|
399
437
|
}
|
400
438
|
/**
|
401
439
|
* Add/Remove tools from the action bar and dropdown based on available size
|
@@ -414,7 +452,7 @@ export class MapCard {
|
|
414
452
|
prev += cur.width;
|
415
453
|
return prev;
|
416
454
|
}, 0);
|
417
|
-
const skipControls = ["solutions-more", "solutions-map-layer-picker-container", "map-picker"];
|
455
|
+
const skipControls = ["solutions-more", "solutions-map-layer-picker-container", "map-picker", "solutions-action-share"];
|
418
456
|
if (controlsWidth > toolbarWidth) {
|
419
457
|
if (this._toolbarSizeInfos.length > 0) {
|
420
458
|
const controlsThatFit = [...this._toolbarSizeInfos].reverse().reduce((prev, cur) => {
|
@@ -540,6 +578,50 @@ export class MapCard {
|
|
540
578
|
return (h("calcite-dropdown-group", { class: item.disabled ? "disabled" : "", selectionMode: "none" }, h("calcite-dropdown-item", { disabled: item.loading, iconStart: item.icon, id: "solutions-subset-list", onClick: item.func }, item.loading ? (h("div", { class: "display-flex" }, h("calcite-loader", { inline: true, label: item.label, scale: "m" }), item.label)) : item.label)));
|
541
579
|
})))) : undefined;
|
542
580
|
}
|
581
|
+
/**
|
582
|
+
* Get an action and tooltip for share
|
583
|
+
*
|
584
|
+
* @param icon string the name of the icon to display, will also be used in its id
|
585
|
+
*
|
586
|
+
* @returns VNode The node representing the DOM element that will contain the action
|
587
|
+
*/
|
588
|
+
_getShare(icon) {
|
589
|
+
return (h("div", { class: "share-action", id: this._getId(icon) }, h("instant-apps-social-share", { autoUpdateShareUrl: false, class: "instant-app-share", embed: this.shareIncludeEmbed, popoverButtonIconScale: "s", ref: el => {
|
590
|
+
this._shareNode = el;
|
591
|
+
this._updateShareUrl();
|
592
|
+
}, scale: "m", shareButtonColor: "neutral", shareButtonType: "action", socialMedia: this.shareIncludeSocial, view: this.mapView }), this._getToolTip("bottom", icon, this._translations.share)));
|
593
|
+
}
|
594
|
+
/**
|
595
|
+
* Called each time the values that are used for custom url params change
|
596
|
+
*/
|
597
|
+
_updateShareUrl() {
|
598
|
+
const url = this._shareNode?.shareUrl;
|
599
|
+
if (!url) {
|
600
|
+
return;
|
601
|
+
}
|
602
|
+
const urlObj = new URL(url);
|
603
|
+
//set the additional search params
|
604
|
+
if (this._loadedId) {
|
605
|
+
urlObj.searchParams.set("webmap", this._loadedId);
|
606
|
+
}
|
607
|
+
else {
|
608
|
+
urlObj.searchParams.delete("webmap");
|
609
|
+
}
|
610
|
+
if (this.selectedLayer?.id) {
|
611
|
+
urlObj.searchParams.set("layer", this.selectedLayer.id);
|
612
|
+
}
|
613
|
+
else {
|
614
|
+
urlObj.searchParams.delete("layer");
|
615
|
+
}
|
616
|
+
if (this.selectedFeaturesIds?.length > 0) {
|
617
|
+
urlObj.searchParams.set("oid", this.selectedFeaturesIds.join(","));
|
618
|
+
}
|
619
|
+
else {
|
620
|
+
urlObj.searchParams.delete("oid");
|
621
|
+
}
|
622
|
+
urlObj.searchParams.set("applayout", this.appLayout);
|
623
|
+
this._shareNode.shareUrl = urlObj.href;
|
624
|
+
}
|
543
625
|
/**
|
544
626
|
* Open show/hide dropdown
|
545
627
|
* @protected
|
@@ -827,6 +909,29 @@ export class MapCard {
|
|
827
909
|
}
|
828
910
|
static get properties() {
|
829
911
|
return {
|
912
|
+
"appLayout": {
|
913
|
+
"type": "string",
|
914
|
+
"mutable": false,
|
915
|
+
"complexType": {
|
916
|
+
"original": "AppLayout",
|
917
|
+
"resolved": "\"mapView\" | \"splitView\" | \"tableView\"",
|
918
|
+
"references": {
|
919
|
+
"AppLayout": {
|
920
|
+
"location": "import",
|
921
|
+
"path": "../../utils/interfaces",
|
922
|
+
"id": "src/utils/interfaces.ts::AppLayout"
|
923
|
+
}
|
924
|
+
}
|
925
|
+
},
|
926
|
+
"required": false,
|
927
|
+
"optional": false,
|
928
|
+
"docs": {
|
929
|
+
"tags": [],
|
930
|
+
"text": "AppLayout: the current app layout"
|
931
|
+
},
|
932
|
+
"attribute": "app-layout",
|
933
|
+
"reflect": false
|
934
|
+
},
|
830
935
|
"appProxies": {
|
831
936
|
"type": "any",
|
832
937
|
"mutable": false,
|
@@ -947,6 +1052,24 @@ export class MapCard {
|
|
947
1052
|
"attribute": "enable-fullscreen",
|
948
1053
|
"reflect": false
|
949
1054
|
},
|
1055
|
+
"enableShare": {
|
1056
|
+
"type": "boolean",
|
1057
|
+
"mutable": false,
|
1058
|
+
"complexType": {
|
1059
|
+
"original": "boolean",
|
1060
|
+
"resolved": "boolean",
|
1061
|
+
"references": {}
|
1062
|
+
},
|
1063
|
+
"required": false,
|
1064
|
+
"optional": false,
|
1065
|
+
"docs": {
|
1066
|
+
"tags": [],
|
1067
|
+
"text": "boolean: when true the share widget will be available"
|
1068
|
+
},
|
1069
|
+
"attribute": "enable-share",
|
1070
|
+
"reflect": false,
|
1071
|
+
"defaultValue": "false"
|
1072
|
+
},
|
950
1073
|
"enableSingleExpand": {
|
951
1074
|
"type": "boolean",
|
952
1075
|
"mutable": false,
|
@@ -1270,6 +1393,40 @@ export class MapCard {
|
|
1270
1393
|
"attribute": "is-map-layout",
|
1271
1394
|
"reflect": false
|
1272
1395
|
},
|
1396
|
+
"shareIncludeEmbed": {
|
1397
|
+
"type": "boolean",
|
1398
|
+
"mutable": false,
|
1399
|
+
"complexType": {
|
1400
|
+
"original": "boolean",
|
1401
|
+
"resolved": "boolean",
|
1402
|
+
"references": {}
|
1403
|
+
},
|
1404
|
+
"required": false,
|
1405
|
+
"optional": false,
|
1406
|
+
"docs": {
|
1407
|
+
"tags": [],
|
1408
|
+
"text": "boolean: When true the share options will include embed option"
|
1409
|
+
},
|
1410
|
+
"attribute": "share-include-embed",
|
1411
|
+
"reflect": false
|
1412
|
+
},
|
1413
|
+
"shareIncludeSocial": {
|
1414
|
+
"type": "boolean",
|
1415
|
+
"mutable": false,
|
1416
|
+
"complexType": {
|
1417
|
+
"original": "boolean",
|
1418
|
+
"resolved": "boolean",
|
1419
|
+
"references": {}
|
1420
|
+
},
|
1421
|
+
"required": false,
|
1422
|
+
"optional": false,
|
1423
|
+
"docs": {
|
1424
|
+
"tags": [],
|
1425
|
+
"text": "boolean: When true the share options will include social media sharing"
|
1426
|
+
},
|
1427
|
+
"attribute": "share-include-social",
|
1428
|
+
"reflect": false
|
1429
|
+
},
|
1273
1430
|
"selectedFeaturesIds": {
|
1274
1431
|
"type": "unknown",
|
1275
1432
|
"mutable": false,
|
@@ -1516,8 +1673,17 @@ export class MapCard {
|
|
1516
1673
|
static get elementRef() { return "el"; }
|
1517
1674
|
static get watchers() {
|
1518
1675
|
return [{
|
1676
|
+
"propName": "appLayout",
|
1677
|
+
"methodName": "appLayoutWatchHandler"
|
1678
|
+
}, {
|
1519
1679
|
"propName": "enableHome",
|
1520
1680
|
"methodName": "enableHomeWatchHandler"
|
1681
|
+
}, {
|
1682
|
+
"propName": "enableShare",
|
1683
|
+
"methodName": "enableShareWatchHandler"
|
1684
|
+
}, {
|
1685
|
+
"propName": "mapView",
|
1686
|
+
"methodName": "mapViewWatchHandler"
|
1521
1687
|
}, {
|
1522
1688
|
"propName": "selectedLayer",
|
1523
1689
|
"methodName": "selectedLayerWatchHandler"
|
@@ -79,7 +79,8 @@ export class SolutionItemIcon {
|
|
79
79
|
*/
|
80
80
|
_getIconUrl(type, typeKeywords) {
|
81
81
|
const icon = this._getItemIcon(type, typeKeywords);
|
82
|
-
return getAssetPath(`./item-icons/${icon}16.
|
82
|
+
return icon === "group" ? getAssetPath(`./item-icons/${icon}16.png`) :
|
83
|
+
getAssetPath(`./item-icons/${icon}16.svg`);
|
83
84
|
}
|
84
85
|
/**
|
85
86
|
* This function was copied and slightly modified from the arcgis-app-components.
|
@@ -130,6 +131,8 @@ export class SolutionItemIcon {
|
|
130
131
|
return "utilitynetwork";
|
131
132
|
}
|
132
133
|
return hosted ? "featureshosted" : "features";
|
134
|
+
case "group":
|
135
|
+
return "group";
|
133
136
|
case "group layer":
|
134
137
|
if (keywords.includes("Map")) {
|
135
138
|
return "layergroup2d";
|
@@ -138,9 +138,9 @@ const CardManager = /*@__PURE__*/ proxyCustomElement(class CardManager extends H
|
|
138
138
|
const messageClass = this._graphics?.length > 0 || this._showCreateFeatureComponent ? "display-none" : "";
|
139
139
|
const isTable = this.layer?.isTable;
|
140
140
|
const heading = isTable ? this._translations.createRecord : this._translations.createFeature;
|
141
|
-
const guideMsg = this.customInfoText
|
141
|
+
const guideMsg = this.customInfoText ? this.customInfoText : this.selectingFeatureFromMap ? this._translations.selectFeaturesFromMapToStart : this._translations.selectFeaturesToStart;
|
142
142
|
const showCreateFeatureOrRecordBtn = this.enableCreateFeatures && this.layer?.capabilities?.operations?.supportsAdd;
|
143
|
-
return (h(Host, { key: '
|
143
|
+
return (h(Host, { key: '7360aa9c48dd0c3e4a14fe0833b99c301388f93c' }, h("div", { key: '9d610f0c4728c238eceb790e97a4e06b77f1a2d1', class: "overflow-auto height-full" }, h("calcite-shell", { key: '4b6a02205a971c7ff61aab567b2f2a3c5d288f8d', class: "position-relative " + featuresClass }, h("div", { key: '96ee8ce138265dd4b562ac0a33b79a0db4497842', class: "position-static z-index-500" }, h("info-card", { key: '7db359bc1016281fd01b737dc5c424fe78995422', enableEditGeometry: this.enableEditGeometry, graphics: this._graphics, isLoading: this._cardLoading, isMobile: this.isMobile, mapView: this.mapView }))), h("calcite-shell", { key: 'afc8d06e9aa3213a9ca10c929497ed4618a28e91', class: "position-relative " + messageClass }, h("calcite-flow-item", { key: '46db92a6e259eefea3293310e3e2f43d7639db97' }, h("calcite-panel", { key: 'd2bc23ae7bcf2b7b7b48a35efc0697e0d1f9e23e' }, h("div", { key: '8f7fd13f9ec99beec1d7231dda03eba403a70a69', class: "padding-1" }, h("calcite-notice", { key: '2fbe94292c1dd91ee1691b8e3d295225ff5b534b', icon: this.selectingFeatureFromMap ? "map" : "table", iconFlipRtl: true, open: true }, h("div", { key: '9f91099e4bfa0675c5b098a73b2f132b80ee76b0', slot: "message" }, guideMsg))), !this.isMobile && showCreateFeatureOrRecordBtn && h("calcite-button", { key: 'c1b04e776f3750712992d736e09726cc26eae5db', disabled: !this.layer, onClick: () => this._createFeatureBtnClicked(), slot: "footer", width: "full" }, isTable ? this._translations.createRecord : this._translations.createFeature)))), h("calcite-shell", { key: 'a71d4b0abd1ec1a4ed14a2cb3dcb10a075f54bf0', class: "position-relative " + createFeatureClass }, h("calcite-flow-item", { key: '85047b527f5995a912b527325f287c3596caf630' }, h("calcite-panel", { key: 'd335be81502e0feb803ee9ad4e501d4c85f184f5', heading: heading }, h("calcite-action", { key: 'b179c3185dbada3bd052d38b98b75cf29240655c', class: "back-button hydrated", icon: "chevron-left", onClick: this._backFromCreateFeature.bind(this), scale: "s", slot: "header-actions-start", text: "" }), this.getEditorComponent(), this._showSubmitBtn && h("calcite-button", { key: 'f3b6655e3effdb6b09e64acd651a09d6028a6df9', appearance: "solid", class: "footer-top-button footer-button", onClick: () => void this._createFeature.submit(), slot: "footer", width: "full" }, this._translations.create)))))));
|
144
144
|
}
|
145
145
|
/**
|
146
146
|
* Returns the editor component for adding feature
|