@orangelogic/orange-dam-content-browser-sdk 2.4.4 → 2.4.5

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/build/index.mjs CHANGED
@@ -110,7 +110,7 @@ var __yieldStar = (value) => {
110
110
  }, "return" in obj && method("return"), it2;
111
111
  };
112
112
  var __forAwait = (obj, it2, method) => (it2 = obj[__knownSymbol("asyncIterator")]) ? it2.call(obj) : (obj = obj[__knownSymbol("iterator")](), it2 = {}, method = (key, fn) => (fn = obj[key]) && (it2[key] = (arg) => new Promise((yes, no, done) => (arg = fn.call(obj, arg), done = arg.done, Promise.resolve(arg.value).then((value) => yes({ value, done }), no)))), method("next"), method("return"), it2);
113
- var _a, _b, _c, _d, _e2, _f, _host, _getContainer, _getItemIndexById, _itemSelector, _anchor, _columnCount, _itemHeight, _pendingRestoreFrames, _restoreSequence, _lastGetDataParameters, _lastMappedAvailableExtensions, _lastData, _hasFetchedOnce;
113
+ var _a, _b, _c, _d, _e2, _f, _host, _getContainer, _getItemIndexById, _itemSelector, _anchor, _columnCount, _itemHeight, _pendingRestoreFrames, _restoreSequence, _lastGetDataParameters, _lastMappedAvailableExtensions, _lastData, _hasFetchedOnce, _generation, _inFlight, _queued, _lastPage;
114
114
  import CxDrawer from "@orangelogic/design-system/components/drawer";
115
115
  import CxFolderSelect from "@orangelogic/design-system/components/folder-select";
116
116
  import CxIcon from "@orangelogic/design-system/components/icon";
@@ -8570,6 +8570,7 @@ let CxContentBrowserAssetProxySelector = class extends CortexElement {
8570
8570
  this.canUseRepresentative = false;
8571
8571
  this.canUseATS = false;
8572
8572
  this.canUseTracking = false;
8573
+ this.proxiesFailed = false;
8573
8574
  this.selected = "";
8574
8575
  this.disabledSelected = false;
8575
8576
  this.customWidth = "";
@@ -8798,7 +8799,10 @@ let CxContentBrowserAssetProxySelector = class extends CortexElement {
8798
8799
  >
8799
8800
  <cx-icon name="warning"></cx-icon>
8800
8801
  <cx-typography variant="body3" class="content-browser-asset-proxy-selector__menu-item__name">
8801
- ${this.localize.term("damViewNoAvailableOptionsForThisAsset")}
8802
+ ${this.localize.term(
8803
+ // The no-options text names permissions as a possible cause, which a request error is not (L-42BIA4).
8804
+ this.proxiesFailed ? "oopsSomethingWentWrong" : "damViewNoAvailableOptionsForThisAsset"
8805
+ )}
8802
8806
  </cx-typography>
8803
8807
  </cx-space>
8804
8808
  `
@@ -8831,6 +8835,9 @@ __decorateClass$7([
8831
8835
  __decorateClass$7([
8832
8836
  n$6({ attribute: "can-use-tracking", reflect: true, type: Boolean })
8833
8837
  ], CxContentBrowserAssetProxySelector.prototype, "canUseTracking", 2);
8838
+ __decorateClass$7([
8839
+ n$6({ attribute: "proxies-failed", reflect: true, type: Boolean })
8840
+ ], CxContentBrowserAssetProxySelector.prototype, "proxiesFailed", 2);
8834
8841
  __decorateClass$7([
8835
8842
  n$6({ attribute: "selected", reflect: true, type: String })
8836
8843
  ], CxContentBrowserAssetProxySelector.prototype, "selected", 2);
@@ -9179,6 +9186,7 @@ let CxContentBrowserFormatDialog = class extends CortexElement {
9179
9186
  this.isFavorite = false;
9180
9187
  this.isAssetPinned = false;
9181
9188
  this.proxies = [];
9189
+ this.proxiesFailed = false;
9182
9190
  this.showVersionHistory = false;
9183
9191
  this.showCustomFormat = false;
9184
9192
  this.loadingVersionHistory = false;
@@ -9196,7 +9204,7 @@ let CxContentBrowserFormatDialog = class extends CortexElement {
9196
9204
  return !!this.autoExtension && this.supportedExtensions.includes(this.autoExtension);
9197
9205
  }
9198
9206
  get canUseATS() {
9199
- if (!this.asset) {
9207
+ if (!this.asset || this.filteredProxies.length === 0) {
9200
9208
  return false;
9201
9209
  }
9202
9210
  const extensionList = (this.availableExtensions && this.asset.docType ? uniqBy([
@@ -9205,6 +9213,18 @@ let CxContentBrowserFormatDialog = class extends CortexElement {
9205
9213
  ], "value") : [{ displayName: this.localize.term("automatic"), value: this.autoExtension }]).filter((item) => this.shouldAppendAutoExtension || item.value !== this.autoExtension);
9206
9214
  return this.canCustomFormat && extensionList.some((item) => item.value === this.asset.extension);
9207
9215
  }
9216
+ /**
9217
+ * One rule for the Insert button and handleProxyConfirm, so an enabled Insert always confirms (L-42BIA4).
9218
+ */
9219
+ get canConfirm() {
9220
+ if (!this.asset) {
9221
+ return false;
9222
+ }
9223
+ if (!this.canUseProxies || this.selectedProxy === CUSTOM_FORMAT_VALUE || this.selectedProxy === USE_REPRESENTATIVE_VALUE) {
9224
+ return true;
9225
+ }
9226
+ return this.filteredProxies.some((proxy) => proxy.id === this.selectedProxy);
9227
+ }
9208
9228
  handleSupportedExtensionsChange() {
9209
9229
  var _a2, _b2;
9210
9230
  this.filteredProxies = this.proxies.filter((item) => {
@@ -9221,12 +9241,14 @@ let CxContentBrowserFormatDialog = class extends CortexElement {
9221
9241
  asset,
9222
9242
  isFavorite,
9223
9243
  isAssetPinned = false,
9224
- proxies
9244
+ proxies,
9245
+ proxiesFailed = false
9225
9246
  }) {
9226
9247
  this.asset = asset;
9227
9248
  this.isFavorite = isFavorite;
9228
9249
  this.isAssetPinned = isAssetPinned;
9229
9250
  this.proxies = proxies;
9251
+ this.proxiesFailed = proxiesFailed;
9230
9252
  this.isOpen = true;
9231
9253
  }
9232
9254
  hide() {
@@ -9337,7 +9359,7 @@ let CxContentBrowserFormatDialog = class extends CortexElement {
9337
9359
  }
9338
9360
  handleProxyConfirm() {
9339
9361
  var _a2, _b2;
9340
- if (!this.asset) {
9362
+ if (!this.asset || !this.canConfirm) {
9341
9363
  return;
9342
9364
  }
9343
9365
  if (!this.canUseProxies) {
@@ -9360,9 +9382,6 @@ let CxContentBrowserFormatDialog = class extends CortexElement {
9360
9382
  detail: payload
9361
9383
  });
9362
9384
  } else {
9363
- if (!selectedProxy && this.selectedProxy !== USE_REPRESENTATIVE_VALUE) {
9364
- return;
9365
- }
9366
9385
  const payload = this.mapProxyConfirmPayload(this.asset, selectedProxy);
9367
9386
  this.loadingConfirm = true;
9368
9387
  this.emit("cx-content-browser-format-dialog-proxy-confirm", {
@@ -9643,11 +9662,12 @@ let CxContentBrowserFormatDialog = class extends CortexElement {
9643
9662
  }
9644
9663
  )}
9645
9664
  ?can-use-ats=${i3(
9646
- [this.availableExtensions, this.asset, this.canCustomFormat],
9665
+ [this.availableExtensions, this.asset, this.canCustomFormat, this.filteredProxies],
9647
9666
  () => this.canUseATS
9648
9667
  )}
9649
9668
  ?can-use-tracking=${this.canTrack}
9650
9669
  ?enabled-tracking=${this.enabledTracking}
9670
+ ?proxies-failed=${this.proxiesFailed}
9651
9671
  ?disabled-selected=${this.selectedProxy === CUSTOM_FORMAT_VALUE}
9652
9672
  @cx-select=${this.handleProxySelect}
9653
9673
  @cx-content-browser-asset-tracking-parameters-change=${this.handleTrackingParametersChange}
@@ -9748,7 +9768,7 @@ let CxContentBrowserFormatDialog = class extends CortexElement {
9748
9768
  content = b`
9749
9769
  <cx-button
9750
9770
  class="content-browser-format__footer__button"
9751
- ?disabled=${this.disabledConfirm}
9771
+ ?disabled=${this.disabledConfirm || !this.canConfirm}
9752
9772
  ?loading=${this.loadingConfirm}
9753
9773
  variant="primary"
9754
9774
  style=${o$2({
@@ -9804,6 +9824,7 @@ let CxContentBrowserFormatDialog = class extends CortexElement {
9804
9824
  this.loadingPinAsset = false;
9805
9825
  this.loadingVersionHistory = false;
9806
9826
  this.proxies = [];
9827
+ this.proxiesFailed = false;
9807
9828
  this.selectedProxy = "";
9808
9829
  this.showCustomFormat = false;
9809
9830
  this.showVersionHistory = false;
@@ -9954,6 +9975,9 @@ __decorateClass$5([
9954
9975
  __decorateClass$5([
9955
9976
  r$6()
9956
9977
  ], CxContentBrowserFormatDialog.prototype, "proxies", 2);
9978
+ __decorateClass$5([
9979
+ r$6()
9980
+ ], CxContentBrowserFormatDialog.prototype, "proxiesFailed", 2);
9957
9981
  __decorateClass$5([
9958
9982
  r$6()
9959
9983
  ], CxContentBrowserFormatDialog.prototype, "showVersionHistory", 2);
@@ -13333,6 +13357,13 @@ function apiGetAvailableProxies(_0) {
13333
13357
  try {
13334
13358
  const response = yield http.request({
13335
13359
  baseURL: siteUrl,
13360
+ cache: {
13361
+ // A malformed body arrives with HTTP 200, so the default status check would cache the error and
13362
+ // serve it again after the server recovers.
13363
+ cachePredicate: {
13364
+ responseMatch: ({ data }) => !data.isError
13365
+ }
13366
+ },
13336
13367
  method: "GET",
13337
13368
  params: {
13338
13369
  RecordId: assetRecordId
@@ -13341,16 +13372,18 @@ function apiGetAvailableProxies(_0) {
13341
13372
  transformResponse: [
13342
13373
  ...Array.isArray(http.defaults.transformResponse) ? http.defaults.transformResponse : [],
13343
13374
  (rawResponse) => {
13344
- var _a2, _b2, _c2;
13345
- if (!rawResponse || typeof rawResponse !== "object") {
13375
+ var _a2;
13376
+ if (!rawResponse || typeof rawResponse !== "object" || !Array.isArray(rawResponse.proxies)) {
13346
13377
  return {
13378
+ isError: true,
13347
13379
  previewUrl: "",
13348
13380
  proxies: []
13349
13381
  };
13350
13382
  }
13351
13383
  return {
13384
+ isError: false,
13352
13385
  previewUrl: (_a2 = rawResponse.previewUrl) != null ? _a2 : "",
13353
- proxies: (_c2 = (_b2 = rawResponse.proxies) == null ? void 0 : _b2.map((proxy) => ({
13386
+ proxies: rawResponse.proxies.map((proxy) => ({
13354
13387
  cdnName: proxy.cdnName,
13355
13388
  extension: proxy.extension,
13356
13389
  formatHeight: proxy.formatHeight,
@@ -13361,7 +13394,7 @@ function apiGetAvailableProxies(_0) {
13361
13394
  proxyLabel: proxy.proxyLabel,
13362
13395
  proxyName: proxy.proxyName,
13363
13396
  width: proxy.width
13364
- }))) != null ? _c2 : []
13397
+ }))
13365
13398
  };
13366
13399
  }
13367
13400
  ],
@@ -13370,6 +13403,7 @@ function apiGetAvailableProxies(_0) {
13370
13403
  return response.data;
13371
13404
  } catch (error) {
13372
13405
  return {
13406
+ isError: true,
13373
13407
  previewUrl: "",
13374
13408
  proxies: []
13375
13409
  };
@@ -13795,6 +13829,10 @@ class FetchAndMergeAssetsController {
13795
13829
  __privateAdd(this, _lastMappedAvailableExtensions);
13796
13830
  __privateAdd(this, _lastData);
13797
13831
  __privateAdd(this, _hasFetchedOnce);
13832
+ __privateAdd(this, _generation);
13833
+ __privateAdd(this, _inFlight);
13834
+ __privateAdd(this, _queued);
13835
+ __privateAdd(this, _lastPage);
13798
13836
  var _a2, _b2;
13799
13837
  this.availableFacets = [];
13800
13838
  this.facets = [];
@@ -13818,6 +13856,10 @@ class FetchAndMergeAssetsController {
13818
13856
  this.responseInterceptorId = null;
13819
13857
  this._debouncePromise = null;
13820
13858
  this._debounceResolve = null;
13859
+ __privateSet(this, _generation, 0);
13860
+ __privateSet(this, _inFlight, []);
13861
+ __privateSet(this, _queued, false);
13862
+ __privateSet(this, _lastPage, null);
13821
13863
  this.host = host;
13822
13864
  this.availableDocTypes = availableDocTypes;
13823
13865
  this.defaultFolderId = defaultFolderId;
@@ -14049,11 +14091,19 @@ class FetchAndMergeAssetsController {
14049
14091
  fetchAndMergeAssets(request) {
14050
14092
  return __async(this, null, function* () {
14051
14093
  var _a2;
14052
- this.loading = true;
14053
- this.host.requestUpdate();
14054
14094
  if (request.start === null) {
14055
14095
  return;
14056
14096
  }
14097
+ const isRestart = this.isRestart(request);
14098
+ if (!isRestart && this.isBusy()) {
14099
+ return;
14100
+ }
14101
+ if (isRestart) {
14102
+ __privateSet(this, _generation, __privateGet(this, _generation) + 1);
14103
+ }
14104
+ const generation = __privateGet(this, _generation);
14105
+ this.loading = true;
14106
+ this.host.requestUpdate();
14057
14107
  if (this._debounceTimeout) {
14058
14108
  clearTimeout(this._debounceTimeout);
14059
14109
  this._debounceTimeout = void 0;
@@ -14061,61 +14111,105 @@ class FetchAndMergeAssetsController {
14061
14111
  (_a2 = this._debouncePromise) != null ? _a2 : this._debouncePromise = new Promise((resolve) => {
14062
14112
  this._debounceResolve = resolve;
14063
14113
  });
14114
+ __privateSet(this, _queued, true);
14064
14115
  this._debounceTimeout = setTimeout(() => __async(this, null, function* () {
14065
- var _a3, _b2, _c2, _d2, _e3, _f2, _g, _h, _i;
14066
- if (Object.keys(this.sortOrders).length === 0) {
14067
- const sortOrders = yield apiGetSortOrders();
14068
- this.sortOrders = sortOrders;
14069
- }
14070
- const forceRefetch = request.start === ((_a3 = this.lastRequest) == null ? void 0 : _a3.start) && !!request.pageSize && !!((_b2 = this.lastRequest) == null ? void 0 : _b2.pageSize) && request.pageSize > ((_c2 = this.lastRequest) == null ? void 0 : _c2.pageSize);
14071
- if (!__privateGet(this, _hasFetchedOnce)) {
14116
+ var _a3, _b2, _c2, _d2, _e3, _f2, _g;
14117
+ __privateSet(this, _queued, false);
14118
+ __privateGet(this, _inFlight).push(generation);
14119
+ try {
14120
+ if (Object.keys(this.sortOrders).length === 0) {
14121
+ const sortOrders = yield apiGetSortOrders();
14122
+ this.sortOrders = sortOrders;
14123
+ }
14124
+ if (generation !== __privateGet(this, _generation)) {
14125
+ return;
14126
+ }
14127
+ if (!__privateGet(this, _hasFetchedOnce)) {
14128
+ request = __spreadProps(__spreadValues({}, request), {
14129
+ // Keep a folder the host already resolved (e.g. the auto-selected initial folder).
14130
+ folderId: request.folderId || this.defaultFolderId,
14131
+ isSeeThrough: (_a3 = request.isSeeThrough) != null ? _a3 : this.defaultIsSeeThrough,
14132
+ searchText: (_b2 = request.searchText) != null ? _b2 : this.defaultSearchText,
14133
+ selectedFacets: (_c2 = request.selectedFacets) != null ? _c2 : this.defaultSelectedFacets,
14134
+ sortDirection: (_d2 = request.sortDirection) != null ? _d2 : this.defaultSortDirection,
14135
+ sortOrderName: (_e3 = request.sortOrderName) != null ? _e3 : this.defaultSortOrderName
14136
+ });
14137
+ }
14138
+ let sortOrder;
14139
+ if (request.sortOrderName && request.sortDirection) {
14140
+ const sortOrders = this.sortOrders[request.sortOrderName];
14141
+ sortOrder = (_f2 = sortOrders == null ? void 0 : sortOrders.find((item) => {
14142
+ var _a4;
14143
+ return item.sortDirection.toLowerCase() === ((_a4 = request.sortDirection) == null ? void 0 : _a4.toLowerCase());
14144
+ })) == null ? void 0 : _f2.id;
14145
+ if (!sortOrder && (sortOrders == null ? void 0 : sortOrders[0])) {
14146
+ sortOrder = sortOrders[0].id;
14147
+ request.sortDirection = sortOrders[0].sortDirection;
14148
+ }
14149
+ }
14072
14150
  request = __spreadProps(__spreadValues({}, request), {
14073
- // Keep a folder the host already resolved (e.g. the auto-selected initial folder).
14074
- folderId: request.folderId || this.defaultFolderId,
14075
- isSeeThrough: (_d2 = request.isSeeThrough) != null ? _d2 : this.defaultIsSeeThrough,
14076
- searchText: (_e3 = request.searchText) != null ? _e3 : this.defaultSearchText,
14077
- selectedFacets: (_f2 = request.selectedFacets) != null ? _f2 : this.defaultSelectedFacets,
14078
- sortDirection: (_g = request.sortDirection) != null ? _g : this.defaultSortDirection,
14079
- sortOrderName: (_h = request.sortOrderName) != null ? _h : this.defaultSortOrderName
14151
+ limitedToDocTypes: this.availableDocTypes
14080
14152
  });
14081
- }
14082
- let sortOrder;
14083
- if (request.sortOrderName && request.sortDirection) {
14084
- const sortOrders = this.sortOrders[request.sortOrderName];
14085
- sortOrder = (_i = sortOrders == null ? void 0 : sortOrders.find((item) => {
14086
- var _a4;
14087
- return item.sortDirection.toLowerCase() === ((_a4 = request.sortDirection) == null ? void 0 : _a4.toLowerCase());
14088
- })) == null ? void 0 : _i.id;
14089
- if (!sortOrder && (sortOrders == null ? void 0 : sortOrders[0])) {
14090
- sortOrder = sortOrders[0].id;
14091
- request.sortDirection = sortOrders[0].sortDirection;
14153
+ this.lastRequest = request;
14154
+ const assets = yield apiGetAssets(__spreadProps(__spreadValues({}, request), {
14155
+ sortOrder
14156
+ }));
14157
+ if (generation !== __privateGet(this, _generation)) {
14158
+ return;
14092
14159
  }
14160
+ if (isRestart) {
14161
+ this.items = assets.items;
14162
+ } else {
14163
+ this.items = uniqBy([...this.items, ...assets.items], "recordId");
14164
+ }
14165
+ this.facets = this.mergeFacetsWithSelected(assets.facets, this.facets, request.selectedFacets);
14166
+ this.totalCount = assets.totalCount;
14167
+ __privateSet(this, _lastPage, {
14168
+ pageSize: request.pageSize || assets.items.length,
14169
+ start: (_g = request.start) != null ? _g : 0
14170
+ });
14171
+ __privateSet(this, _hasFetchedOnce, true);
14172
+ if (this._debounceResolve) {
14173
+ this._debounceResolve(this.lastRequest);
14174
+ }
14175
+ this._debouncePromise = null;
14176
+ this._debounceResolve = null;
14177
+ } finally {
14178
+ const index = __privateGet(this, _inFlight).indexOf(generation);
14179
+ if (index >= 0) {
14180
+ __privateGet(this, _inFlight).splice(index, 1);
14181
+ }
14182
+ this.loading = this.isBusy();
14183
+ this.host.requestUpdate();
14093
14184
  }
14094
- request = __spreadProps(__spreadValues({}, request), {
14095
- limitedToDocTypes: this.availableDocTypes
14096
- });
14097
- this.lastRequest = request;
14098
- const assets = yield apiGetAssets(__spreadProps(__spreadValues({}, request), {
14099
- sortOrder
14100
- }));
14101
- if (request.start && request.start > 0 && !forceRefetch) {
14102
- this.items = uniqBy([...this.items, ...assets.items], "recordId");
14103
- } else {
14104
- this.items = assets.items;
14105
- }
14106
- this.facets = this.mergeFacetsWithSelected(assets.facets, this.facets, request.selectedFacets);
14107
- this.totalCount = assets.totalCount;
14108
- this.loading = false;
14109
- __privateSet(this, _hasFetchedOnce, true);
14110
- this.host.requestUpdate();
14111
- if (this._debounceResolve) {
14112
- this._debounceResolve(this.lastRequest);
14113
- }
14114
- this._debouncePromise = null;
14115
- this._debounceResolve = null;
14116
14185
  }), 200);
14117
14186
  });
14118
14187
  }
14188
+ /**
14189
+ * Where the next page of the list on screen starts, or `null` while a request of that list is queued
14190
+ * or in flight. The start follows the last accepted page, not the last request sent, so a page that
14191
+ * was dropped or discarded never leaves a gap. `lastPageSize` is the size of that accepted page.
14192
+ */
14193
+ getNextPage() {
14194
+ var _a2, _b2;
14195
+ if (this.isBusy()) {
14196
+ return null;
14197
+ }
14198
+ return {
14199
+ lastPageSize: (_b2 = (_a2 = __privateGet(this, _lastPage)) == null ? void 0 : _a2.pageSize) != null ? _b2 : 0,
14200
+ start: __privateGet(this, _lastPage) ? __privateGet(this, _lastPage).start + __privateGet(this, _lastPage).pageSize : 0
14201
+ };
14202
+ }
14203
+ isBusy() {
14204
+ return __privateGet(this, _queued) || __privateGet(this, _inFlight).includes(__privateGet(this, _generation));
14205
+ }
14206
+ /**
14207
+ * A request that starts a new list: the first page, or the same page asked for with a larger page size.
14208
+ */
14209
+ isRestart(request) {
14210
+ var _a2, _b2;
14211
+ return !request.start || request.start === ((_a2 = this.lastRequest) == null ? void 0 : _a2.start) && !!request.pageSize && !!((_b2 = this.lastRequest) == null ? void 0 : _b2.pageSize) && request.pageSize > this.lastRequest.pageSize;
14212
+ }
14119
14213
  fetchAssetFavoriteStatus(id) {
14120
14214
  return __async(this, null, function* () {
14121
14215
  return apiGetAssetFavoriteStatus({
@@ -14125,7 +14219,7 @@ class FetchAndMergeAssetsController {
14125
14219
  }
14126
14220
  fetchAssetByID(id, options) {
14127
14221
  return __async(this, null, function* () {
14128
- var _a2, _b2, _c2, _d2, _e3, _f2, _g, _h, _i, _j, _k, _l, _m, _n;
14222
+ var _a2, _b2, _c2, _d2, _e3, _f2, _g, _h, _i, _j, _k, _l, _m, _n, _o;
14129
14223
  const { allowedExtensions = [], canFavorite = false, simplePick = false } = options != null ? options : {};
14130
14224
  const promises = [
14131
14225
  apiGetAssetsByIDs({
@@ -14205,7 +14299,8 @@ class FetchAndMergeAssetsController {
14205
14299
  }
14206
14300
  return proxyExtension.toLowerCase() === extension.toLowerCase();
14207
14301
  });
14208
- })
14302
+ }),
14303
+ proxiesFailed: (_o = proxyData == null ? void 0 : proxyData.isError) != null ? _o : false
14209
14304
  };
14210
14305
  });
14211
14306
  }
@@ -14305,12 +14400,17 @@ class FetchAndMergeAssetsController {
14305
14400
  this.items = [];
14306
14401
  this.totalCount = 0;
14307
14402
  this.sortOrders = {};
14403
+ __privateSet(this, _lastPage, null);
14308
14404
  }
14309
14405
  }
14310
14406
  _lastGetDataParameters = new WeakMap();
14311
14407
  _lastMappedAvailableExtensions = new WeakMap();
14312
14408
  _lastData = new WeakMap();
14313
14409
  _hasFetchedOnce = new WeakMap();
14410
+ _generation = new WeakMap();
14411
+ _inFlight = new WeakMap();
14412
+ _queued = new WeakMap();
14413
+ _lastPage = new WeakMap();
14314
14414
  function safeInteger(value) {
14315
14415
  if (Number.isNaN(value) || !Number.isInteger(value)) {
14316
14416
  return 0;
@@ -14641,10 +14741,13 @@ let CxContentBrowser = class extends CortexElement {
14641
14741
  }
14642
14742
  handleScrollEnd() {
14643
14743
  return __async(this, null, function* () {
14644
- const newStart = safeInteger(this.lastRequest.start) + safeInteger(this.lastRequest.pageSize);
14744
+ const nextPage = this.fetchAndMergeAssetsController.getNextPage();
14745
+ if (!nextPage) {
14746
+ return;
14747
+ }
14645
14748
  this.lastRequest = __spreadProps(__spreadValues({}, this.lastRequest), {
14646
14749
  pageSize: this.defaultPageSize,
14647
- start: newStart
14750
+ start: nextPage.start
14648
14751
  });
14649
14752
  yield this.fetchAndMergeAssetsController.fetchAndMergeAssets(this.lastRequest);
14650
14753
  });
@@ -14691,13 +14794,17 @@ let CxContentBrowser = class extends CortexElement {
14691
14794
  }
14692
14795
  return;
14693
14796
  }
14797
+ const nextPage = this.fetchAndMergeAssetsController.getNextPage();
14798
+ if (!nextPage) {
14799
+ return;
14800
+ }
14694
14801
  const totalCount = this.fetchAndMergeAssetsController.getData().totalCount;
14695
- const newStart = safeInteger(this.lastRequest.start) + safeInteger(this.lastRequest.pageSize);
14696
- if (newPageSize <= safeInteger(this.lastRequest.pageSize) || newPageSize === 0 || newStart > totalCount) {
14802
+ const newStart = nextPage.start;
14803
+ if (newPageSize <= nextPage.lastPageSize || newPageSize === 0 || newStart > totalCount) {
14697
14804
  return;
14698
14805
  }
14699
14806
  this.lastRequest = __spreadProps(__spreadValues({}, this.lastRequest), {
14700
- pageSize: newPageSize - safeInteger(this.lastRequest.pageSize),
14807
+ pageSize: newPageSize - nextPage.lastPageSize,
14701
14808
  start: newStart
14702
14809
  });
14703
14810
  yield this.fetchAndMergeAssetsController.fetchAndMergeAssets(this.lastRequest);
@@ -79,6 +79,20 @@ export declare class FetchAndMergeAssetsController implements ReactiveController
79
79
  */
80
80
  private mergeFacetsWithSelected;
81
81
  fetchAndMergeAssets(request: GetAssetsRequest): Promise<void>;
82
+ /**
83
+ * Where the next page of the list on screen starts, or `null` while a request of that list is queued
84
+ * or in flight. The start follows the last accepted page, not the last request sent, so a page that
85
+ * was dropped or discarded never leaves a gap. `lastPageSize` is the size of that accepted page.
86
+ */
87
+ getNextPage(): {
88
+ lastPageSize: number;
89
+ start: number;
90
+ } | null;
91
+ private isBusy;
92
+ /**
93
+ * A request that starts a new list: the first page, or the same page asked for with a larger page size.
94
+ */
95
+ private isRestart;
82
96
  fetchAssetFavoriteStatus(id: string): Promise<boolean>;
83
97
  fetchAssetByID(id: string, options?: {
84
98
  allowedExtensions?: string[];
@@ -106,6 +120,7 @@ export declare class FetchAndMergeAssetsController implements ReactiveController
106
120
  };
107
121
  isFavorite: boolean;
108
122
  proxies: import("../types/asset").AvailableProxy[];
123
+ proxiesFailed: boolean;
109
124
  } | undefined>;
110
125
  fetchAssetVersionHistory(id: string): Promise<import("../api/asset/asset.types").GetAssetVersionHistoryResponse>;
111
126
  addAssetToFavorite(id: string): Promise<boolean>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orangelogic/orange-dam-content-browser-sdk",
3
- "version": "2.4.4",
3
+ "version": "2.4.5",
4
4
  "description": "OrangeDAM Content Browser SDK source code",
5
5
  "main": "./build/OrangeDAMContentBrowserSDK.min.js",
6
6
  "module": "./build/index.mjs",