@esri/solutions-components 0.6.12 → 0.6.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/t9n/layer-table/resources.json +4 -3
- package/dist/assets/t9n/layer-table/resources_en.json +4 -3
- package/dist/assets/t9n/map-layer-picker/resources.json +4 -0
- package/dist/assets/t9n/map-layer-picker/resources_en.json +4 -0
- package/dist/cjs/basemap-gallery_6.cjs.entry.js +20 -5
- package/dist/cjs/buffer-tools_4.cjs.entry.js +1 -1
- package/dist/cjs/calcite-chip_3.cjs.entry.js +803 -0
- package/dist/cjs/calcite-combobox_6.cjs.entry.js +76 -28
- package/dist/cjs/calcite-shell-panel_14.cjs.entry.js +2 -1
- package/dist/cjs/card-manager_3.cjs.entry.js +169 -79
- package/dist/cjs/clean-url-d5326abb.js +573 -0
- package/dist/cjs/crowdsource-manager.cjs.entry.js +22 -7
- package/dist/cjs/{downloadUtils-43f5be48.js → downloadUtils-34a515ad.js} +297 -52
- package/dist/cjs/edit-card_2.cjs.entry.js +8 -3
- package/dist/cjs/{index.es-8da43c21.js → index.es-0ba11065.js} +3 -2
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/map-select-tools_3.cjs.entry.js +10 -7
- package/dist/cjs/{mapViewUtils-a4dd36ec.js → mapViewUtils-a2884698.js} +39 -55
- package/dist/cjs/public-notification.cjs.entry.js +7 -6
- package/dist/cjs/{publicNotificationStore-b69862af.js → publicNotificationStore-610bd880.js} +0 -4
- package/dist/cjs/solution-configuration.cjs.entry.js +44 -43
- package/dist/cjs/solution-contents_3.cjs.entry.js +2 -1
- package/dist/cjs/{solution-store-3cd104d8.js → solution-store-c443e657.js} +7 -572
- package/dist/cjs/solutions-components.cjs.js +1 -1
- package/dist/collection/components/basemap-gallery/basemap-gallery.js +23 -1
- package/dist/collection/components/card-manager/card-manager.css +0 -5
- package/dist/collection/components/card-manager/card-manager.js +3 -3
- package/dist/collection/components/crowdsource-manager/crowdsource-manager.css +2 -2
- package/dist/collection/components/crowdsource-manager/crowdsource-manager.js +210 -6
- package/dist/collection/components/edit-card/edit-card.css +8 -0
- package/dist/collection/components/edit-card/edit-card.js +19 -0
- package/dist/collection/components/info-card/info-card.css +14 -14
- package/dist/collection/components/info-card/info-card.js +1 -1
- package/dist/collection/components/layer-table/layer-table.css +12 -0
- package/dist/collection/components/layer-table/layer-table.js +215 -69
- package/dist/collection/components/map-card/map-card.js +115 -5
- package/dist/collection/components/map-layer-picker/map-layer-picker.css +4 -0
- package/dist/collection/components/map-layer-picker/map-layer-picker.js +107 -27
- package/dist/collection/components/map-picker/map-picker.css +5 -1
- package/dist/collection/components/map-picker/map-picker.js +3 -3
- package/dist/collection/components/map-tools/map-tools.js +104 -1
- package/dist/collection/components/pdf-download/pdf-download.js +34 -6
- package/dist/collection/components/public-notification/public-notification.js +3 -3
- package/dist/collection/utils/downloadUtils.js +208 -82
- package/dist/collection/utils/downloadUtils.ts +257 -85
- package/dist/collection/utils/interfaces.ts +12 -1
- package/dist/collection/utils/mapViewUtils.js +38 -52
- package/dist/collection/utils/mapViewUtils.ts +41 -57
- package/dist/collection/utils/publicNotificationStore.js +0 -4
- package/dist/collection/utils/publicNotificationStore.ts +0 -4
- package/dist/collection/utils/test/downloadUtils.spec.js +163 -134
- package/dist/collection/utils/test/downloadUtils.spec.tsx +2 -0
- package/dist/components/basemap-gallery2.js +2 -0
- package/dist/components/calcite-modal.js +1 -409
- package/dist/components/card-manager2.js +4 -4
- package/dist/components/clean-url.js +567 -0
- package/dist/components/crowdsource-manager.js +42 -17
- package/dist/components/downloadUtils.js +295 -50
- package/dist/components/edit-card2.js +6 -1
- package/dist/components/info-card2.js +2 -2
- package/dist/components/layer-table2.js +194 -102
- package/dist/components/map-card2.js +17 -5
- package/dist/components/map-layer-picker2.js +114 -52
- package/dist/components/map-picker2.js +4 -4
- package/dist/components/map-select-tools2.js +55 -43
- package/dist/components/map-tools2.js +20 -1
- package/dist/components/mapViewUtils.js +39 -53
- package/dist/components/modal.js +416 -0
- package/dist/components/pdf-download2.js +6 -4
- package/dist/components/public-notification.js +4 -4
- package/dist/components/publicNotificationStore.js +0 -4
- package/dist/components/refine-selection2.js +61 -49
- package/dist/components/solution-configuration.js +25 -24
- package/dist/components/solution-store.js +2 -562
- package/dist/esm/{ExpandToggle-86761b28.js → ExpandToggle-e614e3e4.js} +1 -1
- package/dist/esm/{ar-4a5375c6.js → ar-2f678abc.js} +8 -8
- package/dist/esm/basemap-gallery_6.entry.js +20 -5
- package/dist/esm/{bg-b25e4b7a.js → bg-e514c4d7.js} +8 -8
- package/dist/esm/{bs-2485dfed.js → bs-81584b09.js} +8 -8
- package/dist/esm/buffer-tools_4.entry.js +5 -5
- package/dist/esm/{ca-bba36d26.js → ca-e8c40e21.js} +8 -8
- package/dist/esm/calcite-accordion-item.entry.js +1 -1
- package/dist/esm/calcite-action-bar_3.entry.js +5 -5
- package/dist/esm/calcite-action-group_2.entry.js +3 -3
- package/dist/esm/calcite-action-pad.entry.js +4 -4
- package/dist/esm/calcite-action_2.entry.js +5 -5
- package/dist/esm/calcite-alert.entry.js +3 -3
- package/dist/esm/calcite-avatar.entry.js +1 -1
- package/dist/esm/calcite-block-section.entry.js +3 -3
- package/dist/esm/calcite-block.entry.js +3 -3
- package/dist/esm/calcite-button.entry.js +5 -5
- package/dist/esm/calcite-card.entry.js +3 -3
- package/dist/esm/calcite-checkbox.entry.js +3 -3
- package/dist/esm/calcite-chip-group.entry.js +1 -1
- package/dist/esm/calcite-chip_3.entry.js +797 -0
- package/dist/esm/calcite-color-picker-hex-input_2.entry.js +1 -1
- package/dist/esm/calcite-color-picker.entry.js +3 -3
- package/dist/esm/calcite-combobox-item-group.entry.js +2 -2
- package/dist/esm/calcite-combobox_6.entry.js +83 -35
- package/dist/esm/calcite-date-picker-day_3.entry.js +3 -3
- package/dist/esm/calcite-date-picker.entry.js +5 -5
- package/dist/esm/calcite-fab.entry.js +1 -1
- package/dist/esm/calcite-filter_3.entry.js +3 -3
- package/dist/esm/calcite-flow-item.entry.js +3 -3
- package/dist/esm/calcite-icon.entry.js +1 -1
- package/dist/esm/calcite-inline-editable.entry.js +4 -4
- package/dist/esm/calcite-input-date-picker.entry.js +9 -9
- package/dist/esm/calcite-input-number_2.entry.js +5 -5
- package/dist/esm/{calcite-input-time-picker-7da2e80a.js → calcite-input-time-picker-fe6e499a.js} +55 -55
- package/dist/esm/calcite-input-time-picker.entry.js +8 -8
- package/dist/esm/calcite-input-time-zone.entry.js +5 -5
- package/dist/esm/calcite-input_2.entry.js +5 -5
- package/dist/esm/calcite-label.entry.js +2 -2
- package/dist/esm/calcite-link.entry.js +1 -1
- package/dist/esm/calcite-menu-item.entry.js +3 -3
- package/dist/esm/calcite-menu.entry.js +3 -3
- package/dist/esm/calcite-modal.entry.js +4 -4
- package/dist/esm/calcite-navigation.entry.js +1 -1
- package/dist/esm/calcite-option_2.entry.js +3 -3
- package/dist/esm/calcite-pagination.entry.js +3 -3
- package/dist/esm/calcite-panel_2.entry.js +3 -3
- package/dist/esm/calcite-pick-list-group.entry.js +1 -1
- package/dist/esm/calcite-pick-list-item.entry.js +3 -3
- package/dist/esm/calcite-pick-list.entry.js +2 -2
- package/dist/esm/calcite-radio-button.entry.js +3 -3
- package/dist/esm/calcite-rating.entry.js +5 -5
- package/dist/esm/calcite-scrim.entry.js +3 -3
- package/dist/esm/calcite-segmented-control_2.entry.js +3 -3
- package/dist/esm/calcite-shell-center-row.entry.js +1 -1
- package/dist/esm/calcite-shell-panel_14.entry.js +7 -6
- package/dist/esm/calcite-sortable-list.entry.js +2 -2
- package/dist/esm/calcite-stepper-item.entry.js +2 -2
- package/dist/esm/calcite-stepper.entry.js +1 -1
- package/dist/esm/calcite-switch.entry.js +3 -3
- package/dist/esm/calcite-text-area.entry.js +5 -5
- package/dist/esm/calcite-tile.entry.js +1 -1
- package/dist/esm/calcite-time-picker.entry.js +4 -4
- package/dist/esm/calcite-tip-manager.entry.js +3 -3
- package/dist/esm/calcite-tip.entry.js +3 -3
- package/dist/esm/calcite-tree_3.entry.js +1 -1
- package/dist/esm/card-manager_3.entry.js +169 -79
- package/dist/esm/clean-url-bce022e6.js +567 -0
- package/dist/esm/crowdsource-manager.entry.js +22 -7
- package/dist/esm/{cs-1052c5ac.js → cs-af5f115e.js} +8 -8
- package/dist/esm/{da-b7ed9204.js → da-06d9e22c.js} +8 -8
- package/dist/esm/{date-bd5b879c.js → date-641ae749.js} +1 -1
- package/dist/esm/{de-at-a993e5ae.js → de-at-f55a700a.js} +8 -8
- package/dist/esm/{de-ch-acff745d.js → de-ch-7307675f.js} +8 -8
- package/dist/esm/{de-bb68e752.js → de-dc98363f.js} +8 -8
- package/dist/esm/{dom-37f2dec9.js → dom-2b326ec3.js} +1 -1
- package/dist/esm/{downloadUtils-42156cd8.js → downloadUtils-ac67a786.js} +297 -52
- package/dist/esm/edit-card_2.entry.js +8 -3
- package/dist/esm/{el-9de96ff0.js → el-91c64808.js} +8 -8
- package/dist/esm/{en-au-f68b6bde.js → en-au-df08cc25.js} +8 -8
- package/dist/esm/{en-ca-5360517e.js → en-ca-175f7c0f.js} +8 -8
- package/dist/esm/{en-gb-de0b3125.js → en-gb-90a08c7f.js} +8 -8
- package/dist/esm/{es-5ecbba77.js → es-5cb54b05.js} +8 -8
- package/dist/esm/{es-mx-aa126462.js → es-mx-3a0cb804.js} +8 -8
- package/dist/esm/{et-7113eeb8.js → et-eceac6dc.js} +8 -8
- package/dist/esm/{fi-ffa60f15.js → fi-26e1c14f.js} +8 -8
- package/dist/esm/{floating-ui-7cde67cf.js → floating-ui-9f8e4ed4.js} +1 -1
- package/dist/esm/{focusTrapComponent-ec344399.js → focusTrapComponent-ad2c3a31.js} +1 -1
- package/dist/esm/{form-24e6ef1d.js → form-0871d2c6.js} +1 -1
- package/dist/esm/{fr-681c5bf6.js → fr-12a5b0f7.js} +8 -8
- package/dist/esm/{fr-ch-9af1f8b1.js → fr-ch-e3406887.js} +8 -8
- package/dist/esm/{he-5188f277.js → he-61eba811.js} +8 -8
- package/dist/esm/{hi-6a31e3a4.js → hi-a50282b5.js} +8 -8
- package/dist/esm/{hr-0598e59d.js → hr-da8bffaf.js} +8 -8
- package/dist/esm/{hu-13cb9f41.js → hu-dab932f1.js} +8 -8
- package/dist/esm/{id-7f342499.js → id-de468947.js} +8 -8
- package/dist/esm/{index.es-f47c4153.js → index.es-f553598f.js} +3 -2
- package/dist/esm/{it-57d790f2.js → it-375d9936.js} +8 -8
- package/dist/esm/{it-ch-081af760.js → it-ch-7e663d63.js} +8 -8
- package/dist/esm/{ja-3affb68e.js → ja-36dbe39d.js} +8 -8
- package/dist/esm/{ko-736632aa.js → ko-858bc871.js} +8 -8
- package/dist/esm/{label-b6dfb4d5.js → label-b8caf984.js} +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{locale-146251f7.js → locale-00000ab4.js} +1 -1
- package/dist/esm/{lt-e7d9b1c3.js → lt-d6dfa7e4.js} +8 -8
- package/dist/esm/{lv-4d1a507e.js → lv-facd25c5.js} +8 -8
- package/dist/esm/map-select-tools_3.entry.js +10 -7
- package/dist/esm/{mapViewUtils-00a04d52.js → mapViewUtils-8141d8c1.js} +39 -53
- package/dist/esm/{mk-f960312d.js → mk-5ed05b6a.js} +8 -8
- package/dist/esm/{nb-4556b5e9.js → nb-936fc687.js} +8 -8
- package/dist/esm/{nl-8e281c01.js → nl-a923d626.js} +8 -8
- package/dist/esm/{pl-1460fd5a.js → pl-b1426275.js} +8 -8
- package/dist/esm/{pt-660332b6.js → pt-1ac2453f.js} +8 -8
- package/dist/esm/{pt-br-dba48f49.js → pt-br-7194cc5f.js} +8 -8
- package/dist/esm/public-notification.entry.js +7 -6
- package/dist/esm/{publicNotificationStore-90a6a274.js → publicNotificationStore-dcf39a55.js} +0 -4
- package/dist/esm/{ro-ac18f292.js → ro-518aaed1.js} +8 -8
- package/dist/esm/{ru-b914f6b7.js → ru-762127a3.js} +8 -8
- package/dist/esm/{shared-list-render-cc889757.js → shared-list-render-ec232615.js} +1 -1
- package/dist/esm/{sk-1be12963.js → sk-f367b7ba.js} +8 -8
- package/dist/esm/{sl-5d47e4e4.js → sl-052fd4d2.js} +8 -8
- package/dist/esm/solution-configuration.entry.js +25 -24
- package/dist/esm/solution-contents_3.entry.js +2 -1
- package/dist/esm/{solution-store-cf902566.js → solution-store-b29d50f7.js} +2 -562
- package/dist/esm/solutions-components.js +1 -1
- package/dist/esm/{sortableComponent-8a84709a.js → sortableComponent-ebd6bb72.js} +1 -1
- package/dist/esm/{sr-3281c92d.js → sr-4dc0fdb9.js} +8 -8
- package/dist/esm/{sv-e5169404.js → sv-bdc87a4d.js} +8 -8
- package/dist/esm/{t9n-d9c203e4.js → t9n-9791aa0c.js} +1 -1
- package/dist/esm/{th-937796b8.js → th-d9df674c.js} +8 -8
- package/dist/esm/{time-fa1151aa.js → time-73378c4a.js} +1 -1
- package/dist/esm/{tr-6d3b100b.js → tr-61e134eb.js} +8 -8
- package/dist/esm/{uk-a6edcacf.js → uk-ea3d8da7.js} +8 -8
- package/dist/esm/{utils-667cc396.js → utils-593fafd7.js} +1 -1
- package/dist/esm/{utils-24a35b5a.js → utils-bd52db7d.js} +2 -2
- package/dist/esm/{vi-bf4c179c.js → vi-ade1c25b.js} +8 -8
- package/dist/esm/{zh-cn-de1858cb.js → zh-cn-b8756118.js} +8 -8
- package/dist/esm/{zh-hk-12fa404f.js → zh-hk-d18c05d9.js} +8 -8
- package/dist/esm/{zh-tw-5c4220e5.js → zh-tw-9c98ff7c.js} +8 -8
- package/dist/solutions-components/{p-3b891cc4.entry.js → p-01fea8d5.entry.js} +1 -1
- package/dist/solutions-components/{p-65022e7f.entry.js → p-02ff64f4.entry.js} +1 -1
- package/dist/solutions-components/p-062254a6.entry.js +6 -0
- package/dist/solutions-components/{p-bff158ff.js → p-062d2f9a.js} +1 -1
- package/dist/solutions-components/{p-f4e5b7e5.entry.js → p-084bced1.entry.js} +1 -1
- package/dist/solutions-components/{p-c261335b.entry.js → p-088e4cfc.entry.js} +1 -1
- package/dist/solutions-components/p-08b52ed8.entry.js +6 -0
- package/dist/solutions-components/{p-96239d0d.js → p-08e35485.js} +1 -1
- package/dist/solutions-components/{p-3d3772fb.js → p-0d14d33a.js} +1 -1
- package/dist/solutions-components/{p-7f271c31.js → p-11550b3c.js} +3 -3
- package/dist/solutions-components/{p-ad19f9b0.entry.js → p-120c4098.entry.js} +1 -1
- package/dist/solutions-components/{p-45419d93.entry.js → p-12bcd474.entry.js} +1 -1
- package/dist/solutions-components/{p-bd82849c.entry.js → p-1597ec4b.entry.js} +1 -1
- package/dist/solutions-components/p-16362eb4.js +36 -0
- package/dist/solutions-components/{p-afb35c95.js → p-17d176b5.js} +14 -43
- package/dist/solutions-components/{p-3691a072.js → p-1ab414e0.js} +2 -2
- package/dist/solutions-components/{p-127c3866.js → p-1c5787b1.js} +1 -1
- package/dist/solutions-components/{p-b97886b3.entry.js → p-1d9a5198.entry.js} +1 -1
- package/dist/solutions-components/{p-8e3e1ce8.entry.js → p-1dd5c4e6.entry.js} +1 -1
- package/dist/solutions-components/{p-97b69f54.entry.js → p-1e62d118.entry.js} +1 -1
- package/dist/solutions-components/{p-537c34a4.entry.js → p-1fae3819.entry.js} +1 -1
- package/dist/solutions-components/{p-82f0b25b.js → p-21aa112d.js} +1 -1
- package/dist/solutions-components/{p-f8944f59.entry.js → p-252a9a7f.entry.js} +1 -1
- package/dist/solutions-components/{p-80ea5869.js → p-26b28806.js} +1 -1
- package/dist/solutions-components/{p-dac10448.js → p-280fd963.js} +3 -3
- package/dist/solutions-components/{p-79d7f324.js → p-29049359.js} +1 -1
- package/dist/solutions-components/{p-c033b8ec.entry.js → p-2b378389.entry.js} +1 -1
- package/dist/solutions-components/{p-19ec0463.js → p-2bdd1a5d.js} +1 -1
- package/dist/solutions-components/{p-cacfa6ae.js → p-2ee21e9d.js} +1 -1
- package/dist/solutions-components/{p-300f4299.js → p-2f42ae51.js} +1 -1
- package/dist/solutions-components/{p-418be467.js → p-30b3261c.js} +1 -1
- package/dist/solutions-components/{p-4d91443a.entry.js → p-32ba2223.entry.js} +1 -1
- package/dist/solutions-components/{p-702c6093.js → p-34673137.js} +1 -1
- package/dist/solutions-components/{p-61af54b9.entry.js → p-3566ee69.entry.js} +1 -1
- package/dist/solutions-components/{p-90a9126f.js → p-358b9cc8.js} +1 -1
- package/dist/solutions-components/p-3a8d82a2.js +11 -0
- package/dist/solutions-components/{p-628c170b.entry.js → p-3ab94526.entry.js} +1 -1
- package/dist/solutions-components/{p-9791fbf1.entry.js → p-3d7aa1b2.entry.js} +1 -1
- package/dist/solutions-components/{p-b1daad7e.js → p-3f7119c1.js} +1 -1
- package/dist/solutions-components/{p-f0f5ecb2.js → p-3fcd035e.js} +1 -1
- package/dist/solutions-components/{p-3766be72.js → p-419c9d89.js} +1 -1
- package/dist/solutions-components/p-453d1b31.entry.js +6 -0
- package/dist/solutions-components/{p-337f6adf.js → p-46918548.js} +1 -1
- package/dist/solutions-components/p-49e9e4e3.js +12 -0
- package/dist/solutions-components/p-4d942b0f.entry.js +36 -0
- package/dist/solutions-components/{p-85e0d2a3.js → p-4fc92419.js} +1 -1
- package/dist/solutions-components/{p-0d08a75d.entry.js → p-52afbe07.entry.js} +1 -1
- package/dist/solutions-components/{p-9391bb74.js → p-573d0763.js} +1 -1
- package/dist/solutions-components/p-57cf6784.entry.js +6 -0
- package/dist/solutions-components/{p-87971116.entry.js → p-59ef9461.entry.js} +1 -1
- package/dist/solutions-components/{p-25718b9f.entry.js → p-5e5749c0.entry.js} +1 -1
- package/dist/solutions-components/{p-54064b61.entry.js → p-5ff22d2e.entry.js} +1 -1
- package/dist/solutions-components/{p-4bd793ef.entry.js → p-617f32a0.entry.js} +1 -1
- package/dist/solutions-components/p-64b22d57.entry.js +6 -0
- package/dist/solutions-components/{p-747a1293.js → p-6510c06c.js} +1 -1
- package/dist/solutions-components/p-654dd5df.entry.js +6 -0
- package/dist/solutions-components/{p-1f69762c.js → p-65ba4d10.js} +1 -1
- package/dist/solutions-components/{p-4cb7cdb7.entry.js → p-65ffe4b0.entry.js} +1 -1
- package/dist/solutions-components/{p-1b4d6511.js → p-68007503.js} +1 -1
- package/dist/solutions-components/{p-e849d2ba.entry.js → p-6ba8483c.entry.js} +2 -2
- package/dist/solutions-components/{p-9961a2f9.entry.js → p-6c8c7b98.entry.js} +2 -2
- package/dist/solutions-components/{p-ff863f3d.entry.js → p-6e5d9ae9.entry.js} +1 -1
- package/dist/solutions-components/{p-b6a1c34f.entry.js → p-6ebf870c.entry.js} +1 -1
- package/dist/solutions-components/{p-d2d3e4b5.js → p-72f34a0a.js} +1 -1
- package/dist/solutions-components/{p-981fc8e4.entry.js → p-7359a6ac.entry.js} +1 -1
- package/dist/solutions-components/{p-9abb1c4c.entry.js → p-73fe6f7e.entry.js} +1 -1
- package/dist/solutions-components/{p-62e3adbb.js → p-7452d79a.js} +1 -1
- package/dist/solutions-components/{p-34169501.js → p-76c2c379.js} +1 -1
- package/dist/solutions-components/{p-941721ba.js → p-788aa5d7.js} +1 -1
- package/dist/solutions-components/{p-557d4cc5.js → p-79cc0531.js} +2 -2
- package/dist/solutions-components/{p-a19d8147.js → p-7a0fa011.js} +1 -1
- package/dist/solutions-components/{p-019fe9fe.entry.js → p-7a55cee6.entry.js} +3 -3
- package/dist/solutions-components/{p-48329056.entry.js → p-7bc63171.entry.js} +1 -1
- package/dist/solutions-components/{p-e7304151.entry.js → p-81664d83.entry.js} +1 -1
- package/dist/solutions-components/{p-9504c1b7.js → p-8354f486.js} +1 -1
- package/dist/solutions-components/{p-f812e3ee.entry.js → p-84dff306.entry.js} +1 -1
- package/dist/solutions-components/{p-a59dba2f.js → p-8594fe6b.js} +1 -1
- package/dist/solutions-components/{p-ae3ec77d.js → p-8b2d396e.js} +1 -1
- package/dist/solutions-components/{p-38cc8a4d.js → p-8ec6ea34.js} +1 -1
- package/dist/solutions-components/{p-da760d1d.entry.js → p-8ee00658.entry.js} +1 -1
- package/dist/solutions-components/{p-38211628.js → p-905fcf73.js} +1 -1
- package/dist/solutions-components/{p-e502ccce.entry.js → p-929909bc.entry.js} +1 -1
- package/dist/solutions-components/{p-dd5f68f2.js → p-948b5722.js} +1 -1
- package/dist/solutions-components/{p-39fe9a4c.js → p-956f3207.js} +1 -1
- package/dist/solutions-components/{p-f7aa542c.js → p-96287d23.js} +1 -1
- package/dist/solutions-components/{p-68630513.entry.js → p-964c0e7d.entry.js} +1 -1
- package/dist/solutions-components/{p-b09d8c0e.entry.js → p-98051370.entry.js} +1 -1
- package/dist/solutions-components/{p-efd70bf7.entry.js → p-9a94f48c.entry.js} +2 -2
- package/dist/solutions-components/{p-318790b8.js → p-9b94501c.js} +1 -1
- package/dist/solutions-components/{p-69e26726.js → p-9d4467a3.js} +1 -1
- package/dist/solutions-components/{p-f6cf9943.js → p-9e3c9cd2.js} +1 -1
- package/dist/solutions-components/{p-30542275.js → p-9fd59203.js} +1 -1
- package/dist/solutions-components/{p-d902b790.js → p-a201bffc.js} +1 -1
- package/dist/solutions-components/{p-89cbb86a.js → p-a26711e8.js} +3 -3
- package/dist/solutions-components/{p-1552c479.entry.js → p-a3729795.entry.js} +1 -1
- package/dist/solutions-components/{p-ae4ad673.entry.js → p-a47ed290.entry.js} +2 -2
- package/dist/solutions-components/{p-ca5be55f.entry.js → p-a5ef322f.entry.js} +2 -2
- package/dist/solutions-components/{p-3658ebd8.entry.js → p-a97e8d6a.entry.js} +1 -1
- package/dist/solutions-components/{p-2937523d.js → p-aaea9203.js} +1 -1
- package/dist/solutions-components/{p-b7093e6d.entry.js → p-ad1d56b1.entry.js} +1 -1
- package/dist/solutions-components/{p-0ca528ec.js → p-adeb0e8f.js} +1 -1
- package/dist/solutions-components/{p-31d2a105.entry.js → p-af63959a.entry.js} +1 -1
- package/dist/solutions-components/{p-fbd71543.entry.js → p-b1125581.entry.js} +2 -2
- package/dist/solutions-components/p-b1c8c6d7.entry.js +6 -0
- package/dist/solutions-components/{p-b029c6d8.js → p-b20a31c8.js} +1 -1
- package/dist/solutions-components/{p-71400268.js → p-b81131b3.js} +1 -1
- package/dist/solutions-components/{p-cc624b0c.entry.js → p-b89c5865.entry.js} +1 -1
- package/dist/solutions-components/{p-245d667e.js → p-b9b52743.js} +1 -1
- package/dist/solutions-components/p-b9d29f30.entry.js +6 -0
- package/dist/solutions-components/{p-0870f436.entry.js → p-ba99e562.entry.js} +1 -1
- package/dist/solutions-components/{p-2d614afc.js → p-bc548c06.js} +1 -1
- package/dist/solutions-components/{p-29b2f046.js → p-bccbdeb5.js} +1 -1
- package/dist/solutions-components/{p-f72e0965.entry.js → p-bd318e33.entry.js} +1 -1
- package/dist/solutions-components/{p-74aa84f6.js → p-bd766e49.js} +1 -1
- package/dist/solutions-components/{p-9b75102b.entry.js → p-c073d2d6.entry.js} +1 -1
- package/dist/solutions-components/p-c6b7e7ff.js +11 -0
- package/dist/solutions-components/{p-0503c78d.js → p-c8d0ce92.js} +44 -29
- package/dist/solutions-components/{p-dc80cb69.entry.js → p-ca0b3a2b.entry.js} +1 -1
- package/dist/solutions-components/{p-e9fcf408.js → p-d5228aed.js} +1 -1
- package/dist/solutions-components/{p-80b87453.js → p-d98caa4c.js} +1 -1
- package/dist/solutions-components/{p-45b829b5.js → p-dd9c065e.js} +1 -1
- package/dist/solutions-components/{p-05b2bdf9.js → p-dedc167c.js} +1 -1
- package/dist/solutions-components/{p-a16feeec.js → p-e4f9b782.js} +1 -1
- package/dist/solutions-components/{p-ac1bd870.entry.js → p-e572a692.entry.js} +1 -1
- package/dist/solutions-components/{p-74521615.entry.js → p-e5dda947.entry.js} +1 -1
- package/dist/solutions-components/{p-d793ec96.entry.js → p-e76949eb.entry.js} +5 -5
- package/dist/solutions-components/{p-bbfc2724.js → p-e7fbf2fe.js} +1 -1
- package/dist/solutions-components/{p-dda325a4.entry.js → p-e9ba0c7f.entry.js} +1 -1
- package/dist/solutions-components/{p-75e707d1.js → p-eb60ec2a.js} +1 -1
- package/dist/solutions-components/p-ecc95259.js +20 -0
- package/dist/solutions-components/{p-85791b16.entry.js → p-ee144348.entry.js} +1 -1
- package/dist/solutions-components/p-ee7e2f00.entry.js +34 -0
- package/dist/solutions-components/{p-4b4559f9.js → p-f03bed0c.js} +1 -1
- package/dist/solutions-components/{p-7a11983d.js → p-f5028a8e.js} +1 -1
- package/dist/solutions-components/{p-fb23ba4a.entry.js → p-f50cf603.entry.js} +1 -1
- package/dist/solutions-components/{p-f7b520ae.js → p-f7d8b6b3.js} +1 -1
- package/dist/solutions-components/{p-792fcd62.entry.js → p-fb0f2016.entry.js} +1 -1
- package/dist/solutions-components/solutions-components.esm.js +1 -1
- package/dist/solutions-components/utils/downloadUtils.ts +257 -85
- package/dist/solutions-components/utils/interfaces.ts +12 -1
- package/dist/solutions-components/utils/mapViewUtils.ts +41 -57
- package/dist/solutions-components/utils/publicNotificationStore.ts +0 -4
- package/dist/solutions-components/utils/test/downloadUtils.spec.tsx +2 -0
- package/dist/types/components/basemap-gallery/basemap-gallery.d.ts +5 -0
- package/dist/types/components/crowdsource-manager/crowdsource-manager.d.ts +45 -1
- package/dist/types/components/edit-card/edit-card.d.ts +8 -0
- package/dist/types/components/layer-table/layer-table.d.ts +82 -26
- package/dist/types/components/map-card/map-card.d.ts +25 -1
- package/dist/types/components/map-layer-picker/map-layer-picker.d.ts +50 -3
- package/dist/types/components/map-picker/map-picker.d.ts +2 -2
- package/dist/types/components/map-tools/map-tools.d.ts +21 -1
- package/dist/types/components/pdf-download/pdf-download.d.ts +4 -2
- package/dist/types/components.d.ts +218 -4
- package/dist/types/preact.d.ts +6 -3
- package/dist/types/utils/downloadUtils.d.ts +34 -16
- package/dist/types/utils/interfaces.d.ts +10 -1
- package/dist/types/utils/mapViewUtils.d.ts +8 -24
- package/dist/types/utils/publicNotificationStore.d.ts +0 -2
- package/package.json +8 -9
- package/dist/cjs/calcite-chip.cjs.entry.js +0 -259
- package/dist/cjs/calcite-notice.cjs.entry.js +0 -139
- package/dist/cjs/calcite-tooltip.cjs.entry.js +0 -439
- package/dist/esm/calcite-chip.entry.js +0 -255
- package/dist/esm/calcite-notice.entry.js +0 -135
- package/dist/esm/calcite-tooltip.entry.js +0 -435
- package/dist/solutions-components/p-06712292.js +0 -11
- package/dist/solutions-components/p-0a0c3764.js +0 -11
- package/dist/solutions-components/p-12a7c2db.entry.js +0 -6
- package/dist/solutions-components/p-1a47516a.entry.js +0 -22
- package/dist/solutions-components/p-2cff8331.entry.js +0 -6
- package/dist/solutions-components/p-3a7cd2b0.entry.js +0 -37
- package/dist/solutions-components/p-3e9fc0aa.entry.js +0 -11
- package/dist/solutions-components/p-712ea336.entry.js +0 -11
- package/dist/solutions-components/p-767002cd.js +0 -36
- package/dist/solutions-components/p-8e9d9e6a.js +0 -12
- package/dist/solutions-components/p-97088307.entry.js +0 -6
- package/dist/solutions-components/p-a16e6f5f.entry.js +0 -6
- package/dist/solutions-components/p-d118a76e.entry.js +0 -6
- package/dist/solutions-components/p-d54c2dfd.entry.js +0 -6
- package/dist/solutions-components/p-d7d466e8.entry.js +0 -6
- package/dist/solutions-components/p-ffbe89cf.entry.js +0 -6
|
@@ -23,26 +23,44 @@ import { exportCSV } from "./csvUtils";
|
|
|
23
23
|
import { exportPDF } from "./pdfUtils";
|
|
24
24
|
import { loadModules } from "./loadModules";
|
|
25
25
|
import { queryFeaturesByID } from "./queryUtils";
|
|
26
|
+
//import * as common from "@esri/solution-common";
|
|
26
27
|
export { ILabel } from "./pdfUtils";
|
|
27
28
|
const lineSeparatorChar = "|";
|
|
29
|
+
import { queryRelated } from "@esri/arcgis-rest-feature-layer";
|
|
30
|
+
/**
|
|
31
|
+
* Get the related records for a feature service.
|
|
32
|
+
*
|
|
33
|
+
* @param url Feature service's URL, e.g., layer.url
|
|
34
|
+
* @param relationshipId Id of relationship
|
|
35
|
+
* @param objectIds Objects in the feature service whose related records are sought
|
|
36
|
+
*/
|
|
37
|
+
export function getFeatureServiceRelatedRecords(url, relationshipId, objectIds) {
|
|
38
|
+
const options = {
|
|
39
|
+
url: url + `/${relationshipId}`,
|
|
40
|
+
relationshipId,
|
|
41
|
+
objectIds
|
|
42
|
+
};
|
|
43
|
+
return queryRelated(options);
|
|
44
|
+
}
|
|
28
45
|
//#endregion
|
|
29
46
|
// ------------------------------------------------------------------------------------------------------------------ //
|
|
30
47
|
//#region Public functions
|
|
31
48
|
/**
|
|
32
49
|
* Create and consolidate labels from all layers
|
|
33
50
|
*
|
|
51
|
+
* @param webmap Webmap containing layer
|
|
34
52
|
* @param exportInfos Key details about what to export (ids, layer, and selectionSetNames)
|
|
35
53
|
* @param formatUsingLayerPopup When true, the layer's popup is used to choose attributes for each column; when false,
|
|
36
54
|
* all attributes are exported
|
|
37
55
|
* @param includeHeaderNames Add the label format at the front of the list of generated labels
|
|
38
56
|
* @returns selectionSetNames that will be used for export filenames
|
|
39
57
|
*/
|
|
40
|
-
export async function consolidateLabels(exportInfos, formatUsingLayerPopup = true, includeHeaderNames = false, isCSVExport = false) {
|
|
58
|
+
export async function consolidateLabels(webmap, exportInfos, formatUsingLayerPopup = true, includeHeaderNames = false, isCSVExport = false) {
|
|
41
59
|
const labelRequests = [];
|
|
42
60
|
Object.keys(exportInfos).forEach(k => {
|
|
43
61
|
var _a;
|
|
44
62
|
const labelInfo = exportInfos[k];
|
|
45
|
-
labelRequests.push(_prepareLabels(((_a = labelInfo.layerView) === null || _a === void 0 ? void 0 : _a.layer) || labelInfo.layer, labelInfo.ids, formatUsingLayerPopup, includeHeaderNames));
|
|
63
|
+
labelRequests.push(_prepareLabels(webmap, ((_a = labelInfo.layerView) === null || _a === void 0 ? void 0 : _a.layer) || labelInfo.layer, labelInfo.ids, formatUsingLayerPopup, includeHeaderNames));
|
|
46
64
|
if (isCSVExport) {
|
|
47
65
|
// add the layer id as a temp value separator that we can use to split values for CSV export
|
|
48
66
|
labelRequests.push(Promise.resolve([[k]]));
|
|
@@ -54,6 +72,7 @@ export async function consolidateLabels(exportInfos, formatUsingLayerPopup = tru
|
|
|
54
72
|
/**
|
|
55
73
|
* Downloads csv of mailing labels for the provided list of ids
|
|
56
74
|
*
|
|
75
|
+
* @param webmap Webmap containing layer
|
|
57
76
|
* @param exportInfos Key details about what to export (ids, layer, and selectionSetNames)
|
|
58
77
|
* @param formatUsingLayerPopup When true, the layer's popup is used to choose attributes for each column; when false,
|
|
59
78
|
* all attributes are exported
|
|
@@ -61,8 +80,8 @@ export async function consolidateLabels(exportInfos, formatUsingLayerPopup = tru
|
|
|
61
80
|
* @param addColumnTitle Indicates if column headings should be included in output
|
|
62
81
|
* @returns Promise resolving when function is done
|
|
63
82
|
*/
|
|
64
|
-
export async function downloadCSV(exportInfos, formatUsingLayerPopup, removeDuplicates = false, addColumnTitle = false) {
|
|
65
|
-
let labels = await consolidateLabels(exportInfos, formatUsingLayerPopup, addColumnTitle, true);
|
|
83
|
+
export async function downloadCSV(webmap, exportInfos, formatUsingLayerPopup, removeDuplicates = false, addColumnTitle = false) {
|
|
84
|
+
let labels = await consolidateLabels(webmap, exportInfos, formatUsingLayerPopup, addColumnTitle, true);
|
|
66
85
|
labels = removeDuplicates ? removeDuplicateLabels(labels) : labels;
|
|
67
86
|
const layerIds = Object.keys(exportInfos);
|
|
68
87
|
let layerLabels = [];
|
|
@@ -84,6 +103,7 @@ export async function downloadCSV(exportInfos, formatUsingLayerPopup, removeDupl
|
|
|
84
103
|
/**
|
|
85
104
|
* Downloads csv of mailing labels for the provided list of ids
|
|
86
105
|
*
|
|
106
|
+
* @param webmap Webmap containing layer
|
|
87
107
|
* @param exportInfos Key details about what to export (ids, layer, and selectionSetNames)
|
|
88
108
|
* @param labelPageDescription Provides PDF page layout info
|
|
89
109
|
* @param removeDuplicates When true a single label is generated when multiple featues have a shared address value
|
|
@@ -91,8 +111,8 @@ export async function downloadCSV(exportInfos, formatUsingLayerPopup, removeDupl
|
|
|
91
111
|
* @param initialImageDataUrl Data URL of image for first page
|
|
92
112
|
* @returns Promise resolving when function is done
|
|
93
113
|
*/
|
|
94
|
-
export async function downloadPDF(exportInfos, labelPageDescription, removeDuplicates = false, title = "", initialImageDataUrl = "") {
|
|
95
|
-
let labels = await consolidateLabels(exportInfos);
|
|
114
|
+
export async function downloadPDF(webmap, exportInfos, labelPageDescription, removeDuplicates = false, title = "", initialImageDataUrl = "") {
|
|
115
|
+
let labels = await consolidateLabels(webmap, exportInfos);
|
|
96
116
|
const selectionSetNames = _getSelectionSetNames(exportInfos);
|
|
97
117
|
labels =
|
|
98
118
|
// Remove empty lines in labels
|
|
@@ -224,6 +244,87 @@ export async function _convertPopupArcadeToLabelSpec(expressionInfo) {
|
|
|
224
244
|
format: executor
|
|
225
245
|
});
|
|
226
246
|
}
|
|
247
|
+
/**
|
|
248
|
+
* Extracts Arcade expressions from the lines of a label format and creates an Arcade executor for each
|
|
249
|
+
* referenced expression name.
|
|
250
|
+
*
|
|
251
|
+
* @param labelFormat Label to examine
|
|
252
|
+
* @param layer Layer from which to fetch features
|
|
253
|
+
* @return Promise resolving to a set of executors keyed using the expression name
|
|
254
|
+
*/
|
|
255
|
+
/*
|
|
256
|
+
async function _createArcadeExecutors(
|
|
257
|
+
labelFormat: string,
|
|
258
|
+
layer: __esri.FeatureLayer
|
|
259
|
+
): Promise<IArcadeExecutors> {
|
|
260
|
+
const arcadeExecutors: IArcadeExecutors = {};
|
|
261
|
+
|
|
262
|
+
// Are any Arcade expressions in the layer?
|
|
263
|
+
if (!Array.isArray(layer.popupTemplate.expressionInfos) || layer.popupTemplate.expressionInfos.length === 0) {
|
|
264
|
+
return Promise.resolve(arcadeExecutors);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// Are there any Arcade expressions in the label format?
|
|
268
|
+
const arcadeExpressionRegExp = /\{expression\/\w+\}/g;
|
|
269
|
+
const arcadeExpressionsMatches = labelFormat.match(arcadeExpressionRegExp);
|
|
270
|
+
if (!arcadeExpressionsMatches) {
|
|
271
|
+
return Promise.resolve(arcadeExecutors);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// Generate an Arcade executor for each match
|
|
275
|
+
const [arcade] = await loadModules(["esri/arcade"]);
|
|
276
|
+
const labelingProfile: __esri.Profile = {
|
|
277
|
+
variables: [
|
|
278
|
+
{
|
|
279
|
+
name: "$feature",
|
|
280
|
+
type: "feature"
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
name: "$layer",
|
|
284
|
+
type: "featureSet"
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
name: "$datastore",
|
|
288
|
+
type: "featureSetCollection"
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
name: "$map",
|
|
292
|
+
type: "featureSetCollection"
|
|
293
|
+
}
|
|
294
|
+
]
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
const createArcadeExecutorPromises: IArcadeExecutorPromises = {};
|
|
298
|
+
arcadeExpressionsMatches.forEach(
|
|
299
|
+
(match: string) => {
|
|
300
|
+
const expressionName = match.substring(match.indexOf("/") + 1, match.length - 1);
|
|
301
|
+
|
|
302
|
+
(layer.popupTemplate.expressionInfos || []).forEach(
|
|
303
|
+
expressionInfo => {
|
|
304
|
+
if (expressionInfo.name === expressionName) {
|
|
305
|
+
createArcadeExecutorPromises[expressionName] =
|
|
306
|
+
arcade.createArcadeExecutor(expressionInfo.expression, labelingProfile);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
);
|
|
310
|
+
}
|
|
311
|
+
);
|
|
312
|
+
|
|
313
|
+
const promises = Object.values(createArcadeExecutorPromises);
|
|
314
|
+
return Promise.all(promises)
|
|
315
|
+
.then(
|
|
316
|
+
executors => {
|
|
317
|
+
const expressionNames = Object.keys(createArcadeExecutorPromises);
|
|
318
|
+
|
|
319
|
+
for (let i = 0; i < expressionNames.length; ++i) {
|
|
320
|
+
arcadeExecutors[expressionNames[i]] = executors[i].valueOf() as __esri.ArcadeExecutor;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
return arcadeExecutors;
|
|
324
|
+
}
|
|
325
|
+
);
|
|
326
|
+
}
|
|
327
|
+
*/
|
|
227
328
|
/**
|
|
228
329
|
* Creates a title from a list of selection set names.
|
|
229
330
|
*
|
|
@@ -236,38 +337,6 @@ export function _createFilename(selectionSetNames) {
|
|
|
236
337
|
const title = selectionSetNames.length > 0 ? selectionSetNames.join(", ") : "download";
|
|
237
338
|
return title;
|
|
238
339
|
}
|
|
239
|
-
/**
|
|
240
|
-
* Creates relationship queries for each relationship flag in a popup.
|
|
241
|
-
* @param layer Layer whose popup is to be examined
|
|
242
|
-
* @return Hash of relationships by their id, or null if there are no relationship flags in the
|
|
243
|
-
* popup; each relationship has the properties layer and relatedQuery for the related layer
|
|
244
|
-
* and the query for that layer
|
|
245
|
-
*/
|
|
246
|
-
export function _createRelationshipQueries(layer) {
|
|
247
|
-
const relationships = {};
|
|
248
|
-
const relationshipFieldPattern = /\{relationships\/\d+\//gm;
|
|
249
|
-
const relationshipIdPattern = /\d+/;
|
|
250
|
-
// Test if this popup has any relationship references
|
|
251
|
-
const matches = layer.popupTemplate.content[0].text.match(relationshipFieldPattern);
|
|
252
|
-
if (matches) {
|
|
253
|
-
matches.forEach(match => {
|
|
254
|
-
// Add a query to a found relationship if we don't already have one
|
|
255
|
-
const id = match.match(relationshipIdPattern)[0];
|
|
256
|
-
if (!relationships.hasOwnProperty(id)) {
|
|
257
|
-
const relatedQuery = {
|
|
258
|
-
outFields: ['*'],
|
|
259
|
-
relationshipId: id,
|
|
260
|
-
returnGeometry: false
|
|
261
|
-
};
|
|
262
|
-
relationships[id] = {
|
|
263
|
-
layer,
|
|
264
|
-
relatedQuery
|
|
265
|
-
};
|
|
266
|
-
}
|
|
267
|
-
});
|
|
268
|
-
}
|
|
269
|
-
return relationships;
|
|
270
|
-
}
|
|
271
340
|
/**
|
|
272
341
|
* Extracts Arcade expression references from the lines of a label format.
|
|
273
342
|
*
|
|
@@ -319,52 +388,73 @@ export function _getFieldNamesFromFieldExpressions(fieldExpressions) {
|
|
|
319
388
|
/**
|
|
320
389
|
* Extracts the label format from the layer.
|
|
321
390
|
*
|
|
391
|
+
* @param webmap Webmap containing layer
|
|
322
392
|
* @param layer Layer with label format
|
|
323
393
|
* @param formatUsingLayerPopup When true, the layer's popup is used to choose attributes for each column; when false,
|
|
324
394
|
* all attributes are exported
|
|
325
|
-
* @param attributeFormats Empty object to hold the formats for each attribute in a feature; the object is filled
|
|
326
|
-
* with formats by this function
|
|
327
395
|
* @returns A Promise resolving to the format of a single label with fields coerced to lowercase, e.g.,
|
|
328
|
-
* for
|
|
396
|
+
* for ILabelFormatProps type "pattern": "{name}|{street}|{city}, {state} {zip}"
|
|
329
397
|
*/
|
|
330
|
-
export async function _getLabelFormat(layer, formatUsingLayerPopup
|
|
331
|
-
var _a, _b
|
|
332
|
-
let
|
|
333
|
-
|
|
334
|
-
|
|
398
|
+
export async function _getLabelFormat(webmap, layer, formatUsingLayerPopup) {
|
|
399
|
+
var _a, _b;
|
|
400
|
+
let labelFormatProps = {
|
|
401
|
+
layer,
|
|
402
|
+
attributeFormats: {},
|
|
403
|
+
relationshipId: undefined,
|
|
404
|
+
labelFormat: {
|
|
405
|
+
type: "unsupported",
|
|
406
|
+
format: undefined
|
|
407
|
+
}
|
|
335
408
|
};
|
|
336
409
|
if (layer.popupEnabled) {
|
|
337
410
|
layer.popupTemplate.fieldInfos.forEach(
|
|
338
411
|
// Extract any format info that we have
|
|
339
412
|
fieldInfo => {
|
|
340
413
|
if (fieldInfo.format) {
|
|
341
|
-
attributeFormats[fieldInfo.fieldName.toLowerCase()] = fieldInfo.format;
|
|
414
|
+
labelFormatProps.attributeFormats[fieldInfo.fieldName.toLowerCase()] = fieldInfo.format;
|
|
342
415
|
}
|
|
343
416
|
});
|
|
344
417
|
// What is the nature of the label content?
|
|
345
418
|
// Fields list
|
|
346
|
-
if (formatUsingLayerPopup
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
419
|
+
if (formatUsingLayerPopup) {
|
|
420
|
+
const labelFormatType = (_b = (_a = layer.popupTemplate) === null || _a === void 0 ? void 0 : _a.content[0]) === null || _b === void 0 ? void 0 : _b.type;
|
|
421
|
+
if (labelFormatType === "relationship") {
|
|
422
|
+
const relationshipId = layer.popupTemplate.content[0].relationshipId;
|
|
423
|
+
const webmapLayers = webmap.layers.toArray().concat(webmap.tables.toArray())
|
|
424
|
+
.filter((entry) => entry.type === "feature"
|
|
425
|
+
&& entry.id !== layer.id
|
|
426
|
+
&& entry.relationships
|
|
427
|
+
&& entry.relationships.some(relationship => relationship.id === relationshipId));
|
|
428
|
+
labelFormatProps = await _getLabelFormat(webmap, webmapLayers[0], formatUsingLayerPopup);
|
|
429
|
+
labelFormatProps.relationshipId = relationshipId;
|
|
430
|
+
}
|
|
431
|
+
else if (labelFormatType === "fields") {
|
|
432
|
+
labelFormatProps.labelFormat = _convertPopupFieldsToLabelSpec(layer.popupTemplate.fieldInfos);
|
|
433
|
+
// If popup is configured with "no attribute information", then no fields will visible
|
|
434
|
+
if (labelFormatProps.labelFormat.format.length === 0) {
|
|
435
|
+
// Can we use the popup title?
|
|
436
|
+
labelFormatProps.labelFormat = layer.popupTemplate.title && typeof layer.popupTemplate.title === "string" ?
|
|
437
|
+
{ type: "pattern", format: layer.popupTemplate.title }
|
|
438
|
+
:
|
|
439
|
+
// Otherwise revert to using attributes
|
|
440
|
+
_convertPopupFieldsToLabelSpec(layer.popupTemplate.fieldInfos, true);
|
|
441
|
+
}
|
|
442
|
+
// Example text: '<p>{name} {age} years </p><p>started: {start}</p>'
|
|
443
|
+
}
|
|
444
|
+
else if (labelFormatType === "text") {
|
|
445
|
+
labelFormatProps.labelFormat = _convertPopupTextToLabelSpec(layer.popupTemplate.content[0].text);
|
|
446
|
+
// Example expression: 'var feat = $feature\nvar label = `\n\t${feat["name"]} ${feat["age"]} years <br>\n\tstarted: ${feat["start"]}\n`\n\nreturn { \n type : \'text\', \n text : label\n}',
|
|
447
|
+
}
|
|
448
|
+
else if (labelFormatType === "expression") {
|
|
449
|
+
labelFormatProps.labelFormat = await _convertPopupArcadeToLabelSpec(layer.popupTemplate.content[0].expressionInfo);
|
|
450
|
+
// Fallback to all fields
|
|
451
|
+
}
|
|
452
|
+
else {
|
|
453
|
+
labelFormatProps.labelFormat = _convertPopupFieldsToLabelSpec(layer.popupTemplate.fieldInfos);
|
|
356
454
|
}
|
|
357
|
-
// Example text: '<p>{name} {age} years </p><p>started: {start}</p>'
|
|
358
|
-
}
|
|
359
|
-
else if (formatUsingLayerPopup && ((_d = (_c = layer.popupTemplate) === null || _c === void 0 ? void 0 : _c.content[0]) === null || _d === void 0 ? void 0 : _d.type) === "text") {
|
|
360
|
-
labelFormat = _convertPopupTextToLabelSpec(layer.popupTemplate.content[0].text);
|
|
361
|
-
// Example expression: 'var feat = $feature\nvar label = `\n\t${feat["name"]} ${feat["age"]} years <br>\n\tstarted: ${feat["start"]}\n`\n\nreturn { \n type : \'text\', \n text : label\n}',
|
|
362
|
-
}
|
|
363
|
-
else if (formatUsingLayerPopup && ((_f = (_e = layer.popupTemplate) === null || _e === void 0 ? void 0 : _e.content[0]) === null || _f === void 0 ? void 0 : _f.type) === "expression") {
|
|
364
|
-
labelFormat = await _convertPopupArcadeToLabelSpec(layer.popupTemplate.content[0].expressionInfo);
|
|
365
455
|
}
|
|
366
456
|
}
|
|
367
|
-
return Promise.resolve(
|
|
457
|
+
return Promise.resolve(labelFormatProps);
|
|
368
458
|
}
|
|
369
459
|
/**
|
|
370
460
|
* Extract selectionSetNames from the provided exportInfos
|
|
@@ -436,6 +526,7 @@ export function _prepareAttributeValue(attributeValue, attributeType, attributeD
|
|
|
436
526
|
/**
|
|
437
527
|
* Creates labels from items.
|
|
438
528
|
*
|
|
529
|
+
* @param webmap Webmap containing layer
|
|
439
530
|
* @param layer Layer from which to fetch features
|
|
440
531
|
* @param ids List of ids to download
|
|
441
532
|
* @param formatUsingLayerPopup When true, the layer's popup is used to choose attributes for each column; when false,
|
|
@@ -443,32 +534,51 @@ export function _prepareAttributeValue(attributeValue, attributeType, attributeD
|
|
|
443
534
|
* @param includeHeaderNames Add the label format at the front of the list of generated labels
|
|
444
535
|
* @returns Promise resolving when function is done
|
|
445
536
|
*/
|
|
446
|
-
export async function _prepareLabels(layer, ids, formatUsingLayerPopup = true, includeHeaderNames = false) {
|
|
447
|
-
// Get the
|
|
448
|
-
const
|
|
537
|
+
export async function _prepareLabels(webmap, layer, ids, formatUsingLayerPopup = true, includeHeaderNames = false) {
|
|
538
|
+
// Get the label formatting, if any
|
|
539
|
+
const labelFormatProps = await _getLabelFormat(webmap, layer, formatUsingLayerPopup);
|
|
540
|
+
// Because the label may actually come from a related layer, we'll use the layer that comes back from _getLabelFormat.
|
|
541
|
+
// That function returns the supplied layer in all cases except for a "relationship" type of popup.
|
|
542
|
+
const featureLayer = labelFormatProps.layer;
|
|
543
|
+
let featureSet = [];
|
|
544
|
+
if (typeof (labelFormatProps.relationshipId) !== "undefined") {
|
|
545
|
+
// Get the related items for each id
|
|
546
|
+
const relatedRecResponse = await getFeatureServiceRelatedRecords(layer.url, labelFormatProps.relationshipId, ids);
|
|
547
|
+
const objectIdField = layer.objectIdField;
|
|
548
|
+
let relatedFeatureIds = [];
|
|
549
|
+
relatedRecResponse.relatedRecordGroups.forEach((relatedRecGroup) => {
|
|
550
|
+
relatedFeatureIds = relatedFeatureIds.concat(relatedRecGroup.relatedRecords.map((rec) => rec.attributes[objectIdField]));
|
|
551
|
+
});
|
|
552
|
+
// Remove duplicates
|
|
553
|
+
relatedFeatureIds.sort();
|
|
554
|
+
relatedFeatureIds = relatedFeatureIds.filter((id, i) => i === 0 ? true : id !== relatedFeatureIds[i - 1]);
|
|
555
|
+
// Get the full items
|
|
556
|
+
featureSet = await queryFeaturesByID(relatedFeatureIds, featureLayer, [], false);
|
|
557
|
+
}
|
|
558
|
+
else {
|
|
559
|
+
// Get the features to export
|
|
560
|
+
featureSet = await queryFeaturesByID(ids, featureLayer, [], false);
|
|
561
|
+
}
|
|
449
562
|
// Get field data types. Do we have any domain-based fields?
|
|
450
563
|
const attributeOrigNames = {};
|
|
451
564
|
const attributeTypes = {};
|
|
452
565
|
const attributeDomains = {};
|
|
453
|
-
|
|
566
|
+
featureLayer.fields.forEach(field => {
|
|
454
567
|
const lowercaseFieldname = field.name.toLowerCase();
|
|
455
568
|
attributeOrigNames[lowercaseFieldname] = field.name;
|
|
456
569
|
attributeDomains[lowercaseFieldname] = field.domain;
|
|
457
570
|
attributeTypes[lowercaseFieldname] = field.type;
|
|
458
571
|
});
|
|
459
|
-
const attributeFormats = {};
|
|
460
|
-
// Get the label formatting, if any
|
|
461
|
-
const labelFormat = await _getLabelFormat(layer, formatUsingLayerPopup, attributeFormats);
|
|
462
572
|
// Apply the label format
|
|
463
|
-
const labels = labelFormat.type === "
|
|
464
|
-
// Export
|
|
465
|
-
await
|
|
466
|
-
: labelFormat.type
|
|
467
|
-
// Export attributes in
|
|
468
|
-
await
|
|
573
|
+
const labels = labelFormatProps.labelFormat.type === "pattern" ?
|
|
574
|
+
// Export attributes in format
|
|
575
|
+
await _prepareLabelsFromPattern(/*layer,*/ featureSet, attributeOrigNames, attributeTypes, attributeDomains, labelFormatProps.attributeFormats, labelFormatProps.labelFormat.format, includeHeaderNames)
|
|
576
|
+
: labelFormatProps.labelFormat.type === "executor" ?
|
|
577
|
+
// Export attributes in expression
|
|
578
|
+
await _prepareLabelsUsingExecutor(featureSet, labelFormatProps.labelFormat.format)
|
|
469
579
|
:
|
|
470
|
-
// Export attributes
|
|
471
|
-
await
|
|
580
|
+
// Export all attributes
|
|
581
|
+
await _prepareLabelsFromAll(featureSet, attributeTypes, attributeDomains, includeHeaderNames);
|
|
472
582
|
return Promise.resolve(labels);
|
|
473
583
|
}
|
|
474
584
|
/**
|
|
@@ -512,14 +622,30 @@ export async function _prepareLabelsFromAll(featureSet, attributeTypes, attribut
|
|
|
512
622
|
* @param includeHeaderNames Add the label format at the front of the list of generated labels
|
|
513
623
|
* @returns Promise resolving with list of labels, each of which is a list of label lines
|
|
514
624
|
*/
|
|
515
|
-
export async function _prepareLabelsFromPattern(
|
|
625
|
+
export async function _prepareLabelsFromPattern(
|
|
626
|
+
//layer: __esri.FeatureLayer,
|
|
627
|
+
featureSet, attributeOrigNames, attributeTypes, attributeDomains, attributeFormats, labelFormat, includeHeaderNames = false) {
|
|
516
628
|
const [intl] = await loadModules(["esri/intl"]);
|
|
517
629
|
// Find the label fields that we need to replace with values
|
|
518
630
|
const attributeExpressionMatches = _getFieldExpressionsFromLabel(labelFormat);
|
|
519
631
|
const attributeNames = _getFieldNamesFromFieldExpressions(attributeExpressionMatches);
|
|
632
|
+
// Do we need any Arcade executors?
|
|
633
|
+
//const arcadeExecutors = await _createArcadeExecutors(labelFormat, layer);
|
|
634
|
+
//const arcadeExpressionRegExp = /\{expression\/\w+\}/g;
|
|
635
|
+
// Find the label fields that we need to replace with values
|
|
636
|
+
//const arcadeExpressionMatches = labelFormat.match(arcadeExpressionRegExp) ?? [];
|
|
520
637
|
// Convert feature attributes into an array of labels
|
|
521
638
|
const labels = await Promise.all(featureSet.map(async (feature) => {
|
|
522
639
|
let labelPrep = labelFormat;
|
|
640
|
+
/*
|
|
641
|
+
// Replace Arcade expressions in this feature
|
|
642
|
+
for (let i = 0; i < arcadeExpressionMatches.length; i++) {
|
|
643
|
+
const match: string = arcadeExpressionMatches[i];
|
|
644
|
+
const expressionName = match.substring(match.indexOf("/") + 1, match.length - 1);
|
|
645
|
+
const value = await arcadeExecutors[expressionName].executeAsync({"$feature": feature, "$layer", layer});
|
|
646
|
+
labelPrep = labelPrep.replace(match, value);
|
|
647
|
+
}
|
|
648
|
+
*/
|
|
523
649
|
// Replace non-Arcade fields in this feature
|
|
524
650
|
attributeNames.forEach((attributeName, i) => {
|
|
525
651
|
const lowercaseFieldname = attributeName.toLowerCase();
|