@esri/solutions-components 0.8.7 → 0.8.9

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.
Files changed (121) hide show
  1. package/dist/assets/t9n/crowdsource-reporter/resources.json +3 -1
  2. package/dist/assets/t9n/crowdsource-reporter/resources_en.json +3 -1
  3. package/dist/cjs/{calcite-action-menu_2.cjs.entry.js → calcite-action-menu_3.cjs.entry.js} +114 -7
  4. package/dist/cjs/calcite-alert_4.cjs.entry.js +46 -5
  5. package/dist/cjs/{calcite-input-date-picker_3.cjs.entry.js → calcite-block_5.cjs.entry.js} +691 -13
  6. package/dist/cjs/{calcite-combobox_5.cjs.entry.js → calcite-combobox_3.cjs.entry.js} +876 -844
  7. package/dist/cjs/calcite-dropdown_4.cjs.entry.js +1023 -0
  8. package/dist/cjs/{calcite-flow_5.cjs.entry.js → calcite-flow_6.cjs.entry.js} +327 -2
  9. package/dist/cjs/card-manager_3.cjs.entry.js +5 -5
  10. package/dist/cjs/crowdsource-manager.cjs.entry.js +5 -1
  11. package/dist/cjs/crowdsource-reporter.cjs.entry.js +122 -23
  12. package/dist/cjs/{downloadUtils-8b05d7cc.js → downloadUtils-dc349b1a.js} +2 -2
  13. package/dist/cjs/{index.es-e7587227.js → index.es-1830a1e6.js} +2 -2
  14. package/dist/cjs/loader.cjs.js +1 -1
  15. package/dist/cjs/map-select-tools_3.cjs.entry.js +8 -8
  16. package/dist/cjs/{mapViewUtils-3e0fa457.js → mapViewUtils-9dc05308.js} +11 -5
  17. package/dist/cjs/public-notification.cjs.entry.js +2 -2
  18. package/dist/cjs/solutions-components.cjs.js +1 -1
  19. package/dist/collection/collection-manifest.json +1 -0
  20. package/dist/collection/components/create-feature/create-feature.js +18 -0
  21. package/dist/collection/components/crowdsource-manager/crowdsource-manager.js +72 -0
  22. package/dist/collection/components/crowdsource-reporter/crowdsource-reporter.css +16 -0
  23. package/dist/collection/components/crowdsource-reporter/crowdsource-reporter.js +155 -71
  24. package/dist/collection/components/feature-details/feature-details.css +18 -0
  25. package/dist/collection/components/feature-details/feature-details.js +500 -0
  26. package/dist/collection/components/feature-details/test/feature-details.e2e.js +14 -0
  27. package/dist/collection/components/feature-details/test/feature-details.spec.js +22 -0
  28. package/dist/collection/components/feature-list/feature-list.js +14 -1
  29. package/dist/collection/components/info-card/info-card.css +15 -5
  30. package/dist/collection/components/info-card/info-card.js +178 -5
  31. package/dist/collection/components/layer-table/layer-table.js +2 -2
  32. package/dist/collection/components/map-card/map-card.js +1 -1
  33. package/dist/collection/components/map-select-tools/map-select-tools.js +5 -5
  34. package/dist/collection/components/refine-selection/refine-selection.js +1 -1
  35. package/dist/collection/demos/crowdsource-reporter.html +115 -1
  36. package/dist/collection/utils/interfaces.ts +4 -4
  37. package/dist/collection/utils/mapViewUtils.js +11 -5
  38. package/dist/collection/utils/mapViewUtils.ts +13 -5
  39. package/dist/components/create-feature2.js +4 -0
  40. package/dist/components/crowdsource-manager.js +8 -0
  41. package/dist/components/crowdsource-reporter.js +270 -85
  42. package/dist/components/feature-details.d.ts +11 -0
  43. package/dist/components/feature-details.js +11 -0
  44. package/dist/components/feature-details2.js +449 -0
  45. package/dist/components/feature-list2.js +14 -1
  46. package/dist/components/info-card2.js +53 -5
  47. package/dist/components/layer-table2.js +2 -2
  48. package/dist/components/map-card2.js +1 -1
  49. package/dist/components/map-select-tools2.js +5 -5
  50. package/dist/components/mapViewUtils.js +11 -5
  51. package/dist/components/refine-selection2.js +1 -1
  52. package/dist/esm/{calcite-action-menu_2.entry.js → calcite-action-menu_3.entry.js} +118 -12
  53. package/dist/esm/calcite-alert_4.entry.js +46 -5
  54. package/dist/esm/{calcite-input-date-picker_3.entry.js → calcite-block_5.entry.js} +688 -12
  55. package/dist/esm/{calcite-combobox_5.entry.js → calcite-combobox_3.entry.js} +878 -844
  56. package/dist/esm/calcite-date-picker-day_3.entry.js +1 -1
  57. package/dist/esm/calcite-dropdown_4.entry.js +1016 -0
  58. package/dist/esm/{calcite-flow_5.entry.js → calcite-flow_6.entry.js} +327 -3
  59. package/dist/esm/card-manager_3.entry.js +5 -5
  60. package/dist/esm/crowdsource-manager.entry.js +5 -1
  61. package/dist/esm/crowdsource-reporter.entry.js +122 -23
  62. package/dist/esm/{date-5630530d.js → date-0c026a8b.js} +1 -1
  63. package/dist/esm/{downloadUtils-0c1e4d7b.js → downloadUtils-df4f21f6.js} +2 -2
  64. package/dist/esm/{index.es-286e3cfa.js → index.es-904fb846.js} +2 -2
  65. package/dist/esm/loader.js +1 -1
  66. package/dist/esm/map-select-tools_3.entry.js +8 -8
  67. package/dist/esm/{mapViewUtils-253178f1.js → mapViewUtils-2ec19fb0.js} +11 -5
  68. package/dist/esm/public-notification.entry.js +2 -2
  69. package/dist/esm/solutions-components.js +1 -1
  70. package/dist/solutions-components/demos/crowdsource-reporter.html +115 -1
  71. package/dist/solutions-components/{p-813fd8a4.entry.js → p-29f518fd.entry.js} +2 -2
  72. package/dist/solutions-components/p-452fd697.entry.js +6 -0
  73. package/dist/solutions-components/p-511b1c91.entry.js +23 -0
  74. package/dist/solutions-components/p-577efb16.js +36 -0
  75. package/dist/solutions-components/{p-94de9279.js → p-5817d78c.js} +1 -1
  76. package/dist/solutions-components/p-602cd811.entry.js +17 -0
  77. package/dist/solutions-components/{p-15f9624a.entry.js → p-6557b703.entry.js} +1 -1
  78. package/dist/solutions-components/p-7269c49b.entry.js +6 -0
  79. package/dist/solutions-components/p-760bd17e.entry.js +6 -0
  80. package/dist/solutions-components/p-95fea07a.entry.js +17 -0
  81. package/dist/solutions-components/{p-212b02e7.js → p-ae4d86e8.js} +1 -1
  82. package/dist/solutions-components/{p-038fcd93.entry.js → p-c273ab7a.entry.js} +1 -1
  83. package/dist/solutions-components/p-d742b915.entry.js +29 -0
  84. package/dist/solutions-components/p-dfad61a8.entry.js +24 -0
  85. package/dist/solutions-components/{p-331b5d1e.js → p-fca434c8.js} +2 -2
  86. package/dist/solutions-components/p-fd82a00f.entry.js +6 -0
  87. package/dist/solutions-components/solutions-components.esm.js +1 -1
  88. package/dist/solutions-components/utils/interfaces.ts +4 -4
  89. package/dist/solutions-components/utils/mapViewUtils.ts +13 -5
  90. package/dist/types/components/create-feature/create-feature.d.ts +4 -4
  91. package/dist/types/components/crowdsource-manager/crowdsource-manager.d.ts +16 -0
  92. package/dist/types/components/crowdsource-reporter/crowdsource-reporter.d.ts +91 -18
  93. package/dist/types/components/feature-details/feature-details.d.ts +151 -0
  94. package/dist/types/components/feature-list/feature-list.d.ts +6 -0
  95. package/dist/types/components/info-card/info-card.d.ts +33 -1
  96. package/dist/types/components.d.ts +161 -28
  97. package/dist/types/preact.d.ts +6 -1
  98. package/dist/types/utils/interfaces.d.ts +4 -4
  99. package/dist/types/utils/mapViewUtils.d.ts +5 -3
  100. package/package.json +1 -1
  101. package/dist/cjs/calcite-block_2.cjs.entry.js +0 -652
  102. package/dist/cjs/calcite-graph_2.cjs.entry.js +0 -1055
  103. package/dist/cjs/calcite-scrim.cjs.entry.js +0 -125
  104. package/dist/cjs/utils-7bc7f595.js +0 -64
  105. package/dist/esm/calcite-block_2.entry.js +0 -647
  106. package/dist/esm/calcite-graph_2.entry.js +0 -1050
  107. package/dist/esm/calcite-scrim.entry.js +0 -121
  108. package/dist/esm/utils-9fb4104a.js +0 -61
  109. package/dist/solutions-components/p-04c37d69.entry.js +0 -17
  110. package/dist/solutions-components/p-0b92e4b1.entry.js +0 -11
  111. package/dist/solutions-components/p-238d3b5f.entry.js +0 -6
  112. package/dist/solutions-components/p-3af79063.js +0 -36
  113. package/dist/solutions-components/p-6db185bf.entry.js +0 -6
  114. package/dist/solutions-components/p-80b11ec1.entry.js +0 -17
  115. package/dist/solutions-components/p-aec06ce4.entry.js +0 -18
  116. package/dist/solutions-components/p-bfdf89c2.js +0 -11
  117. package/dist/solutions-components/p-c4ff3b52.entry.js +0 -17
  118. package/dist/solutions-components/p-ced067bd.entry.js +0 -17
  119. package/dist/solutions-components/p-d136eab0.entry.js +0 -23
  120. package/dist/solutions-components/p-e0446d5b.entry.js +0 -6
  121. package/dist/solutions-components/p-e8f13354.entry.js +0 -6
@@ -12,7 +12,7 @@ import { c as connectLocalized, d as disconnectLocalized } from './locale-904407
12
12
  import { c as connectMessages, s as setUpMessages, d as disconnectMessages, u as updateMessages } from './t9n-436fb2b1.js';
13
13
  import { S as SLOTS$1 } from './resources-00983bd3.js';
14
14
  import { l as loadModules, g as getLocaleComponentStrings, f as formatNumber } from './locale-bcbea4ef.js';
15
- import { a as getAllLayers, g as getLayerOrTable, b as getFeatureLayerView, h as highlightFeatures, c as getMapLayerHash } from './mapViewUtils-253178f1.js';
15
+ import { a as getAllLayers, g as getLayerOrTable, b as getFeatureLayerView, h as highlightFeatures, c as getMapLayerHash } from './mapViewUtils-2ec19fb0.js';
16
16
  import { P as PopupUtils } from './popupUtils-af124b47.js';
17
17
  import './guid-b75a5f7b.js';
18
18
  import './resources-8834f920.js';
@@ -345,6 +345,7 @@ const CreateFeature = class {
345
345
  this.fail = createEvent(this, "fail", 7);
346
346
  this.drawComplete = createEvent(this, "drawComplete", 7);
347
347
  this.editingAttachment = createEvent(this, "editingAttachment", 7);
348
+ this.progressStatus = createEvent(this, "progressStatus", 7);
348
349
  this.mapView = undefined;
349
350
  this.selectedLayerId = undefined;
350
351
  this.customizeSubmit = false;
@@ -489,6 +490,7 @@ const CreateFeature = class {
489
490
  //Add handle to watch featureTemplatesViewModel ready state and then start the creation
490
491
  const handle = this.reactiveUtils.watch(() => this._editor.viewModel.featureTemplatesViewModel.state, (state) => {
491
492
  if (state === 'ready') {
493
+ this.progressStatus.emit(0.5);
492
494
  void this.startCreate();
493
495
  }
494
496
  });
@@ -512,6 +514,7 @@ const CreateFeature = class {
512
514
  //once the feature template is selected handle the event for formSubmit and sketch complete
513
515
  //also, hide the headers and footer in the editor as we will be showing our own submit and cancel button
514
516
  this._editor.viewModel.featureTemplatesViewModel.on('select', () => {
517
+ this.progressStatus.emit(0.75);
515
518
  setTimeout(() => {
516
519
  //on form submit
517
520
  this._editor.viewModel.featureFormViewModel.on('submit', this.submitted.bind(this));
@@ -519,6 +522,7 @@ const CreateFeature = class {
519
522
  this._editor.viewModel.sketchViewModel.on("create", (evt) => {
520
523
  if (evt.state === "complete") {
521
524
  this.showSearchWidget = false;
525
+ this.progressStatus.emit(1);
522
526
  this.drawComplete.emit();
523
527
  }
524
528
  });
@@ -683,6 +687,313 @@ const CreateFeature = class {
683
687
  };
684
688
  CreateFeature.style = createFeatureCss;
685
689
 
690
+ const featureDetailsCss = ":host{display:block}.buttons{align-items:center;background-color:white;display:flex;padding:10px 0 10px 15px;border-block-start:1px solid var(--calcite-color-border-3);border-block-end:1px solid var(--calcite-color-border-3)}.comment-btn{display:flex;gap:5px;width:35px}";
691
+
692
+ const FeatureDetails = class {
693
+ constructor(hostRef) {
694
+ registerInstance(this, hostRef);
695
+ this.loadingStatus = createEvent(this, "loadingStatus", 7);
696
+ /**
697
+ * string[]: Valid field types for like and dislike
698
+ */
699
+ this._validFieldTypes = ["small-integer", "integer", "big-integer", "single", "long"];
700
+ this.mapView = undefined;
701
+ this.graphics = undefined;
702
+ this.reportingOptions = undefined;
703
+ this._likeFieldAvailable = false;
704
+ this._likeCount = 0;
705
+ this._disLikeCount = 0;
706
+ this._dislikeFieldAvailable = false;
707
+ this._isLikeBtnClicked = false;
708
+ this._isDislikeBtnClicked = false;
709
+ }
710
+ //--------------------------------------------------------------------------
711
+ //
712
+ // Watch handlers
713
+ //
714
+ //--------------------------------------------------------------------------
715
+ /**
716
+ * Called each time the graphics prop is changed
717
+ */
718
+ async graphicsWatchHandler() {
719
+ await this.getCompleteGraphic(this.graphics[0]);
720
+ this.checkLikeDislikeFields();
721
+ }
722
+ //--------------------------------------------------------------------------
723
+ //
724
+ // Methods (public)
725
+ /**
726
+ * Refresh the features comments which will fetch like, dislike and update the component
727
+ * @returns Promise that resolves when the operation is complete
728
+ */
729
+ async refresh(graphic) {
730
+ if (this.isLikeDislikeConfigured(graphic.layer)) {
731
+ // in case of multiple features selected fetch complete feature and update like dislike for current feature
732
+ if (graphic && this.graphics.length > 1) {
733
+ await this.getCompleteGraphic(graphic);
734
+ this.checkLikeDislikeFields();
735
+ }
736
+ }
737
+ else {
738
+ this._likeFieldAvailable = false;
739
+ this._dislikeFieldAvailable = false;
740
+ }
741
+ }
742
+ /**
743
+ * Go to the previous feature in the features widget
744
+ */
745
+ async back() {
746
+ void this._infoCard.back();
747
+ }
748
+ /**
749
+ * Go to the next feature in the features widget
750
+ */
751
+ async next() {
752
+ void this._infoCard.next();
753
+ }
754
+ /**
755
+ * Toggle the visibility of the features list view
756
+ */
757
+ async toggleListView() {
758
+ void this._infoCard.toggleListView();
759
+ }
760
+ /**
761
+ * StencilJS: Called once just after the component is first connected to the DOM.
762
+ *
763
+ * @returns Promise when complete
764
+ */
765
+ async componentWillLoad() {
766
+ await this._initModules();
767
+ await this.getCompleteGraphic(this.graphics[0]);
768
+ this.checkLikeDislikeFields();
769
+ }
770
+ render() {
771
+ var _a, _b, _c, _d;
772
+ return (h("calcite-panel", { "full-height": true }, h("info-card", { allowEditing: false, graphics: this.graphics, highlightEnabled: false, isLoading: false, isMobile: false, mapView: this.mapView, paginationEnabled: false, position: "relative", ref: el => this._infoCard = el, zoomAndScrollToSelected: true }), (this._likeFieldAvailable || this._dislikeFieldAvailable) &&
773
+ h("div", { class: 'buttons' }, this._likeFieldAvailable &&
774
+ h("calcite-button", { appearance: "transparent", iconEnd: "thumbs-up", kind: this._isLikeBtnClicked ? "brand" : "neutral", onClick: this.onLikeButtonClick.bind(this), scale: 's' }, (_b = (_a = this._likeCount) !== null && _a !== void 0 ? _a : this._selectedGraphic.attributes[this._likeField]) !== null && _b !== void 0 ? _b : 0), this._dislikeFieldAvailable &&
775
+ h("calcite-button", { appearance: "transparent", iconEnd: "thumbs-down", kind: this._isDislikeBtnClicked ? "brand" : "neutral", onClick: this.onDislikeButtonClick.bind(this), scale: 's' }, (_d = (_c = this._disLikeCount) !== null && _c !== void 0 ? _c : this._selectedGraphic.attributes[this._dislikeField]) !== null && _d !== void 0 ? _d : 0))));
776
+ }
777
+ /**
778
+ * Load esri javascript api modules
779
+ *
780
+ * @returns Promise resolving when function is done
781
+ *
782
+ * @protected
783
+ */
784
+ async _initModules() {
785
+ const [Graphic] = await loadModules([
786
+ "esri/Graphic"
787
+ ]);
788
+ this.Graphic = Graphic;
789
+ }
790
+ /**
791
+ * Get complete graphic with complete attributes
792
+ * @param graphic selected feature graphic
793
+ * @protected
794
+ */
795
+ async getCompleteGraphic(graphic) {
796
+ const layer = graphic.layer;
797
+ const query = layer.createQuery();
798
+ query.objectIds = [graphic.getObjectId()];
799
+ const completeGraphic = await layer.queryFeatures(query);
800
+ this._selectedGraphic = completeGraphic.features[0];
801
+ }
802
+ /**
803
+ * Checks if the layers is configured for like dislike or not
804
+ * @param selectedLayer Feature layer
805
+ * @returns boolean
806
+ * @protected
807
+ */
808
+ isLikeDislikeConfigured(selectedLayer) {
809
+ let likeFieldAvailable = false;
810
+ let dislikeFieldAvailable = false;
811
+ // check if reporting options are configured for the current selected feature's layer
812
+ if (this.reportingOptions && this.reportingOptions[selectedLayer.id]) {
813
+ //return false if both like and dislike are disabled for the layer
814
+ if (!this.reportingOptions[selectedLayer.id].like && !this.reportingOptions[selectedLayer.id].dislike) {
815
+ return false;
816
+ }
817
+ const likeField = this.reportingOptions[selectedLayer.id].likeField;
818
+ const dislikeField = this.reportingOptions[selectedLayer.id].dislikeField;
819
+ //if both fields are not configured return false
820
+ if (!likeField && !dislikeField) {
821
+ return false;
822
+ }
823
+ selectedLayer.fields.forEach((eachField) => {
824
+ if (this._validFieldTypes.indexOf(eachField.type) > -1) {
825
+ if (eachField.name === likeField && this.reportingOptions[selectedLayer.id].like) {
826
+ likeFieldAvailable = true;
827
+ }
828
+ else if (eachField.name === dislikeField && this.reportingOptions[selectedLayer.id].dislike) {
829
+ dislikeFieldAvailable = true;
830
+ }
831
+ }
832
+ });
833
+ }
834
+ return likeFieldAvailable || dislikeFieldAvailable;
835
+ }
836
+ /**
837
+ * Check if configured like or dislike fields are available in the selected layer
838
+ * @protected
839
+ */
840
+ checkLikeDislikeFields() {
841
+ this._likeFieldAvailable = false;
842
+ this._dislikeFieldAvailable = false;
843
+ this._isLikeBtnClicked = false;
844
+ this._isDislikeBtnClicked = false;
845
+ this._likeCount = 0;
846
+ this._disLikeCount = 0;
847
+ const selectedLayer = this._selectedGraphic.layer;
848
+ // check if reporting options are configured for the current selected feature's layer
849
+ if (this.reportingOptions && this.reportingOptions[selectedLayer.id]) {
850
+ this._likeField = this.reportingOptions[selectedLayer.id].likeField;
851
+ this._dislikeField = this.reportingOptions[selectedLayer.id].dislikeField;
852
+ //if both fields are not found return
853
+ if (!this._likeField && !this._dislikeField) {
854
+ return;
855
+ }
856
+ //Check if selected layer have the configured like and dislike fields
857
+ //also, get the current value for like and dislike field from the attributes
858
+ selectedLayer.fields.forEach((eachField) => {
859
+ if (this._validFieldTypes.indexOf(eachField.type) > -1) {
860
+ if (eachField.name === this._likeField && this.reportingOptions[this._selectedGraphic.layer.id].like) {
861
+ this._likeFieldAvailable = true;
862
+ this._likeCount = this._selectedGraphic.attributes[eachField.name];
863
+ }
864
+ else if (eachField.name === this._dislikeField && this.reportingOptions[this._selectedGraphic.layer.id].dislike) {
865
+ this._dislikeFieldAvailable = true;
866
+ this._disLikeCount = this._selectedGraphic.attributes[eachField.name];
867
+ }
868
+ }
869
+ });
870
+ this.getFromLocalStorage();
871
+ }
872
+ }
873
+ /**
874
+ * On like button click highlight the like button and update the feature
875
+ * @protected
876
+ */
877
+ onLikeButtonClick() {
878
+ this.loadingStatus.emit(true);
879
+ if (this._isDislikeBtnClicked && this.reportingOptions[this._selectedGraphic.layer.id].dislike) {
880
+ this.onDislikeButtonClick();
881
+ }
882
+ this._isLikeBtnClicked = !this._isLikeBtnClicked;
883
+ if (this._isLikeBtnClicked) {
884
+ this._likeCount++;
885
+ }
886
+ else {
887
+ this._likeCount--;
888
+ }
889
+ void this.updateFeaturesLikeDislikeField(this._likeField, this._isLikeBtnClicked);
890
+ }
891
+ /**
892
+ * On dislike button click highlight the dislike button and update the feature
893
+ * @protected
894
+ */
895
+ onDislikeButtonClick() {
896
+ this.loadingStatus.emit(true);
897
+ if (this._isLikeBtnClicked && this.reportingOptions[this._selectedGraphic.layer.id].like) {
898
+ this.onLikeButtonClick();
899
+ }
900
+ this._isDislikeBtnClicked = !this._isDislikeBtnClicked;
901
+ if (this._isDislikeBtnClicked) {
902
+ this._disLikeCount++;
903
+ }
904
+ else {
905
+ this._disLikeCount--;
906
+ }
907
+ void this.updateFeaturesLikeDislikeField(this._dislikeField, this._isDislikeBtnClicked);
908
+ }
909
+ /**
910
+ * Update the feature if user click on like or dislike button
911
+ * @param fieldName field name of the feature for like or dislike attribute
912
+ * @param buttonClicked is like or dislike button clicked
913
+ * @protected
914
+ */
915
+ async updateFeaturesLikeDislikeField(fieldName, buttonClicked) {
916
+ const attributesToUpdate = {};
917
+ const selectedLayer = this._selectedGraphic.layer;
918
+ //Increment the value if button is clicked or else decrement it
919
+ const selectFeatureAttr = this._selectedGraphic;
920
+ if (buttonClicked) {
921
+ selectFeatureAttr.attributes[fieldName] = Number(selectFeatureAttr.attributes[fieldName]) + 1;
922
+ }
923
+ else {
924
+ selectFeatureAttr.attributes[fieldName] = Number(selectFeatureAttr.attributes[fieldName]) - 1;
925
+ }
926
+ //use the oid and like/dislike field value to update
927
+ attributesToUpdate[selectedLayer.objectIdField] = selectFeatureAttr.attributes[selectedLayer.objectIdField];
928
+ attributesToUpdate[fieldName] = selectFeatureAttr.attributes[fieldName];
929
+ const newGraphicInstance = new this.Graphic();
930
+ newGraphicInstance.attributes = attributesToUpdate;
931
+ // Update the feature attribute in the feature layer
932
+ const param = { updateFeatures: [newGraphicInstance] };
933
+ await selectedLayer.applyEdits(param).then(() => {
934
+ this._selectedGraphic = selectFeatureAttr;
935
+ //update the current graphics in info card so that, the updated values are reflected in popup content
936
+ if (this._infoCard) {
937
+ void this._infoCard.updateCurrentGraphic(this._selectedGraphic);
938
+ }
939
+ //store the like dislike value for the current selected graphic in local storage
940
+ this.setInLocalStorage();
941
+ this.loadingStatus.emit(false);
942
+ }, (err) => {
943
+ this.loadingStatus.emit(false);
944
+ console.log(err);
945
+ });
946
+ }
947
+ /**
948
+ * Gets the like/dislike information form local storage and updates the like and dislike button states
949
+ * @protected
950
+ */
951
+ getFromLocalStorage() {
952
+ const uniqueLayerId = this._selectedGraphic.layer.id;
953
+ //get the data from local storage and check current feature is liked or disliked
954
+ const localStorageUser = localStorage[uniqueLayerId];
955
+ if (localStorageUser) {
956
+ const parseArr = JSON.parse(localStorageUser);
957
+ const res = parseArr.filter((arr) => arr.id === this._selectedGraphic.getObjectId());
958
+ if (res.length > 0) {
959
+ this._isLikeBtnClicked = res[0].like;
960
+ this._isDislikeBtnClicked = res[0].dislike;
961
+ }
962
+ }
963
+ }
964
+ /**
965
+ * Sets the like/dislike information for the current selected graphic in local storage
966
+ * @protected
967
+ */
968
+ setInLocalStorage() {
969
+ const uniqueLayerId = this._selectedGraphic.layer.id;
970
+ const localStorageInfo = localStorage[uniqueLayerId];
971
+ let information = [];
972
+ //if information for the current layer found in local storage update it
973
+ //else add new information for the current layer in the local storage
974
+ if (localStorageInfo) {
975
+ information = JSON.parse(localStorageInfo);
976
+ const index = information.findIndex((arr) => arr.id === this._selectedGraphic.getObjectId());
977
+ //if information for current objectid found delete it, so that we always have info for each oid in a layer only once
978
+ if (index >= 0) {
979
+ information.splice(index, 1);
980
+ }
981
+ }
982
+ //add the information for current selected graphic
983
+ information.push({
984
+ id: this._selectedGraphic.getObjectId(),
985
+ like: this._isLikeBtnClicked && this._likeCount !== 0,
986
+ dislike: this._isDislikeBtnClicked && this._disLikeCount !== 0
987
+ });
988
+ localStorage.setItem(uniqueLayerId, JSON.stringify(information));
989
+ }
990
+ get el() { return getElement(this); }
991
+ static get watchers() { return {
992
+ "graphics": ["graphicsWatchHandler"]
993
+ }; }
994
+ };
995
+ FeatureDetails.style = featureDetailsCss;
996
+
686
997
  const featureListCss = ":host{display:block}.width-full{width:100%}.pagination{display:flex;justify-content:center}.error-msg{padding:10px;width:calc(100% - 20px)}.popup-title{font-weight:500;padding:10px 12px}";
687
998
 
688
999
  const FeatureList = class {
@@ -812,7 +1123,20 @@ const FeatureList = class {
812
1123
  const selectedLayerView = await getFeatureLayerView(this.mapView, this.selectedLayerId);
813
1124
  this._highlightHandle = await highlightFeatures([selectedFeatureObjectId], selectedLayerView, this.mapView, true);
814
1125
  }
815
- this.featureSelect.emit(selectedFeature);
1126
+ await this.emitSelectedFeature(selectedFeature);
1127
+ }
1128
+ /**
1129
+ * Emit selected feature with its complete graphics and attributes
1130
+ * @param graphic selected feature graphic
1131
+ * @protected
1132
+ */
1133
+ async emitSelectedFeature(graphic) {
1134
+ const layer = graphic.layer;
1135
+ const query = layer.createQuery();
1136
+ query.returnGeometry = true;
1137
+ query.objectIds = [graphic.getObjectId()];
1138
+ const completeGraphic = await layer.queryFeatures(query);
1139
+ this.featureSelect.emit(completeGraphic.features[0]);
816
1140
  }
817
1141
  /**
818
1142
  * On feature hover in feature list highlight the feature on the map
@@ -1095,4 +1419,4 @@ const LayerList = class {
1095
1419
  };
1096
1420
  LayerList.style = layerListCss;
1097
1421
 
1098
- export { Flow as calcite_flow, FlowItem as calcite_flow_item, CreateFeature as create_feature, FeatureList as feature_list, LayerList as layer_list };
1422
+ export { Flow as calcite_flow, FlowItem as calcite_flow_item, CreateFeature as create_feature, FeatureDetails as feature_details, FeatureList as feature_list, LayerList as layer_list };
@@ -5,8 +5,8 @@
5
5
  */
6
6
  import { r as registerInstance, h, H as Host, g as getElement, c as createEvent } from './index-164d485a.js';
7
7
  import { g as getLocaleComponentStrings, l as loadModules } from './locale-bcbea4ef.js';
8
- import { q as queryFeaturesByID, g as getLayerOrTable, d as goToSelection, e as queryAllIds, f as queryFeatureIds, i as queryFeaturesByGlobalID } from './mapViewUtils-253178f1.js';
9
- import { d as downloadCSV } from './downloadUtils-0c1e4d7b.js';
8
+ import { q as queryFeaturesByID, g as getLayerOrTable, d as goToSelection, e as queryAllIds, f as queryFeatureIds, i as queryFeaturesByGlobalID } from './mapViewUtils-2ec19fb0.js';
9
+ import { d as downloadCSV } from './downloadUtils-df4f21f6.js';
10
10
  import './esri-loader-1b324844.js';
11
11
  import './_commonjsHelpers-0f74c230.js';
12
12
  import './interfaces-586e863c.js';
@@ -301,7 +301,7 @@ const LayerTable = class {
301
301
  * @param evt CustomEvent the graphic for the current selection
302
302
  */
303
303
  async selectionChanged(evt) {
304
- const g = evt.detail[0];
304
+ const g = evt.detail.selectedFeature[0];
305
305
  const oid = g.getObjectId();
306
306
  if (this.zoomAndScrollToSelected) {
307
307
  const i = this._table.viewModel.getObjectIdIndex(oid);
@@ -458,7 +458,7 @@ const LayerTable = class {
458
458
  _getActionBar() {
459
459
  const containerClass = this.isMobile ? "width-full" : "";
460
460
  const mobileClass = this.isMobile ? "border-top" : "";
461
- return (h("calcite-action-bar", { class: containerClass, expandDisabled: true, expanded: true, id: this._getId("bar"), layout: "horizontal" }, h("div", { class: `border-end ${containerClass} ${mobileClass}`, id: "solutions-map-layer-picker-container" }, h("map-layer-picker", { appearance: "transparent", defaultLayerId: this.defaultLayerId, display: "inline-flex", height: 50, isMobile: this.isMobile, mapView: this.mapView, onLayerSelectionChange: (evt) => this._layerSelectionChanged(evt), onlyShowUpdatableLayers: this.onlyShowUpdatableLayers, placeholderIcon: "layers", scale: "l", showSingleLayerAsLabel: true, showTables: true, type: "dropdown" })), !this.isMobile ? this._getActions() : undefined));
461
+ return (h("calcite-action-bar", { class: containerClass, expandDisabled: true, expanded: true, id: this._getId("bar"), layout: "horizontal" }, h("div", { class: `border-end ${containerClass} ${mobileClass}`, id: "solutions-map-layer-picker-container" }, h("map-layer-picker", { appearance: "transparent", defaultLayerId: this.defaultLayerId, display: "inline-flex", height: 50, isMobile: this.isMobile, mapView: this.mapView, onLayerSelectionChange: (evt) => void this._layerSelectionChanged(evt), onlyShowUpdatableLayers: this.onlyShowUpdatableLayers, placeholderIcon: "layers", scale: "l", showSingleLayerAsLabel: true, showTables: true, type: "dropdown" })), !this.isMobile ? this._getActions() : undefined));
462
462
  }
463
463
  /**
464
464
  * Get the actions that are used for various interactions with the table
@@ -1745,7 +1745,7 @@ const MapCard = class {
1745
1745
  }
1746
1746
  else if (loadDefaultMap) {
1747
1747
  this._defaultWebmapHonored = true;
1748
- this._mapPicker.setMapByID(id);
1748
+ void this._mapPicker.setMapByID(id);
1749
1749
  }
1750
1750
  else if (mapConfigChanged) {
1751
1751
  // Map is the same so no need to reload but we need to update for any changes from the config
@@ -6,7 +6,7 @@
6
6
  import { r as registerInstance, h, H as Host, g as getElement } from './index-164d485a.js';
7
7
  import { g as getLocaleComponentStrings } from './locale-bcbea4ef.js';
8
8
  import { E as ELayoutMode } from './interfaces-586e863c.js';
9
- import { g as getLayerOrTable } from './mapViewUtils-253178f1.js';
9
+ import { g as getLayerOrTable } from './mapViewUtils-2ec19fb0.js';
10
10
  import './esri-loader-1b324844.js';
11
11
  import './_commonjsHelpers-0f74c230.js';
12
12
 
@@ -58,6 +58,10 @@ const CrowdsourceManager = class {
58
58
  this.hideMapOnLoad = undefined;
59
59
  this.mapInfos = [];
60
60
  this.onlyShowUpdatableLayers = true;
61
+ this.popupHeaderColor = undefined;
62
+ this.popupHeaderHoverColor = undefined;
63
+ this.popupHeaderHoverTextColor = undefined;
64
+ this.popupHeaderTextColor = undefined;
61
65
  this.searchConfiguration = undefined;
62
66
  this.shareIncludeEmbed = undefined;
63
67
  this.shareIncludeSocial = undefined;