@esri/solutions-components 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. package/dist/assets/t9n/public-notification/resources.json +0 -2
  2. package/dist/assets/t9n/public-notification/resources_en.json +0 -2
  3. package/dist/cjs/calcite-input-message_5.cjs.entry.js +1342 -18
  4. package/dist/cjs/{calcite-input-message.calcite-notice.map-select-tools.pdf-download.refine-selection-da276a1c.js → downloadUtils-27dbd8b9.js} +205 -1383
  5. package/dist/cjs/{index.es-176629d8.js → index.es-40d341ed.js} +3 -13
  6. package/dist/cjs/layer-table.cjs.entry.js +5 -15
  7. package/dist/cjs/loader.cjs.js +1 -1
  8. package/dist/cjs/public-notification.cjs.entry.js +2 -2
  9. package/dist/cjs/solutions-components.cjs.js +1 -1
  10. package/dist/collection/components/layer-table/layer-table.js +4 -16
  11. package/dist/collection/components/map-search/map-search.js +1 -1
  12. package/dist/collection/components/map-select-tools/map-select-tools.js +42 -38
  13. package/dist/collection/components/pdf-download/pdf-download.js +9 -76
  14. package/dist/collection/components/public-notification/public-notification.js +3 -3
  15. package/dist/collection/components/refine-selection/refine-selection.js +1 -1
  16. package/dist/collection/utils/csvUtils.js +4 -0
  17. package/dist/collection/utils/csvUtils.ts +7 -0
  18. package/dist/collection/utils/downloadUtils.js +181 -0
  19. package/dist/collection/utils/downloadUtils.ts +235 -0
  20. package/dist/collection/utils/interfaces.ts +3 -2
  21. package/dist/collection/utils/pdfUtils.js +7 -0
  22. package/dist/collection/utils/pdfUtils.ts +13 -2
  23. package/dist/components/downloadUtils.js +2279 -0
  24. package/dist/components/index.es.js +1 -1
  25. package/dist/components/layer-table.js +5 -16
  26. package/dist/components/map-layer-picker2.js +1 -1
  27. package/dist/components/map-search.js +1 -1
  28. package/dist/components/map-select-tools2.js +44 -40
  29. package/dist/components/pdf-download2.js +10 -2124
  30. package/dist/components/public-notification.js +3 -3
  31. package/dist/components/queryUtils.js +1 -1
  32. package/dist/components/refine-selection-tools2.js +1 -1
  33. package/dist/components/refine-selection2.js +1 -1
  34. package/dist/esm/buffer-tools_6.entry.js +1 -1
  35. package/dist/esm/calcite-combobox_3.entry.js +1 -1
  36. package/dist/esm/calcite-input-message_5.entry.js +1341 -13
  37. package/dist/esm/{calcite-input-message.calcite-notice.map-select-tools.pdf-download.refine-selection-c6f63458.js → downloadUtils-76e38a94.js} +206 -1381
  38. package/dist/esm/{index.es-54a6f3a3.js → index.es-489f4f08.js} +2 -12
  39. package/dist/esm/layer-table.entry.js +6 -16
  40. package/dist/esm/loader.js +1 -1
  41. package/dist/esm/{mapViewUtils-63e118f8.js → mapViewUtils-02696ab6.js} +1 -1
  42. package/dist/esm/public-notification.entry.js +3 -3
  43. package/dist/esm/solutions-components.js +1 -1
  44. package/dist/solutions-components/{p-cc2e20c8.js → p-1bfd07e3.js} +1 -1
  45. package/dist/solutions-components/{p-117174e8.entry.js → p-335fce8c.entry.js} +1 -1
  46. package/dist/solutions-components/p-4ef94c6b.entry.js +6 -0
  47. package/dist/solutions-components/p-5d27b47d.entry.js +17 -0
  48. package/dist/solutions-components/p-92cb569a.entry.js +6 -0
  49. package/dist/solutions-components/{p-8a0c0935.entry.js → p-a3b60bc9.entry.js} +1 -1
  50. package/dist/solutions-components/{p-1e459361.js → p-bff8aa4e.js} +3 -3
  51. package/dist/solutions-components/p-caa7e7a7.js +437 -0
  52. package/dist/solutions-components/solutions-components.esm.js +1 -1
  53. package/dist/solutions-components/utils/csvUtils.ts +7 -0
  54. package/dist/solutions-components/utils/downloadUtils.ts +235 -0
  55. package/dist/solutions-components/utils/interfaces.ts +3 -2
  56. package/dist/solutions-components/utils/pdfUtils.ts +13 -2
  57. package/dist/types/components/map-select-tools/map-select-tools.d.ts +11 -5
  58. package/dist/types/components/pdf-download/pdf-download.d.ts +0 -18
  59. package/dist/types/utils/downloadUtils.d.ts +40 -0
  60. package/dist/types/utils/interfaces.d.ts +2 -3
  61. package/dist/types/utils/pdfUtils.d.ts +3 -1
  62. package/package.json +1 -1
  63. package/dist/cjs/csvUtils-3a56c6d8.js +0 -54
  64. package/dist/components/csvUtils.js +0 -52
  65. package/dist/esm/csvUtils-23b5418f.js +0 -52
  66. package/dist/solutions-components/p-3069e3b7.js +0 -21
  67. package/dist/solutions-components/p-6d28f991.entry.js +0 -6
  68. package/dist/solutions-components/p-80f5e33c.js +0 -416
  69. package/dist/solutions-components/p-8927862a.entry.js +0 -6
  70. package/dist/solutions-components/p-e69c58e5.entry.js +0 -6
@@ -5,960 +5,60 @@
5
5
  */
6
6
  'use strict';
7
7
 
8
+ const _commonjsHelpers = require('./_commonjsHelpers-384729db.js');
8
9
  const index = require('./index-c6979cbb.js');
9
- const dom = require('./dom-4a580af6.js');
10
- const interfaces = require('./interfaces-e76f31e9.js');
11
- const conditionalSlot = require('./conditionalSlot-baada7a3.js');
12
10
  const loadModules = require('./loadModules-918ff3e7.js');
13
11
  const mapViewUtils = require('./mapViewUtils-d250b1ed.js');
14
- const interfaces$1 = require('./interfaces-17c631bf.js');
15
- const publicNotificationStore = require('./publicNotificationStore-20e924f5.js');
16
- const locale = require('./locale-db1db902.js');
17
- const csvUtils = require('./csvUtils-3a56c6d8.js');
18
- const _commonjsHelpers = require('./_commonjsHelpers-384729db.js');
19
- const publicNotificationUtils = require('./publicNotificationUtils-9d585d8d.js');
20
-
21
- /*!
22
- * All material copyright ESRI, All Rights Reserved, unless otherwise specified.
23
- * See https://github.com/Esri/calcite-components/blob/master/LICENSE.md for details.
24
- * v1.0.0-beta.97
25
- */
26
- var StatusIconDefaults;
27
- (function (StatusIconDefaults) {
28
- StatusIconDefaults["valid"] = "check-circle";
29
- StatusIconDefaults["invalid"] = "exclamation-mark-triangle";
30
- StatusIconDefaults["idle"] = "information";
31
- })(StatusIconDefaults || (StatusIconDefaults = {}));
32
-
33
- const inputMessageCss = "@keyframes in{0%{opacity:0}100%{opacity:1}}@keyframes in-down{0%{opacity:0;transform:translate3D(0, -5px, 0)}100%{opacity:1;transform:translate3D(0, 0, 0)}}@keyframes in-up{0%{opacity:0;transform:translate3D(0, 5px, 0)}100%{opacity:1;transform:translate3D(0, 0, 0)}}@keyframes in-scale{0%{opacity:0;transform:scale3D(0.95, 0.95, 1)}100%{opacity:1;transform:scale3D(1, 1, 1)}}:root{--calcite-animation-timing:calc(150ms * var(--calcite-internal-duration-factor));--calcite-internal-duration-factor:var(--calcite-duration-factor, 1);--calcite-internal-animation-timing-fast:calc(100ms * var(--calcite-internal-duration-factor));--calcite-internal-animation-timing-medium:calc(200ms * var(--calcite-internal-duration-factor));--calcite-internal-animation-timing-slow:calc(300ms * var(--calcite-internal-duration-factor))}.calcite-animate{opacity:0;animation-fill-mode:both;animation-duration:var(--calcite-animation-timing)}.calcite-animate__in{animation-name:in}.calcite-animate__in-down{animation-name:in-down}.calcite-animate__in-up{animation-name:in-up}.calcite-animate__in-scale{animation-name:in-scale}@media (prefers-reduced-motion: reduce){:root{--calcite-internal-duration-factor:0.01}}:root{--calcite-floating-ui-transition:var(--calcite-animation-timing)}:host([hidden]){display:none}:host([active][scale=m]),:host([active][scale=l]){--calcite-input-message-spacing-value:0.25rem}:host{visibility:hidden;box-sizing:border-box;display:flex;block-size:0px;inline-size:100%;align-items:center;font-weight:var(--calcite-font-weight-medium);color:var(--calcite-ui-text-1);opacity:0;transition:all var(--calcite-animation-timing) ease-in-out 0s, outline 0s, outline-offset 0s}:host([active]){visibility:visible;block-size:auto;opacity:1;transition:all var(--calcite-animation-timing) ease-in-out 0s, outline 0s, outline-offset 0s}:host([active][scale=m]),:host([active][scale=l]){-webkit-margin-before:var(--calcite-input-message-spacing-value);margin-block-start:var(--calcite-input-message-spacing-value)}:host([calcite-hydrated-hidden]){visibility:hidden !important;pointer-events:none}.calcite-input-message-icon{pointer-events:none;display:inline-flex;flex-shrink:0;transition:all var(--calcite-animation-timing) ease-in-out 0s, outline 0s, outline-offset 0s;-webkit-margin-end:0.5rem;margin-inline-end:0.5rem}:host([status=invalid]) .calcite-input-message-icon{color:var(--calcite-ui-danger)}:host([status=warning]) .calcite-input-message-icon{color:var(--calcite-ui-warning)}:host([status=valid]) .calcite-input-message-icon{color:var(--calcite-ui-success)}:host([status=idle]) .calcite-input-message-icon{color:var(--calcite-ui-brand)}:host([status][active]){color:var(--calcite-ui-text-1)}:host([status][scale=s]){font-size:var(--calcite-font-size--3);line-height:0.75rem}:host([status][scale=m]){-webkit-margin-before:0.25rem;margin-block-start:0.25rem;font-size:var(--calcite-font-size--2);line-height:1rem}:host([status][scale=l]){-webkit-margin-before:0.25rem;margin-block-start:0.25rem;font-size:var(--calcite-font-size--1);line-height:1rem}";
34
-
35
- const InputMessage = class {
36
- constructor(hostRef) {
37
- index.registerInstance(this, hostRef);
38
- //--------------------------------------------------------------------------
39
- //
40
- // Properties
41
- //
42
- //--------------------------------------------------------------------------
43
- /** When `true`, the component is active. */
44
- this.active = false;
45
- /** Specifies the size of the component. */
46
- this.scale = "m";
47
- /** Specifies the status of the input field, which determines message and icons. */
48
- this.status = "idle";
49
- }
50
- handleIconEl() {
51
- this.requestedIcon = dom.setRequestedIcon(StatusIconDefaults, this.icon, this.status);
52
- }
53
- //--------------------------------------------------------------------------
54
- //
55
- // Lifecycle
56
- //
57
- //--------------------------------------------------------------------------
58
- connectedCallback() {
59
- this.status = dom.getElementProp(this.el, "status", this.status);
60
- this.scale = dom.getElementProp(this.el, "scale", this.scale);
61
- this.requestedIcon = dom.setRequestedIcon(StatusIconDefaults, this.icon, this.status);
62
- }
63
- render() {
64
- const hidden = !this.active;
65
- return (index.h(index.Host, { "calcite-hydrated-hidden": hidden }, this.renderIcon(this.requestedIcon), index.h("slot", null)));
66
- }
67
- //--------------------------------------------------------------------------
68
- //
69
- // Private Methods
70
- //
71
- //--------------------------------------------------------------------------
72
- renderIcon(iconName) {
73
- if (iconName) {
74
- return index.h("calcite-icon", { class: "calcite-input-message-icon", icon: iconName, scale: "s" });
75
- }
76
- }
77
- get el() { return index.getElement(this); }
78
- static get watchers() { return {
79
- "status": ["handleIconEl"],
80
- "icon": ["handleIconEl"]
81
- }; }
82
- };
83
- InputMessage.style = inputMessageCss;
84
-
85
- /*!
86
- * All material copyright ESRI, All Rights Reserved, unless otherwise specified.
87
- * See https://github.com/Esri/calcite-components/blob/master/LICENSE.md for details.
88
- * v1.0.0-beta.97
89
- */
90
- const TEXT = {
91
- close: "Close"
92
- };
93
- const SLOTS = {
94
- title: "title",
95
- message: "message",
96
- link: "link",
97
- actionsEnd: "actions-end"
98
- };
99
- const CSS = {
100
- actionsEnd: "actions-end",
101
- close: "notice-close",
102
- container: "container",
103
- content: "notice-content",
104
- icon: "notice-icon"
105
- };
106
-
107
- const noticeCss = "@keyframes in{0%{opacity:0}100%{opacity:1}}@keyframes in-down{0%{opacity:0;transform:translate3D(0, -5px, 0)}100%{opacity:1;transform:translate3D(0, 0, 0)}}@keyframes in-up{0%{opacity:0;transform:translate3D(0, 5px, 0)}100%{opacity:1;transform:translate3D(0, 0, 0)}}@keyframes in-scale{0%{opacity:0;transform:scale3D(0.95, 0.95, 1)}100%{opacity:1;transform:scale3D(1, 1, 1)}}:root{--calcite-animation-timing:calc(150ms * var(--calcite-internal-duration-factor));--calcite-internal-duration-factor:var(--calcite-duration-factor, 1);--calcite-internal-animation-timing-fast:calc(100ms * var(--calcite-internal-duration-factor));--calcite-internal-animation-timing-medium:calc(200ms * var(--calcite-internal-duration-factor));--calcite-internal-animation-timing-slow:calc(300ms * var(--calcite-internal-duration-factor))}.calcite-animate{opacity:0;animation-fill-mode:both;animation-duration:var(--calcite-animation-timing)}.calcite-animate__in{animation-name:in}.calcite-animate__in-down{animation-name:in-down}.calcite-animate__in-up{animation-name:in-up}.calcite-animate__in-scale{animation-name:in-scale}@media (prefers-reduced-motion: reduce){:root{--calcite-internal-duration-factor:0.01}}:root{--calcite-floating-ui-transition:var(--calcite-animation-timing)}:host([hidden]){display:none}:host([scale=s]){--calcite-notice-spacing-token-small:0.5rem;--calcite-notice-spacing-token-large:0.75rem}:host([scale=s]) .container slot[name=title]::slotted(*),:host([scale=s]) .container *::slotted([slot=title]){margin-block:0.125rem;font-size:var(--calcite-font-size--1);line-height:1.375}:host([scale=s]) .container slot[name=message]::slotted(*),:host([scale=s]) .container *::slotted([slot=message]){margin-block:0.125rem;font-size:var(--calcite-font-size--2);line-height:1.375}:host([scale=s]) ::slotted(calcite-link){margin-block:0.125rem;font-size:var(--calcite-font-size--2);line-height:1.375}:host([scale=s]) .notice-close{padding:0.5rem}:host([scale=m]){--calcite-notice-spacing-token-small:0.75rem;--calcite-notice-spacing-token-large:1rem}:host([scale=m]) .container slot[name=title]::slotted(*),:host([scale=m]) .container *::slotted([slot=title]){margin-block:0.125rem;font-size:var(--calcite-font-size-0);line-height:1.375}:host([scale=m]) .container slot[name=message]::slotted(*),:host([scale=m]) .container *::slotted([slot=message]){margin-block:0.125rem;font-size:var(--calcite-font-size--1);line-height:1.375}:host([scale=m]) ::slotted(calcite-link){margin-block:0.125rem;font-size:var(--calcite-font-size--1);line-height:1.375}:host([scale=l]){--calcite-notice-spacing-token-small:1rem;--calcite-notice-spacing-token-large:1.25rem}:host([scale=l]) .container slot[name=title]::slotted(*),:host([scale=l]) .container *::slotted([slot=title]){margin-block:0.125rem;font-size:var(--calcite-font-size-1);line-height:1.375}:host([scale=l]) .container slot[name=message]::slotted(*),:host([scale=l]) .container *::slotted([slot=message]){margin-block:0.125rem;font-size:var(--calcite-font-size-0);line-height:1.375}:host([scale=l]) ::slotted(calcite-link){margin-block:0.125rem;font-size:var(--calcite-font-size-0);line-height:1.375}:host([width=auto]){--calcite-notice-width:auto}:host([width=half]){--calcite-notice-width:50%}:host([width=full]){--calcite-notice-width:100%}:host{margin-inline:auto;display:none;max-inline-size:100%;align-items:center;inline-size:var(--calcite-notice-width)}.container{pointer-events:none;margin-block:0px;box-sizing:border-box;display:none;inline-size:100%;background-color:var(--calcite-ui-foreground-1);opacity:0;transition:all var(--calcite-animation-timing) ease-in-out 0s, outline 0s, outline-offset 0s;max-block-size:0;text-align:start;-webkit-border-start:0px solid;border-inline-start:0px solid;box-shadow:0 0 0 0 transparent}.notice-close{outline-color:transparent}.notice-close:focus{outline:2px solid var(--calcite-ui-brand);outline-offset:-2px}:host{display:flex}:host([open]) .container{pointer-events:auto;display:flex;max-block-size:100%;align-items:center;border-width:2px;opacity:1;--tw-shadow:0 4px 8px -1px rgba(0, 0, 0, 0.08), 0 2px 4px -1px rgba(0, 0, 0, 0.04);--tw-shadow-colored:0 4px 8px -1px var(--tw-shadow-color), 0 2px 4px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}.container slot[name=title]::slotted(*),.container *::slotted([slot=title]){margin:0px;font-weight:var(--calcite-font-weight-medium);color:var(--calcite-ui-text-1)}.container slot[name=message]::slotted(*),.container *::slotted([slot=message]){margin:0px;display:inline;font-weight:var(--calcite-font-weight-normal);color:var(--calcite-ui-text-2);-webkit-margin-end:var(--calcite-notice-spacing-token-small);margin-inline-end:var(--calcite-notice-spacing-token-small)}.notice-content{box-sizing:border-box;transition:all var(--calcite-animation-timing) ease-in-out 0s, outline 0s, outline-offset 0s;padding-inline:var(--calcite-notice-spacing-token-large);flex:0 0 auto;display:flex;min-inline-size:0px;flex-direction:column;overflow-wrap:break-word;flex:1 1 0;padding-block:var(--calcite-notice-spacing-token-small);padding-inline:0 var(--calcite-notice-spacing-token-small)}.notice-content:first-of-type:not(:only-child){-webkit-padding-start:var(--calcite-notice-spacing-token-large);padding-inline-start:var(--calcite-notice-spacing-token-large)}.notice-content:only-of-type{padding-block:var(--calcite-notice-spacing-token-small);padding-inline:var(--calcite-notice-spacing-token-large)}.notice-icon{display:flex;align-items:center;box-sizing:border-box;transition:all var(--calcite-animation-timing) ease-in-out 0s, outline 0s, outline-offset 0s;padding-block:var(--calcite-notice-spacing-token-small);padding-inline:var(--calcite-notice-spacing-token-large);flex:0 0 auto}.notice-close{display:flex;cursor:pointer;align-items:center;align-self:stretch;border-style:none;background-color:transparent;color:var(--calcite-ui-text-3);outline:2px solid transparent;outline-offset:2px;box-sizing:border-box;transition:all var(--calcite-animation-timing) ease-in-out 0s, outline 0s, outline-offset 0s;padding-block:var(--calcite-notice-spacing-token-small);padding-inline:var(--calcite-notice-spacing-token-large);flex:0 0 auto;-webkit-appearance:none}.notice-close:hover,.notice-close:focus{background-color:var(--calcite-ui-foreground-2);color:var(--calcite-ui-text-1)}.notice-close:active{background-color:var(--calcite-ui-foreground-3)}.actions-end{display:flex;align-self:stretch}:host([color=blue]) .container{border-color:var(--calcite-ui-brand)}:host([color=blue]) .container .notice-icon{color:var(--calcite-ui-brand)}:host([color=red]) .container{border-color:var(--calcite-ui-danger)}:host([color=red]) .container .notice-icon{color:var(--calcite-ui-danger)}:host([color=yellow]) .container{border-color:var(--calcite-ui-warning)}:host([color=yellow]) .container .notice-icon{color:var(--calcite-ui-warning)}:host([color=green]) .container{border-color:var(--calcite-ui-success)}:host([color=green]) .container .notice-icon{color:var(--calcite-ui-success)}";
108
-
109
- const Notice = class {
110
- constructor(hostRef) {
111
- index.registerInstance(this, hostRef);
112
- this.calciteNoticeClose = index.createEvent(this, "calciteNoticeClose", 6);
113
- this.calciteNoticeOpen = index.createEvent(this, "calciteNoticeOpen", 6);
114
- //--------------------------------------------------------------------------
115
- //
116
- // Properties
117
- //
118
- //---------------------------------------------------------------------------
119
- /**
120
- * When `true`, the component is active.
121
- *
122
- * @deprecated Use `open` instead.
123
- */
124
- this.active = false;
125
- /** When `true`, the component is visible. */
126
- this.open = false;
127
- /** The color for the component's top border and icon. */
128
- this.color = "blue";
129
- /**
130
- * When `true`, a close button is added to the component.
131
- *
132
- * @deprecated use `closable` instead.
133
- */
134
- this.dismissible = false;
135
- /** When `true`, a close button is added to the component. */
136
- this.closable = false;
137
- /**
138
- * Accessible name for the close button.
139
- *
140
- * @default "Close"
141
- */
142
- this.intlClose = TEXT.close;
143
- /** Specifies the size of the component. */
144
- this.scale = "m";
145
- /** Specifies the width of the component. */
146
- this.width = "auto";
147
- //--------------------------------------------------------------------------
148
- //
149
- // Private Methods
150
- //
151
- //--------------------------------------------------------------------------
152
- this.close = () => {
153
- this.open = false;
154
- this.calciteNoticeClose.emit();
155
- };
156
- }
157
- activeHandler(value) {
158
- this.open = value;
159
- }
160
- openHandler(value) {
161
- this.active = value;
162
- }
163
- handleDismissible(value) {
164
- this.closable = value;
165
- }
166
- handleClosable(value) {
167
- this.dismissible = value;
168
- }
169
- updateRequestedIcon() {
170
- this.requestedIcon = dom.setRequestedIcon(interfaces.StatusIcons, this.icon, this.color);
171
- }
172
- //--------------------------------------------------------------------------
173
- //
174
- // Lifecycle
175
- //
176
- //--------------------------------------------------------------------------
177
- connectedCallback() {
178
- conditionalSlot.connectConditionalSlotComponent(this);
179
- const isOpen = this.active || this.open;
180
- if (isOpen) {
181
- this.activeHandler(isOpen);
182
- this.openHandler(isOpen);
183
- }
184
- if (this.dismissible) {
185
- this.handleDismissible(this.dismissible);
186
- }
187
- if (this.closable) {
188
- this.handleClosable(this.closable);
189
- }
190
- }
191
- disconnectedCallback() {
192
- conditionalSlot.disconnectConditionalSlotComponent(this);
193
- }
194
- componentWillLoad() {
195
- this.requestedIcon = dom.setRequestedIcon(interfaces.StatusIcons, this.icon, this.color);
196
- }
197
- render() {
198
- const { el } = this;
199
- const closeButton = (index.h("button", { "aria-label": this.intlClose, class: CSS.close, onClick: this.close, ref: (el) => (this.closeButton = el) }, index.h("calcite-icon", { icon: "x", scale: this.scale === "l" ? "m" : "s" })));
200
- const hasActionEnd = dom.getSlotted(el, SLOTS.actionsEnd);
201
- return (index.h("div", { class: CSS.container }, this.requestedIcon ? (index.h("div", { class: CSS.icon }, index.h("calcite-icon", { icon: this.requestedIcon, scale: this.scale === "l" ? "m" : "s" }))) : null, index.h("div", { class: CSS.content }, index.h("slot", { name: SLOTS.title }), index.h("slot", { name: SLOTS.message }), index.h("slot", { name: SLOTS.link })), hasActionEnd ? (index.h("div", { class: CSS.actionsEnd }, index.h("slot", { name: SLOTS.actionsEnd }))) : null, this.closable ? closeButton : null));
202
- }
203
- //--------------------------------------------------------------------------
204
- //
205
- // Public Methods
206
- //
207
- //--------------------------------------------------------------------------
208
- /** Sets focus on the component. */
209
- async setFocus() {
210
- const noticeLinkEl = this.el.querySelector("calcite-link");
211
- if (!this.closeButton && !noticeLinkEl) {
212
- return;
213
- }
214
- if (noticeLinkEl) {
215
- noticeLinkEl.setFocus();
216
- }
217
- else if (this.closeButton) {
218
- this.closeButton.focus();
219
- }
220
- }
221
- get el() { return index.getElement(this); }
222
- static get watchers() { return {
223
- "active": ["activeHandler"],
224
- "open": ["openHandler"],
225
- "dismissible": ["handleDismissible"],
226
- "closable": ["handleClosable"],
227
- "icon": ["updateRequestedIcon"],
228
- "color": ["updateRequestedIcon"]
229
- }; }
230
- };
231
- Notice.style = noticeCss;
232
-
233
- const mapSelectToolsCss = ":host{display:block}.div-visible{display:inherit}.div-visible-search{display:flex;height:44px;align-items:center;padding-bottom:0}.div-not-visible{display:none}.padding-bottom-1{padding-bottom:1rem}.search-widget{width:100% !important;border:1px solid var(--calcite-ui-border-input)}.w-100{width:100%}.w-50{width:50%}.search-distance-container{padding-top:\"1rem\" !important}.end-border{-webkit-border-end:1px solid var(--calcite-ui-border-2);border-inline-end:1px solid var(--calcite-ui-border-2)}.search-distance{display:flex;padding-top:1rem}";
234
12
 
235
- const MapSelectTools = class {
236
- constructor(hostRef) {
237
- index.registerInstance(this, hostRef);
238
- this.selectionSetChange = index.createEvent(this, "selectionSetChange", 7);
239
- this.sketchTypeChange = index.createEvent(this, "sketchTypeChange", 7);
240
- this.workflowTypeChange = index.createEvent(this, "workflowTypeChange", 7);
241
- /**
242
- * number[]: the oids of the selected features
243
- */
244
- this._selectedIds = [];
245
- /**
246
- * string: A label to help uniquely identify the selection set
247
- */
248
- this._selectionLabel = "";
249
- /**
250
- * boolean: When false the geometries will be used for selection
251
- * When true a list of OIDs will be used
252
- * see https://github.com/Esri/solutions-components/issues/148
253
- */
254
- this._skipGeomQuery = false;
255
- this.bufferColor = [227, 139, 79, 0.8];
256
- this.bufferOutlineColor = [255, 255, 255];
257
- this.enabledLayerIds = [];
258
- this.defaultBufferDistance = undefined;
259
- this.defaultBufferUnit = undefined;
260
- this.geometries = undefined;
261
- this.isUpdate = false;
262
- this.mapView = undefined;
263
- this.searchConfiguration = undefined;
264
- this.selectionSet = undefined;
265
- this.selectLayerView = undefined;
266
- this.showBufferTools = true;
267
- this._layerSelectChecked = undefined;
268
- this._searchTerm = undefined;
269
- this._translations = undefined;
270
- this._workflowType = undefined;
271
- }
272
- //--------------------------------------------------------------------------
273
- //
274
- // Watch handlers
275
- //
276
- //--------------------------------------------------------------------------
277
- /**
278
- * Called each time the geometries prop is changed.
279
- *
280
- * @returns Promise when complete
281
- */
282
- async watchGeometriesHandler(newValue, oldValue) {
283
- if (newValue !== oldValue) {
284
- if (newValue.length > 0) {
285
- if (this._skipGeomQuery) {
286
- void mapViewUtils.highlightFeatures(this._selectedIds, this.selectLayerView, this.mapView);
287
- }
288
- else {
289
- return this._geomQuery(this.geometries);
290
- }
291
- }
292
- else if (newValue.length === 0) {
293
- return this._clearResults(true, true);
294
- }
295
- }
296
- }
297
- /**
298
- * Called each time the searchConfiguration prop is changed.
299
- *
300
- * @returns Promise when complete
301
- */
302
- async watchSearchConfigurationHandler(newValue, oldValue) {
303
- console.log("watchSearchConfigurationHandler");
304
- console.log("newValue");
305
- console.log(newValue);
306
- console.log("oldValue");
307
- console.log(oldValue);
308
- if (JSON.stringify(newValue) !== JSON.stringify(oldValue)) {
309
- this._initSearchWidget();
310
- }
311
- }
312
- /**
313
- * Called each time the workflowType prop is changed and emits the workflowTypeChange event.
314
- *
315
- * @returns Promise when complete
316
- */
317
- async workflowTypeHandler(newValue, oldValue) {
318
- if (newValue !== oldValue) {
319
- this.mapView.popup.autoOpenEnabled = ["SELECT", "SKETCH", "REFINE"].indexOf(newValue) < 0;
320
- this.workflowTypeChange.emit(newValue);
321
- }
322
- }
323
- //--------------------------------------------------------------------------
324
- //
325
- // Methods (public)
326
- //
327
- //--------------------------------------------------------------------------
328
- /**
329
- * Clear any selection results
330
- *
331
- * @returns Promise when the results have been cleared
332
- */
333
- async clearSelection() {
334
- return this._clearResults();
335
- }
336
- /**
337
- * Get the new selection set
338
- *
339
- * @returns Promise with the new selection set
340
- */
341
- async getSelection() {
342
- // Allow any non whitespace
343
- if (!/\S+/gm.test(this._selectionLabel)) {
344
- this._selectionLabel = this._getSelectionBaseLabel();
345
- }
346
- const isBaseLabel = this._selectionLabel === this._getSelectionBaseLabel();
347
- return {
348
- id: this.isUpdate ? this.selectionSet.id : Date.now(),
349
- workflowType: this._workflowType,
350
- searchResult: this._searchResult,
351
- buffer: this._bufferGeometry,
352
- distance: this._bufferTools.distance,
353
- download: true,
354
- unit: this._bufferTools.unit,
355
- label: (this._selectionLabel && !isBaseLabel) ?
356
- this._selectionLabel : `${this._selectionLabel} ${this._bufferTools.distance} ${this._bufferTools.unit}`,
357
- selectedIds: this._selectedIds,
358
- layerView: this.selectLayerView,
359
- geometries: this.geometries,
360
- refineSelectLayers: this._refineTools.layerViews,
361
- skipGeomQuery: this._skipGeomQuery
362
- };
363
- }
364
- /**
365
- * Handle changes to the selection sets
366
- */
367
- labelChange(event) {
368
- this._selectionLabel = event.detail;
369
- }
370
- /**
371
- * Handle changes to the search configuration
372
- */
373
- searchConfigurationChangeChanged(event) {
374
- this.searchConfiguration = event.detail;
375
- }
376
- /**
377
- * Listen to changes in the sketch graphics
378
- *
379
- */
380
- sketchGraphicsChange(event) {
381
- this._updateSelection(interfaces$1.EWorkflowType.SKETCH, event.detail, this._selectionLabel || this._translations.sketch, true);
382
- }
383
- /**
384
- * Listen to changes in the refine graphics
385
- *
386
- */
387
- refineSelectionGraphicsChange(event) {
388
- const graphics = event.detail.graphics;
389
- this._skipGeomQuery = event.detail.useOIDs;
390
- const oids = Array.isArray(graphics) ? graphics.map(g => g.attributes[g.layer.objectIdField]) : [];
391
- this._updateSelection(interfaces$1.EWorkflowType.SELECT, graphics, this._selectionLabel || this._translations.select, !event.detail.useOIDs, oids);
392
- return this._highlightFeatures(oids);
393
- }
394
- //--------------------------------------------------------------------------
395
- //
396
- // Functions (lifecycle)
397
- //
398
- //--------------------------------------------------------------------------
399
- /**
400
- * StencilJS: Called once just after the component is first connected to the DOM.
401
- */
402
- async componentWillLoad() {
403
- await this._getTranslations();
404
- await this._initModules();
405
- }
406
- /**
407
- * StencilJS: Called once just after the component is fully loaded and the first render() occurs.
408
- */
409
- async componentDidLoad() {
410
- return this._init();
411
- }
412
- /**
413
- * Renders the component.
414
- */
415
- render() {
416
- var _a, _b, _c;
417
- const searchEnabled = this._workflowType === interfaces$1.EWorkflowType.SEARCH;
418
- const showSearchClass = searchEnabled ? " div-visible-search" : " div-not-visible";
419
- const drawEnabled = this._workflowType === interfaces$1.EWorkflowType.SKETCH || this._workflowType === interfaces$1.EWorkflowType.SELECT;
420
- const showBufferToolsClass = this.showBufferTools ? "search-distance" : "div-not-visible";
421
- const useSelectClass = this._layerSelectChecked && !searchEnabled ? " div-visible" : " div-not-visible";
422
- const useDrawClass = !this._layerSelectChecked && !searchEnabled ? " div-visible" : " div-not-visible";
423
- const showLayerChoiceClass = searchEnabled ? "div-not-visible" : "div-visible";
424
- return (index.h(index.Host, null, index.h("div", { class: "padding-bottom-1" }, index.h("calcite-radio-group", { class: "w-100", onCalciteRadioGroupChange: (evt) => this._workflowChange(evt) }, index.h("calcite-radio-group-item", { checked: searchEnabled, class: "w-50 end-border", value: interfaces$1.EWorkflowType.SEARCH }, this._translations.search), index.h("calcite-radio-group-item", { checked: drawEnabled, class: "w-50", value: interfaces$1.EWorkflowType.SKETCH }, this._translations.sketch))), index.h("div", { class: showSearchClass }, index.h("div", { class: "search-widget", ref: (el) => { this._searchElement = el; } })), index.h("div", { class: showLayerChoiceClass }, index.h("calcite-label", { layout: "inline" }, index.h("calcite-checkbox", { checked: ((_a = this.selectionSet) === null || _a === void 0 ? void 0 : _a.workflowType) === interfaces$1.EWorkflowType.SELECT, onCalciteCheckboxChange: () => this._layerSelectChanged(), ref: (el) => this._selectFromLayerElement = el }), "Use layer features")), index.h("div", { class: useDrawClass }, index.h("map-draw-tools", { active: true, border: true, mapView: this.mapView, ref: (el) => { this._drawTools = el; } })), index.h("div", { class: useSelectClass }, index.h("refine-selection-tools", { active: true, border: true, enabledLayerIds: this.enabledLayerIds, layerView: this.selectLayerView, layerViews: this._refineSelectLayers, mapView: this.mapView, mode: interfaces$1.ESelectionMode.ADD, ref: (el) => { this._refineTools = el; }, refineMode: interfaces$1.ERefineMode.SUBSET })), index.h("calcite-label", { class: showBufferToolsClass }, this._translations.searchDistance, index.h("buffer-tools", { distance: ((_b = this.selectionSet) === null || _b === void 0 ? void 0 : _b.distance) || this.defaultBufferDistance, geometries: this.geometries, onBufferComplete: (evt) => this._bufferComplete(evt), ref: (el) => this._bufferTools = el, unit: ((_c = this.selectionSet) === null || _c === void 0 ? void 0 : _c.unit) || this.defaultBufferUnit })), index.h("slot", null)));
425
- }
426
- //--------------------------------------------------------------------------
427
- //
428
- // Functions (protected)
429
- //
430
- //--------------------------------------------------------------------------
431
- /**
432
- * Load esri javascript api modules
433
- *
434
- * @returns Promise resolving when function is done
435
- *
436
- * @protected
437
- */
438
- async _initModules() {
439
- const [GraphicsLayer, Graphic, Search, geometryEngine, FeatureLayer] = await loadModules.loadModules([
440
- "esri/layers/GraphicsLayer",
441
- "esri/Graphic",
442
- "esri/widgets/Search",
443
- "esri/geometry/geometryEngine",
444
- "esri/layers/FeatureLayer"
445
- ]);
446
- this.GraphicsLayer = GraphicsLayer;
447
- this.Graphic = Graphic;
448
- this.Search = Search;
449
- this._geometryEngine = geometryEngine;
450
- this.FeatureLayer = FeatureLayer;
451
- }
452
- /**
453
- * Initialize the graphics layer, selection set, and search widget
454
- *
455
- * @returns Promise when the operation has completed
456
- */
457
- async _init() {
458
- this._initGraphicsLayer();
459
- this._initSelectionSet();
460
- this._initSearchWidget();
461
- }
462
- /**
463
- * Initialize the state of the component with any stored values in a selection set
464
- *
465
- * @protected
466
- */
467
- _initSelectionSet() {
468
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
469
- if (this.selectionSet) {
470
- this._searchTerm = (_b = (_a = this.selectionSet) === null || _a === void 0 ? void 0 : _a.searchResult) === null || _b === void 0 ? void 0 : _b.name;
471
- this._workflowType = (_c = this.selectionSet) === null || _c === void 0 ? void 0 : _c.workflowType;
472
- this._searchResult = (_d = this.selectionSet) === null || _d === void 0 ? void 0 : _d.searchResult;
473
- this._refineSelectLayers = (_e = this.selectionSet) === null || _e === void 0 ? void 0 : _e.refineSelectLayers;
474
- this._selectedIds = (_f = this.selectionSet) === null || _f === void 0 ? void 0 : _f.selectedIds;
475
- this._skipGeomQuery = (_g = this.selectionSet) === null || _g === void 0 ? void 0 : _g.skipGeomQuery;
476
- this.geometries = [
477
- ...((_h = this.selectionSet) === null || _h === void 0 ? void 0 : _h.geometries) || []
478
- ];
479
- // reset selection label base
480
- this._selectionLabel = ((_j = this.selectionSet) === null || _j === void 0 ? void 0 : _j.label) || this._getSelectionBaseLabel();
481
- void mapViewUtils.goToSelection(this.selectionSet.selectedIds, this.selectionSet.layerView, this.mapView, false);
482
- }
483
- else {
484
- this._workflowType = interfaces$1.EWorkflowType.SEARCH;
485
- }
486
- }
487
- /**
488
- * Get the default label base when the user has not provided a value
489
- *
490
- * @protected
491
- */
492
- _getSelectionBaseLabel() {
493
- var _a, _b;
494
- return this._workflowType === interfaces$1.EWorkflowType.SKETCH ?
495
- this._translations.sketch : this._workflowType === interfaces$1.EWorkflowType.SELECT ?
496
- this._translations.select : this._workflowType === interfaces$1.EWorkflowType.SEARCH && this._searchResult ?
497
- (_a = this._searchResult) === null || _a === void 0 ? void 0 : _a.name : (_b = this.selectionSet) === null || _b === void 0 ? void 0 : _b.label;
498
- }
499
- /**
500
- * Initialize the search widget
501
- *
502
- * @protected
503
- */
504
- _initSearchWidget() {
505
- console.log("_initSearchWidget");
506
- console.log("this.mapView");
507
- console.log(this.mapView);
508
- console.log("this._searchElement");
509
- console.log(this._searchElement);
510
- if (this.mapView && this._searchElement) {
511
- console.log("this._getSearchConfig");
512
- const searchConfiguration = this._getSearchConfig(this.searchConfiguration, this.mapView);
513
- console.log("searchConfiguration");
514
- console.log(searchConfiguration);
515
- const searchOptions = Object.assign({ view: this.mapView, container: this._searchElement, searchTerm: this._searchTerm }, searchConfiguration);
516
- this._searchWidget = new this.Search(searchOptions);
517
- this._searchWidget.on("search-clear", () => {
518
- void this._clearResults(false);
519
- });
520
- this._searchWidget.on("select-result", (searchResults) => {
521
- var _a;
522
- void this._clearResults(false);
523
- if (searchResults.result) {
524
- this._searchResult = searchResults.result;
525
- this._updateSelection(interfaces$1.EWorkflowType.SEARCH, [searchResults.result.feature], (_a = searchResults === null || searchResults === void 0 ? void 0 : searchResults.result) === null || _a === void 0 ? void 0 : _a.name, true);
526
- }
527
- });
528
- console.log("END search widget init");
529
- }
530
- }
531
- /**
532
- * Initialize the search widget based on user defined configuration
533
- *
534
- * @param searchConfiguration search configuration defined by the user
535
- * @param view the current map view
536
- *
537
- * @protected
538
- */
539
- _getSearchConfig(searchConfiguration, view) {
540
- var _a;
541
- const sources = searchConfiguration === null || searchConfiguration === void 0 ? void 0 : searchConfiguration.sources;
542
- if (sources) {
543
- sources.forEach(source => {
544
- var _a, _b, _c;
545
- const isLayerSource = source.hasOwnProperty("layer");
546
- if (isLayerSource) {
547
- const layerSource = source;
548
- const layerFromMap = ((_a = layerSource.layer) === null || _a === void 0 ? void 0 : _a.id)
549
- ? view.map.findLayerById(layerSource.layer.id)
550
- : null;
551
- if (layerFromMap) {
552
- layerSource.layer = layerFromMap;
553
- }
554
- else if ((_b = layerSource === null || layerSource === void 0 ? void 0 : layerSource.layer) === null || _b === void 0 ? void 0 : _b.url) {
555
- layerSource.layer = new this.FeatureLayer((_c = layerSource === null || layerSource === void 0 ? void 0 : layerSource.layer) === null || _c === void 0 ? void 0 : _c.url);
556
- }
557
- }
558
- });
559
- }
560
- (_a = searchConfiguration === null || searchConfiguration === void 0 ? void 0 : searchConfiguration.sources) === null || _a === void 0 ? void 0 : _a.forEach(source => {
561
- const isLocatorSource = source.hasOwnProperty("locator");
562
- if (isLocatorSource) {
563
- const locatorSource = source;
564
- locatorSource.url = locatorSource.url;
565
- delete locatorSource.url;
566
- }
567
- });
568
- return searchConfiguration;
569
- }
570
- /**
571
- * Initialize the graphics layer used to store any buffer grapghics
572
- *
573
- * @protected
574
- */
575
- _initGraphicsLayer() {
576
- const title = this._translations.bufferLayer;
577
- const bufferIndex = this.mapView.map.layers.findIndex((l) => l.title === title);
578
- if (bufferIndex > -1) {
579
- this._bufferGraphicsLayer = this.mapView.map.layers.getItemAt(bufferIndex);
580
- }
581
- else {
582
- this._bufferGraphicsLayer = new this.GraphicsLayer({ title });
583
- publicNotificationStore.state.managedLayers.push(title);
584
- const sketchIndex = this.mapView.map.layers.findIndex((l) => l.title === this._translations.sketchLayer);
585
- if (sketchIndex > -1) {
586
- this.mapView.map.layers.add(this._bufferGraphicsLayer, sketchIndex);
587
- }
588
- else {
589
- this.mapView.map.layers.add(this._bufferGraphicsLayer);
590
- }
591
- }
592
- }
593
- /**
594
- * Store the layer select checked change
595
- *
596
- * @protected
597
- */
598
- _layerSelectChanged() {
599
- this._layerSelectChecked = this._selectFromLayerElement.checked;
600
- this.sketchTypeChange.emit(this._layerSelectChecked ? interfaces$1.ESketchType.LAYER : interfaces$1.ESketchType.INTERACTIVE);
601
- }
602
- /**
603
- * Store workflow type change
604
- *
605
- * @protected
606
- */
607
- _workflowChange(evt) {
608
- this._workflowType = evt.detail;
609
- }
610
- /**
611
- * Highlight the features in the map
612
- *
613
- * @protected
614
- */
615
- async _highlightFeatures(ids) {
616
- var _a;
617
- (_a = publicNotificationStore.state.highlightHandle) === null || _a === void 0 ? void 0 : _a.remove();
618
- if (ids.length > 0) {
619
- publicNotificationStore.state.highlightHandle = await mapViewUtils.highlightFeatures(ids, this.selectLayerView, this.mapView);
620
- }
621
- this.selectionSetChange.emit(ids.length);
622
- }
623
- /**
624
- * Query the selectLayerView based on any user drawn geometries or buffers
625
- *
626
- * @param geometries Array of geometries used for the selection of ids from the select layer view
627
- *
628
- * @returns Promise when the selection is complete and the graphics have been highlighted
629
- */
630
- async _selectFeatures(geometries) {
631
- this._selectedIds = await mapViewUtils.queryObjectIds(geometries, this.selectLayerView.layer);
632
- // Add geometries used for selecting features as graphics
633
- this._drawTools.graphics = this.geometries.map(geom => {
634
- var _a, _b, _c;
635
- const props = {
636
- "geometry": geom,
637
- "symbol": geom.type === "point" ?
638
- (_a = this._drawTools) === null || _a === void 0 ? void 0 : _a.pointSymbol : geom.type === "polyline" ?
639
- (_b = this._drawTools) === null || _b === void 0 ? void 0 : _b.polylineSymbol : geom.type === "polygon" ?
640
- (_c = this._drawTools) === null || _c === void 0 ? void 0 : _c.polygonSymbol : undefined
641
- };
642
- return new this.Graphic(props);
643
- });
644
- void this._highlightFeatures(this._selectedIds);
645
- }
646
- /**
647
- * Query the selectLayerView based on any user drawn geometries or buffers
648
- *
649
- * @param evt CustomEvent that contains the result of the buffer
650
- *
651
- * @protected
652
- */
653
- async _bufferComplete(evt) {
654
- var _a, _b;
655
- this._bufferGeometry = Array.isArray(evt.detail) ?
656
- evt.detail[0] : evt.detail;
657
- if (this._bufferGeometry) {
658
- // Create a symbol for rendering the graphic
659
- const symbol = {
660
- type: "simple-fill",
661
- color: this.bufferColor,
662
- outline: {
663
- color: this.bufferOutlineColor,
664
- width: 1
665
- }
666
- };
667
- // Add the geometry and symbol to a new graphic
668
- const polygonGraphic = new this.Graphic({
669
- geometry: this._bufferGeometry,
670
- symbol
671
- });
672
- this._bufferGraphicsLayer.removeAll();
673
- this._bufferGraphicsLayer.add(polygonGraphic);
674
- void this._selectFeatures([this._bufferGeometry]);
675
- void this.mapView.goTo(polygonGraphic.geometry.extent);
676
- }
677
- else {
678
- if (this._bufferGraphicsLayer) {
679
- this._bufferGraphicsLayer.removeAll();
680
- }
681
- if (this._skipGeomQuery || ((_a = this.selectionSet) === null || _a === void 0 ? void 0 : _a.skipGeomQuery)) {
682
- this._selectedIds = (_b = this.selectionSet) === null || _b === void 0 ? void 0 : _b.selectedIds;
683
- void this._highlightFeatures(this._selectedIds);
684
- }
685
- else {
686
- void this._geomQuery(this.geometries);
687
- }
688
- }
689
- }
690
- /**
691
- * Fetch a single geometry for each potential geometry type
692
- *
693
- * @param geometries All current selection geometries
694
- *
695
- * @protected
696
- */
697
- _geomQuery(geometries) {
698
- const queryGeoms = mapViewUtils.getQueryGeoms(geometries, this._geometryEngine);
699
- return this._selectFeatures(queryGeoms);
700
- }
701
- /**
702
- * Clear all stored values and general state for the component
703
- *
704
- * @param clearSearchWidget Optional boolean for clearing the search widget (default is true)
705
- * @param clearLabel Optional boolean for clearing the search label (default is true)
706
- *
707
- * @protected
708
- */
709
- async _clearResults(clearSearchWidget = true, clearLabel = true) {
710
- var _a, _b;
711
- this._selectedIds = [];
712
- if (clearLabel) {
713
- this._selectionLabel = "";
714
- }
715
- if (this._bufferGraphicsLayer) {
716
- this._bufferGraphicsLayer.removeAll();
717
- }
718
- if (clearSearchWidget && this._searchWidget) {
719
- this._searchWidget.clear();
720
- }
721
- (_a = publicNotificationStore.state.highlightHandle) === null || _a === void 0 ? void 0 : _a.remove();
722
- // for sketch
723
- // checking for clear as it would throw off tests
724
- if ((_b = this._drawTools) === null || _b === void 0 ? void 0 : _b.clear) {
725
- void this._drawTools.clear();
726
- }
727
- this.selectionSetChange.emit(this._selectedIds.length);
728
- }
729
- /**
730
- * Fetch a single geometry for the current geometry type
731
- *
732
- * @param type worflow type
733
- * @param graphics graphics to be used for selection
734
- * @param label selection label
735
- * @param useGeoms indicates if the geometries should be used directly for selections
736
- * @param oids list of IDs to select when useGeoms is false
737
- *
738
- * @protected
739
- */
740
- _updateSelection(type, graphics, label, useGeoms, oids) {
741
- this._selectedIds = oids ? oids : this._selectedIds;
742
- // see https://github.com/Esri/solutions-components/issues/148
743
- this._skipGeomQuery = !useGeoms;
744
- this.geometries = Array.isArray(graphics) ? graphics.map(g => g.geometry) : this.geometries;
745
- this._workflowType = type;
746
- this._selectionLabel = label;
747
- }
748
- /**
749
- * Fetches the component's translations
750
- *
751
- * @protected
752
- */
753
- async _getTranslations() {
754
- const translations = await locale.getLocaleComponentStrings(this.el);
755
- this._translations = translations[0];
13
+ /** @license
14
+ * Copyright 2022 Esri
15
+ *
16
+ * Licensed under the Apache License, Version 2.0 (the "License");
17
+ * you may not use this file except in compliance with the License.
18
+ * You may obtain a copy of the License at
19
+ *
20
+ * http://www.apache.org/licenses/LICENSE-2.0
21
+ *
22
+ * Unless required by applicable law or agreed to in writing, software
23
+ * distributed under the License is distributed on an "AS IS" BASIS,
24
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25
+ * See the License for the specific language governing permissions and
26
+ * limitations under the License.
27
+ */
28
+ //#region Public functions
29
+ /**
30
+ * Export a csv of the attributes from the features that match the provided ids
31
+ *
32
+ * @param labels Labels to write
33
+ */
34
+ function exportCSV(labels) {
35
+ // Format values to string so it doesn't get tripped up when a value has a comma
36
+ // another option could be to export with a different delimiter
37
+ const outputLines = labels.map(label => Object.values(label).map(v => `"${v}"`).join(",") + "\r\n");
38
+ _downloadCSVFile(outputLines, `notify-${Date.now().toString()}`);
39
+ }
40
+ //#endregion
41
+ //#region Private functions
42
+ /**
43
+ * Download the CSV file
44
+ *
45
+ * @param outputLines Lines of output to write to file
46
+ * @param fileTitle Title (without file extension) to use for file; defaults to "export"
47
+ *
48
+ * @see {@link https://medium.com/@danny.pule/export-json-to-csv-file-using-javascript-a0b7bc5b00d2}
49
+ */
50
+ function _downloadCSVFile(outputLines, fileTitle) {
51
+ const link = document.createElement("a");
52
+ if (link.download !== undefined) {
53
+ link.href = URL.createObjectURL(new Blob(outputLines, { type: "text/csv;charset=utf-8;" }));
54
+ link.download = `${fileTitle}.csv` || "export.csv";
55
+ link.style.visibility = "hidden";
56
+ document.body.appendChild(link);
57
+ link.click();
58
+ document.body.removeChild(link);
756
59
  }
757
- get el() { return index.getElement(this); }
758
- static get watchers() { return {
759
- "geometries": ["watchGeometriesHandler"],
760
- "searchConfiguration": ["watchSearchConfigurationHandler"],
761
- "_workflowType": ["workflowTypeHandler"]
762
- }; }
763
- };
764
- MapSelectTools.style = mapSelectToolsCss;
765
-
766
- const labelFormats = [
767
- {
768
- descriptionPDF: {
769
- labelWidthDisplay: "2-5/8",
770
- labelHeightDisplay: "1",
771
- labelsPerPageDisplay: "30",
772
- averyPartNumber: "*60"
773
- },
774
- labelSpec: {
775
- type: "AVERY",
776
- pageProperties: {
777
- pageType: "ANSI A",
778
- leftMargin: 0.1875,
779
- rightMargin: 0.1875,
780
- topMargin: 0.5,
781
- bottomMargin: 0.5
782
- },
783
- numLabelsAcross: 3,
784
- numLabelsDown: 10,
785
- labelWidth: 2.625,
786
- labelHeight: 1,
787
- horizGapIn: 0.125,
788
- vertGapIn: 0,
789
- labelPadding: 0.1,
790
- fontSizePx: 11,
791
- maxNumLabelLines: 4
792
- }
793
- },
794
- {
795
- descriptionPDF: {
796
- labelWidthDisplay: "4",
797
- labelHeightDisplay: "1",
798
- labelsPerPageDisplay: "20",
799
- averyPartNumber: "*61"
800
- },
801
- labelSpec: {
802
- type: "AVERY",
803
- pageProperties: {
804
- pageType: "ANSI A",
805
- leftMargin: 0.15625,
806
- rightMargin: 0.15625,
807
- topMargin: 0.47637821,
808
- bottomMargin: 0.5
809
- },
810
- numLabelsAcross: 2,
811
- numLabelsDown: 10,
812
- labelWidth: 4,
813
- labelHeight: 1.0025,
814
- horizGapIn: 0.1875,
815
- vertGapIn: 0,
816
- labelPadding: 0.1,
817
- fontSizePx: 11,
818
- maxNumLabelLines: 4
819
- }
820
- },
821
- {
822
- descriptionPDF: {
823
- labelWidthDisplay: "4",
824
- labelHeightDisplay: "1-1/3",
825
- labelsPerPageDisplay: "14",
826
- averyPartNumber: "*62"
827
- },
828
- labelSpec: {
829
- type: "AVERY",
830
- pageProperties: {
831
- pageType: "ANSI A",
832
- leftMargin: 0.15625,
833
- rightMargin: 0.15625,
834
- topMargin: 0.81889808,
835
- bottomMargin: 0.83464612
836
- },
837
- numLabelsAcross: 2,
838
- numLabelsDown: 7,
839
- labelWidth: 4,
840
- labelHeight: 1.3352,
841
- horizGapIn: 0.1875,
842
- vertGapIn: 0,
843
- labelPadding: 0.1,
844
- fontSizePx: 11,
845
- maxNumLabelLines: 6
846
- }
847
- },
848
- {
849
- descriptionPDF: {
850
- labelWidthDisplay: "4",
851
- labelHeightDisplay: "2",
852
- labelsPerPageDisplay: "10",
853
- averyPartNumber: "*63"
854
- },
855
- labelSpec: {
856
- type: "AVERY",
857
- pageProperties: {
858
- pageType: "ANSI A",
859
- leftMargin: 0.15625,
860
- rightMargin: 0.15625,
861
- topMargin: 0.5,
862
- bottomMargin: 0.5
863
- },
864
- numLabelsAcross: 2,
865
- numLabelsDown: 5,
866
- labelWidth: 4,
867
- labelHeight: 2,
868
- horizGapIn: 0.1875,
869
- vertGapIn: 0,
870
- labelPadding: 0.1,
871
- fontSizePx: 12,
872
- maxNumLabelLines: 10
873
- }
874
- },
875
- {
876
- descriptionPDF: {
877
- labelWidthDisplay: "4",
878
- labelHeightDisplay: "3-1/3",
879
- labelsPerPageDisplay: "6",
880
- averyPartNumber: "*64"
881
- },
882
- labelSpec: {
883
- type: "AVERY",
884
- pageProperties: {
885
- pageType: "ANSI A",
886
- leftMargin: 0.15625,
887
- rightMargin: 0.15625,
888
- topMargin: 0.4724412,
889
- bottomMargin: 0.50000027
890
- },
891
- numLabelsAcross: 2,
892
- numLabelsDown: 3,
893
- labelWidth: 4,
894
- labelHeight: 3.342,
895
- horizGapIn: 0.1875,
896
- vertGapIn: 0,
897
- labelPadding: 0.1,
898
- fontSizePx: 14,
899
- maxNumLabelLines: 12
900
- }
901
- },
902
- {
903
- descriptionPDF: {
904
- labelWidthDisplay: "1-3/4",
905
- labelHeightDisplay: "1/2",
906
- labelsPerPageDisplay: "80",
907
- averyPartNumber: "*67"
908
- },
909
- labelSpec: {
910
- type: "AVERY",
911
- pageProperties: {
912
- pageType: "ANSI A",
913
- leftMargin: 0.307086375,
914
- rightMargin: 0.307086375,
915
- topMargin: 0.4724412,
916
- bottomMargin: 0.49606326
917
- },
918
- numLabelsAcross: 4,
919
- numLabelsDown: 20,
920
- labelWidth: 1.75,
921
- labelHeight: 0.50155,
922
- horizGapIn: 0.29527575,
923
- vertGapIn: 0,
924
- labelPadding: 0.1,
925
- fontSizePx: 8,
926
- maxNumLabelLines: 3
927
- }
928
- },
929
- {
930
- descriptionPDF: {
931
- labelWidthDisplay: "1-3/4",
932
- labelHeightDisplay: "2/3",
933
- labelsPerPageDisplay: "60",
934
- averyPartNumber: "*95"
935
- },
936
- labelSpec: {
937
- type: "AVERY",
938
- pageProperties: {
939
- pageType: "ANSI A",
940
- leftMargin: 0.28936983,
941
- rightMargin: 0.28936983,
942
- topMargin: 0.53937037,
943
- bottomMargin: 0.5511814
944
- },
945
- numLabelsAcross: 4,
946
- numLabelsDown: 15,
947
- labelWidth: 1.75,
948
- labelHeight: 0.6605,
949
- horizGapIn: 0.30708678,
950
- vertGapIn: 0,
951
- labelPadding: 0.1,
952
- fontSizePx: 8,
953
- maxNumLabelLines: 4
954
- }
955
- }
956
- ];
957
-
958
- const pdfUtils = /*#__PURE__*/Object.freeze({
959
- __proto__: null,
960
- 'default': labelFormats
961
- });
60
+ }
61
+ //#endregion
962
62
 
963
63
  var _typeof_1 = _commonjsHelpers.createCommonjsModule(function (module) {
964
64
  function _typeof(obj) {
@@ -1982,7 +1082,7 @@ function(t){var e=function(t){for(var e=t.length,r=new Uint8Array(e),n=0;n<e;n++
1982
1082
  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1983
1083
  * ====================================================================
1984
1084
  */
1985
- function(t){function e(){return (n.canvg?Promise.resolve(n.canvg):Promise.resolve().then(function () { return require('./index.es-176629d8.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},
1085
+ function(t){function e(){return (n.canvg?Promise.resolve(n.canvg):Promise.resolve().then(function () { return require('./index.es-40d341ed.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},
1986
1086
  /** ====================================================================
1987
1087
  * @license
1988
1088
  * jsPDF XMP metadata plugin
@@ -2973,6 +2073,8 @@ class PDFLabels {
2973
2073
  * See the License for the specific language governing permissions and
2974
2074
  * limitations under the License.
2975
2075
  */
2076
+ //#endregion
2077
+ //#region Public functions
2976
2078
  /**
2977
2079
  * Exports a PDF of labels.
2978
2080
  *
@@ -2982,6 +2084,8 @@ class PDFLabels {
2982
2084
  function exportPDF(labels, labelPageDescription) {
2983
2085
  _downloadPDFFile(labels, labelPageDescription, `notify-${Date.now().toString()}`);
2984
2086
  }
2087
+ //#endregion
2088
+ //#region Private functions
2985
2089
  /**
2986
2090
  * Downloads the PDF file.
2987
2091
  *
@@ -3002,159 +2106,138 @@ function _downloadPDFFile(labels, labelPageDescription, fileTitle) {
3002
2106
  pdfLib.save();
3003
2107
  });
3004
2108
  });
3005
- }
3006
-
3007
- const pdfDownloadCss = ":host{display:block}";
2109
+ }
2110
+ //#endregion
3008
2111
 
3009
- const PdfDownload = class {
3010
- constructor(hostRef) {
3011
- index.registerInstance(this, hostRef);
3012
- this.disabled = false;
3013
- this.layerView = undefined;
3014
- this._translations = undefined;
3015
- }
3016
- //--------------------------------------------------------------------------
3017
- //
3018
- // Watch handlers
3019
- //
3020
- //--------------------------------------------------------------------------
3021
- //--------------------------------------------------------------------------
3022
- //
3023
- // Methods (public)
3024
- //
3025
- //--------------------------------------------------------------------------
3026
- /**
3027
- * Downloads csv of mailing labels for the provided list of ids
3028
- *
3029
- * @param ids List of ids to download
3030
- * @param removeDuplicates When true a single label is generated when multiple featues have a shared address value
3031
- * @param addColumnTitle Indicates if column headings should be included in output
3032
- * @returns Promise resolving when function is done
3033
- */
3034
- async downloadCSV(ids, removeDuplicates, addColumnTitle = true) {
3035
- const labels = await this._prepareLabels(ids, removeDuplicates, addColumnTitle);
3036
- return csvUtils.exportCSV(labels);
3037
- }
3038
- /**
3039
- * Downloads pdf of mailing labels for the provided list of ids
3040
- *
3041
- * @param ids List of ids to download
3042
- * @param removeDuplicates When true a single label is generated when multiple featues have a shared address value
3043
- * @returns Promise resolving when function is done
3044
- */
3045
- async downloadPDF(ids, removeDuplicates) {
3046
- const labels = await this._prepareLabels(ids, removeDuplicates);
3047
- const labelPageDescription = this._labelInfoElement.selectedOption.value;
3048
- return exportPDF(labels, labelPageDescription);
3049
- }
3050
- //--------------------------------------------------------------------------
3051
- //
3052
- // Events (public)
3053
- //
3054
- //--------------------------------------------------------------------------
3055
- //--------------------------------------------------------------------------
3056
- //
3057
- // Functions (lifecycle)
3058
- //
3059
- //--------------------------------------------------------------------------
3060
- /**
3061
- * StencilJS: Called once just after the component is first connected to the DOM.
3062
- */
3063
- async componentWillLoad() {
3064
- await this._getTranslations();
3065
- await this._initModules();
3066
- }
3067
- /**
3068
- * Renders the component.
3069
- */
3070
- render() {
3071
- return (index.h(index.Host, null, index.h("calcite-select", { disabled: this.disabled, label: "", ref: (el) => { this._labelInfoElement = el; } }, this._renderItems())));
3072
- }
3073
- //--------------------------------------------------------------------------
3074
- //
3075
- // Functions (protected)
3076
- //
3077
- //--------------------------------------------------------------------------
3078
- /**
3079
- * Load esri javascript api modules
3080
- *
3081
- * @returns Promise resolving when function is done
3082
- *
3083
- * @protected
3084
- */
3085
- async _initModules() {
3086
- const [intl] = await loadModules.loadModules([
3087
- "esri/intl"
3088
- ]);
3089
- this._intl = intl;
3090
- }
3091
- /**
3092
- * Converts the text of a custom popup into a multiline label specification; conversion splits text into
3093
- * lines on <br>s, and removes HTML tags. It does not handle Arcade and related records.
3094
- *
3095
- * @param popupInfo Layer's popupInfo structure containing description, fieldInfos, and expressionInfos, e.g.,
3096
- * "<div style='text-align: left;'>{NAME}<br />{STREET}<br />{CITY}, {STATE} {ZIP} <br /></div>"
3097
- * @return Label spec
3098
- */
3099
- _convertPopupToLabelSpec(popupInfo) {
3100
- // Replace <br>, <br/> with |
3101
- popupInfo = popupInfo.replace(/<br\s*\/?>/gi, "|");
3102
- // Remove remaining HTML tags, replace 0xA0 that popup uses for spaces, replace some char representations,
3103
- // and split the label back into individual lines
3104
- let labelSpec = popupInfo
3105
- .replace(/<[\s.]*[^<>]*\/?>/gi, "")
3106
- .replace(/\xA0/gi, " ")
3107
- .replace(/&lt;/gi, "<")
3108
- .replace(/&gt;/gi, ">")
3109
- .replace(/&nbsp;/gi, " ")
3110
- .split("|");
3111
- // Trim lines and remove empties
3112
- labelSpec = labelSpec.map(line => line.trim()).filter(line => line.length > 0);
3113
- return labelSpec;
3114
- }
3115
- ;
3116
- /**
3117
- * Gets the formatted pdf export size text
3118
- *
3119
- * @param labelInfo current user selected label info
3120
- *
3121
- * @returns the pdf label as a string
3122
- * @protected
3123
- */
3124
- _getLabelSizeText(labelInfo) {
3125
- const lNum = labelInfo.descriptionPDF.labelsPerPageDisplay;
3126
- const lSize = `${labelInfo.descriptionPDF.labelWidthDisplay} x ${labelInfo.descriptionPDF.labelHeightDisplay}`;
3127
- return this._translations.pdfLabel.replace("{{n}}", lNum).replace("{{labelSize}}", lSize);
3128
- }
3129
- /**
3130
- * Fetches the component's translations
3131
- *
3132
- * @protected
3133
- */
3134
- async _getTranslations() {
3135
- const translations = await locale.getLocaleComponentStrings(this.el);
3136
- this._translations = translations[0];
3137
- }
3138
- /**
3139
- * Creates labels from items.
3140
- *
3141
- * @param ids List of ids to download
3142
- * @param removeDuplicates When true a single label is generated when multiple featues have a shared address value
3143
- * @param includeHeaderNames Add the label format at the front of the list of generated labels
3144
- * @returns Promise resolving when function is done
3145
- */
3146
- async _prepareLabels(ids, removeDuplicates, includeHeaderNames = false) {
3147
- // Get the attributes of the features to export
3148
- const featureSet = await mapViewUtils.queryFeaturesByID(ids, this.layerView.layer);
3149
- const featuresAttrs = featureSet.features.map(f => f.attributes);
2112
+ /** @license
2113
+ * Copyright 2022 Esri
2114
+ *
2115
+ * Licensed under the Apache License, Version 2.0 (the "License");
2116
+ * you may not use this file except in compliance with the License.
2117
+ * You may obtain a copy of the License at
2118
+ *
2119
+ * http://www.apache.org/licenses/LICENSE-2.0
2120
+ *
2121
+ * Unless required by applicable law or agreed to in writing, software
2122
+ * distributed under the License is distributed on an "AS IS" BASIS,
2123
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2124
+ * See the License for the specific language governing permissions and
2125
+ * limitations under the License.
2126
+ */
2127
+ //#endregion
2128
+ //#region Public functions
2129
+ /**
2130
+ * Downloads csv of mailing labels for the provided list of ids
2131
+ *
2132
+ * @param layer Layer providing features and attributes for download
2133
+ * @param ids List of ids to download
2134
+ * @param formatUsingLayerPopup When true, the layer's popup is used to choose attributes for each column; when false,
2135
+ * all attributes are exported
2136
+ * @param removeDuplicates When true a single label is generated when multiple featues have a shared address value
2137
+ * @param addColumnTitle Indicates if column headings should be included in output
2138
+ * @returns Promise resolving when function is done
2139
+ */
2140
+ async function downloadCSV(layer, ids, formatUsingLayerPopup, removeDuplicates = false, addColumnTitle = false) {
2141
+ const labels = await _prepareLabels(layer, ids, removeDuplicates, formatUsingLayerPopup, addColumnTitle);
2142
+ exportCSV(labels);
2143
+ return Promise.resolve();
2144
+ }
2145
+ /**
2146
+ * Downloads csv of mailing labels for the provided list of ids
2147
+ *
2148
+ * @param layer Layer providing features and attributes for download
2149
+ * @param ids List of ids to download
2150
+ * @param removeDuplicates When true a single label is generated when multiple featues have a shared address value
2151
+ * @param labelPageDescription Provides PDF page layout info
2152
+ * @returns Promise resolving when function is done
2153
+ */
2154
+ async function downloadPDF(layer, ids, removeDuplicates, labelPageDescription) {
2155
+ const labels = await _prepareLabels(layer, ids, removeDuplicates);
2156
+ exportPDF(labels, labelPageDescription);
2157
+ return Promise.resolve();
2158
+ }
2159
+ //#endregion
2160
+ //#region Private functions
2161
+ /**
2162
+ * Converts a set of fieldInfos into template lines.
2163
+ *
2164
+ * @param fieldInfos Layer's fieldInfos structure
2165
+ * @return Label spec
2166
+ */
2167
+ function _convertPopupFieldsToLabelSpec(fieldInfos) {
2168
+ const labelSpec = [];
2169
+ // Every visible attribute is used
2170
+ fieldInfos.forEach(fieldInfo => {
2171
+ if (fieldInfo.visible) {
2172
+ labelSpec.push(`{${fieldInfo.fieldName}}`);
2173
+ }
2174
+ });
2175
+ return labelSpec;
2176
+ }
2177
+ /**
2178
+ * Converts the text of a custom popup into a multiline label specification; conversion splits text into
2179
+ * lines on <br>s, and removes HTML tags. It does not handle Arcade and related records.
2180
+ *
2181
+ * @param popupInfo Layer's popupInfo structure containing description, fieldInfos, and expressionInfos, e.g.,
2182
+ * "<div style='text-align: left;'>{NAME}<br />{STREET}<br />{CITY}, {STATE} {ZIP} <br /></div>"
2183
+ * @return Label spec
2184
+ */
2185
+ function _convertPopupTextToLabelSpec(popupInfo) {
2186
+ // Replace <br>, <br/> with |
2187
+ popupInfo = popupInfo.replace(/<br\s*\/?>/gi, "|");
2188
+ // Remove remaining HTML tags, replace 0xA0 that popup uses for spaces, replace some char representations,
2189
+ // and split the label back into individual lines
2190
+ let labelSpec = popupInfo
2191
+ .replace(/<[\s.]*[^<>]*\/?>/gi, "")
2192
+ .replace(/\xA0/gi, " ")
2193
+ .replace(/&lt;/gi, "<")
2194
+ .replace(/&gt;/gi, ">")
2195
+ .replace(/&nbsp;/gi, " ")
2196
+ .split("|");
2197
+ // Trim lines and remove empties
2198
+ labelSpec = labelSpec.map(line => line.trim()).filter(line => line.length > 0);
2199
+ return labelSpec;
2200
+ }
2201
+ /**
2202
+ * Creates labels from items.
2203
+ *
2204
+ * @param layer Layer from which to fetch features
2205
+ * @param ids List of ids to download
2206
+ * @param removeDuplicates When true a single label is generated when multiple featues have a shared address value
2207
+ * @param formatUsingLayerPopup When true, the layer's popup is used to choose attributes for each column; when false,
2208
+ * all attributes are exported
2209
+ * @param includeHeaderNames Add the label format at the front of the list of generated labels
2210
+ * @returns Promise resolving when function is done
2211
+ */
2212
+ async function _prepareLabels(layer, ids, removeDuplicates = true, formatUsingLayerPopup = true, includeHeaderNames = false) {
2213
+ var _a, _b, _c, _d;
2214
+ const [intl] = await loadModules.loadModules([
2215
+ "esri/intl"
2216
+ ]);
2217
+ // Get the attributes of the features to export
2218
+ const featureSet = await mapViewUtils.queryFeaturesByID(ids, layer);
2219
+ const featuresAttrs = featureSet.features.map(f => f.attributes);
2220
+ // Get the label formatting, if any
2221
+ let labelFormat;
2222
+ if (layer.popupEnabled) {
3150
2223
  // What data fields are used in the labels?
3151
2224
  // Example labelFormat: ['{NAME}', '{STREET}', '{CITY}, {STATE} {ZIP}']
3152
- const labelFormat = this._convertPopupToLabelSpec(this.layerView.layer.popupTemplate.content[0].text);
2225
+ if (formatUsingLayerPopup && ((_b = (_a = layer.popupTemplate) === null || _a === void 0 ? void 0 : _a.content[0]) === null || _b === void 0 ? void 0 : _b.type) === "fields") {
2226
+ labelFormat = _convertPopupFieldsToLabelSpec(layer.popupTemplate.fieldInfos);
2227
+ }
2228
+ 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") {
2229
+ labelFormat = _convertPopupTextToLabelSpec(layer.popupTemplate.content[0].text);
2230
+ }
2231
+ }
2232
+ // Apply the label format
2233
+ let labels;
2234
+ // eslint-disable-next-line unicorn/prefer-ternary
2235
+ if (labelFormat) {
3153
2236
  // Convert attributes into an array of labels
3154
- let labels = featuresAttrs.map(featureAttributes => {
2237
+ labels = featuresAttrs.map(featureAttributes => {
3155
2238
  const label = [];
3156
2239
  labelFormat.forEach(labelLineTemplate => {
3157
- const labelLine = this._intl.substitute(labelLineTemplate, featureAttributes).trim();
2240
+ const labelLine = intl.substitute(labelLineTemplate, featureAttributes).trim();
3158
2241
  if (labelLine.length > 0) {
3159
2242
  label.push(labelLine);
3160
2243
  }
@@ -3163,299 +2246,38 @@ const PdfDownload = class {
3163
2246
  })
3164
2247
  // Remove empty labels
3165
2248
  .filter(label => label.length > 0);
3166
- // Remove duplicates
3167
- if (removeDuplicates) {
3168
- const labelsAsStrings = labels.map(label => JSON.stringify(label));
3169
- const uniqueLabels = new Set(labelsAsStrings);
3170
- labels = Array.from(uniqueLabels, labelString => JSON.parse(labelString));
3171
- }
3172
- // Add header names
3173
- if (includeHeaderNames) {
3174
- const headerNames = labelFormat.map(labelFormatLine => labelFormatLine.replace(/\{/g, "").replace(/\}/g, ""));
3175
- labels.unshift(headerNames);
3176
- }
3177
- return Promise.resolve(labels);
3178
2249
  }
3179
- /**
3180
- * Renders the pdf export size options
3181
- *
3182
- * @returns Node array of size options
3183
- *
3184
- * @protected
3185
- */
3186
- _renderItems() {
3187
- const s = pdfUtils;
3188
- const sortedPdfIndo = (s.default || s).sort((a, b) => {
3189
- const _a = parseInt(a.descriptionPDF.labelsPerPageDisplay, 10);
3190
- const _b = parseInt(b.descriptionPDF.labelsPerPageDisplay, 10);
3191
- return _a < _b ? -1 : _a > _b ? 1 : 0;
3192
- });
3193
- return sortedPdfIndo.map((l) => {
3194
- return (index.h("calcite-option", { value: l }, this._getLabelSizeText(l)));
2250
+ else {
2251
+ // Export all attributes
2252
+ labels = featuresAttrs.map(featureAttributes => {
2253
+ return Object.values(featureAttributes).map(attribute => `${attribute}`);
3195
2254
  });
3196
2255
  }
3197
- get el() { return index.getElement(this); }
3198
- };
3199
- PdfDownload.style = pdfDownloadCss;
3200
-
3201
- const refineSelectionCss = ":host{display:block}";
3202
-
3203
- const RefineSelection = class {
3204
- constructor(hostRef) {
3205
- index.registerInstance(this, hostRef);
3206
- this.selectionSetsChanged = index.createEvent(this, "selectionSetsChanged", 7);
3207
- //--------------------------------------------------------------------------
3208
- //
3209
- // Properties (protected)
3210
- //
3211
- //--------------------------------------------------------------------------
3212
- /**
3213
- * boolean: Indicates if any new graphics should be added or removed
3214
- */
3215
- this._addEnabled = true;
3216
- this.addresseeLayer = undefined;
3217
- this.enabledLayerIds = [];
3218
- this.mapView = undefined;
3219
- this.selectionSets = [];
3220
- this.GraphicsLayer = undefined;
3221
- this.SketchViewModel = undefined;
3222
- this._translations = undefined;
3223
- }
3224
- //--------------------------------------------------------------------------
3225
- //
3226
- // Watch handlers
3227
- //
3228
- //--------------------------------------------------------------------------
3229
- /**
3230
- * Called each time the addresseeLayer is changed.
3231
- * Add a new clean refine set for the new addressee layer.
3232
- */
3233
- addresseeLayerWatchHandler() {
3234
- const selectionSets = this.selectionSets.filter(ss => ss.workflowType !== interfaces$1.EWorkflowType.REFINE);
3235
- this.selectionSets = this._initRefineSelectionSet(selectionSets);
2256
+ // Remove duplicates
2257
+ if (removeDuplicates) {
2258
+ const labelsAsStrings = labels.map(label => JSON.stringify(label));
2259
+ const uniqueLabels = new Set(labelsAsStrings);
2260
+ labels = Array.from(uniqueLabels, labelString => JSON.parse(labelString));
3236
2261
  }
3237
- /**
3238
- * Handles changes to refine selection ids.
3239
- *
3240
- */
3241
- refineSelectionIdsChange(event) {
3242
- var _a, _b;
3243
- const addIds = ((_a = event.detail) === null || _a === void 0 ? void 0 : _a.addIds) || [];
3244
- const removeIds = ((_b = event.detail) === null || _b === void 0 ? void 0 : _b.removeIds) || [];
3245
- this._updateSelectionSets(removeIds);
3246
- this._updateRefineSelectionSet(addIds, removeIds);
3247
- }
3248
- //--------------------------------------------------------------------------
3249
- //
3250
- // Functions (lifecycle)
3251
- //
3252
- //--------------------------------------------------------------------------
3253
- /**
3254
- * StencilJS: Called once just after the component is first connected to the DOM.
3255
- */
3256
- async componentWillLoad() {
3257
- await this._getTranslations();
3258
- const refineSet = this._getRefineSelectionSet(this.selectionSets);
3259
- if (!refineSet) {
3260
- this.selectionSets = this._initRefineSelectionSet(this.selectionSets);
2262
+ // Add header names
2263
+ if (includeHeaderNames) {
2264
+ let headerNames = [];
2265
+ if (labelFormat) {
2266
+ headerNames = labelFormat.map(labelFormatLine => labelFormatLine.replace(/\{/g, "").replace(/\}/g, ""));
3261
2267
  }
3262
- }
3263
- /**
3264
- * Renders the component.
3265
- */
3266
- render() {
3267
- return (index.h(index.Host, null, index.h("div", { class: "padding-1" }, index.h("div", null, index.h("calcite-radio-group", { class: "w-100", onCalciteRadioGroupChange: (evt) => this._modeChanged(evt) }, index.h("calcite-radio-group-item", { checked: this._addEnabled, class: "w-50", onClick: () => this._setSelectionMode(interfaces$1.ESelectionMode.ADD), value: interfaces$1.ESelectionMode.ADD }, this._translations.add), index.h("calcite-radio-group-item", { checked: !this._addEnabled, class: "w-50", onClick: () => this._setSelectionMode(interfaces$1.ESelectionMode.REMOVE), value: interfaces$1.ESelectionMode.REMOVE }, this._translations.remove)), index.h("refine-selection-tools", { border: true, enabledLayerIds: this.enabledLayerIds, ids: publicNotificationUtils.getSelectionIds(this.selectionSets), layerViews: [this.addresseeLayer], mapView: this.mapView, mode: this._addEnabled ? interfaces$1.ESelectionMode.ADD : interfaces$1.ESelectionMode.REMOVE, ref: (el) => { this._refineTools = el; }, refineMode: interfaces$1.ERefineMode.ALL, refineSelectionSet: this._getRefineSelectionSet(this.selectionSets), useLayerPicker: false })), index.h("br", null), (index.h("calcite-list", { class: "list-border" }, this._getRefineSelectionSetList())))));
3268
- }
3269
- //--------------------------------------------------------------------------
3270
- //
3271
- // Functions (protected)
3272
- //
3273
- //--------------------------------------------------------------------------
3274
- /**
3275
- * Store the Add/Remove mode
3276
- *
3277
- * @protected
3278
- */
3279
- _modeChanged(evt) {
3280
- this._addEnabled = evt.detail === interfaces$1.ESelectionMode.ADD;
3281
- }
3282
- /**
3283
- * Set the refine tools selection mode
3284
- *
3285
- * @protected
3286
- */
3287
- _setSelectionMode(mode) {
3288
- this._refineTools.mode = mode;
3289
- }
3290
- /**
3291
- * Create a list to show the number added/removed/total unique selected
3292
- *
3293
- * @returns the list node
3294
- * @protected
3295
- */
3296
- _getRefineSelectionSetList() {
3297
- const total = publicNotificationUtils.getTotal(this.selectionSets);
3298
- const refineSet = this._getRefineSelectionSet(this.selectionSets);
3299
- const numAdded = (refineSet === null || refineSet === void 0 ? void 0 : refineSet.refineIds.addIds.length) || 0;
3300
- const numRemoved = (refineSet === null || refineSet === void 0 ? void 0 : refineSet.refineIds.removeIds.length) || 0;
3301
- return [(index.h("calcite-list-item", { label: this._translations.featuresAdded.replace("{{n}}", numAdded.toString()) })), (index.h("calcite-list-item", { label: this._translations.featuresRemoved.replace("{{n}}", numRemoved.toString()) })), (index.h("calcite-list-item", { label: this._translations.totalSelected.replace("{{n}}", total.toString()) }))];
3302
- }
3303
- /**
3304
- * Fetch the refine selection set
3305
- *
3306
- * @returns the refine selection set
3307
- * @protected
3308
- */
3309
- _getRefineSelectionSet(selectionSets) {
3310
- let refineSelectionSet;
3311
- selectionSets.some(ss => {
3312
- if (ss.workflowType === interfaces$1.EWorkflowType.REFINE) {
3313
- refineSelectionSet = ss;
3314
- return true;
3315
- }
3316
- });
3317
- return refineSelectionSet;
3318
- }
3319
- /**
3320
- * Remove ids from existing selection sets.
3321
- * Remove any selection sets than have no selected ids
3322
- * This can update any selection set not just the refine set.
3323
- * We do not do something similar for adds as we will only ever add from refine tools to the single REFINE selection set.
3324
- *
3325
- * @param removeIds the ids to remove
3326
- *
3327
- * @protected
3328
- */
3329
- _updateSelectionSets(removeIds) {
3330
- if (removeIds.length > 0) {
3331
- this.selectionSets = this.selectionSets.reduce((prev, cur) => {
3332
- cur.selectedIds = cur.selectedIds.filter(id => removeIds.indexOf(id) < 0);
3333
- if (cur.selectedIds.length > 0 || cur.workflowType === interfaces$1.EWorkflowType.REFINE) {
3334
- prev.push(cur);
2268
+ else {
2269
+ Object.keys(featuresAttrs[0]).forEach(k => {
2270
+ if (featuresAttrs[0].hasOwnProperty(k)) {
2271
+ headerNames.push(k);
3335
2272
  }
3336
- return prev;
3337
- }, []);
3338
- this.selectionSetsChanged.emit(this.selectionSets);
3339
- }
3340
- }
3341
- /**
3342
- * Update the refine selection set with any adds or removes
3343
- *
3344
- * @param addIds any ids to add
3345
- * @param removeIds any ids to remove
3346
- *
3347
- * @returns Promise resolving when function is done
3348
- * @protected
3349
- */
3350
- _updateRefineSelectionSet(addIds, removeIds) {
3351
- const selectionSet = this._getRefineSelectionSet(this.selectionSets);
3352
- this._updateRefineIds(selectionSet, addIds, removeIds);
3353
- this.selectionSetsChanged.emit(this.selectionSets);
3354
- }
3355
- /**
3356
- * Update the ids stored for the refine selection set
3357
- *
3358
- * @param selectionSet the refine selection set
3359
- * @param addIds any ids to add
3360
- * @param removeIds any ids to remove
3361
- *
3362
- * @returns updated selection sets
3363
- * @protected
3364
- */
3365
- _updateRefineIds(selectionSet, addIds, removeIds) {
3366
- // remove ids if they exist in the current add or remove list
3367
- selectionSet.refineIds.addIds = selectionSet.refineIds.addIds.filter(id => removeIds.indexOf(id) < 0);
3368
- selectionSet.refineIds.removeIds = selectionSet.refineIds.removeIds.filter(id => addIds.indexOf(id) < 0);
3369
- const _addIds = [...new Set(selectionSet.refineIds.addIds.concat(addIds))];
3370
- const _removeIds = [...new Set(selectionSet.refineIds.removeIds.concat(removeIds))];
3371
- selectionSet.refineIds = {
3372
- addIds: _addIds.filter(id => _removeIds.indexOf(id) < 0),
3373
- removeIds: _removeIds.filter(id => _addIds.indexOf(id) < 0)
3374
- };
3375
- selectionSet.selectedIds = selectionSet.refineIds.addIds.length > 0 ?
3376
- [...new Set(selectionSet.selectedIds.concat(selectionSet.refineIds.addIds))] :
3377
- selectionSet.selectedIds.filter(id => selectionSet.refineIds.removeIds.indexOf(id) < 0);
3378
- return this.selectionSets.map(ss => {
3379
- return ss.workflowType === interfaces$1.EWorkflowType.REFINE ? selectionSet : ss;
3380
- });
3381
- }
3382
- /**
3383
- * Add a new refine selection set
3384
- *
3385
- * @returns updated selection sets
3386
- * @protected
3387
- */
3388
- _initRefineSelectionSet(selectionSets) {
3389
- return [
3390
- ...selectionSets,
3391
- ({
3392
- buffer: undefined,
3393
- distance: 0,
3394
- download: true,
3395
- geometries: [],
3396
- id: Date.now(),
3397
- label: "Refine",
3398
- layerView: this.addresseeLayer,
3399
- refineSelectLayers: [],
3400
- searchResult: undefined,
3401
- selectedIds: [],
3402
- unit: "feet",
3403
- workflowType: interfaces$1.EWorkflowType.REFINE,
3404
- refineIds: {
3405
- addIds: [],
3406
- removeIds: []
3407
- },
3408
- redoStack: [],
3409
- undoStack: []
3410
- })
3411
- ];
3412
- }
3413
- /**
3414
- * Fetches the component's translations
3415
- *
3416
- * @protected
3417
- */
3418
- async _getTranslations() {
3419
- const translations = await locale.getLocaleComponentStrings(this.el);
3420
- this._translations = translations[0];
3421
- }
3422
- /** Provides access to protected methods for unit testing.
3423
- *
3424
- * @param methodName Name of protected method to run
3425
- * @param arg1 First argument to forward to method, e.g., for "_modeChanged", `ESelectionMode`
3426
- * @returns
3427
- */
3428
- _testAccess(methodName, arg1) {
3429
- switch (methodName) {
3430
- case "_modeChanged":
3431
- return this._modeChanged(arg1);
3432
- case "_setSelectionMode":
3433
- return this._setSelectionMode(arg1);
3434
- // case "_getRefineSelectionSetList":
3435
- // return this._getRefineSelectionSetList();
3436
- // case "_getRefineSelectionSet":
3437
- // return this._getRefineSelectionSet(arg1);
3438
- // case "_updateSelectionSets":
3439
- // return this._updateSelectionSets(arg1);
3440
- // case "_updateRefineSelectionSet":
3441
- // return this._updateRefineSelectionSet(arg1, arg2);
3442
- // case "_updateRefineIds":
3443
- // return this._updateRefineIds(arg1, arg2, arg3);
3444
- // case "_addRefineSelectionSet":
3445
- // return this._addRefineSelectionSet(arg1, arg2);
2273
+ });
3446
2274
  }
3447
- return null;
2275
+ labels.unshift(headerNames);
3448
2276
  }
3449
- get el() { return index.getElement(this); }
3450
- static get watchers() { return {
3451
- "addresseeLayer": ["addresseeLayerWatchHandler"]
3452
- }; }
3453
- };
3454
- RefineSelection.style = refineSelectionCss;
2277
+ return Promise.resolve(labels);
2278
+ }
2279
+ //#endregion
3455
2280
 
3456
- exports.InputMessage = InputMessage;
3457
- exports.MapSelectTools = MapSelectTools;
3458
- exports.Notice = Notice;
3459
- exports.PdfDownload = PdfDownload;
3460
- exports.RefineSelection = RefineSelection;
3461
2281
  exports._typeof_1 = _typeof_1;
2282
+ exports.downloadCSV = downloadCSV;
2283
+ exports.downloadPDF = downloadPDF;