@esri/solutions-components 0.5.3 → 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/dist/cjs/calcite-input-text_5.cjs.entry.js +36 -36
  2. package/dist/cjs/calcite-shell-panel_14.cjs.entry.js +1 -1
  3. package/dist/cjs/solution-configuration.cjs.entry.js +1 -1
  4. package/dist/cjs/solution-contents_3.cjs.entry.js +1 -1
  5. package/dist/cjs/{solution-store-70002b57.js → solution-store-ca4639d5.js} +3 -3
  6. package/dist/collection/components/add-record-modal/test/add-record-modal.e2e.js +24 -0
  7. package/dist/collection/components/add-record-modal/test/add-record-modal.spec.js +32 -0
  8. package/dist/collection/components/buffer-tools/test/buffer-tools.e2e.js +24 -0
  9. package/dist/collection/components/buffer-tools/test/buffer-tools.spec.js +157 -0
  10. package/dist/collection/components/card-manager/test/card-manager.e2e.js +24 -0
  11. package/dist/collection/components/card-manager/test/card-manager.spec.js +32 -0
  12. package/dist/collection/components/comment-card/test/comment-card.e2e.js +24 -0
  13. package/dist/collection/components/comment-card/test/comment-card.spec.js +32 -0
  14. package/dist/collection/components/crowdsource-manager/test/crowdsource-manager.e2e.js +24 -0
  15. package/dist/collection/components/crowdsource-manager/test/crowdsource-manager.spec.js +32 -0
  16. package/dist/collection/components/crowdsource-reporter/test/crowdsource-reporter.e2e.js +24 -0
  17. package/dist/collection/components/crowdsource-reporter/test/crowdsource-reporter.spec.js +32 -0
  18. package/dist/collection/components/deduct-calculator/test/deduct-calculator.e2e.js +24 -0
  19. package/dist/collection/components/deduct-calculator/test/deduct-calculator.spec.js +32 -0
  20. package/dist/collection/components/edit-record-modal/test/edit-record-modal.e2e.js +24 -0
  21. package/dist/collection/components/edit-record-modal/test/edit-record-modal.spec.js +32 -0
  22. package/dist/collection/components/info-card/test/info-card.e2e.js +24 -0
  23. package/dist/collection/components/info-card/test/info-card.spec.js +32 -0
  24. package/dist/collection/components/json-editor/test/json-editor.e2e.js +31 -0
  25. package/dist/collection/components/json-editor/test/json-editor.spec.js +60 -0
  26. package/dist/collection/components/layer-table/test/layer-table.e2e.js +24 -0
  27. package/dist/collection/components/layer-table/test/layer-table.spec.js +32 -0
  28. package/dist/collection/components/list-item/test/list-item.e2e.js +24 -0
  29. package/dist/collection/components/list-item/test/list-item.spec.js +32 -0
  30. package/dist/collection/components/map-card/test/map-card.e2e.js +24 -0
  31. package/dist/collection/components/map-card/test/map-card.spec.js +32 -0
  32. package/dist/collection/components/map-draw-tools/test/map-draw-tools.e2e.js +24 -0
  33. package/dist/collection/components/map-draw-tools/test/map-draw-tools.spec.js +32 -0
  34. package/dist/collection/components/map-layer-picker/test/map-layer-picker.e2e.js +24 -0
  35. package/dist/collection/components/map-layer-picker/test/map-layer-picker.spec.js +109 -0
  36. package/dist/collection/components/map-search/test/map-search.e2e.js +24 -0
  37. package/dist/collection/components/map-search/test/map-search.spec.js +53 -0
  38. package/dist/collection/components/map-select-tools/map-select-tools.js +36 -36
  39. package/dist/collection/components/map-select-tools/test/map-select-tools.e2e.js +24 -0
  40. package/dist/collection/components/map-select-tools/test/map-select-tools.spec.js +349 -0
  41. package/dist/collection/components/media-card/test/media-card.e2e.js +24 -0
  42. package/dist/collection/components/media-card/test/media-card.spec.js +32 -0
  43. package/dist/collection/components/pci-calculator/test/pci-calculator.e2e.js +24 -0
  44. package/dist/collection/components/pci-calculator/test/pci-calculator.spec.js +32 -0
  45. package/dist/collection/components/pdf-download/test/pdf-download.e2e.js +71 -0
  46. package/dist/collection/components/pdf-download/test/pdf-download.spec.js +104 -0
  47. package/dist/collection/components/public-notification/test/public-notification.e2e.js +95 -0
  48. package/dist/collection/components/public-notification/test/public-notification.spec.js +149 -0
  49. package/dist/collection/components/refine-selection/refine-selection.css +85 -85
  50. package/dist/collection/components/solution-configuration/test/solution-configuration.e2e.js +31 -0
  51. package/dist/collection/components/solution-configuration/test/solution-configuration.spec.js +114 -0
  52. package/dist/collection/components/solution-contents/test/solution-contents.e2e.js +89 -0
  53. package/dist/collection/components/solution-contents/test/solution-contents.spec.js +138 -0
  54. package/dist/collection/components/solution-item/test/solution-item.e2e.js +31 -0
  55. package/dist/collection/components/solution-item/test/solution-item.spec.js +72 -0
  56. package/dist/collection/components/solution-item-details/test/solution-item-details.e2e.js +31 -0
  57. package/dist/collection/components/solution-item-details/test/solution-item-details.spec.js +137 -0
  58. package/dist/collection/components/solution-item-icon/test/solution-item-icon.e2e.js +24 -0
  59. package/dist/collection/components/solution-item-icon/test/solution-item-icon.spec.js +34 -0
  60. package/dist/collection/components/solution-item-sharing/test/solution-item-sharing.e2e.js +31 -0
  61. package/dist/collection/components/solution-item-sharing/test/solution-item-sharing.spec.js +49 -0
  62. package/dist/collection/components/solution-organization-variables/test/solution-organization-variables.e2e.js +31 -0
  63. package/dist/collection/components/solution-organization-variables/test/solution-organization-variables.spec.js +60 -0
  64. package/dist/collection/components/solution-resource-item/test/solution-resource-item.e2e.js +31 -0
  65. package/dist/collection/components/solution-resource-item/test/solution-resource-item.spec.js +50 -0
  66. package/dist/collection/components/solution-spatial-ref/test/solution-spatial-ref.e2e.js +31 -0
  67. package/dist/collection/components/solution-spatial-ref/test/solution-spatial-ref.spec.js +170 -0
  68. package/dist/collection/components/solution-template-data/test/solution-template-data.e2e.js +31 -0
  69. package/dist/collection/components/solution-template-data/test/solution-template-data.spec.js +55 -0
  70. package/dist/collection/components/solution-variables/test/solution-variables.e2e.js +31 -0
  71. package/dist/collection/components/solution-variables/test/solution-variables.spec.js +126 -0
  72. package/dist/collection/utils/publicNotificationUtils.js +45 -0
  73. package/dist/collection/utils/templates.e2e.js +25 -0
  74. package/dist/collection/utils/test/csvUtils.spec.js +46 -0
  75. package/dist/collection/utils/test/downloadUtils.spec.js +102 -0
  76. package/dist/collection/utils/test/pciUtils.spec.js +297 -0
  77. package/dist/collection/utils/test/solution-store.spec.js +439 -0
  78. package/dist/components/map-select-tools2.js +36 -36
  79. package/dist/components/solution-store.js +3 -3
  80. package/dist/esm/calcite-input-text_5.entry.js +36 -36
  81. package/dist/esm/calcite-shell-panel_14.entry.js +1 -1
  82. package/dist/esm/solution-configuration.entry.js +1 -1
  83. package/dist/esm/solution-contents_3.entry.js +1 -1
  84. package/dist/esm/{solution-store-5d068b07.js → solution-store-70f874f8.js} +3 -3
  85. package/dist/solutions-components/{p-41802f6b.entry.js → p-16dfb254.entry.js} +1 -1
  86. package/dist/solutions-components/{p-4769a2a5.entry.js → p-5ed755a2.entry.js} +1 -1
  87. package/dist/solutions-components/{p-826a814d.js → p-78719506.js} +2 -2
  88. package/dist/solutions-components/{p-9f620303.entry.js → p-b4b19fd3.entry.js} +1 -1
  89. package/dist/solutions-components/{p-24fe6e1c.entry.js → p-d5d5942d.entry.js} +1 -1
  90. package/dist/solutions-components/solutions-components.esm.js +1 -1
  91. package/dist/solutions-components/utils/common.js +291 -0
  92. package/dist/solutions-components/utils/csvDownload.js +36 -0
  93. package/dist/solutions-components/utils/csvUtils.js +32 -0
  94. package/dist/solutions-components/utils/downloadUtils.js +386 -0
  95. package/dist/solutions-components/utils/interfaces.js +56 -0
  96. package/dist/solutions-components/utils/languageUtil.js +85 -0
  97. package/dist/solutions-components/utils/loadModules.js +20 -0
  98. package/dist/solutions-components/utils/locale.js +56 -0
  99. package/dist/solutions-components/utils/mapViewUtils.js +140 -0
  100. package/dist/solutions-components/utils/pciUtils.js +837 -0
  101. package/dist/solutions-components/utils/pdfUtils.js +62 -0
  102. package/dist/solutions-components/utils/publicNotificationStore.js +38 -0
  103. package/dist/solutions-components/utils/publicNotificationUtils.js +45 -0
  104. package/dist/solutions-components/utils/queryUtils.js +148 -0
  105. package/dist/solutions-components/utils/solution-store.js +579 -0
  106. package/dist/solutions-components/utils/templates.e2e.js +25 -0
  107. package/dist/solutions-components/utils/templates.js +341 -0
  108. package/dist/solutions-components/utils/test/csvUtils.spec.js +46 -0
  109. package/dist/solutions-components/utils/test/downloadUtils.spec.js +102 -0
  110. package/dist/solutions-components/utils/test/mocks/jsApi.js +74 -0
  111. package/dist/solutions-components/utils/test/pciUtils.spec.js +297 -0
  112. package/dist/solutions-components/utils/test/solution-store.spec.js +439 -0
  113. package/dist/solutions-components/utils/test/testUtils.js +135 -0
  114. package/dist/solutions-components/utils/types.js +14 -0
  115. package/dist/solutions-components_commit.txt +7 -0
  116. package/package.json +7 -7
@@ -0,0 +1,291 @@
1
+ /** @license
2
+ * Copyright 2022 Esri
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ /*
17
+ | Helper functions from solutions-common
18
+ */
19
+ import { convertItemResourceToStorageResource, EFileType, updateItem, SolutionTemplateFormatVersion } from "@esri/solution-common";
20
+ import { EUpdateType } from "./interfaces";
21
+ import { addItemResource, removeItemResource, updateItemResource } from "@esri/arcgis-rest-portal";
22
+ /**
23
+ * Get an array from a list of nodes
24
+ *
25
+ * @param nodeList list of nodes
26
+ *
27
+ * @returns array of nodes
28
+ */
29
+ export function nodeListToArray(nodeList) {
30
+ return Array.isArray(nodeList) ? nodeList : Array.from(nodeList);
31
+ }
32
+ /**
33
+ * Saves any updated templates to the current solution item
34
+ *
35
+ * @param templates the updated templates array
36
+ * @param thumbnailurl url for the items thumbnail
37
+ * @param id for the solution item
38
+ * @param data the current solution items data
39
+ * @param authentication credentials for the request
40
+ * @param translations translated strings for messages
41
+ *
42
+ * @returns a promise that will resolve with a success true/false response
43
+ */
44
+ export async function save(id, data, models, authentication, translations) {
45
+ const itemInfo = { id };
46
+ const params = {
47
+ text: data
48
+ };
49
+ await _updateResources(id, models, data, authentication);
50
+ // TODO compare data with the source data in the model...should be able to
51
+ // understand if it has changes
52
+ // TODO...only update if has changes
53
+ const updateResults = await updateItem(itemInfo, authentication, undefined, params);
54
+ return Promise.resolve({
55
+ success: updateResults.success,
56
+ message: updateResults.success ? translations.editsSaved : translations.saveFailed
57
+ });
58
+ }
59
+ /**
60
+ * Updates the solutions thumbnail and data resources
61
+ *
62
+ * @param solutionId id for the solution
63
+ * @param models the models for the solutions templates
64
+ * @param data the current data object for the solution
65
+ * @param authentication credentials for the request
66
+ *
67
+ * @returns a promise that will resolve with response results
68
+ */
69
+ export async function _updateResources(solutionId, models, data, authentication) {
70
+ return new Promise((resolve, reject) => {
71
+ const promises = [];
72
+ Object.keys(models).forEach(itemId => {
73
+ const model = models[itemId];
74
+ promises.push(_updateThumbnailResource(solutionId, model, data, authentication));
75
+ _updateFileResources(solutionId, model, data, promises, authentication);
76
+ });
77
+ if (promises.length > 0) {
78
+ Promise.all(promises).then(resolve, reject);
79
+ }
80
+ else {
81
+ resolve({ success: true });
82
+ }
83
+ });
84
+ }
85
+ /**
86
+ * Updates the solutions thumbnail and data resources
87
+ *
88
+ * @param solutionId id for the solution
89
+ * @param model the model for the current solution template
90
+ * @param authentication credentials for the request
91
+ *
92
+ * @returns a promise that will resolve with response results
93
+ */
94
+ function _updateThumbnailResource(solutionId, model, data, authentication) {
95
+ return new Promise((resolve, reject) => {
96
+ if (model.thumbnailNew) {
97
+ if (model.thumbnailOrigin) {
98
+ const name = model.thumbnailOrigin.name;
99
+ const opts = {
100
+ id: solutionId,
101
+ authentication,
102
+ resource: model.thumbnailNew,
103
+ name
104
+ };
105
+ const resources = model.resources.filter(r => r.endsWith(name));
106
+ if (resources.length === 1) {
107
+ const nameParts = resources[0].split("/");
108
+ if (nameParts.length === 2) {
109
+ opts.prefix = nameParts[0];
110
+ }
111
+ }
112
+ updateItemResource(opts).then(resolve, reject);
113
+ }
114
+ else {
115
+ // if the item does not have an origin thumb we need to add rather than update
116
+ const resourceFilePath = {
117
+ type: EFileType.Thumbnail,
118
+ folder: null,
119
+ filename: model.thumbnailNew.name,
120
+ url: "",
121
+ blob: model.thumbnailNew,
122
+ updateType: EUpdateType.Add
123
+ };
124
+ _add(solutionId, model, data, resourceFilePath, authentication, true).then(resolve, reject);
125
+ }
126
+ }
127
+ else {
128
+ resolve({ success: true });
129
+ }
130
+ });
131
+ }
132
+ /**
133
+ * Updates the solutions data resources
134
+ *
135
+ * This function will update the provided promises argument by adding add/remove/update promises
136
+ *
137
+ * @param solutionId id for the solution
138
+ * @param model the model for the current solution template
139
+ * @param data the current data object for the solution
140
+ * @param promises list of add/remove/update promises
141
+ * @param authentication credentials for the request
142
+ */
143
+ function _updateFileResources(solutionId, model, data, promises, authentication) {
144
+ // add/remove/update resources
145
+ model.resourceFilePaths.forEach(resourceFilePath => {
146
+ switch (resourceFilePath.updateType) {
147
+ case EUpdateType.Add:
148
+ promises.push(_add(solutionId, model, data, resourceFilePath, authentication));
149
+ break;
150
+ case EUpdateType.Remove:
151
+ promises.push(_remove(solutionId, model, data, resourceFilePath, authentication));
152
+ break;
153
+ case EUpdateType.Update:
154
+ promises.push(_update(solutionId, model, resourceFilePath, authentication));
155
+ break;
156
+ default:
157
+ break;
158
+ }
159
+ });
160
+ }
161
+ /**
162
+ * Generates add resource request
163
+ *
164
+ * @param solutionId id for the solution
165
+ * @param model the model for the current solution template
166
+ * @param data the current data object for the solution
167
+ * @param resourceFilePath resource file info
168
+ * @param authentication credentials for the request
169
+ *
170
+ * @returns a promise that will resolve to a response with success true/false
171
+ */
172
+ function _add(solutionId, model, data, resourceFilePath, authentication, isThumbnail = false) {
173
+ return new Promise((resolve, reject) => {
174
+ const storageName = convertItemResourceToStorageResource(model.itemId + isThumbnail.toString() ? "_info_thumbnail" :
175
+ (resourceFilePath.blob.name === resourceFilePath.filename
176
+ ? "_info_data"
177
+ : "_info_dataz"), resourceFilePath.blob.name, SolutionTemplateFormatVersion);
178
+ const opts = {
179
+ id: solutionId,
180
+ authentication,
181
+ resource: resourceFilePath.blob,
182
+ name: storageName.filename,
183
+ params: {}
184
+ };
185
+ if (storageName.folder) {
186
+ opts.params = {
187
+ resourcesPrefix: storageName.folder
188
+ };
189
+ }
190
+ addItemResource(opts).then(results => {
191
+ var _a;
192
+ if (results.success) {
193
+ _updateTemplateResourcePaths(data, model.itemId, EUpdateType.Add, ((_a = opts.params) === null || _a === void 0 ? void 0 : _a.resourcesPrefix) ? `${opts.params.resourcesPrefix}/${opts.name}` : opts.name, "");
194
+ }
195
+ resolve(results);
196
+ }, reject);
197
+ });
198
+ }
199
+ /**
200
+ * Generates add resource request
201
+ *
202
+ * @param solutionId id for the solution
203
+ * @param model the model for the current solution template
204
+ * @param data the current data object for the solution
205
+ * @param resourceFilePath resource file info
206
+ * @param authentication credentials for the request
207
+ *
208
+ * @returns a promise that will resolve to a response with success true/false
209
+ */
210
+ function _remove(solutionId, model, data, resourceFilePath, authentication) {
211
+ return new Promise((resolve, reject) => {
212
+ const name = resourceFilePath.filename;
213
+ const resources = model.resources.filter(r => r.endsWith(name));
214
+ if (resources.length > 0) {
215
+ const opts = {
216
+ id: solutionId,
217
+ authentication,
218
+ resource: resources[0]
219
+ };
220
+ removeItemResource(opts).then(results => {
221
+ if (results.success) {
222
+ _updateTemplateResourcePaths(data, model.itemId, EUpdateType.Remove, resources[0], "");
223
+ }
224
+ resolve(results);
225
+ }, reject);
226
+ }
227
+ else {
228
+ resolve({ success: false });
229
+ }
230
+ });
231
+ }
232
+ /**
233
+ * Generates update resource request
234
+ *
235
+ * @param solutionId id for the solution
236
+ * @param model the model for the current solution template
237
+ * @param resourceFilePath resource file info
238
+ * @param authentication credentials for the request
239
+ *
240
+ * @returns a promise that will resolve to a response with success true/false
241
+ */
242
+ function _update(solutionId, model, resourceFilePath, authentication) {
243
+ const sourceFileName = resourceFilePath.sourceFileName;
244
+ const opts = {
245
+ id: solutionId,
246
+ authentication,
247
+ resource: resourceFilePath.blob,
248
+ name: sourceFileName
249
+ };
250
+ const resources = model.resources.filter(r => r.endsWith(sourceFileName));
251
+ if (resources.length === 1) {
252
+ const nameParts = resources[0].split("/");
253
+ if (nameParts.length === 2) {
254
+ opts.prefix = nameParts[0];
255
+ }
256
+ }
257
+ return updateItemResource(opts);
258
+ }
259
+ /**
260
+ * Update the resources paths for a given template
261
+ *
262
+ * This function will update the provided data argument with any new or removed resource paths
263
+ *
264
+ * @param data the current data object for the solution
265
+ * @param id the id of the current template
266
+ * @param updateType add/update/remove
267
+ * @param path the resource prefix/name
268
+ * @param sourceFileName from the current resourceFilePath
269
+ *
270
+ */
271
+ function _updateTemplateResourcePaths(data, id, updateType, path, sourceFileName) {
272
+ data.templates = data.templates.map(t => {
273
+ if (t.itemId === id) {
274
+ switch (updateType) {
275
+ case EUpdateType.Add:
276
+ t.resources.push(path);
277
+ break;
278
+ case EUpdateType.Update:
279
+ t.resources = t.resources.filter(r => r.indexOf(sourceFileName) < 0);
280
+ t.resources.push(path);
281
+ break;
282
+ case EUpdateType.Remove:
283
+ t.resources = t.resources.filter(r => r.indexOf(path) < 0);
284
+ break;
285
+ default:
286
+ break;
287
+ }
288
+ }
289
+ return t;
290
+ });
291
+ }
@@ -0,0 +1,36 @@
1
+ /** @license
2
+ * Copyright 2022 Esri
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ //#region Public functions
17
+ /**
18
+ * Download the CSV file
19
+ *
20
+ * @param title Title (without file extension) to use for file; defaults to "export"
21
+ * @param outputLines Lines of output to write to file
22
+ *
23
+ * @see {@link https://medium.com/@danny.pule/export-json-to-csv-file-using-javascript-a0b7bc5b00d2}
24
+ */
25
+ export function downloadCSVFile(title, outputLines) {
26
+ const link = document.createElement("a");
27
+ if (link.download !== undefined) {
28
+ link.href = URL.createObjectURL(new Blob(outputLines, { type: "text/csv;charset=utf-8;" }));
29
+ link.download = `${title}.csv` || "export.csv";
30
+ link.style.visibility = "hidden";
31
+ document.body.appendChild(link);
32
+ link.click();
33
+ document.body.removeChild(link);
34
+ }
35
+ }
36
+ //#endregion
@@ -0,0 +1,32 @@
1
+ /** @license
2
+ * Copyright 2022 Esri
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ //#region Declarations
17
+ import * as csvDownload from "./csvDownload";
18
+ //#endregion
19
+ //#region Public functions
20
+ /**
21
+ * Export a csv of the attributes from the features that match the provided ids
22
+ *
23
+ * @param filename Name to use for file
24
+ * @param labels Labels to write
25
+ */
26
+ export function exportCSV(filename, labels) {
27
+ // Format values to string so it doesn't get tripped up when a value has a comma
28
+ // another option could be to export with a different delimiter
29
+ const outputLines = labels.map(label => Object.values(label).map(v => `"${v}"`).join(",") + "\r\n");
30
+ csvDownload.downloadCSVFile(filename, outputLines);
31
+ }
32
+ //#endregion