@esri/solutions-components 0.7.8 → 0.7.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. package/dist/assets/t9n/layer-table/resources.json +1 -0
  2. package/dist/assets/t9n/layer-table/resources_en.json +1 -0
  3. package/dist/cjs/basemap-gallery_7.cjs.entry.js +1 -1
  4. package/dist/cjs/calcite-alert_3.cjs.entry.js +1 -1
  5. package/dist/cjs/calcite-combobox_6.cjs.entry.js +16 -7
  6. package/dist/cjs/card-manager_3.cjs.entry.js +176 -22
  7. package/dist/cjs/crowdsource-manager.cjs.entry.js +12 -1
  8. package/dist/cjs/{downloadUtils-95e4a5b2.js → downloadUtils-8f50633d.js} +2 -2
  9. package/dist/cjs/{index.es-a88403f8.js → index.es-140aa937.js} +2 -2
  10. package/dist/cjs/loader.cjs.js +1 -1
  11. package/dist/cjs/map-select-tools_3.cjs.entry.js +2 -2
  12. package/dist/cjs/{mapViewUtils-b7d9e71c.js → mapViewUtils-569e9644.js} +17 -0
  13. package/dist/cjs/public-notification.cjs.entry.js +2 -2
  14. package/dist/cjs/solutions-components.cjs.js +1 -1
  15. package/dist/collection/components/crowdsource-manager/crowdsource-manager.js +20 -2
  16. package/dist/collection/components/layer-table/layer-table.js +175 -21
  17. package/dist/collection/components/map-layer-picker/map-layer-picker.css +1 -0
  18. package/dist/collection/components/map-layer-picker/map-layer-picker.js +69 -5
  19. package/dist/collection/components/map-picker/map-picker.js +1 -1
  20. package/dist/collection/demos/crowdsource-manager.html +2 -2
  21. package/dist/collection/utils/interfaces.ts +5 -0
  22. package/dist/collection/utils/queryUtils.js +16 -0
  23. package/dist/collection/utils/queryUtils.ts +21 -0
  24. package/dist/components/crowdsource-manager.js +15 -3
  25. package/dist/components/layer-table2.js +175 -21
  26. package/dist/components/map-layer-picker2.js +17 -6
  27. package/dist/components/map-picker2.js +1 -1
  28. package/dist/components/map-select-tools2.js +1 -1
  29. package/dist/components/queryUtils.js +17 -1
  30. package/dist/components/refine-selection2.js +1 -1
  31. package/dist/esm/basemap-gallery_7.entry.js +1 -1
  32. package/dist/esm/calcite-alert_3.entry.js +1 -1
  33. package/dist/esm/calcite-combobox_6.entry.js +16 -7
  34. package/dist/esm/card-manager_3.entry.js +176 -22
  35. package/dist/esm/crowdsource-manager.entry.js +12 -1
  36. package/dist/esm/{downloadUtils-83dd2143.js → downloadUtils-9dee8bc0.js} +2 -2
  37. package/dist/esm/{index.es-0c98e2f3.js → index.es-54e86c8e.js} +2 -2
  38. package/dist/esm/loader.js +1 -1
  39. package/dist/esm/map-select-tools_3.entry.js +2 -2
  40. package/dist/esm/{mapViewUtils-3ff1c264.js → mapViewUtils-066602d5.js} +17 -1
  41. package/dist/esm/public-notification.entry.js +2 -2
  42. package/dist/esm/solutions-components.js +1 -1
  43. package/dist/solutions-components/demos/crowdsource-manager.html +2 -2
  44. package/dist/solutions-components/{p-546a3d3c.entry.js → p-13bfc206.entry.js} +2 -2
  45. package/dist/solutions-components/{p-d6050d57.js → p-1bdd64a0.js} +2 -2
  46. package/dist/solutions-components/{p-b7e2c75b.js → p-531d91d6.js} +1 -1
  47. package/dist/solutions-components/{p-dcd6e7b9.entry.js → p-6656c53e.entry.js} +1 -1
  48. package/dist/solutions-components/{p-a5d924a9.entry.js → p-683cded6.entry.js} +1 -1
  49. package/dist/solutions-components/{p-95ebc2e5.entry.js → p-c2b20b85.entry.js} +1 -1
  50. package/dist/solutions-components/p-c7ff24df.entry.js +6 -0
  51. package/dist/solutions-components/{p-b030a151.js → p-dfdb8411.js} +1 -1
  52. package/dist/solutions-components/p-f7870ec1.entry.js +6 -0
  53. package/dist/solutions-components/p-ffae568b.entry.js +6 -0
  54. package/dist/solutions-components/solutions-components.esm.js +1 -1
  55. package/dist/solutions-components/utils/interfaces.ts +5 -0
  56. package/dist/solutions-components/utils/queryUtils.ts +21 -0
  57. package/dist/types/components/crowdsource-manager/crowdsource-manager.d.ts +8 -0
  58. package/dist/types/components/layer-table/layer-table.d.ts +54 -1
  59. package/dist/types/components/map-layer-picker/map-layer-picker.d.ts +15 -1
  60. package/dist/types/components.d.ts +23 -2
  61. package/dist/types/preact.d.ts +2 -1
  62. package/dist/types/utils/interfaces.d.ts +4 -0
  63. package/dist/types/utils/queryUtils.d.ts +11 -0
  64. package/package.json +1 -1
  65. package/dist/solutions-components/p-1b9709ce.entry.js +0 -6
  66. package/dist/solutions-components/p-4f1c4004.entry.js +0 -6
  67. package/dist/solutions-components/p-c556ed60.entry.js +0 -6
@@ -6,6 +6,7 @@
6
6
  "exportCSV": "Export to CSV",
7
7
  "filter": "Filter: {{title}}",
8
8
  "filters": "Filters",
9
+ "hideField": "Hide field",
9
10
  "more": "More",
10
11
  "selectAll": "Select all",
11
12
  "share": "Share",
@@ -6,6 +6,7 @@
6
6
  "exportCSV": "Export to CSV",
7
7
  "filter": "Filter: {{title}}",
8
8
  "filters": "Filters",
9
+ "hideField": "Hide field",
9
10
  "more": "More",
10
11
  "selectAll": "Select all",
11
12
  "share": "Share",
@@ -525,7 +525,7 @@ const MapPicker = class {
525
525
  * @protected
526
526
  */
527
527
  _getMapNameList(show) {
528
- const listClass = show ? "map-list" : "display-none";
528
+ const listClass = show ? "map-list border-bottom-1" : "display-none";
529
529
  return (index.h("div", { class: listClass }, index.h("calcite-list", { id: "mapList", ref: (el) => this._list = el, selectionAppearance: "border", selectionMode: "single" }, this.mapInfos.map(mapInfo => {
530
530
  return (index.h("calcite-list-item", { label: mapInfo.name, onClick: () => this._webMapSelected(mapInfo), selected: mapInfo.id === this._loadedId, value: mapInfo.id }));
531
531
  }))));
@@ -17,7 +17,7 @@ const t9n = require('./t9n-0556abcb.js');
17
17
  const resources = require('./resources-222ad22c.js');
18
18
  const loadModules = require('./loadModules-46d14e81.js');
19
19
  const locale$1 = require('./locale-9db09b63.js');
20
- const mapViewUtils = require('./mapViewUtils-b7d9e71c.js');
20
+ const mapViewUtils = require('./mapViewUtils-569e9644.js');
21
21
  require('./guid-1a466ca6.js');
22
22
  require('./resources-6c60363a.js');
23
23
  require('./key-b8c05387.js');
@@ -26,7 +26,7 @@ const debounce = require('./debounce-30afab47.js');
26
26
  const conditionalSlot = require('./conditionalSlot-63e11cba.js');
27
27
  const key = require('./key-b8c05387.js');
28
28
  const locale$1 = require('./locale-9db09b63.js');
29
- const mapViewUtils = require('./mapViewUtils-b7d9e71c.js');
29
+ const mapViewUtils = require('./mapViewUtils-569e9644.js');
30
30
  const publicNotificationStore = require('./publicNotificationStore-3a17c2f4.js');
31
31
  require('./resources-6c60363a.js');
32
32
  require('./browser-9a43b900.js');
@@ -1899,11 +1899,12 @@ const DropdownItem = class {
1899
1899
  };
1900
1900
  DropdownItem.style = dropdownItemCss;
1901
1901
 
1902
- const mapLayerPickerCss = ":host{display:block}.map-layer-picker-container{width:100%}.map-layer-picker{position:relative;width:100%;display:inline-block}.padding-bottom-1{padding-bottom:1rem}.layer-picker-dropdown{height:100%;width:100%}.max-width-350{max-width:350px}.height-100{height:100%}.disabled{cursor:default !important;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:var(--calcite-opacity-disabled);pointer-events:none}.no-bottom-margin{--calcite-label-margin-bottom:0px}.layer-picker-label-container{align-items:center;display:inline-flex;height:100%;padding-inline-start:1rem;padding-inline-end:1rem}.padding-start-1{padding-inline-start:1rem}.cursor-default{cursor:default}";
1902
+ const mapLayerPickerCss = ":host{display:block}.map-layer-picker-container{width:100%;align-items:center}.map-layer-picker{position:relative;width:100%;display:inline-block}.padding-bottom-1{padding-bottom:1rem}.layer-picker-dropdown{height:100%;width:100%}.max-width-350{max-width:350px}.height-100{height:100%}.disabled{cursor:default !important;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:var(--calcite-opacity-disabled);pointer-events:none}.no-bottom-margin{--calcite-label-margin-bottom:0px}.layer-picker-label-container{align-items:center;display:inline-flex;height:100%;padding-inline-start:1rem;padding-inline-end:1rem}.padding-start-1{padding-inline-start:1rem}.cursor-default{cursor:default}";
1903
1903
 
1904
1904
  const MapLayerPicker = class {
1905
1905
  constructor(hostRef) {
1906
1906
  index.registerInstance(this, hostRef);
1907
+ this.idsFound = index.createEvent(this, "idsFound", 7);
1907
1908
  this.noLayersFound = index.createEvent(this, "noLayersFound", 7);
1908
1909
  this.layerSelectionChange = index.createEvent(this, "layerSelectionChange", 7);
1909
1910
  //--------------------------------------------------------------------------
@@ -1917,8 +1918,10 @@ const MapLayerPicker = class {
1917
1918
  this.defaultLayerHonored = false;
1918
1919
  this.appearance = "transparent";
1919
1920
  this.defaultLayerId = "";
1921
+ this.display = "inline-block";
1920
1922
  this.enabledLayerIds = [];
1921
1923
  this.enabledTableIds = [];
1924
+ this.height = undefined;
1922
1925
  this.mapView = undefined;
1923
1926
  this.onlyShowUpdatableLayers = undefined;
1924
1927
  this.placeholderIcon = "";
@@ -1973,7 +1976,9 @@ const MapLayerPicker = class {
1973
1976
  */
1974
1977
  render() {
1975
1978
  const id = "map-layer-picker";
1976
- return (index.h(index.Host, null, index.h("div", { class: "map-layer-picker-container" }, index.h("div", { class: "map-layer-picker" }, !this._hasValidLayers ? this._getInvalidPlaceholder() :
1979
+ let style = this.height > 0 ? { "height": `${this.height.toString()}px` } : {};
1980
+ style = Object.assign(Object.assign({}, style), { "display": this.display });
1981
+ return (index.h(index.Host, null, index.h("div", { class: "map-layer-picker-container", style: style }, index.h("div", { class: "map-layer-picker", style: style }, !this._hasValidLayers ? this._getInvalidPlaceholder() :
1977
1982
  !this._hasMultipleLayers && this.showSingleLayerAsLabel ? this._getSingleLayerPlaceholder() :
1978
1983
  this.type === "combobox" ? this._getCombobox(id) :
1979
1984
  this.type === "select" ? this._getSelect(id) : this._getDropdown(id), index.h("calcite-tooltip", { label: "", placement: "bottom", "reference-element": id }, index.h("span", null, this._translations.switchLayer))))));
@@ -2110,14 +2115,18 @@ const MapLayerPicker = class {
2110
2115
  async _setLayers() {
2111
2116
  if (this.mapView) {
2112
2117
  await this._initLayerTableHash();
2113
- const mapLayerIds = this.onlyShowUpdatableLayers ?
2118
+ const layerIds = this.onlyShowUpdatableLayers ?
2114
2119
  this._getEditableIds(this._layerNameHash) : Object.keys(this._layerNameHash);
2115
- const mapTableIds = this.showTables ? this.onlyShowUpdatableLayers ?
2120
+ const tableIds = this.showTables ? this.onlyShowUpdatableLayers ?
2116
2121
  this._getEditableIds(this._tableNameHash) : Object.keys(this._tableNameHash) : [];
2117
2122
  this.ids = [
2118
- ...mapLayerIds.reverse().filter(n => { var _a; return ((_a = this.enabledLayerIds) === null || _a === void 0 ? void 0 : _a.length) > 0 ? this.enabledLayerIds.reverse().indexOf(n) > -1 : true; }),
2119
- ...mapTableIds.reverse().filter(n => { var _a; return ((_a = this.enabledTableIds) === null || _a === void 0 ? void 0 : _a.length) > 0 ? this.enabledTableIds.reverse().indexOf(n) > -1 : true; }),
2123
+ ...layerIds.reverse().filter(n => { var _a; return ((_a = this.enabledLayerIds) === null || _a === void 0 ? void 0 : _a.length) > 0 ? this.enabledLayerIds.reverse().indexOf(n) > -1 : true; }),
2124
+ ...tableIds.reverse().filter(n => { var _a; return ((_a = this.enabledTableIds) === null || _a === void 0 ? void 0 : _a.length) > 0 ? this.enabledTableIds.reverse().indexOf(n) > -1 : true; }),
2120
2125
  ];
2126
+ this.idsFound.emit({
2127
+ layerIds,
2128
+ tableIds
2129
+ });
2121
2130
  }
2122
2131
  }
2123
2132
  /**
@@ -9,9 +9,9 @@ Object.defineProperty(exports, '__esModule', { value: true });
9
9
 
10
10
  const index = require('./index-b8a649fc.js');
11
11
  const locale = require('./locale-9db09b63.js');
12
- const mapViewUtils = require('./mapViewUtils-b7d9e71c.js');
12
+ const mapViewUtils = require('./mapViewUtils-569e9644.js');
13
13
  const loadModules = require('./loadModules-46d14e81.js');
14
- const downloadUtils = require('./downloadUtils-95e4a5b2.js');
14
+ const downloadUtils = require('./downloadUtils-8f50633d.js');
15
15
  require('./esri-loader-a91c0ec1.js');
16
16
  require('./_commonjsHelpers-384729db.js');
17
17
  require('./interfaces-7cd0a48a.js');
@@ -116,6 +116,10 @@ const LayerTable = class {
116
116
  * number[]: A list of all IDs for the current layer
117
117
  */
118
118
  this._allIds = [];
119
+ /**
120
+ * boolean: When true the ctrl key is currently pressed
121
+ */
122
+ this._ctrlIsPressed = false;
119
123
  /**
120
124
  * boolean: When true the default global id provided via url param has been honored and should now be ignored
121
125
  */
@@ -124,6 +128,14 @@ const LayerTable = class {
124
128
  * boolean: When true the default OID provided via url param has been honored and should now be ignored
125
129
  */
126
130
  this._defaultOidHonored = false;
131
+ /**
132
+ * boolean: When true the shift key is currently pressed
133
+ */
134
+ this._shiftIsPressed = false;
135
+ /**
136
+ * boolean: When true any onChange handeling will be skipped
137
+ */
138
+ this._skipOnChange = false;
127
139
  /**
128
140
  * bool: When true the table is being sorted
129
141
  */
@@ -328,6 +340,8 @@ const LayerTable = class {
328
340
  async componentDidLoad() {
329
341
  this._resizeObserver.observe(this._toolbar);
330
342
  document.onclick = (e) => this._handleDocumentClick(e);
343
+ document.onkeydown = (e) => this._handleKeyDown(e);
344
+ document.onkeyup = (e) => this._handleKeyUp(e);
331
345
  }
332
346
  /**
333
347
  * Called after the component is rendered
@@ -382,7 +396,7 @@ const LayerTable = class {
382
396
  * @returns The dom node that contains the controls
383
397
  */
384
398
  _getActionBar() {
385
- return (index.h("calcite-action-bar", { expandDisabled: true, expanded: true, id: this._getId("bar"), layout: "horizontal" }, index.h("div", { class: "border-end", id: "solutions-map-layer-picker-container" }, index.h("map-layer-picker", { appearance: "transparent", defaultLayerId: this.defaultLayerId, mapView: this.mapView, onLayerSelectionChange: (evt) => this._layerSelectionChanged(evt), onlyShowUpdatableLayers: this.onlyShowUpdatableLayers, placeholderIcon: "layers", scale: "l", showSingleLayerAsLabel: true, showTables: true, type: "dropdown" })), this._getActions()));
399
+ return (index.h("calcite-action-bar", { expandDisabled: true, expanded: true, id: this._getId("bar"), layout: "horizontal" }, index.h("div", { class: "border-end", id: "solutions-map-layer-picker-container" }, index.h("map-layer-picker", { appearance: "transparent", defaultLayerId: this.defaultLayerId, display: "inline-flex", height: 50, mapView: this.mapView, onLayerSelectionChange: (evt) => this._layerSelectionChanged(evt), onlyShowUpdatableLayers: this.onlyShowUpdatableLayers, placeholderIcon: "layers", scale: "l", showSingleLayerAsLabel: true, showTables: true, type: "dropdown" })), this._getActions()));
386
400
  }
387
401
  /**
388
402
  * Get the actions that are used for various interactions with the table
@@ -807,18 +821,8 @@ const LayerTable = class {
807
821
  this._initColumnsInfo();
808
822
  this._checkEditEnabled();
809
823
  await this._table.when(() => {
810
- this._table.highlightIds.on("change", () => {
811
- // https://github.com/Esri/solutions-components/issues/365
812
- this._selectedIndexes = this._table.highlightIds.toArray().reverse();
813
- if (this._showOnlySelected) {
814
- if (this._featuresSelected()) {
815
- this._table.filterBySelection();
816
- }
817
- else {
818
- this._toggleShowSelected();
819
- }
820
- }
821
- this.featureSelectionChange.emit(this._selectedIndexes);
824
+ this._table.highlightIds.on("change", (evt) => {
825
+ void this._handleOnChange(evt);
822
826
  });
823
827
  this.reactiveUtils.watch(() => this._table.activeSortOrders, (sortOrders) => {
824
828
  var _a, _b, _c, _d;
@@ -828,6 +832,93 @@ const LayerTable = class {
828
832
  });
829
833
  }
830
834
  }
835
+ async _handleOnChange(evt) {
836
+ const ids = [...this._table.highlightIds.toArray()];
837
+ if (!this._skipOnChange) {
838
+ if (!this._ctrlIsPressed && !this._shiftIsPressed) {
839
+ if (this._selectedIndexes.length > 0) {
840
+ this._skipOnChange = true;
841
+ // only readd in specific case where we have multiple selected and then click one of the currently selected
842
+ const reAdd = this._selectedIndexes.length > 1 && evt.removed.length === 1;
843
+ const newIndexes = reAdd ? evt.removed : ids.filter(id => this._selectedIndexes.indexOf(id) < 0);
844
+ this._clearSelection();
845
+ this._selectedIndexes = [...newIndexes];
846
+ if (newIndexes.length > 0) {
847
+ this._table.highlightIds.add(newIndexes[0]);
848
+ }
849
+ }
850
+ else {
851
+ // https://github.com/Esri/solutions-components/issues/365
852
+ this._selectedIndexes = ids.reverse();
853
+ }
854
+ }
855
+ else if (this._ctrlIsPressed) {
856
+ this._selectedIndexes = ids.reverse();
857
+ }
858
+ else if (this._shiftIsPressed) {
859
+ this._skipOnChange = true;
860
+ this._previousCurrentId = this._currentId;
861
+ this._currentId = [...this._table.highlightIds.toArray()].reverse()[0];
862
+ if (this._previousCurrentId !== this._currentId) {
863
+ // query the layer based on current sort and filters then grab between the current id and previous id
864
+ const orderBy = this._table.activeSortOrders.reduce((prev, cur) => {
865
+ prev.push(`${cur.fieldName} ${cur.direction}`);
866
+ return prev;
867
+ }, []);
868
+ const oids = await mapViewUtils.queryFeatureIds(this._layer, this._layer.definitionExpression, orderBy);
869
+ let isBetween = false;
870
+ const _start = this._table.viewModel.getObjectIdIndex(this._previousCurrentId);
871
+ const _end = this._table.viewModel.getObjectIdIndex(this._currentId);
872
+ const startIndex = _start < _end ? _start : _end;
873
+ const endIndex = _end > _start ? _end : _start;
874
+ this._selectedIndexes = oids.reduce((prev, cur) => {
875
+ const id = cur;
876
+ const index = this._table.viewModel.getObjectIdIndex(id);
877
+ if ((id === this._currentId || id === this._previousCurrentId)) {
878
+ isBetween = !isBetween;
879
+ if (prev.indexOf(id) < 0) {
880
+ prev.push(id);
881
+ }
882
+ }
883
+ // The oids are sorted so after we have reached the start or end oid add all ids even if the index is -1.
884
+ // Index of -1 will occur for features between the start and and oid if
885
+ // you select a row then scroll faster than the FeatureTable loads the data to select the next id
886
+ if (isBetween && prev.indexOf(id) < 0) {
887
+ prev.push(id);
888
+ }
889
+ // Also add index based check.
890
+ // In some cases the FeatureTable and Layer query will have differences in how null/undefined field values are sorted
891
+ if ((this._selectedIndexes.indexOf(id) > -1 || (index >= startIndex && index <= endIndex)) && prev.indexOf(id) < 0 && index > -1) {
892
+ prev.push(id);
893
+ }
894
+ return prev;
895
+ }, []);
896
+ this._table.highlightIds.addMany(this._selectedIndexes.filter(i => ids.indexOf(i) < 0));
897
+ }
898
+ }
899
+ this._finishOnChange();
900
+ }
901
+ else {
902
+ this._skipOnChange = false;
903
+ }
904
+ this._currentId = [...this._table.highlightIds.toArray()].reverse()[0];
905
+ }
906
+ /**
907
+ * Handle any updates after a selection change has occured and emit the results
908
+ *
909
+ * @returns void
910
+ */
911
+ _finishOnChange() {
912
+ if (this._showOnlySelected) {
913
+ if (this._featuresSelected()) {
914
+ this._table.filterBySelection();
915
+ }
916
+ else {
917
+ this._toggleShowSelected();
918
+ }
919
+ }
920
+ this.featureSelectionChange.emit(this._selectedIndexes);
921
+ }
831
922
  /**
832
923
  * Reset basic table props
833
924
  *
@@ -963,6 +1054,24 @@ const LayerTable = class {
963
1054
  }
964
1055
  }
965
1056
  }
1057
+ /**
1058
+ * Keep track of key down for ctrl and shift
1059
+ *
1060
+ * @returns void
1061
+ */
1062
+ _handleKeyDown(e) {
1063
+ this._ctrlIsPressed = e.ctrlKey;
1064
+ this._shiftIsPressed = e.shiftKey;
1065
+ }
1066
+ /**
1067
+ * Keep track of key up for ctrl and shift
1068
+ *
1069
+ * @returns void
1070
+ */
1071
+ _handleKeyUp(e) {
1072
+ this._ctrlIsPressed = e.ctrlKey;
1073
+ this._shiftIsPressed = e.shiftKey;
1074
+ }
966
1075
  /**
967
1076
  * Show filter component in modal
968
1077
  *
@@ -970,15 +1079,19 @@ const LayerTable = class {
970
1079
  */
971
1080
  _filterModal() {
972
1081
  var _a, _b, _c;
973
- return (index.h("calcite-modal", { "aria-labelledby": "modal-title", kind: "brand", onCalciteModalClose: () => this._closeFilter(), open: this._filterOpen, widthScale: "s" }, index.h("div", { class: "display-flex align-center", id: "modal-title", slot: "header" }, (_b = (_a = this._translations) === null || _a === void 0 ? void 0 : _a.filter) === null || _b === void 0 ? void 0 : _b.replace("{{title}}", (_c = this._layer) === null || _c === void 0 ? void 0 : _c.title)), index.h("div", { slot: "content" }, index.h("instant-apps-filter-list", { autoUpdateUrl: false, closeBtn: true, closeBtnOnClick: () => this._closeFilter(), layerExpressions: this._layerExpressions, ref: (el) => this._filterList = el, view: this.mapView }))));
1082
+ return (index.h("calcite-modal", { "aria-labelledby": "modal-title", kind: "brand", onCalciteModalClose: async () => this._closeFilter(), open: this._filterOpen, widthScale: "s" }, index.h("div", { class: "display-flex align-center", id: "modal-title", slot: "header" }, (_b = (_a = this._translations) === null || _a === void 0 ? void 0 : _a.filter) === null || _b === void 0 ? void 0 : _b.replace("{{title}}", (_c = this._layer) === null || _c === void 0 ? void 0 : _c.title)), index.h("div", { slot: "content" }, index.h("instant-apps-filter-list", { autoUpdateUrl: false, closeBtn: true, closeBtnOnClick: async () => this._closeFilter(), layerExpressions: this._layerExpressions, ref: (el) => this._filterList = el, view: this.mapView }))));
974
1083
  }
975
1084
  /**
976
1085
  * Close the filter modal
977
1086
  *
978
1087
  * @returns void
979
1088
  */
980
- _closeFilter() {
981
- this._filterOpen = false;
1089
+ async _closeFilter() {
1090
+ if (this._filterOpen) {
1091
+ // reset allIds
1092
+ this._allIds = await mapViewUtils.queryAllIds(this._layer);
1093
+ this._filterOpen = false;
1094
+ }
982
1095
  }
983
1096
  /**
984
1097
  * Show delete confirmation message
@@ -1051,8 +1164,10 @@ const LayerTable = class {
1051
1164
  _selectAll() {
1052
1165
  const ids = this._allIds;
1053
1166
  this._table.highlightIds.removeAll();
1167
+ this._skipOnChange = true;
1054
1168
  this._table.highlightIds.addMany(ids);
1055
1169
  this._selectedIndexes = ids;
1170
+ this._finishOnChange();
1056
1171
  }
1057
1172
  /**
1058
1173
  * Toggle the show only selected flag
@@ -1094,9 +1209,9 @@ const LayerTable = class {
1094
1209
  * @returns void
1095
1210
  */
1096
1211
  _initLayerExpressions() {
1097
- var _a;
1098
- const layerExpressions = (_a = this.mapInfo.filterConfig) === null || _a === void 0 ? void 0 : _a.layerExpressions;
1099
- this._layerExpressions = layerExpressions.filter((exp) => exp.id === this._layer.id);
1212
+ var _a, _b;
1213
+ const layerExpressions = (_b = (_a = this.mapInfo) === null || _a === void 0 ? void 0 : _a.filterConfig) === null || _b === void 0 ? void 0 : _b.layerExpressions;
1214
+ this._layerExpressions = layerExpressions ? layerExpressions.filter((exp) => exp.id === this._layer.id) : [];
1100
1215
  }
1101
1216
  /**
1102
1217
  * Select all rows that are not currently selectd
@@ -1112,8 +1227,10 @@ const LayerTable = class {
1112
1227
  }
1113
1228
  return prev;
1114
1229
  }, []).sort((a, b) => a - b);
1230
+ this._skipOnChange = true;
1115
1231
  this._table.highlightIds.addMany(ids);
1116
1232
  this._selectedIndexes = ids;
1233
+ this._finishOnChange();
1117
1234
  }
1118
1235
  /**
1119
1236
  * Export all selected rows as CSV
@@ -1199,6 +1316,7 @@ const LayerTable = class {
1199
1316
  fieldInfos.some(fieldInfo => {
1200
1317
  if (fieldInfo.name === columnTemplate.fieldName) {
1201
1318
  columnTemplate.label = fieldInfo.alias;
1319
+ columnTemplate.menuConfig = this._getMenuConfig(fieldInfo.name);
1202
1320
  return true;
1203
1321
  }
1204
1322
  });
@@ -1207,12 +1325,48 @@ const LayerTable = class {
1207
1325
  return {
1208
1326
  type: "field",
1209
1327
  fieldName: fieldInfo.name,
1210
- label: fieldInfo.alias
1328
+ label: fieldInfo.alias,
1329
+ menuConfig: this._getMenuConfig(fieldInfo.name)
1211
1330
  };
1212
1331
  });
1213
1332
  }
1214
1333
  return columnTemplates;
1215
1334
  }
1335
+ /**
1336
+ * Get the menu config that adds the ability to hide the current column
1337
+ *
1338
+ * @returns void
1339
+ * @protected
1340
+ */
1341
+ _getMenuConfig(name) {
1342
+ return {
1343
+ items: [
1344
+ {
1345
+ label: this._translations.hideField,
1346
+ iconClass: "esri-icon-non-visible",
1347
+ autoCloseMenu: true,
1348
+ clickFunction: () => {
1349
+ this._handleHideClick(name);
1350
+ }
1351
+ }
1352
+ ]
1353
+ };
1354
+ }
1355
+ /**
1356
+ * Hide the table column for the provided name
1357
+ *
1358
+ * @returns void
1359
+ * @protected
1360
+ */
1361
+ _handleHideClick(name) {
1362
+ this._columnsInfo[name] = false;
1363
+ this._table.hideColumn(name);
1364
+ this._table.tableTemplate.columnTemplates.forEach((columnTemplate) => {
1365
+ if (columnTemplate.fieldName === name) {
1366
+ columnTemplate.visible = false;
1367
+ }
1368
+ });
1369
+ }
1216
1370
  /**
1217
1371
  * Fetches the component's translations
1218
1372
  *
@@ -57,6 +57,7 @@ const CrowdsourceManager = class {
57
57
  this._layoutMode = interfaces.ELayoutMode.GRID;
58
58
  this._mapView = undefined;
59
59
  this._panelOpen = true;
60
+ this._tableOnly = false;
60
61
  }
61
62
  //--------------------------------------------------------------------------
62
63
  //
@@ -106,6 +107,16 @@ const CrowdsourceManager = class {
106
107
  // Events (public)
107
108
  //
108
109
  //--------------------------------------------------------------------------
110
+ /**
111
+ * Listen for idsFound event to be fired so we can know that all layer ids have been fetched
112
+ */
113
+ async idsFound(evt) {
114
+ const ids = evt.detail;
115
+ this._tableOnly = ids.tableIds.length > 0 && ids.layerIds.length === 0;
116
+ if (this._tableOnly) {
117
+ this._expandPopup = true;
118
+ }
119
+ }
109
120
  /**
110
121
  * Listen for layoutChanged event to be fired so we can adjust the layout
111
122
  */
@@ -303,7 +314,7 @@ const CrowdsourceManager = class {
303
314
  const tooltip = this._expandPopup ? this._translations.collapsePopup : this._translations.expandPopup;
304
315
  const themeClass = this.theme === "dark" ? "calcite-mode-dark" : "calcite-mode-light";
305
316
  const popupNodeClass = !this._expandPopup ? "height-full" : ((_a = this.mapInfos) === null || _a === void 0 ? void 0 : _a.length) === 1 ? "position-absolute-0" : "position-absolute-50";
306
- return (index.h("div", { class: "calcite-mode-dark " + popupNodeClass }, index.h("calcite-panel", null, index.h("div", { class: "display-flex align-items-center", slot: "header-content" }, index.h("calcite-icon", { icon: "information", scale: "s" }), index.h("div", { class: "padding-inline-start-75" }, this._translations.information)), index.h("calcite-action", { icon: icon, id: id, onClick: () => this._togglePopup(), slot: "header-actions-end", text: "" }), index.h("calcite-tooltip", { class: themeClass, label: "", placement: "bottom", "reference-element": id }, index.h("span", null, tooltip)), this._getCardNode())));
317
+ return (index.h("div", { class: "calcite-mode-dark " + popupNodeClass }, index.h("calcite-panel", null, index.h("div", { class: "display-flex align-items-center", slot: "header-content" }, index.h("calcite-icon", { icon: "information", scale: "s" }), index.h("div", { class: "padding-inline-start-75" }, this._translations.information)), index.h("calcite-action", { disabled: this._tableOnly, icon: icon, id: id, onClick: () => this._togglePopup(), slot: "header-actions-end", text: "" }), !this._tableOnly ? index.h("calcite-tooltip", { class: themeClass, label: "", placement: "bottom", "reference-element": id }, index.h("span", null, tooltip)) : undefined, this._getCardNode())));
307
318
  }
308
319
  /**
309
320
  * Toggle the popup information
@@ -8,7 +8,7 @@
8
8
  const _commonjsHelpers = require('./_commonjsHelpers-384729db.js');
9
9
  const index = require('./index-b8a649fc.js');
10
10
  const loadModules = require('./loadModules-46d14e81.js');
11
- const mapViewUtils = require('./mapViewUtils-b7d9e71c.js');
11
+ const mapViewUtils = require('./mapViewUtils-569e9644.js');
12
12
  require('./solution-resource-abec7452.js');
13
13
  require('./index-f64944ad.js');
14
14
  const restHelpersGet = require('./restHelpersGet-e0737480.js');
@@ -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-a88403f8.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},
1513
+ function(t){function e(){return (n.canvg?Promise.resolve(n.canvg):Promise.resolve().then(function () { return require('./index.es-140aa937.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
@@ -6,11 +6,11 @@
6
6
  'use strict';
7
7
 
8
8
  const _commonjsHelpers = require('./_commonjsHelpers-384729db.js');
9
- const downloadUtils = require('./downloadUtils-95e4a5b2.js');
9
+ const downloadUtils = require('./downloadUtils-8f50633d.js');
10
10
  require('./index-b8a649fc.js');
11
11
  require('./loadModules-46d14e81.js');
12
12
  require('./esri-loader-a91c0ec1.js');
13
- require('./mapViewUtils-b7d9e71c.js');
13
+ require('./mapViewUtils-569e9644.js');
14
14
  require('./interfaces-7cd0a48a.js');
15
15
  require('./solution-resource-abec7452.js');
16
16
  require('./index-f64944ad.js');