@esri/hub-common 9.26.0 → 9.27.0

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 (119) hide show
  1. package/dist/es2017/content/slugs.js +1 -1
  2. package/dist/es2017/content/slugs.js.map +1 -1
  3. package/dist/es2017/search/_internal/index.js +3 -0
  4. package/dist/es2017/search/_internal/index.js.map +1 -0
  5. package/dist/es2017/search/_internal/searchContentEntities.js +2 -0
  6. package/dist/es2017/search/_internal/searchContentEntities.js.map +1 -1
  7. package/dist/es2017/search/_internal/state.js +147 -0
  8. package/dist/es2017/search/_internal/state.js.map +1 -0
  9. package/dist/es2017/search/_searchContent.js +12 -4
  10. package/dist/es2017/search/_searchContent.js.map +1 -1
  11. package/dist/es2017/search/_searchGroups.js +1 -0
  12. package/dist/es2017/search/_searchGroups.js.map +1 -1
  13. package/dist/es2017/search/_searchUsers.js +1 -0
  14. package/dist/es2017/search/_searchUsers.js.map +1 -1
  15. package/dist/es2017/search/collectionState.js +60 -0
  16. package/dist/es2017/search/collectionState.js.map +1 -0
  17. package/dist/es2017/search/content-utils.js +14 -7
  18. package/dist/es2017/search/content-utils.js.map +1 -1
  19. package/dist/es2017/search/index.js +2 -1
  20. package/dist/es2017/search/index.js.map +1 -1
  21. package/dist/es2017/search/types/ICatalog.js +1 -0
  22. package/dist/es2017/search/types/ICatalog.js.map +1 -0
  23. package/dist/es2017/search/types/ICollection.js +1 -0
  24. package/dist/es2017/search/types/ICollection.js.map +1 -0
  25. package/dist/es2017/search/types/IFacet.js +1 -0
  26. package/dist/es2017/search/types/IFacet.js.map +1 -0
  27. package/dist/es2017/search/types/IFacetOption.js +1 -0
  28. package/dist/es2017/search/types/IFacetOption.js.map +1 -0
  29. package/dist/es2017/search/types/index.js +6 -0
  30. package/dist/es2017/search/types/index.js.map +1 -0
  31. package/dist/es2017/search/{types.js → types/types.js} +0 -0
  32. package/dist/{node/search → es2017/search/types}/types.js.map +1 -1
  33. package/dist/es2017/search/utils.js.map +1 -1
  34. package/dist/esm/content/slugs.js +1 -1
  35. package/dist/esm/content/slugs.js.map +1 -1
  36. package/dist/esm/search/_internal/index.js +3 -0
  37. package/dist/esm/search/_internal/index.js.map +1 -0
  38. package/dist/esm/search/_internal/searchContentEntities.js +2 -0
  39. package/dist/esm/search/_internal/searchContentEntities.js.map +1 -1
  40. package/dist/esm/search/_internal/state.js +147 -0
  41. package/dist/esm/search/_internal/state.js.map +1 -0
  42. package/dist/esm/search/_searchContent.js +13 -5
  43. package/dist/esm/search/_searchContent.js.map +1 -1
  44. package/dist/esm/search/_searchGroups.js +1 -0
  45. package/dist/esm/search/_searchGroups.js.map +1 -1
  46. package/dist/esm/search/_searchUsers.js +1 -0
  47. package/dist/esm/search/_searchUsers.js.map +1 -1
  48. package/dist/esm/search/collectionState.js +61 -0
  49. package/dist/esm/search/collectionState.js.map +1 -0
  50. package/dist/esm/search/content-utils.js +15 -7
  51. package/dist/esm/search/content-utils.js.map +1 -1
  52. package/dist/esm/search/index.js +2 -1
  53. package/dist/esm/search/index.js.map +1 -1
  54. package/dist/esm/search/types/ICatalog.js +1 -0
  55. package/dist/esm/search/types/ICatalog.js.map +1 -0
  56. package/dist/esm/search/types/ICollection.js +1 -0
  57. package/dist/esm/search/types/ICollection.js.map +1 -0
  58. package/dist/esm/search/types/IFacet.js +1 -0
  59. package/dist/esm/search/types/IFacet.js.map +1 -0
  60. package/dist/esm/search/types/IFacetOption.js +1 -0
  61. package/dist/esm/search/types/IFacetOption.js.map +1 -0
  62. package/dist/esm/search/types/index.js +6 -0
  63. package/dist/esm/search/types/index.js.map +1 -0
  64. package/dist/esm/search/{types.js → types/types.js} +0 -0
  65. package/dist/{es2017/search → esm/search/types}/types.js.map +1 -1
  66. package/dist/esm/search/utils.js.map +1 -1
  67. package/dist/node/content/slugs.js +1 -1
  68. package/dist/node/content/slugs.js.map +1 -1
  69. package/dist/node/search/_internal/index.js +6 -0
  70. package/dist/node/search/_internal/index.js.map +1 -0
  71. package/dist/node/search/_internal/searchContentEntities.js +2 -0
  72. package/dist/node/search/_internal/searchContentEntities.js.map +1 -1
  73. package/dist/node/search/_internal/state.js +158 -0
  74. package/dist/node/search/_internal/state.js.map +1 -0
  75. package/dist/node/search/_searchContent.js +14 -6
  76. package/dist/node/search/_searchContent.js.map +1 -1
  77. package/dist/node/search/_searchGroups.js +1 -0
  78. package/dist/node/search/_searchGroups.js.map +1 -1
  79. package/dist/node/search/_searchUsers.js +1 -0
  80. package/dist/node/search/_searchUsers.js.map +1 -1
  81. package/dist/node/search/collectionState.js +65 -0
  82. package/dist/node/search/collectionState.js.map +1 -0
  83. package/dist/node/search/content-utils.js +14 -7
  84. package/dist/node/search/content-utils.js.map +1 -1
  85. package/dist/node/search/index.js +2 -1
  86. package/dist/node/search/index.js.map +1 -1
  87. package/dist/node/search/types/ICatalog.js +3 -0
  88. package/dist/node/search/types/ICatalog.js.map +1 -0
  89. package/dist/node/search/types/ICollection.js +3 -0
  90. package/dist/node/search/types/ICollection.js.map +1 -0
  91. package/dist/node/search/types/IFacet.js +3 -0
  92. package/dist/node/search/types/IFacet.js.map +1 -0
  93. package/dist/node/search/types/IFacetOption.js +3 -0
  94. package/dist/node/search/types/IFacetOption.js.map +1 -0
  95. package/dist/node/search/types/index.js +9 -0
  96. package/dist/node/search/types/index.js.map +1 -0
  97. package/dist/node/search/{types.js → types/types.js} +0 -0
  98. package/dist/{esm/search → node/search/types}/types.js.map +1 -1
  99. package/dist/node/search/utils.js.map +1 -1
  100. package/dist/types/core/types/IHubEntityManager.d.ts +1 -1
  101. package/dist/types/search/_internal/index.d.ts +2 -0
  102. package/dist/types/search/_internal/searchContentEntities.d.ts +1 -1
  103. package/dist/types/search/_internal/state.d.ts +62 -0
  104. package/dist/types/search/_searchGroups.d.ts +2 -1
  105. package/dist/types/search/collectionState.d.ts +19 -0
  106. package/dist/types/search/content-utils.d.ts +6 -4
  107. package/dist/types/search/index.d.ts +2 -1
  108. package/dist/types/search/types/ICatalog.d.ts +76 -0
  109. package/dist/types/search/types/ICollection.d.ts +14 -0
  110. package/dist/types/search/types/IFacet.d.ts +15 -0
  111. package/dist/types/search/types/IFacetOption.d.ts +8 -0
  112. package/dist/types/search/types/index.d.ts +5 -0
  113. package/dist/types/search/{types.d.ts → types/types.d.ts} +24 -86
  114. package/dist/types/search/utils.d.ts +1 -1
  115. package/dist/umd/common.umd.js +225 -13
  116. package/dist/umd/common.umd.js.map +1 -1
  117. package/dist/umd/common.umd.min.js +1 -1
  118. package/dist/umd/common.umd.min.js.map +1 -1
  119. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /* @preserve
2
- * @esri/hub-common - v9.25.7 - Tue Apr 05 2022 18:29:14 GMT+0000 (Coordinated Universal Time)
2
+ * @esri/hub-common - v9.26.2 - Mon Apr 11 2022 15:58:14 GMT+0000 (Coordinated Universal Time)
3
3
  * Copyright (c) 2022 Environmental Systems Research Institute, Inc.
4
4
  * Apache-2.0
5
5
  */
@@ -7776,7 +7776,7 @@
7776
7776
  * @returns slug without context
7777
7777
  */
7778
7778
  function removeContextFromSlug(slug, context) {
7779
- if (context && slug.match(context + "::")) {
7779
+ if (context && slug.match("^" + context + "::")) {
7780
7780
  return slug.split(context + "::")[1];
7781
7781
  }
7782
7782
  else {
@@ -12110,29 +12110,37 @@
12110
12110
  };
12111
12111
  /**
12112
12112
  * @private
12113
- * Convert portal search response to items
12113
+ * Convert portal search response to facets
12114
+ * Note: Only applicable to a "content" search
12114
12115
  * @param response
12115
12116
  * @returns
12116
12117
  */
12117
- function convertPortalResponseToFacets(response) {
12118
+ function convertPortalResponseToFacets(response, operation) {
12118
12119
  var _a;
12120
+ if (operation === void 0) { operation = "OR"; }
12119
12121
  var result = [];
12120
12122
  if ((_a = response.aggregations) === null || _a === void 0 ? void 0 : _a.counts) {
12121
12123
  response.aggregations.counts.forEach(function (entry) {
12122
12124
  var facet = {
12123
12125
  label: entry.fieldName,
12124
- attribute: entry.fieldName,
12125
- type: "multi-select",
12126
+ key: entry.fieldName,
12127
+ aggField: entry.fieldName,
12128
+ display: "multi-select",
12126
12129
  };
12127
12130
  var options = [];
12128
12131
  entry.fieldValues.forEach(function (fv) {
12129
12132
  var filter = {
12130
12133
  filterType: "content",
12131
12134
  };
12132
- filter[entry.fieldName] = fv.value;
12135
+ // construct the filter based on the operation
12136
+ var matchKey = operation === "OR" ? "any" : "all";
12137
+ var filterMatchOption = {};
12138
+ filterMatchOption[matchKey] = [fv.value];
12139
+ filter[entry.fieldName] = filterMatchOption;
12140
+ // construct the FacetOption
12133
12141
  var fo = {
12134
- label: fv.value,
12135
- value: fv.value,
12142
+ label: fv.value + " (" + fv.count + ")",
12143
+ key: fv.value,
12136
12144
  count: fv.count,
12137
12145
  selected: false,
12138
12146
  filter: filter,
@@ -12422,7 +12430,9 @@
12422
12430
  "sortField",
12423
12431
  "sortOrder",
12424
12432
  "site",
12433
+ "start",
12425
12434
  ];
12435
+ // Include "start" here
12426
12436
  // copy the props over
12427
12437
  props.forEach(function (prop) {
12428
12438
  if (options.hasOwnProperty(prop)) {
@@ -14779,10 +14789,10 @@
14779
14789
  * @param options
14780
14790
  */
14781
14791
  function _searchContent(filter, options) {
14782
- var _a;
14792
+ var _a, _b;
14783
14793
  return __awaiter(this, void 0, void 0, function () {
14784
14794
  var expanded, api, searchPromise, so_1, props;
14785
- return __generator(this, function (_b) {
14795
+ return __generator(this, function (_c) {
14786
14796
  expanded = expandContentFilter(filter);
14787
14797
  api = expandApi(options.api || "arcgis");
14788
14798
  // Portal Search
@@ -14794,6 +14804,7 @@
14794
14804
  "sortField",
14795
14805
  "sortOrder",
14796
14806
  "site",
14807
+ "start",
14797
14808
  ];
14798
14809
  // copy the props over
14799
14810
  props.forEach(function (prop) {
@@ -14805,10 +14816,17 @@
14805
14816
  if (!so_1.authentication) {
14806
14817
  so_1.portal = api.url + "/sharing/rest";
14807
14818
  }
14808
- // Aggregations
14819
+ // DEPRECATION
14809
14820
  if ((_a = options.aggregations) === null || _a === void 0 ? void 0 : _a.length) {
14821
+ // tslint:disable-next-line:no-console
14822
+ console.warn("IHubSearchOptions.aggregations is deprecated. Please use .aggFields instead.");
14810
14823
  so_1.countFields = options.aggregations.join(",");
14811
- so_1.countSize = 200;
14824
+ so_1.countSize = options.aggLimit || 10;
14825
+ }
14826
+ // Aggregations
14827
+ if ((_b = options.aggFields) === null || _b === void 0 ? void 0 : _b.length) {
14828
+ so_1.countFields = options.aggFields.join(",");
14829
+ so_1.countSize = options.aggLimit || 10;
14812
14830
  }
14813
14831
  searchPromise = searchPortal(so_1);
14814
14832
  }
@@ -14896,6 +14914,7 @@
14896
14914
  "sortField",
14897
14915
  "sortOrder",
14898
14916
  "site",
14917
+ "start",
14899
14918
  ];
14900
14919
  // copy the props over
14901
14920
  props.forEach(function (prop) {
@@ -14984,6 +15003,7 @@
14984
15003
  "sortField",
14985
15004
  "sortOrder",
14986
15005
  "site",
15006
+ "start",
14987
15007
  ];
14988
15008
  // copy the props over
14989
15009
  props.forEach(function (prop) {
@@ -15037,6 +15057,196 @@
15037
15057
  });
15038
15058
  }
15039
15059
 
15060
+ /**
15061
+ * Apply the sortState to SortOptions
15062
+ *
15063
+ * @param sortOptions
15064
+ * @param sortState
15065
+ * @returns
15066
+ */
15067
+ function applySortState(sortOptions, sortState) {
15068
+ var updated = cloneObject$1(sortOptions);
15069
+ if (sortState) {
15070
+ var _a = sortState.split("|"), label = _a[0], attribute = _a[1], order = _a[2];
15071
+ updated.label = label;
15072
+ updated.attribute = attribute;
15073
+ updated.order = order;
15074
+ }
15075
+ return updated;
15076
+ }
15077
+ /**
15078
+ * Apply FacetState to a Facet
15079
+ * @param facet
15080
+ * @param state
15081
+ * @returns
15082
+ */
15083
+ function applyFacetState(facet, state) {
15084
+ var updated = cloneObject$1(facet);
15085
+ switch (facet.display) {
15086
+ case "single-select":
15087
+ updated = applySingleSelectFacetState(facet, state);
15088
+ break;
15089
+ case "multi-select":
15090
+ updated = applyMultiSelectFacetState(facet, state);
15091
+ break;
15092
+ }
15093
+ return updated;
15094
+ }
15095
+ /**
15096
+ * Apply the Facet State onto a single-select facet
15097
+ *
15098
+ * Intentionally mutates the facet.
15099
+ * @param facet
15100
+ * @param state
15101
+ * @returns
15102
+ */
15103
+ function applySingleSelectFacetState(facet, state) {
15104
+ var updated = cloneObject$1(facet);
15105
+ updated.options = updated.options.map(function (o) {
15106
+ o.selected = o.key === state[facet.key];
15107
+ return o;
15108
+ });
15109
+ return updated;
15110
+ }
15111
+ /**
15112
+ * Serialize single-select facet into IFacetState
15113
+ * @param facet
15114
+ * @returns
15115
+ */
15116
+ function serializeSingleSelectFacetState(facet) {
15117
+ var state = {};
15118
+ var selected = facet.options.find(function (o) { return o.selected; });
15119
+ if (selected) {
15120
+ state[facet.key] = selected.key;
15121
+ }
15122
+ else {
15123
+ state[facet.key] = null;
15124
+ }
15125
+ return state;
15126
+ }
15127
+ /**
15128
+ * Apply the Facet State onto a multi-select Facet
15129
+ *
15130
+ * Intentionally mutates the facet.
15131
+ * @param facet
15132
+ * @param state
15133
+ * @returns
15134
+ */
15135
+ function applyMultiSelectFacetState(facet, state) {
15136
+ var _a;
15137
+ var updated = cloneObject$1(facet);
15138
+ var selectedKeys = ((_a = state[facet.key]) === null || _a === void 0 ? void 0 : _a.split(",")) || [];
15139
+ updated.options = updated.options.map(function (o) {
15140
+ o.selected = selectedKeys.includes(o.key);
15141
+ return o;
15142
+ });
15143
+ return updated;
15144
+ }
15145
+ /**
15146
+ * Serialize multi-select facet into IFacetState
15147
+ * @param facet
15148
+ * @returns
15149
+ */
15150
+ function serializeMultiSelectFacetState(facet) {
15151
+ var state = {};
15152
+ var selected = facet.options.filter(function (o) { return o.selected; });
15153
+ var value = selected.map(function (o) { return o.key; }).join(",");
15154
+ if (value.length) {
15155
+ state[facet.key] = value;
15156
+ }
15157
+ else {
15158
+ state[facet.key] = null;
15159
+ }
15160
+ return state;
15161
+ }
15162
+ /**
15163
+ * Serialize the state of the SortOption into a key/value pair
15164
+ *
15165
+ * Called from the Sort component
15166
+ * @param sort
15167
+ * @returns
15168
+ */
15169
+ function serializeSortState(sort) {
15170
+ return sort.label + "|" + sort.attribute + "|" + sort.order;
15171
+ }
15172
+ /**
15173
+ * Serialize the state of a facet into a key/value pair
15174
+ *
15175
+ * Called from the various facet components
15176
+ * @param facet
15177
+ * @returns
15178
+ */
15179
+ function serializeFacetState(facet) {
15180
+ var state = {};
15181
+ switch (facet.display) {
15182
+ case "single-select":
15183
+ state = serializeSingleSelectFacetState(facet);
15184
+ break;
15185
+ case "multi-select":
15186
+ state = serializeMultiSelectFacetState(facet);
15187
+ break;
15188
+ }
15189
+ return state;
15190
+ }
15191
+
15192
+ /**
15193
+ * Apply ICollectionState to an ICollection
15194
+ *
15195
+ * Typically used in a Gallery or Catalog component to
15196
+ * set the inital state, based on values deserialized
15197
+ * from a query string
15198
+ * @param collection
15199
+ * @param state
15200
+ * @returns
15201
+ */
15202
+ function applyCollectionState(collection, state) {
15203
+ var updated = cloneObject$1(collection);
15204
+ // Apply default query
15205
+ if (state.query) {
15206
+ updated.defaultQuery = state.query;
15207
+ }
15208
+ // Apply Sort State
15209
+ updated.sortOption = applySortState(updated.sortOption, state.sort);
15210
+ // Look for state props for the facets and apply them
15211
+ updated.facets = updated.facets.map(function (facet) {
15212
+ // see if there is a key for this facet on the state
15213
+ if (Object.keys(state).includes(facet.key)) {
15214
+ var facetState = {};
15215
+ facetState[facet.key] = state[facet.key];
15216
+ return applyFacetState(facet, facetState);
15217
+ }
15218
+ else {
15219
+ // Ensure all options are not selected
15220
+ // because they were not included in the state
15221
+ facet.options.forEach(function (opt) {
15222
+ opt.selected = false;
15223
+ });
15224
+ return facet;
15225
+ }
15226
+ });
15227
+ //
15228
+ return updated;
15229
+ }
15230
+ /**
15231
+ * Serialize the current state of a collection into a hash that
15232
+ * can be converted into a query string
15233
+ * @param collection
15234
+ * @returns
15235
+ */
15236
+ function serializeCollectionState(collection) {
15237
+ var state = {};
15238
+ if (collection.defaultQuery) {
15239
+ state.query = collection.defaultQuery;
15240
+ }
15241
+ if (collection.sortOption) {
15242
+ state.sort = serializeSortState(collection.sortOption);
15243
+ }
15244
+ var facetState = collection.facets.reduce(function (s, facet) {
15245
+ return __assign(__assign({}, s), serializeFacetState(facet));
15246
+ }, {});
15247
+ return __assign(__assign({}, state), facetState);
15248
+ }
15249
+
15040
15250
  /**
15041
15251
  * Add telemetry config object
15042
15252
  * @private
@@ -16857,6 +17067,7 @@
16857
17067
  exports.addSiteDomains = addSiteDomains;
16858
17068
  exports.addSolutionResourceUrlToAssets = addSolutionResourceUrlToAssets;
16859
17069
  exports.addUsersToGroup = addUsersToGroup;
17070
+ exports.applyCollectionState = applyCollectionState;
16860
17071
  exports.applyPropertiesToItems = applyPropertiesToItems;
16861
17072
  exports.arrayToObject = arrayToObject;
16862
17073
  exports.atob = abab.atob;
@@ -17055,6 +17266,7 @@
17055
17266
  exports.saveSession = saveSession;
17056
17267
  exports.searchProjects = searchProjects;
17057
17268
  exports.searchSites = searchSites;
17269
+ exports.serializeCollectionState = serializeCollectionState;
17058
17270
  exports.serializeContentFilterForPortal = serializeContentFilterForPortal;
17059
17271
  exports.serializeDateRange = serializeDateRange;
17060
17272
  exports.serializeGroupFilterForPortal = serializeGroupFilterForPortal;