@esri/hub-common 13.21.0 → 13.21.1-hotfix.20230728
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/content/_internal/index.js +493 -0
- package/dist/esm/content/_internal/index.js.map +1 -0
- package/dist/esm/content/_internal.js +493 -0
- package/dist/esm/content/_internal.js.map +1 -0
- package/dist/esm/core/schemas/hubproject.js +300 -0
- package/dist/esm/core/schemas/hubproject.js.map +1 -0
- package/dist/esm/core/types/index.js +1 -0
- package/dist/esm/core/types/index.js.map +1 -1
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/initiatives/HubInitiative.js +5 -12
- package/dist/esm/initiatives/HubInitiative.js.map +1 -1
- package/dist/esm/initiatives/view.js +13 -35
- package/dist/esm/initiatives/view.js.map +1 -1
- package/dist/esm/projects/HubProject.js +4 -11
- package/dist/esm/projects/HubProject.js.map +1 -1
- package/dist/esm/projects/view.js +13 -35
- package/dist/esm/projects/view.js.map +1 -1
- package/dist/esm/search/_internal/commonHelpers/expandApi.js +53 -0
- package/dist/esm/search/_internal/commonHelpers/expandApi.js.map +1 -0
- package/dist/esm/search/_internal/utils.js +95 -0
- package/dist/esm/search/_internal/utils.js.map +1 -0
- package/dist/esm/sites/_internal/applyDefaultCollectionMigration.js +3 -0
- package/dist/esm/sites/_internal/applyDefaultCollectionMigration.js.map +1 -1
- package/dist/esm/sites/_internal/catalogMigration.js +50 -0
- package/dist/esm/sites/_internal/catalogMigration.js.map +1 -0
- package/dist/esm/urls/getCardModelUrl.js +76 -0
- package/dist/esm/urls/getCardModelUrl.js.map +1 -0
- package/dist/esm/urls/index.js +3 -0
- package/dist/esm/urls/index.js.map +1 -1
- package/dist/node/content/_internal/index.js +499 -0
- package/dist/node/content/_internal/index.js.map +1 -0
- package/dist/node/content/_internal.js +499 -0
- package/dist/node/content/_internal.js.map +1 -0
- package/dist/node/core/schemas/hubproject.js +303 -0
- package/dist/node/core/schemas/hubproject.js.map +1 -0
- package/dist/node/core/types/index.js +1 -0
- package/dist/node/core/types/index.js.map +1 -1
- package/dist/node/index.js +3 -0
- package/dist/node/index.js.map +1 -1
- package/dist/node/initiatives/HubInitiative.js +4 -11
- package/dist/node/initiatives/HubInitiative.js.map +1 -1
- package/dist/node/initiatives/view.js +13 -35
- package/dist/node/initiatives/view.js.map +1 -1
- package/dist/node/projects/HubProject.js +3 -10
- package/dist/node/projects/HubProject.js.map +1 -1
- package/dist/node/projects/view.js +13 -35
- package/dist/node/projects/view.js.map +1 -1
- package/dist/node/search/_internal/commonHelpers/expandApi.js +57 -0
- package/dist/node/search/_internal/commonHelpers/expandApi.js.map +1 -0
- package/dist/node/search/_internal/utils.js +101 -0
- package/dist/node/search/_internal/utils.js.map +1 -0
- package/dist/node/sites/_internal/applyDefaultCollectionMigration.js +3 -0
- package/dist/node/sites/_internal/applyDefaultCollectionMigration.js.map +1 -1
- package/dist/node/sites/_internal/catalogMigration.js +54 -0
- package/dist/node/sites/_internal/catalogMigration.js.map +1 -0
- package/dist/node/urls/getCardModelUrl.js +81 -0
- package/dist/node/urls/getCardModelUrl.js.map +1 -0
- package/dist/node/urls/index.js +3 -0
- package/dist/node/urls/index.js.map +1 -1
- package/dist/types/content/_internal/index.d.ts +351 -0
- package/dist/types/content/_internal.d.ts +343 -0
- package/dist/types/core/behaviors/IWithCardBehavior.d.ts +3 -10
- package/dist/types/core/schemas/hubproject.d.ts +10 -0
- package/dist/types/core/types/IHubCardViewModel.d.ts +16 -0
- package/dist/types/core/types/index.d.ts +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/initiatives/HubInitiative.d.ts +6 -13
- package/dist/types/initiatives/view.d.ts +5 -10
- package/dist/types/projects/HubProject.d.ts +3 -10
- package/dist/types/projects/view.d.ts +5 -10
- package/dist/types/search/_internal/commonHelpers/expandApi.d.ts +14 -0
- package/dist/types/search/_internal/utils.d.ts +28 -0
- package/dist/types/sites/_internal/catalogMigration.d.ts +9 -0
- package/dist/types/urls/getCardModelUrl.d.ts +21 -0
- package/package.json +1 -1
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Use this module for functions that do not need to be used by consumers (yet),
|
|
3
|
+
* but may be shared between hub.js modules, and/or need to be tested
|
|
4
|
+
* to get 100% coverage w/o writing cumbersome tests of higher level functions.
|
|
5
|
+
*
|
|
6
|
+
* Consuming will not be able to import these functions.
|
|
7
|
+
*
|
|
8
|
+
* It's probably a good pattern to add functions here first and then
|
|
9
|
+
* move them to index.ts only when they are needed by a consumer.
|
|
10
|
+
*/
|
|
11
|
+
import { parseServiceUrl } from "@esri/arcgis-rest-feature-layer";
|
|
12
|
+
import { PublisherSource } from "../../core";
|
|
13
|
+
import { bBoxToExtent, extentToBBox, extentToPolygon, getExtentCenter, isBBox, } from "../../extent";
|
|
14
|
+
import { getFamily } from "../get-family";
|
|
15
|
+
import { getProp } from "../../objects";
|
|
16
|
+
/**
|
|
17
|
+
* Create a new content with updated boundary properties
|
|
18
|
+
* @param content original content
|
|
19
|
+
* @param boundary boundary provenance
|
|
20
|
+
* @returns
|
|
21
|
+
* @private
|
|
22
|
+
*/
|
|
23
|
+
export const setContentBoundary = (content, boundary) => {
|
|
24
|
+
// update content's item and boundary
|
|
25
|
+
const properties = Object.assign(Object.assign({}, (content.item.properties || {})), { boundary });
|
|
26
|
+
const item = Object.assign(Object.assign({}, content.item), { properties });
|
|
27
|
+
const updated = Object.assign(Object.assign({}, content), { item });
|
|
28
|
+
return Object.assign(Object.assign({}, updated), { boundary: getContentBoundary(item) });
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* get a content's boundary based on the item's boundary property
|
|
32
|
+
* @param item
|
|
33
|
+
* @returns
|
|
34
|
+
* @private
|
|
35
|
+
*/
|
|
36
|
+
export const getContentBoundary = (item) => {
|
|
37
|
+
var _a;
|
|
38
|
+
const bBox = item.extent;
|
|
39
|
+
const isValidItemExtent = isBBox(bBox);
|
|
40
|
+
// user specified provenance is stored in item.properties
|
|
41
|
+
const provenance = ((_a = item.properties) === null || _a === void 0 ? void 0 : _a.boundary) ||
|
|
42
|
+
// but we default to item if the item has an extent
|
|
43
|
+
(isValidItemExtent ? "item" : undefined);
|
|
44
|
+
const boundary = {
|
|
45
|
+
geometry: null,
|
|
46
|
+
provenance,
|
|
47
|
+
};
|
|
48
|
+
if (provenance === "item" && isValidItemExtent) {
|
|
49
|
+
const extent = bBoxToExtent(bBox);
|
|
50
|
+
const center = getExtentCenter(extent);
|
|
51
|
+
boundary.center = [center.x, center.y];
|
|
52
|
+
boundary.geometry = Object.assign(Object.assign({}, extentToPolygon(extent)), { type: "polygon" });
|
|
53
|
+
boundary.spatialReference = boundary.geometry.spatialReference;
|
|
54
|
+
}
|
|
55
|
+
return boundary;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Determine if we are in an enterprise environment
|
|
59
|
+
* NOTE: when no request options are provided, the underlying
|
|
60
|
+
* request functions assume that we are online in production
|
|
61
|
+
* so we only want use enterprise logic if isPortal is explicitly defined
|
|
62
|
+
* @param requestOptions
|
|
63
|
+
* @returns
|
|
64
|
+
* @private
|
|
65
|
+
*/
|
|
66
|
+
export const isPortal = (requestOptions) => {
|
|
67
|
+
return requestOptions && requestOptions.isPortal;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Determine if we can use the Hub API for an item, i.e.
|
|
71
|
+
* the item is public and we are not in an enterprise environment
|
|
72
|
+
* @param item
|
|
73
|
+
* @param requestOptions
|
|
74
|
+
* @returns
|
|
75
|
+
* @private
|
|
76
|
+
*/
|
|
77
|
+
export const canUseHubApiForItem = (item, requestOptions) => {
|
|
78
|
+
return !!item && item.access === "public" && !isPortal(requestOptions);
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Returns whether or not an item is a proxied csv
|
|
82
|
+
*
|
|
83
|
+
* @param item
|
|
84
|
+
* @param requestOptions Hub Request Options (including whether we're in portal)
|
|
85
|
+
* @returns
|
|
86
|
+
* @private
|
|
87
|
+
*/
|
|
88
|
+
export const isProxiedCSV = (item, requestOptions) => !isPortal(requestOptions) &&
|
|
89
|
+
item.access === "public" &&
|
|
90
|
+
item.type === "CSV" &&
|
|
91
|
+
item.size <= 5000000;
|
|
92
|
+
/**
|
|
93
|
+
* Get the relative URL to use for the item in a hub site
|
|
94
|
+
* @param type
|
|
95
|
+
* @param identifier
|
|
96
|
+
* @param typeKeywords
|
|
97
|
+
* @returns
|
|
98
|
+
* @private
|
|
99
|
+
*/
|
|
100
|
+
export const getHubRelativeUrl = (type, identifier, typeKeywords) => {
|
|
101
|
+
// solution types have their own logic
|
|
102
|
+
let contentUrl = getSolutionUrl(type, identifier, typeKeywords) ||
|
|
103
|
+
getInitiativeTemplateUrl(type, identifier, typeKeywords);
|
|
104
|
+
if (!contentUrl) {
|
|
105
|
+
const family = getFamily(type);
|
|
106
|
+
const familiesWithPluralizedRoute = [
|
|
107
|
+
"app",
|
|
108
|
+
"dataset",
|
|
109
|
+
"document",
|
|
110
|
+
"map",
|
|
111
|
+
"template",
|
|
112
|
+
"project",
|
|
113
|
+
];
|
|
114
|
+
// default to the catchall content route
|
|
115
|
+
let path = "/content";
|
|
116
|
+
if (family === "feedback") {
|
|
117
|
+
// the exception
|
|
118
|
+
path = "/feedback/surveys";
|
|
119
|
+
}
|
|
120
|
+
else if (isPageType(type, typeKeywords)) {
|
|
121
|
+
// pages are in the document family,
|
|
122
|
+
// but instead of showing the page's metadata on /documents/about
|
|
123
|
+
// but we render the page on the pages route
|
|
124
|
+
path = "/pages";
|
|
125
|
+
}
|
|
126
|
+
else if (familiesWithPluralizedRoute.indexOf(family) > -1) {
|
|
127
|
+
// the rule: route name is plural of family name
|
|
128
|
+
path = `/${family}s`;
|
|
129
|
+
}
|
|
130
|
+
contentUrl = `${path}/${identifier}`;
|
|
131
|
+
}
|
|
132
|
+
return contentUrl;
|
|
133
|
+
};
|
|
134
|
+
/**
|
|
135
|
+
* Is this content type a page?
|
|
136
|
+
* @param type
|
|
137
|
+
* @returns
|
|
138
|
+
* @private
|
|
139
|
+
*/
|
|
140
|
+
export const isPageType = (type, typeKeywords = []) => ["Hub Page", "Site Page"].includes(type) || typeKeywords.includes("hubPage");
|
|
141
|
+
const getSolutionUrl = (type, identifier, typeKeywords) => {
|
|
142
|
+
let hubUrl;
|
|
143
|
+
if (type === "Solution") {
|
|
144
|
+
// solution types are now in the Template family
|
|
145
|
+
// we send all except the deployed solution items to the route for initiative templates
|
|
146
|
+
if ((typeKeywords === null || typeKeywords === void 0 ? void 0 : typeKeywords.indexOf("Deployed")) > -1) {
|
|
147
|
+
// deployed solutions go to the generic content route
|
|
148
|
+
hubUrl = `/content/${identifier}/about`;
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
hubUrl = `/templates/${identifier}/about`;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
else if (type === "Web Mapping Application" &&
|
|
155
|
+
(typeKeywords === null || typeKeywords === void 0 ? void 0 : typeKeywords.indexOf("hubSolutionTemplate")) > -1) {
|
|
156
|
+
hubUrl = `/templates/${identifier}/about`;
|
|
157
|
+
}
|
|
158
|
+
return hubUrl;
|
|
159
|
+
};
|
|
160
|
+
const getInitiativeTemplateUrl = (type, identifier, typeKeywords) => {
|
|
161
|
+
if ((type === "Hub Initiative" &&
|
|
162
|
+
(typeKeywords === null || typeKeywords === void 0 ? void 0 : typeKeywords.indexOf("hubInitiativeTemplate")) > -1) ||
|
|
163
|
+
type === "Hub Initiative Template") {
|
|
164
|
+
return `/initiatives/templates/${identifier}/about`;
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
/**
|
|
168
|
+
* Get the path to a well known metadata value
|
|
169
|
+
* @param identifier identifier for well known metadata value
|
|
170
|
+
* @returns path to be used like get(metadata, path)
|
|
171
|
+
* @private
|
|
172
|
+
*/
|
|
173
|
+
export function getMetadataPath(identifier) {
|
|
174
|
+
// NOTE: i have verified that this will work regardless of the "Metadata Style" set on the org
|
|
175
|
+
const metadataPaths = {
|
|
176
|
+
updateFrequency: "metadata.dataIdInfo.resMaint.maintFreq.MaintFreqCd.@_value",
|
|
177
|
+
reviseDate: "metadata.dataIdInfo.idCitation.date.reviseDate",
|
|
178
|
+
pubDate: "metadata.dataIdInfo.idCitation.date.pubDate",
|
|
179
|
+
createDate: "metadata.dataIdInfo.idCitation.date.createDate",
|
|
180
|
+
metadataUpdateFrequency: "metadata.mdMaint.maintFreq.MaintFreqCd.@_value",
|
|
181
|
+
metadataUpdatedDate: "metadata.mdDateSt",
|
|
182
|
+
};
|
|
183
|
+
return metadataPaths[identifier];
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Get a well known value from metadata
|
|
187
|
+
* @param metadata
|
|
188
|
+
* @param identifier identifier for well known metadata value
|
|
189
|
+
* @returns
|
|
190
|
+
* @private
|
|
191
|
+
*/
|
|
192
|
+
export function getValueFromMetadata(metadata, identifier) {
|
|
193
|
+
const path = getMetadataPath(identifier);
|
|
194
|
+
return path && getProp(metadata, path);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Date precisions
|
|
198
|
+
*/
|
|
199
|
+
export var DatePrecision;
|
|
200
|
+
(function (DatePrecision) {
|
|
201
|
+
DatePrecision["Year"] = "year";
|
|
202
|
+
DatePrecision["Month"] = "month";
|
|
203
|
+
DatePrecision["Day"] = "day";
|
|
204
|
+
DatePrecision["Time"] = "time";
|
|
205
|
+
})(DatePrecision || (DatePrecision = {}));
|
|
206
|
+
/**
|
|
207
|
+
* Parses an ISO8601 date string into a date and a precision.
|
|
208
|
+
* This is because a) if somone entered 2018, we want to respect that and not treat it as the same as 2018-01-01
|
|
209
|
+
* and b) you cannot naively call new Date with an ISO 8601 string that does not include time information
|
|
210
|
+
* For example, when I, here in mountain time, do new Date('2018').getFullYear() I get "2017".
|
|
211
|
+
* This is because when you do not provide time or timezone info, UTC is assumed, so new Date('2018') is 2018-01-01T00:00:00 in UTC
|
|
212
|
+
* which is actually 7 hours earlier here in mountain time.
|
|
213
|
+
*
|
|
214
|
+
* @param {string} isoString
|
|
215
|
+
* @return { date: Date, precision: DatePrecision }
|
|
216
|
+
* @private
|
|
217
|
+
*/
|
|
218
|
+
export function parseISODateString(isoString) {
|
|
219
|
+
isoString = `${isoString}`;
|
|
220
|
+
let date;
|
|
221
|
+
let precision;
|
|
222
|
+
if (/^\d{4}$/.test(isoString)) {
|
|
223
|
+
// yyyy
|
|
224
|
+
date = new Date(+isoString, 0, 1);
|
|
225
|
+
precision = DatePrecision.Year;
|
|
226
|
+
}
|
|
227
|
+
else if (/^\d{4}-\d{1,2}$/.test(isoString)) {
|
|
228
|
+
// yyyy-mm
|
|
229
|
+
const parts = isoString.split("-");
|
|
230
|
+
date = new Date(+parts[0], +parts[1] - 1, 1);
|
|
231
|
+
precision = DatePrecision.Month;
|
|
232
|
+
}
|
|
233
|
+
else if (/^\d{4}-\d{1,2}-\d{1,2}$/.test(isoString)) {
|
|
234
|
+
// yyyy-mm-dd
|
|
235
|
+
const parts = isoString.split("-");
|
|
236
|
+
date = new Date(+parts[0], +parts[1] - 1, +parts[2]);
|
|
237
|
+
precision = DatePrecision.Day;
|
|
238
|
+
}
|
|
239
|
+
else if (!Number.isNaN(Date.parse(isoString))) {
|
|
240
|
+
// any other string parsable to a valid date
|
|
241
|
+
date = new Date(isoString);
|
|
242
|
+
precision = isoString.includes("T")
|
|
243
|
+
? DatePrecision.Time
|
|
244
|
+
: DatePrecision.Day;
|
|
245
|
+
}
|
|
246
|
+
return date && precision && { date, precision };
|
|
247
|
+
}
|
|
248
|
+
// NOTE: IItem has spatialRefernce: ISpatialReference, but
|
|
249
|
+
// the portal REST API returns spatialReference as as string
|
|
250
|
+
// that is always either WKID like "102100" or the name of a
|
|
251
|
+
// WKT like "NAD_1983_HARN_StatePlane_Hawaii_3_FIPS_5103_Feet".
|
|
252
|
+
// We only coerce WKIDs into a ISpatialReference objects since we
|
|
253
|
+
// can't easily lookup a complete WKT.
|
|
254
|
+
/**
|
|
255
|
+
* Get the spatial reference as an object for an item
|
|
256
|
+
* @param item
|
|
257
|
+
* @returns spatial reference object
|
|
258
|
+
* @private
|
|
259
|
+
*/
|
|
260
|
+
export const getItemSpatialReference = (item) => {
|
|
261
|
+
const spatialReference = item.spatialReference;
|
|
262
|
+
if (!spatialReference || typeof spatialReference === "object") {
|
|
263
|
+
// no need to try and transform this into an ISpatialReference
|
|
264
|
+
return spatialReference;
|
|
265
|
+
}
|
|
266
|
+
// otherwise it _should_ be a string (if coming form the REST API)
|
|
267
|
+
// but we force it in case it was set to a number somewhere outside of TS
|
|
268
|
+
const spatialReferenceString = spatialReference + "";
|
|
269
|
+
const wkid = parseInt(spatialReferenceString, 10);
|
|
270
|
+
return isNaN(wkid)
|
|
271
|
+
? // It looks like the portal api returns the name of a WKT, but we'd
|
|
272
|
+
// need to perform a lookup to get the full WKT. Return null for now.
|
|
273
|
+
null
|
|
274
|
+
: //
|
|
275
|
+
{ wkid };
|
|
276
|
+
};
|
|
277
|
+
/**
|
|
278
|
+
* Extracts additional resources from the provided metadata
|
|
279
|
+
* and transforms them into a hub-friendly format.
|
|
280
|
+
*
|
|
281
|
+
* Returns null if no resources are available
|
|
282
|
+
*
|
|
283
|
+
* @param item
|
|
284
|
+
* @param metadata formal metadata
|
|
285
|
+
* @returns
|
|
286
|
+
* @private
|
|
287
|
+
*/
|
|
288
|
+
export const getAdditionalResources = (item, metadata, requestOptions) => {
|
|
289
|
+
const rawResources = extractRawResources(metadata);
|
|
290
|
+
return (rawResources &&
|
|
291
|
+
rawResources.map((resource) => ({
|
|
292
|
+
name: resource.orName,
|
|
293
|
+
url: getAdditionalResourceUrl(resource, item, requestOptions),
|
|
294
|
+
isDataSource: isDataSourceOfItem(resource, item),
|
|
295
|
+
})));
|
|
296
|
+
};
|
|
297
|
+
/**
|
|
298
|
+
* @private
|
|
299
|
+
*
|
|
300
|
+
* Extracts additional resources from formal item metadata.
|
|
301
|
+
* If none are available, null is returned.
|
|
302
|
+
*
|
|
303
|
+
* @param metadata the formal item metadata
|
|
304
|
+
* @returns an array of all additional resources, or null
|
|
305
|
+
*/
|
|
306
|
+
export const extractRawResources = (metadata) => {
|
|
307
|
+
const rawResources = [];
|
|
308
|
+
// The property path to additional resources should be fairly simple.
|
|
309
|
+
// In many cases, it's just `metadata.metadata.distInfo.distTranOps.onLineSrc`.
|
|
310
|
+
// However, since `distInfo`, `distTranOps` and `onLineSrc` can be either
|
|
311
|
+
// Objects OR Arrays, we have to do all this looping.
|
|
312
|
+
castToArray(getProp(metadata, "metadata.distInfo") || []).forEach((distInfo) => {
|
|
313
|
+
castToArray(distInfo.distTranOps || []).forEach((distTranOps) => {
|
|
314
|
+
castToArray(distTranOps.onLineSrc || []).forEach((onLineSrc) => {
|
|
315
|
+
rawResources.push(onLineSrc);
|
|
316
|
+
});
|
|
317
|
+
});
|
|
318
|
+
});
|
|
319
|
+
return rawResources.length ? rawResources : null;
|
|
320
|
+
};
|
|
321
|
+
/**
|
|
322
|
+
* @private
|
|
323
|
+
*
|
|
324
|
+
* Arrays are returned as-is.
|
|
325
|
+
* Objects are wrapped into a 1 element array.
|
|
326
|
+
*
|
|
327
|
+
* @param objectOrArray
|
|
328
|
+
* @returns the casted array
|
|
329
|
+
*/
|
|
330
|
+
const castToArray = (objectOrArray) => {
|
|
331
|
+
return Array.isArray(objectOrArray) ? objectOrArray : [objectOrArray];
|
|
332
|
+
};
|
|
333
|
+
/**
|
|
334
|
+
* Determines whether a raw additional resource (i.e. extracted out of formal
|
|
335
|
+
* metadata with no transformation) references the underlying service that backs
|
|
336
|
+
* the item.
|
|
337
|
+
*
|
|
338
|
+
* @param resource raw additional resource of an item
|
|
339
|
+
* @param item
|
|
340
|
+
* @returns
|
|
341
|
+
* @private
|
|
342
|
+
*/
|
|
343
|
+
export const isDataSourceOfItem = (resource, item) => {
|
|
344
|
+
const serviceUrl = item.url && parseServiceUrl(item.url);
|
|
345
|
+
return (serviceUrl && resource.linkage && resource.linkage.includes(serviceUrl));
|
|
346
|
+
};
|
|
347
|
+
/**
|
|
348
|
+
* Returns the url for an additional resource.
|
|
349
|
+
*
|
|
350
|
+
* Automatically appends auth token if token is available
|
|
351
|
+
* and resource points to the backing service of an item.
|
|
352
|
+
*
|
|
353
|
+
* @param resource raw additional resource of an item
|
|
354
|
+
* @param item
|
|
355
|
+
* @param requestOptions IHubRequestOptions, including authentication
|
|
356
|
+
* @returns
|
|
357
|
+
* @private
|
|
358
|
+
*/
|
|
359
|
+
export const getAdditionalResourceUrl = (resource, item, requestOptions) => {
|
|
360
|
+
let result = resource.linkage;
|
|
361
|
+
const token = getProp(requestOptions, "authentication.token");
|
|
362
|
+
if (token && isDataSourceOfItem(resource, item)) {
|
|
363
|
+
const resUrl = new URL(resource.linkage);
|
|
364
|
+
const params = new URLSearchParams(resUrl.search);
|
|
365
|
+
params.set("token", token);
|
|
366
|
+
resUrl.search = params.toString();
|
|
367
|
+
result = resUrl.toString();
|
|
368
|
+
}
|
|
369
|
+
return result;
|
|
370
|
+
};
|
|
371
|
+
/**
|
|
372
|
+
* @private
|
|
373
|
+
*
|
|
374
|
+
* Contains fallback logic for determining a content's extent.
|
|
375
|
+
*
|
|
376
|
+
* The fallback priority is as follows:
|
|
377
|
+
* 1) item's extent (if valid bbox)
|
|
378
|
+
* 2) extent enrichment from the hub api (if coordinates are valid bbox)
|
|
379
|
+
* 3) layer's extent (if spatial reference is 4326)
|
|
380
|
+
*
|
|
381
|
+
* If none of these conditions are met, undefined is returned.
|
|
382
|
+
*
|
|
383
|
+
* @param item
|
|
384
|
+
* @param layer
|
|
385
|
+
* @param extentEnrichment
|
|
386
|
+
* @returns the correct extent in a bbox format, or undefined
|
|
387
|
+
*/
|
|
388
|
+
export const determineExtent = (item, extentEnrichment, layer) => {
|
|
389
|
+
const itemExtent = isBBox(item.extent) ? item.extent : undefined;
|
|
390
|
+
const extentEnrichmentCoordinates = isBBox(extentEnrichment === null || extentEnrichment === void 0 ? void 0 : extentEnrichment.coordinates)
|
|
391
|
+
? extentEnrichment.coordinates
|
|
392
|
+
: undefined;
|
|
393
|
+
const layerExtent = getProp(layer, "extent.spatialReference.wkid") === 4326
|
|
394
|
+
? extentToBBox(layer.extent)
|
|
395
|
+
: undefined;
|
|
396
|
+
return itemExtent || extentEnrichmentCoordinates || layerExtent;
|
|
397
|
+
};
|
|
398
|
+
/**
|
|
399
|
+
* @private
|
|
400
|
+
*
|
|
401
|
+
* Extracts the first contact from a given formal item metadata path.
|
|
402
|
+
* This is particularly helpful if the contact path is either an object or an array.
|
|
403
|
+
*
|
|
404
|
+
* Note: the raw contact object must have the following properties:
|
|
405
|
+
* - `rpIndName`: name of the individual
|
|
406
|
+
* - `rpOrgName`: name of the individual's organization
|
|
407
|
+
*
|
|
408
|
+
* @param metadata formal item metadata
|
|
409
|
+
* @param path path to the contact object/array
|
|
410
|
+
* @returns
|
|
411
|
+
*/
|
|
412
|
+
export const extractFirstContact = (metadata, path) => {
|
|
413
|
+
const rawContacts = getProp(metadata, path) || {};
|
|
414
|
+
const { rpIndName, rpOrgName } = Array.isArray(rawContacts)
|
|
415
|
+
? rawContacts[0]
|
|
416
|
+
: rawContacts;
|
|
417
|
+
return { individualName: rpIndName, organizationName: rpOrgName };
|
|
418
|
+
};
|
|
419
|
+
/**
|
|
420
|
+
* Determines the correct orgId for an item.
|
|
421
|
+
* Note: it's undocumented, but the portal API will return orgId for items... sometimes.
|
|
422
|
+
*
|
|
423
|
+
* @param item
|
|
424
|
+
* @param ownerUser item owner's hydrated user object
|
|
425
|
+
*/
|
|
426
|
+
export const getItemOrgId = (item, ownerUser) => item.orgId || (ownerUser === null || ownerUser === void 0 ? void 0 : ownerUser.orgId);
|
|
427
|
+
/**
|
|
428
|
+
* Calculates the Publisher display info for the given item.
|
|
429
|
+
* Utilizes this fallback pattern:
|
|
430
|
+
* 1) Formal Item Metadata > Resource > Citation > Contact
|
|
431
|
+
* 2) Formal Item Metadata > Resource > Contact
|
|
432
|
+
* 3) Item’s Owner and Org Name
|
|
433
|
+
* 4) Undefined (Item Owner / Org are private and we can't access additional info)
|
|
434
|
+
*
|
|
435
|
+
* @param item
|
|
436
|
+
* @param metadata
|
|
437
|
+
* @param org portal info of the item's organization
|
|
438
|
+
* @param ownerUser the item owner's hydrated user
|
|
439
|
+
* @returns
|
|
440
|
+
*/
|
|
441
|
+
export const getPublisherInfo = (item, metadata, org, ownerUser) => {
|
|
442
|
+
const result = {
|
|
443
|
+
nameSource: PublisherSource.None,
|
|
444
|
+
organizationSource: PublisherSource.None,
|
|
445
|
+
};
|
|
446
|
+
const citationContact = extractFirstContact(metadata, "metadata.dataIdInfo.idCitation.citRespParty");
|
|
447
|
+
const resourceContact = extractFirstContact(metadata, "metadata.dataIdInfo.idPoC");
|
|
448
|
+
const metadataContact = extractFirstContact(metadata, "metadata.mdContact");
|
|
449
|
+
// Determine publisher name properties
|
|
450
|
+
const ownerFullName = getProp(ownerUser, "fullName");
|
|
451
|
+
if (citationContact.individualName) {
|
|
452
|
+
result.name = citationContact.individualName;
|
|
453
|
+
result.nameSource = PublisherSource.CitationContact;
|
|
454
|
+
}
|
|
455
|
+
else if (resourceContact.individualName) {
|
|
456
|
+
result.name = resourceContact.individualName;
|
|
457
|
+
result.nameSource = PublisherSource.ResourceContact;
|
|
458
|
+
}
|
|
459
|
+
else if (metadataContact.individualName) {
|
|
460
|
+
result.name = metadataContact.individualName;
|
|
461
|
+
result.nameSource = PublisherSource.MetadataContact;
|
|
462
|
+
}
|
|
463
|
+
else if (ownerFullName) {
|
|
464
|
+
result.name = ownerFullName;
|
|
465
|
+
result.username = ownerUser.username;
|
|
466
|
+
result.nameSource = PublisherSource.ItemOwner;
|
|
467
|
+
}
|
|
468
|
+
// Determine publisher org properties
|
|
469
|
+
const orgName = getProp(org, "name");
|
|
470
|
+
if (citationContact.organizationName) {
|
|
471
|
+
result.organization = citationContact.organizationName;
|
|
472
|
+
result.organizationSource = PublisherSource.CitationContact;
|
|
473
|
+
}
|
|
474
|
+
else if (resourceContact.organizationName) {
|
|
475
|
+
result.organization = resourceContact.organizationName;
|
|
476
|
+
result.organizationSource = PublisherSource.ResourceContact;
|
|
477
|
+
}
|
|
478
|
+
else if (metadataContact.organizationName) {
|
|
479
|
+
result.organization = metadataContact.organizationName;
|
|
480
|
+
result.organizationSource = PublisherSource.MetadataContact;
|
|
481
|
+
}
|
|
482
|
+
else if (orgName) {
|
|
483
|
+
result.organization = orgName;
|
|
484
|
+
result.orgId = getItemOrgId(item, ownerUser);
|
|
485
|
+
result.organizationSource = PublisherSource.ItemOwner;
|
|
486
|
+
}
|
|
487
|
+
// We assume the item belongs to external org if no org info is available and the item is private
|
|
488
|
+
result.isExternal =
|
|
489
|
+
result.organizationSource === PublisherSource.None &&
|
|
490
|
+
item.access !== "public";
|
|
491
|
+
return result;
|
|
492
|
+
};
|
|
493
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/content/_internal/index.ts"],"names":[],"mappings":"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"}
|