@esri/hub-common 10.0.0-next.1 → 10.0.0-next.2

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 (112) hide show
  1. package/dist/es2017/projects/HubProjects.js.map +1 -1
  2. package/dist/es2017/search/_internal/hubSearchItems.js +3 -94
  3. package/dist/es2017/search/_internal/hubSearchItems.js.map +1 -1
  4. package/dist/es2017/search/_internal/portalSearchItems.js +3 -25
  5. package/dist/es2017/search/_internal/portalSearchItems.js.map +1 -1
  6. package/dist/es2017/search/index.js +0 -7
  7. package/dist/es2017/search/index.js.map +1 -1
  8. package/dist/es2017/search/types/index.js +0 -3
  9. package/dist/es2017/search/types/index.js.map +1 -1
  10. package/dist/es2017/search/utils.js +1 -207
  11. package/dist/es2017/search/utils.js.map +1 -1
  12. package/dist/esm/projects/HubProjects.js.map +1 -1
  13. package/dist/esm/search/_internal/hubSearchItems.js +4 -102
  14. package/dist/esm/search/_internal/hubSearchItems.js.map +1 -1
  15. package/dist/esm/search/_internal/portalSearchItems.js +3 -25
  16. package/dist/esm/search/_internal/portalSearchItems.js.map +1 -1
  17. package/dist/esm/search/index.js +0 -7
  18. package/dist/esm/search/index.js.map +1 -1
  19. package/dist/esm/search/types/index.js +0 -3
  20. package/dist/esm/search/types/index.js.map +1 -1
  21. package/dist/esm/search/utils.js +1 -204
  22. package/dist/esm/search/utils.js.map +1 -1
  23. package/dist/node/projects/HubProjects.js.map +1 -1
  24. package/dist/node/search/_internal/hubSearchItems.js +3 -94
  25. package/dist/node/search/_internal/hubSearchItems.js.map +1 -1
  26. package/dist/node/search/_internal/portalSearchItems.js +4 -26
  27. package/dist/node/search/_internal/portalSearchItems.js.map +1 -1
  28. package/dist/node/search/index.js +0 -7
  29. package/dist/node/search/index.js.map +1 -1
  30. package/dist/node/search/types/index.js +0 -3
  31. package/dist/node/search/types/index.js.map +1 -1
  32. package/dist/node/search/utils.js +1 -213
  33. package/dist/node/search/utils.js.map +1 -1
  34. package/dist/types/search/_internal/hubSearchItems.d.ts +3 -3
  35. package/dist/types/search/_internal/portalSearchItems.d.ts +15 -15
  36. package/dist/types/search/index.d.ts +0 -7
  37. package/dist/types/search/types/index.d.ts +0 -3
  38. package/dist/types/search/types/types.d.ts +0 -204
  39. package/dist/types/search/utils.d.ts +2 -58
  40. package/dist/umd/common.umd.js +101 -1459
  41. package/dist/umd/common.umd.js.map +1 -1
  42. package/package.json +1 -1
  43. package/dist/es2017/search/_searchContent.js +0 -112
  44. package/dist/es2017/search/_searchContent.js.map +0 -1
  45. package/dist/es2017/search/_searchGroups.js +0 -88
  46. package/dist/es2017/search/_searchGroups.js.map +0 -1
  47. package/dist/es2017/search/_searchUsers.js +0 -89
  48. package/dist/es2017/search/_searchUsers.js.map +0 -1
  49. package/dist/es2017/search/content-utils.js +0 -390
  50. package/dist/es2017/search/content-utils.js.map +0 -1
  51. package/dist/es2017/search/filter-utils.js +0 -31
  52. package/dist/es2017/search/filter-utils.js.map +0 -1
  53. package/dist/es2017/search/group-utils.js +0 -142
  54. package/dist/es2017/search/group-utils.js.map +0 -1
  55. package/dist/es2017/search/types/ICatalog.js +0 -1
  56. package/dist/es2017/search/types/ICatalog.js.map +0 -1
  57. package/dist/es2017/search/types/ICollection.js +0 -1
  58. package/dist/es2017/search/types/ICollection.js.map +0 -1
  59. package/dist/es2017/search/types/IHubApiSearchRequest.js +0 -1
  60. package/dist/es2017/search/types/IHubApiSearchRequest.js.map +0 -1
  61. package/dist/es2017/search/user-utils.js +0 -139
  62. package/dist/es2017/search/user-utils.js.map +0 -1
  63. package/dist/esm/search/_searchContent.js +0 -114
  64. package/dist/esm/search/_searchContent.js.map +0 -1
  65. package/dist/esm/search/_searchGroups.js +0 -91
  66. package/dist/esm/search/_searchGroups.js.map +0 -1
  67. package/dist/esm/search/_searchUsers.js +0 -92
  68. package/dist/esm/search/_searchUsers.js.map +0 -1
  69. package/dist/esm/search/content-utils.js +0 -394
  70. package/dist/esm/search/content-utils.js.map +0 -1
  71. package/dist/esm/search/filter-utils.js +0 -31
  72. package/dist/esm/search/filter-utils.js.map +0 -1
  73. package/dist/esm/search/group-utils.js +0 -146
  74. package/dist/esm/search/group-utils.js.map +0 -1
  75. package/dist/esm/search/types/ICatalog.js +0 -1
  76. package/dist/esm/search/types/ICatalog.js.map +0 -1
  77. package/dist/esm/search/types/ICollection.js +0 -1
  78. package/dist/esm/search/types/ICollection.js.map +0 -1
  79. package/dist/esm/search/types/IHubApiSearchRequest.js +0 -1
  80. package/dist/esm/search/types/IHubApiSearchRequest.js.map +0 -1
  81. package/dist/esm/search/user-utils.js +0 -143
  82. package/dist/esm/search/user-utils.js.map +0 -1
  83. package/dist/node/search/_searchContent.js +0 -116
  84. package/dist/node/search/_searchContent.js.map +0 -1
  85. package/dist/node/search/_searchGroups.js +0 -92
  86. package/dist/node/search/_searchGroups.js.map +0 -1
  87. package/dist/node/search/_searchUsers.js +0 -93
  88. package/dist/node/search/_searchUsers.js.map +0 -1
  89. package/dist/node/search/content-utils.js +0 -399
  90. package/dist/node/search/content-utils.js.map +0 -1
  91. package/dist/node/search/filter-utils.js +0 -36
  92. package/dist/node/search/filter-utils.js.map +0 -1
  93. package/dist/node/search/group-utils.js +0 -148
  94. package/dist/node/search/group-utils.js.map +0 -1
  95. package/dist/node/search/types/ICatalog.js +0 -3
  96. package/dist/node/search/types/ICatalog.js.map +0 -1
  97. package/dist/node/search/types/ICollection.js +0 -3
  98. package/dist/node/search/types/ICollection.js.map +0 -1
  99. package/dist/node/search/types/IHubApiSearchRequest.js +0 -3
  100. package/dist/node/search/types/IHubApiSearchRequest.js.map +0 -1
  101. package/dist/node/search/user-utils.js +0 -145
  102. package/dist/node/search/user-utils.js.map +0 -1
  103. package/dist/types/search/_searchContent.d.ts +0 -9
  104. package/dist/types/search/_searchGroups.d.ts +0 -13
  105. package/dist/types/search/_searchUsers.d.ts +0 -31
  106. package/dist/types/search/content-utils.d.ts +0 -66
  107. package/dist/types/search/filter-utils.d.ts +0 -13
  108. package/dist/types/search/group-utils.d.ts +0 -36
  109. package/dist/types/search/types/ICatalog.d.ts +0 -82
  110. package/dist/types/search/types/ICollection.d.ts +0 -26
  111. package/dist/types/search/types/IHubApiSearchRequest.d.ts +0 -16
  112. package/dist/types/search/user-utils.d.ts +0 -35
@@ -1,143 +0,0 @@
1
- import { __spreadArrays } from "tslib";
2
- import { cloneObject, getProp, Logger, mergeDateRange, mergeMatchOptions, mergeSearchOptions, relativeDateToDateRange, serializeDateRange, serializeMatchOptions, setProp, valueToMatchOptions, } from "..";
3
- // TODO: Remove with _searchContent
4
- /**
5
- *
6
- * Merge `Filter<"user">` objects
7
- *
8
- * Useful in components which may get partial filters from a variety of
9
- * sub-components, which are then combined into a single filter prior
10
- * to executing the search.
11
- * @param filters
12
- * @returns
13
- */
14
- export function mergeUserFilters(filters) {
15
- // TODO: Remove with _searchContent
16
- Logger.warn("DEPRECATION: mergeUserFilters will be removed. Work with IFilterGroups<\"user\"> and hubSearch() instead");
17
- // expand all the filters so all prop types are consistent
18
- var expanded = filters.map(expandUserFilter);
19
- // now we can merge based on fields
20
- var dateFields = ["created", "modified", "lastlogin"];
21
- var specialFields = __spreadArrays(["disabled", "term", "filterType"], dateFields);
22
- // acc is initialized as Filter<group> but also needs it
23
- // in the function signature... for reasons?!
24
- var result = expanded.reduce(function (acc, entry) {
25
- // process fields
26
- Object.entries(entry).forEach(function (_a) {
27
- // Note: getProp/setProp are used to get around
28
- // typescript issues with string indexing
29
- var key = _a[0], value = _a[1];
30
- if (acc.hasOwnProperty(key)) {
31
- var existingValue = getProp(acc, key);
32
- // if the key is not to a special field
33
- if (!specialFields.includes(key)) {
34
- // treat as an IMatchOptions
35
- setProp(key, mergeMatchOptions(existingValue, value), acc);
36
- }
37
- else if (dateFields.includes(key)) {
38
- // treat as IDateRange
39
- setProp(key, mergeDateRange(existingValue, value), acc);
40
- }
41
- else if (key === "term") {
42
- // append terms
43
- acc[key] = acc[key] + " " + value;
44
- }
45
- }
46
- else {
47
- // Acc does not have an entry for this yet
48
- // so just clone it
49
- setProp(key, cloneObject(value), acc);
50
- }
51
- });
52
- return acc;
53
- }, {
54
- filterType: "user",
55
- });
56
- return result;
57
- }
58
- /**
59
- * Prior to serialization into the query syntax for the backing APIs, we first expand [Filters](../Filter)
60
- *
61
- * Filter's can express their intent in a very terse form, but to ensure consistent structures
62
- * we expand them into their more verbose form.
63
- *
64
- * i.e. `firstname: "John"` expands into `firstname: { any: ["John"]}`
65
- *
66
- * - Fields defined as `string | string[] | MatchOptions` will be converted to a `MatchOptions`
67
- * - RelativeDate fields are converted to DateRange<number>
68
- * @param filter
69
- * @returns
70
- */
71
- export function expandUserFilter(filter) {
72
- // TODO: Remove with _searchContent
73
- Logger.warn("DEPRECATION: expandUserFilter will be removed. Work with IFilterGroups<\"user\"> and hubSearch() instead");
74
- var result = {};
75
- var dateProps = ["created", "modified", "lastlogin"];
76
- var specialProps = __spreadArrays(["disabled", "term"], dateProps);
77
- Object.entries(filter).forEach(function (_a) {
78
- var key = _a[0], value = _a[1];
79
- // handle Matchish fields
80
- if (!specialProps.includes(key)) {
81
- // setProp side-steps typescript complaining
82
- setProp(key, valueToMatchOptions(value), result);
83
- }
84
- // Handle date fields
85
- if (dateProps.includes(key)) {
86
- var dateFieldValue = cloneObject(getProp(filter, key));
87
- if (getProp(filter, key + ".type") === "relative-date") {
88
- setProp(key, relativeDateToDateRange(dateFieldValue), result);
89
- }
90
- else {
91
- setProp(key, dateFieldValue, result);
92
- }
93
- }
94
- });
95
- // disabled is boolean, so we check if the prop exists
96
- // vs checking if the value is truthy
97
- if (filter.hasOwnProperty("disabled")) {
98
- result.disabled = filter.disabled;
99
- }
100
- if (filter.term) {
101
- result.term = filter.term;
102
- }
103
- return result;
104
- }
105
- /**
106
- * @private
107
- * Serialize an `IUserFilterDefinition` into an `ISearchOptions` for use
108
- * with `searchUsers`
109
- * @param filter
110
- * @returns
111
- */
112
- export function serializeUserFilterForPortal(filter) {
113
- // TODO: Remove with _searchContent
114
- Logger.warn("DEPRECATION: serializeUserFilterForPortal will be removed. Work with IFilterGroups<\"user\"> and hubSearch() instead");
115
- var result = {
116
- q: "",
117
- filter: "",
118
- };
119
- var dateProps = ["created", "modified", "lastlogin"];
120
- var specialProps = __spreadArrays(["term", "filterType"], dateProps);
121
- Object.entries(filter).forEach(function (_a) {
122
- var key = _a[0], value = _a[1];
123
- // MatchOptions fields
124
- if (!specialProps.includes(key)) {
125
- result = mergeSearchOptions(result, serializeMatchOptions(key, value), "AND");
126
- }
127
- // Dates only go into q
128
- if (dateProps.includes(key)) {
129
- result = mergeSearchOptions(result, serializeDateRange(key, value), "AND");
130
- }
131
- });
132
- // disabled is also a top-level property
133
- if (filter.hasOwnProperty("disabled")) {
134
- result.disabled = filter.disabled;
135
- }
136
- // add the term
137
- if (filter.term) {
138
- // Note: this is slightly different from other types
139
- result.q = ("(" + filter.term + ") " + result.q).trim();
140
- }
141
- return result;
142
- }
143
- //# sourceMappingURL=user-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-utils.js","sourceRoot":"","sources":["../../../src/search/user-utils.ts"],"names":[],"mappings":"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"}
@@ -1,116 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports._searchContent = void 0;
4
- const content_utils_1 = require("./content-utils");
5
- const arcgis_rest_portal_1 = require("@esri/arcgis-rest-portal");
6
- const utils_1 = require("./utils");
7
- const __1 = require("..");
8
- const utils_2 = require("../utils");
9
- // TODO: Remove with _searchContent
10
- /**
11
- * @private
12
- * Search for content via the Portal or Hub API
13
- * @param filter
14
- * @param options
15
- */
16
- async function _searchContent(filter, options) {
17
- var _a, _b;
18
- utils_2.Logger.warn(`DEPRECATION: _searchContent will be removed; switch to hubSearch(...)`);
19
- // expand filter so we can serialize to either api
20
- const expanded = content_utils_1.expandContentFilter(filter);
21
- // API
22
- const api = utils_1.expandApi(options.api || "arcgis");
23
- let searchPromise;
24
- // Portal Search
25
- if (api.type === "arcgis") {
26
- // serialize for portal
27
- const so = content_utils_1.serializeContentFilterForPortal(expanded);
28
- // Array of properties we want to copy from IHubSearchOptions
29
- // to the ISearchOptions
30
- const props = [
31
- "authentication",
32
- "num",
33
- "sortField",
34
- "sortOrder",
35
- "site",
36
- "start",
37
- ];
38
- // copy the props over
39
- props.forEach((prop) => {
40
- if (options.hasOwnProperty(prop)) {
41
- so[prop] = options[prop];
42
- }
43
- });
44
- // If we don't have auth, ensure we have .portal
45
- if (!so.authentication) {
46
- so.portal = `${api.url}/sharing/rest`;
47
- }
48
- // DEPRECATION
49
- if ((_a = options.aggregations) === null || _a === void 0 ? void 0 : _a.length) {
50
- // tslint:disable-next-line:no-console
51
- console.warn(`IHubSearchOptions.aggregations is deprecated. Please use .aggFields instead.`);
52
- so.countFields = options.aggregations.join(",");
53
- so.countSize = options.aggLimit || 10;
54
- }
55
- // Aggregations
56
- if ((_b = options.aggFields) === null || _b === void 0 ? void 0 : _b.length) {
57
- so.countFields = options.aggFields.join(",");
58
- so.countSize = options.aggLimit || 10;
59
- }
60
- searchPromise = searchPortal(so);
61
- }
62
- else {
63
- // Hub API Search
64
- // TODO: Implement hub api content search
65
- searchPromise = Promise.resolve({
66
- total: 0,
67
- results: [],
68
- hasNext: false,
69
- next: () => {
70
- // tslint:disable-next-line
71
- Promise.resolve(null);
72
- },
73
- });
74
- }
75
- return searchPromise;
76
- }
77
- exports._searchContent = _searchContent;
78
- /**
79
- * Internal portal search, which then converts items to Content, and
80
- * if a Site was passed, also sets urls
81
- *
82
- * @param searchOptions
83
- * @param site
84
- * @returns
85
- */
86
- function searchPortal(searchOptions) {
87
- var _a;
88
- const portalUrl = ((_a = searchOptions.authentication) === null || _a === void 0 ? void 0 : _a.portal) || searchOptions.portal;
89
- let token;
90
- if (searchOptions.authentication) {
91
- const us = searchOptions.authentication;
92
- token = us.token;
93
- }
94
- const thumbnailify = (content) => {
95
- content.thumbnailUrl = __1.getItemThumbnailUrl(content, portalUrl, token);
96
- return content;
97
- };
98
- return arcgis_rest_portal_1.searchItems(searchOptions).then((resp) => {
99
- const hasNext = resp.nextStart > -1;
100
- // convert items to IHubContent's
101
- let content = resp.results.map(__1.itemToContent);
102
- // if we have a site, add those urls
103
- if (searchOptions.site) {
104
- content = content.map((entry) => __1.setContentSiteUrls(entry, searchOptions.site));
105
- }
106
- // add thumbnailUrl
107
- content = content.map(thumbnailify);
108
- return {
109
- total: resp.total,
110
- results: content,
111
- hasNext,
112
- next: utils_1.getNextFunction(searchOptions, resp.nextStart, resp.total, searchPortal),
113
- };
114
- });
115
- }
116
- //# sourceMappingURL=_searchContent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_searchContent.js","sourceRoot":"","sources":["../../../src/search/_searchContent.ts"],"names":[],"mappings":"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"}
@@ -1,92 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports._searchGroups = void 0;
4
- const arcgis_rest_portal_1 = require("@esri/arcgis-rest-portal");
5
- const _1 = require(".");
6
- const group_utils_1 = require("./group-utils");
7
- const __1 = require("..");
8
- // TODO: Remove with _searchContent
9
- /**
10
- * @private
11
- * Search Groups using Filter<"group">
12
- *
13
- * Currently just returns ISearchResult<IGroup>
14
- * @param filter
15
- * @param options
16
- * @returns
17
- */
18
- async function _searchGroups(filter, options) {
19
- __1.Logger.warn(`DEPRECATION: _searchGroups will be removed; switch to hubSearch(...)`);
20
- // expand filter so we can serialize to either api
21
- const expanded = group_utils_1.expandGroupFilter(filter);
22
- // API
23
- const api = _1.expandApi(options.api || "arcgis");
24
- if (api.type === "arcgis") {
25
- const so = group_utils_1.serializeGroupFilterForPortal(expanded);
26
- // Array of properties we want to copy from IHubSearchOptions
27
- // to the ISearchOptions
28
- const props = [
29
- "authentication",
30
- "num",
31
- "sortField",
32
- "sortOrder",
33
- "site",
34
- "start",
35
- ];
36
- // copy the props over
37
- props.forEach((prop) => {
38
- if (options.hasOwnProperty(prop)) {
39
- so[prop] = options[prop];
40
- }
41
- });
42
- // If we don't have auth, ensure we have .portal
43
- if (!so.authentication) {
44
- so.portal = `${api.url}/sharing/rest`;
45
- }
46
- return searchPortalGroups(so);
47
- }
48
- else {
49
- throw new Error("_searchGroups is not implemented for non-arcgis apis");
50
- }
51
- }
52
- exports._searchGroups = _searchGroups;
53
- /**
54
- * Internal function that searches for groups using the ArcGIS Portal API
55
- * @param searchOptions
56
- * @returns
57
- */
58
- function searchPortalGroups(searchOptions) {
59
- var _a;
60
- const teamLinkify = (group) => {
61
- group.siteTeamUrl = `${searchOptions.site.item.url}/teams/${group.id}/about`;
62
- return group;
63
- };
64
- const portalUrl = ((_a = searchOptions.authentication) === null || _a === void 0 ? void 0 : _a.portal) || searchOptions.portal;
65
- let token;
66
- if (searchOptions.authentication) {
67
- const us = searchOptions.authentication;
68
- token = us.token;
69
- }
70
- const thumbnailify = (group) => {
71
- group.thumbnailUrl = __1.getGroupThumbnailUrl(portalUrl, group, token);
72
- return group;
73
- };
74
- // execute the search
75
- return arcgis_rest_portal_1.searchGroups(searchOptions).then((response) => {
76
- var _a, _b;
77
- const hasNext = response.nextStart > -1;
78
- // upgrade thumbnail url
79
- let results = response.results.map(thumbnailify);
80
- // generate the site team url if site url is provided
81
- if ((_b = (_a = searchOptions.site) === null || _a === void 0 ? void 0 : _a.item) === null || _b === void 0 ? void 0 : _b.url) {
82
- results = response.results.map(teamLinkify);
83
- }
84
- return {
85
- hasNext,
86
- total: response.total,
87
- results,
88
- next: _1.getNextFunction(searchOptions, response.nextStart, response.total, searchPortalGroups),
89
- };
90
- });
91
- }
92
- //# sourceMappingURL=_searchGroups.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_searchGroups.js","sourceRoot":"","sources":["../../../src/search/_searchGroups.ts"],"names":[],"mappings":"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"}
@@ -1,93 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports._searchUsers = void 0;
4
- const __1 = require("..");
5
- const arcgis_rest_portal_1 = require("@esri/arcgis-rest-portal");
6
- // TODO: Remove with _searchContent
7
- /**
8
- * @private
9
- * Search for Users via the Portal API.
10
- *
11
- * **Note** Authentication is required
12
- *
13
- * Another trivial comment to force a release
14
- *
15
- * Note: in the future, there may be options to search via
16
- * a Hub specific API
17
- * @param filter
18
- * @param options
19
- * @returns
20
- */
21
- async function _searchUsers(filter, options) {
22
- __1.Logger.warn(`DEPRECATION: _searchUsers will be removed; switch to hubSearch(...)`);
23
- // JS Clients may not pass in authentication
24
- if (!options.authentication) {
25
- throw new Error("Authentication required to search for users.");
26
- }
27
- // expand filter so we can serialize to either api
28
- const expanded = __1.expandUserFilter(filter);
29
- // API
30
- const api = __1.expandApi(options.api || "arcgis");
31
- if (api.type === "arcgis") {
32
- const searchOptions = __1.serializeUserFilterForPortal(expanded);
33
- // Array of properties we want to copy from IHubSearchOptions
34
- // to the ISearchOptions
35
- const props = [
36
- "authentication",
37
- "num",
38
- "sortField",
39
- "sortOrder",
40
- "site",
41
- "start",
42
- ];
43
- // copy the props over
44
- props.forEach((prop) => {
45
- if (options.hasOwnProperty(prop)) {
46
- searchOptions[prop] = options[prop];
47
- }
48
- });
49
- return searchPortalUsers(searchOptions);
50
- }
51
- else {
52
- throw new Error("_searchUsers is not implemented for non-arcgis apis");
53
- }
54
- }
55
- exports._searchUsers = _searchUsers;
56
- /**
57
- * Internal function that executes the user search along with
58
- * some simple enrichments
59
- * @param searchOptions
60
- * @returns
61
- */
62
- function searchPortalUsers(searchOptions) {
63
- const portalUrl = searchOptions.authentication.portal;
64
- const token = searchOptions.authentication.token;
65
- // Partially applied functions for mapping over the results
66
- const userLinkify = (user) => {
67
- user.profileUrl = `${searchOptions.site.item.url}/people/${user.username}/profile`;
68
- return user;
69
- };
70
- const thumbnailify = (user) => {
71
- if (user.thumbnail) {
72
- user.thumbnailUrl = __1.getUserThumbnailUrl(portalUrl, user, token);
73
- }
74
- return user;
75
- };
76
- return arcgis_rest_portal_1.searchUsers(searchOptions).then((response) => {
77
- var _a, _b;
78
- const hasNext = response.nextStart > -1;
79
- // upgrade thumbnail url
80
- let results = response.results.map(thumbnailify);
81
- // generate the site team url if site url is provided
82
- if ((_b = (_a = searchOptions.site) === null || _a === void 0 ? void 0 : _a.item) === null || _b === void 0 ? void 0 : _b.url) {
83
- results = response.results.map(userLinkify);
84
- }
85
- return {
86
- hasNext,
87
- total: response.total,
88
- results,
89
- next: __1.getNextFunction(searchOptions, response.nextStart, response.total, searchPortalUsers),
90
- };
91
- });
92
- }
93
- //# sourceMappingURL=_searchUsers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_searchUsers.js","sourceRoot":"","sources":["../../../src/search/_searchUsers.ts"],"names":[],"mappings":";;;AACA,0BAUY;AACZ,iEAGkC;AAkBlC,mCAAmC;AACnC;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,YAAY,CAChC,MAAsB,EACtB,OAAuC;IAEvC,UAAM,CAAC,IAAI,CACT,qEAAqE,CACtE,CAAC;IAEF,4CAA4C;IAC5C,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;QAC3B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;KACjE;IACD,kDAAkD;IAClD,MAAM,QAAQ,GAAG,oBAAgB,CAAC,MAAM,CAAC,CAAC;IAE1C,MAAM;IACN,MAAM,GAAG,GAAG,aAAS,CAAC,OAAO,CAAC,GAAG,IAAI,QAAQ,CAAC,CAAC;IAE/C,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;QACzB,MAAM,aAAa,GAAG,gCAA4B,CAChD,QAAQ,CACa,CAAC;QAExB,6DAA6D;QAC7D,wBAAwB;QACxB,MAAM,KAAK,GAAmC;YAC5C,gBAAgB;YAChB,KAAK;YACL,WAAW;YACX,WAAW;YACX,MAAM;YACN,OAAO;SACR,CAAC;QACF,sBAAsB;QACtB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrB,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;gBAChC,aAAa,CAAC,IAAgC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;aACjE;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,iBAAiB,CAAC,aAAa,CAAC,CAAC;KACzC;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;KACxE;AACH,CAAC;AA5CD,oCA4CC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CACxB,aAAiC;IAEjC,MAAM,SAAS,GAAG,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC;IACtD,MAAM,KAAK,GAAI,aAAa,CAAC,cAA8B,CAAC,KAAK,CAAC;IAElE,2DAA2D;IAC3D,MAAM,WAAW,GAAG,CAAC,IAAc,EAAE,EAAE;QACrC,IAAI,CAAC,UAAU,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,WAAW,IAAI,CAAC,QAAQ,UAAU,CAAC;QACnF,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,IAAc,EAAE,EAAE;QACtC,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,YAAY,GAAG,uBAAmB,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;SACjE;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,OAAO,gCAAgB,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;;QACvD,MAAM,OAAO,GAAY,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QAEjD,wBAAwB;QACxB,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACjD,qDAAqD;QACrD,gBAAI,aAAa,CAAC,IAAI,0CAAE,IAAI,0CAAE,GAAG,EAAE;YACjC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;SAC7C;QAED,OAAO;YACL,OAAO;YACP,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,OAAO;YACP,IAAI,EAAE,mBAAe,CACnB,aAAa,EACb,QAAQ,CAAC,SAAS,EAClB,QAAQ,CAAC,KAAK,EACd,iBAAiB,CAClB;SACwB,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC"}