@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.
@@ -83,6 +83,7 @@ export type GetAvailableProxiesRawResponse = {
83
83
  }>;
84
84
  };
85
85
  export type GetAvailableProxiesResponse = {
86
+ isError: boolean;
86
87
  previewUrl: string;
87
88
  proxies: AvailableProxy[];
88
89
  };
@@ -37,6 +37,7 @@ export default class CxContentBrowserAssetProxySelector extends CortexElement {
37
37
  canUseRepresentative: boolean;
38
38
  canUseATS: boolean;
39
39
  canUseTracking: boolean;
40
+ proxiesFailed: boolean;
40
41
  selected: string;
41
42
  disabledSelected: boolean;
42
43
  customWidth: string;
@@ -67,6 +67,7 @@ export default class CxContentBrowserFormatDialog extends CortexElement {
67
67
  isFavorite: boolean;
68
68
  isAssetPinned: boolean;
69
69
  proxies: AvailableProxy[];
70
+ proxiesFailed: boolean;
70
71
  showVersionHistory: boolean;
71
72
  showCustomFormat: boolean;
72
73
  loadingVersionHistory: boolean;
@@ -92,14 +93,19 @@ export default class CxContentBrowserFormatDialog extends CortexElement {
92
93
  trackingParameters: Parameter[];
93
94
  private get shouldAppendAutoExtension();
94
95
  private get canUseATS();
96
+ /**
97
+ * One rule for the Insert button and handleProxyConfirm, so an enabled Insert always confirms (L-42BIA4).
98
+ */
99
+ private get canConfirm();
95
100
  handleSupportedExtensionsChange(): void;
96
- open({ asset, isFavorite, isAssetPinned, proxies, }: {
101
+ open({ asset, isFavorite, isAssetPinned, proxies, proxiesFailed, }: {
97
102
  asset: Asset & {
98
103
  previewUrl: string;
99
104
  };
100
105
  isFavorite: boolean;
101
106
  isAssetPinned?: boolean;
102
107
  proxies: AvailableProxy[];
108
+ proxiesFailed?: boolean;
103
109
  }): void;
104
110
  hide(): void;
105
111
  setVersionHistory(versions: AssetVersion[]): void;
@@ -109,7 +109,7 @@ var __yieldStar = (value) => {
109
109
  }, "return" in obj && method("return"), it;
110
110
  };
111
111
  var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")]) ? it.call(obj) : (obj = obj[__knownSymbol("iterator")](), it = {}, method = (key, fn) => (fn = obj[key]) && (it[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"), it);
112
- var _a, _b, _c, _d, _e, _f, _host, _getContainer, _getItemIndexById, _itemSelector, _anchor, _columnCount, _itemHeight, _pendingRestoreFrames, _restoreSequence, _lastGetDataParameters, _lastMappedAvailableExtensions, _lastData, _hasFetchedOnce;
112
+ var _a, _b, _c, _d, _e, _f, _host, _getContainer, _getItemIndexById, _itemSelector, _anchor, _columnCount, _itemHeight, _pendingRestoreFrames, _restoreSequence, _lastGetDataParameters, _lastMappedAvailableExtensions, _lastData, _hasFetchedOnce, _generation, _inFlight, _queued, _lastPage;
113
113
  import CxDrawer from "@orangelogic/design-system/components/drawer";
114
114
  import CxFolderSelect from "@orangelogic/design-system/components/folder-select";
115
115
  import CxIcon from "@orangelogic/design-system/components/icon";
@@ -8504,6 +8504,7 @@ let CxContentBrowserAssetProxySelector = class extends CortexElement {
8504
8504
  this.canUseRepresentative = false;
8505
8505
  this.canUseATS = false;
8506
8506
  this.canUseTracking = false;
8507
+ this.proxiesFailed = false;
8507
8508
  this.selected = "";
8508
8509
  this.disabledSelected = false;
8509
8510
  this.customWidth = "";
@@ -8732,7 +8733,10 @@ let CxContentBrowserAssetProxySelector = class extends CortexElement {
8732
8733
  >
8733
8734
  <cx-icon name="warning"></cx-icon>
8734
8735
  <cx-typography variant="body3" class="content-browser-asset-proxy-selector__menu-item__name">
8735
- ${this.localize.term("damViewNoAvailableOptionsForThisAsset")}
8736
+ ${this.localize.term(
8737
+ // The no-options text names permissions as a possible cause, which a request error is not (L-42BIA4).
8738
+ this.proxiesFailed ? "oopsSomethingWentWrong" : "damViewNoAvailableOptionsForThisAsset"
8739
+ )}
8736
8740
  </cx-typography>
8737
8741
  </cx-space>
8738
8742
  `
@@ -8765,6 +8769,9 @@ __decorateClass$7([
8765
8769
  __decorateClass$7([
8766
8770
  n$6({ attribute: "can-use-tracking", reflect: true, type: Boolean })
8767
8771
  ], CxContentBrowserAssetProxySelector.prototype, "canUseTracking", 2);
8772
+ __decorateClass$7([
8773
+ n$6({ attribute: "proxies-failed", reflect: true, type: Boolean })
8774
+ ], CxContentBrowserAssetProxySelector.prototype, "proxiesFailed", 2);
8768
8775
  __decorateClass$7([
8769
8776
  n$6({ attribute: "selected", reflect: true, type: String })
8770
8777
  ], CxContentBrowserAssetProxySelector.prototype, "selected", 2);
@@ -9113,6 +9120,7 @@ let CxContentBrowserFormatDialog = class extends CortexElement {
9113
9120
  this.isFavorite = false;
9114
9121
  this.isAssetPinned = false;
9115
9122
  this.proxies = [];
9123
+ this.proxiesFailed = false;
9116
9124
  this.showVersionHistory = false;
9117
9125
  this.showCustomFormat = false;
9118
9126
  this.loadingVersionHistory = false;
@@ -9130,7 +9138,7 @@ let CxContentBrowserFormatDialog = class extends CortexElement {
9130
9138
  return !!this.autoExtension && this.supportedExtensions.includes(this.autoExtension);
9131
9139
  }
9132
9140
  get canUseATS() {
9133
- if (!this.asset) {
9141
+ if (!this.asset || this.filteredProxies.length === 0) {
9134
9142
  return false;
9135
9143
  }
9136
9144
  const extensionList = (this.availableExtensions && this.asset.docType ? uniqBy([
@@ -9139,6 +9147,18 @@ let CxContentBrowserFormatDialog = class extends CortexElement {
9139
9147
  ], "value") : [{ displayName: this.localize.term("automatic"), value: this.autoExtension }]).filter((item) => this.shouldAppendAutoExtension || item.value !== this.autoExtension);
9140
9148
  return this.canCustomFormat && extensionList.some((item) => item.value === this.asset.extension);
9141
9149
  }
9150
+ /**
9151
+ * One rule for the Insert button and handleProxyConfirm, so an enabled Insert always confirms (L-42BIA4).
9152
+ */
9153
+ get canConfirm() {
9154
+ if (!this.asset) {
9155
+ return false;
9156
+ }
9157
+ if (!this.canUseProxies || this.selectedProxy === CUSTOM_FORMAT_VALUE || this.selectedProxy === USE_REPRESENTATIVE_VALUE) {
9158
+ return true;
9159
+ }
9160
+ return this.filteredProxies.some((proxy) => proxy.id === this.selectedProxy);
9161
+ }
9142
9162
  handleSupportedExtensionsChange() {
9143
9163
  var _a2, _b2;
9144
9164
  this.filteredProxies = this.proxies.filter((item) => {
@@ -9155,12 +9175,14 @@ let CxContentBrowserFormatDialog = class extends CortexElement {
9155
9175
  asset,
9156
9176
  isFavorite,
9157
9177
  isAssetPinned = false,
9158
- proxies
9178
+ proxies,
9179
+ proxiesFailed = false
9159
9180
  }) {
9160
9181
  this.asset = asset;
9161
9182
  this.isFavorite = isFavorite;
9162
9183
  this.isAssetPinned = isAssetPinned;
9163
9184
  this.proxies = proxies;
9185
+ this.proxiesFailed = proxiesFailed;
9164
9186
  this.isOpen = true;
9165
9187
  }
9166
9188
  hide() {
@@ -9271,7 +9293,7 @@ let CxContentBrowserFormatDialog = class extends CortexElement {
9271
9293
  }
9272
9294
  handleProxyConfirm() {
9273
9295
  var _a2, _b2;
9274
- if (!this.asset) {
9296
+ if (!this.asset || !this.canConfirm) {
9275
9297
  return;
9276
9298
  }
9277
9299
  if (!this.canUseProxies) {
@@ -9294,9 +9316,6 @@ let CxContentBrowserFormatDialog = class extends CortexElement {
9294
9316
  detail: payload
9295
9317
  });
9296
9318
  } else {
9297
- if (!selectedProxy && this.selectedProxy !== USE_REPRESENTATIVE_VALUE) {
9298
- return;
9299
- }
9300
9319
  const payload = this.mapProxyConfirmPayload(this.asset, selectedProxy);
9301
9320
  this.loadingConfirm = true;
9302
9321
  this.emit("cx-content-browser-format-dialog-proxy-confirm", {
@@ -9577,11 +9596,12 @@ let CxContentBrowserFormatDialog = class extends CortexElement {
9577
9596
  }
9578
9597
  )}
9579
9598
  ?can-use-ats=${i3(
9580
- [this.availableExtensions, this.asset, this.canCustomFormat],
9599
+ [this.availableExtensions, this.asset, this.canCustomFormat, this.filteredProxies],
9581
9600
  () => this.canUseATS
9582
9601
  )}
9583
9602
  ?can-use-tracking=${this.canTrack}
9584
9603
  ?enabled-tracking=${this.enabledTracking}
9604
+ ?proxies-failed=${this.proxiesFailed}
9585
9605
  ?disabled-selected=${this.selectedProxy === CUSTOM_FORMAT_VALUE}
9586
9606
  @cx-select=${this.handleProxySelect}
9587
9607
  @cx-content-browser-asset-tracking-parameters-change=${this.handleTrackingParametersChange}
@@ -9682,7 +9702,7 @@ let CxContentBrowserFormatDialog = class extends CortexElement {
9682
9702
  content = b`
9683
9703
  <cx-button
9684
9704
  class="content-browser-format__footer__button"
9685
- ?disabled=${this.disabledConfirm}
9705
+ ?disabled=${this.disabledConfirm || !this.canConfirm}
9686
9706
  ?loading=${this.loadingConfirm}
9687
9707
  variant="primary"
9688
9708
  style=${o$1({
@@ -9738,6 +9758,7 @@ let CxContentBrowserFormatDialog = class extends CortexElement {
9738
9758
  this.loadingPinAsset = false;
9739
9759
  this.loadingVersionHistory = false;
9740
9760
  this.proxies = [];
9761
+ this.proxiesFailed = false;
9741
9762
  this.selectedProxy = "";
9742
9763
  this.showCustomFormat = false;
9743
9764
  this.showVersionHistory = false;
@@ -9888,6 +9909,9 @@ __decorateClass$5([
9888
9909
  __decorateClass$5([
9889
9910
  r$6()
9890
9911
  ], CxContentBrowserFormatDialog.prototype, "proxies", 2);
9912
+ __decorateClass$5([
9913
+ r$6()
9914
+ ], CxContentBrowserFormatDialog.prototype, "proxiesFailed", 2);
9891
9915
  __decorateClass$5([
9892
9916
  r$6()
9893
9917
  ], CxContentBrowserFormatDialog.prototype, "showVersionHistory", 2);
@@ -13267,6 +13291,13 @@ function apiGetAvailableProxies(_0) {
13267
13291
  try {
13268
13292
  const response = yield http.request({
13269
13293
  baseURL: siteUrl,
13294
+ cache: {
13295
+ // A malformed body arrives with HTTP 200, so the default status check would cache the error and
13296
+ // serve it again after the server recovers.
13297
+ cachePredicate: {
13298
+ responseMatch: ({ data }) => !data.isError
13299
+ }
13300
+ },
13270
13301
  method: "GET",
13271
13302
  params: {
13272
13303
  RecordId: assetRecordId
@@ -13275,16 +13306,18 @@ function apiGetAvailableProxies(_0) {
13275
13306
  transformResponse: [
13276
13307
  ...Array.isArray(http.defaults.transformResponse) ? http.defaults.transformResponse : [],
13277
13308
  (rawResponse) => {
13278
- var _a2, _b2, _c2;
13279
- if (!rawResponse || typeof rawResponse !== "object") {
13309
+ var _a2;
13310
+ if (!rawResponse || typeof rawResponse !== "object" || !Array.isArray(rawResponse.proxies)) {
13280
13311
  return {
13312
+ isError: true,
13281
13313
  previewUrl: "",
13282
13314
  proxies: []
13283
13315
  };
13284
13316
  }
13285
13317
  return {
13318
+ isError: false,
13286
13319
  previewUrl: (_a2 = rawResponse.previewUrl) != null ? _a2 : "",
13287
- proxies: (_c2 = (_b2 = rawResponse.proxies) == null ? void 0 : _b2.map((proxy) => ({
13320
+ proxies: rawResponse.proxies.map((proxy) => ({
13288
13321
  cdnName: proxy.cdnName,
13289
13322
  extension: proxy.extension,
13290
13323
  formatHeight: proxy.formatHeight,
@@ -13295,7 +13328,7 @@ function apiGetAvailableProxies(_0) {
13295
13328
  proxyLabel: proxy.proxyLabel,
13296
13329
  proxyName: proxy.proxyName,
13297
13330
  width: proxy.width
13298
- }))) != null ? _c2 : []
13331
+ }))
13299
13332
  };
13300
13333
  }
13301
13334
  ],
@@ -13304,6 +13337,7 @@ function apiGetAvailableProxies(_0) {
13304
13337
  return response.data;
13305
13338
  } catch (error) {
13306
13339
  return {
13340
+ isError: true,
13307
13341
  previewUrl: "",
13308
13342
  proxies: []
13309
13343
  };
@@ -13729,6 +13763,10 @@ class FetchAndMergeAssetsController {
13729
13763
  __privateAdd(this, _lastMappedAvailableExtensions);
13730
13764
  __privateAdd(this, _lastData);
13731
13765
  __privateAdd(this, _hasFetchedOnce);
13766
+ __privateAdd(this, _generation);
13767
+ __privateAdd(this, _inFlight);
13768
+ __privateAdd(this, _queued);
13769
+ __privateAdd(this, _lastPage);
13732
13770
  var _a2, _b2;
13733
13771
  this.availableFacets = [];
13734
13772
  this.facets = [];
@@ -13752,6 +13790,10 @@ class FetchAndMergeAssetsController {
13752
13790
  this.responseInterceptorId = null;
13753
13791
  this._debouncePromise = null;
13754
13792
  this._debounceResolve = null;
13793
+ __privateSet(this, _generation, 0);
13794
+ __privateSet(this, _inFlight, []);
13795
+ __privateSet(this, _queued, false);
13796
+ __privateSet(this, _lastPage, null);
13755
13797
  this.host = host;
13756
13798
  this.availableDocTypes = availableDocTypes;
13757
13799
  this.defaultFolderId = defaultFolderId;
@@ -13983,11 +14025,19 @@ class FetchAndMergeAssetsController {
13983
14025
  fetchAndMergeAssets(request) {
13984
14026
  return __async(this, null, function* () {
13985
14027
  var _a2;
13986
- this.loading = true;
13987
- this.host.requestUpdate();
13988
14028
  if (request.start === null) {
13989
14029
  return;
13990
14030
  }
14031
+ const isRestart = this.isRestart(request);
14032
+ if (!isRestart && this.isBusy()) {
14033
+ return;
14034
+ }
14035
+ if (isRestart) {
14036
+ __privateSet(this, _generation, __privateGet(this, _generation) + 1);
14037
+ }
14038
+ const generation = __privateGet(this, _generation);
14039
+ this.loading = true;
14040
+ this.host.requestUpdate();
13991
14041
  if (this._debounceTimeout) {
13992
14042
  clearTimeout(this._debounceTimeout);
13993
14043
  this._debounceTimeout = void 0;
@@ -13995,61 +14045,105 @@ class FetchAndMergeAssetsController {
13995
14045
  (_a2 = this._debouncePromise) != null ? _a2 : this._debouncePromise = new Promise((resolve) => {
13996
14046
  this._debounceResolve = resolve;
13997
14047
  });
14048
+ __privateSet(this, _queued, true);
13998
14049
  this._debounceTimeout = setTimeout(() => __async(this, null, function* () {
13999
- var _a3, _b2, _c2, _d2, _e2, _f2, _g, _h, _i;
14000
- if (Object.keys(this.sortOrders).length === 0) {
14001
- const sortOrders = yield apiGetSortOrders();
14002
- this.sortOrders = sortOrders;
14003
- }
14004
- 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);
14005
- if (!__privateGet(this, _hasFetchedOnce)) {
14050
+ var _a3, _b2, _c2, _d2, _e2, _f2, _g;
14051
+ __privateSet(this, _queued, false);
14052
+ __privateGet(this, _inFlight).push(generation);
14053
+ try {
14054
+ if (Object.keys(this.sortOrders).length === 0) {
14055
+ const sortOrders = yield apiGetSortOrders();
14056
+ this.sortOrders = sortOrders;
14057
+ }
14058
+ if (generation !== __privateGet(this, _generation)) {
14059
+ return;
14060
+ }
14061
+ if (!__privateGet(this, _hasFetchedOnce)) {
14062
+ request = __spreadProps(__spreadValues({}, request), {
14063
+ // Keep a folder the host already resolved (e.g. the auto-selected initial folder).
14064
+ folderId: request.folderId || this.defaultFolderId,
14065
+ isSeeThrough: (_a3 = request.isSeeThrough) != null ? _a3 : this.defaultIsSeeThrough,
14066
+ searchText: (_b2 = request.searchText) != null ? _b2 : this.defaultSearchText,
14067
+ selectedFacets: (_c2 = request.selectedFacets) != null ? _c2 : this.defaultSelectedFacets,
14068
+ sortDirection: (_d2 = request.sortDirection) != null ? _d2 : this.defaultSortDirection,
14069
+ sortOrderName: (_e2 = request.sortOrderName) != null ? _e2 : this.defaultSortOrderName
14070
+ });
14071
+ }
14072
+ let sortOrder;
14073
+ if (request.sortOrderName && request.sortDirection) {
14074
+ const sortOrders = this.sortOrders[request.sortOrderName];
14075
+ sortOrder = (_f2 = sortOrders == null ? void 0 : sortOrders.find((item) => {
14076
+ var _a4;
14077
+ return item.sortDirection.toLowerCase() === ((_a4 = request.sortDirection) == null ? void 0 : _a4.toLowerCase());
14078
+ })) == null ? void 0 : _f2.id;
14079
+ if (!sortOrder && (sortOrders == null ? void 0 : sortOrders[0])) {
14080
+ sortOrder = sortOrders[0].id;
14081
+ request.sortDirection = sortOrders[0].sortDirection;
14082
+ }
14083
+ }
14006
14084
  request = __spreadProps(__spreadValues({}, request), {
14007
- // Keep a folder the host already resolved (e.g. the auto-selected initial folder).
14008
- folderId: request.folderId || this.defaultFolderId,
14009
- isSeeThrough: (_d2 = request.isSeeThrough) != null ? _d2 : this.defaultIsSeeThrough,
14010
- searchText: (_e2 = request.searchText) != null ? _e2 : this.defaultSearchText,
14011
- selectedFacets: (_f2 = request.selectedFacets) != null ? _f2 : this.defaultSelectedFacets,
14012
- sortDirection: (_g = request.sortDirection) != null ? _g : this.defaultSortDirection,
14013
- sortOrderName: (_h = request.sortOrderName) != null ? _h : this.defaultSortOrderName
14085
+ limitedToDocTypes: this.availableDocTypes
14014
14086
  });
14015
- }
14016
- let sortOrder;
14017
- if (request.sortOrderName && request.sortDirection) {
14018
- const sortOrders = this.sortOrders[request.sortOrderName];
14019
- sortOrder = (_i = sortOrders == null ? void 0 : sortOrders.find((item) => {
14020
- var _a4;
14021
- return item.sortDirection.toLowerCase() === ((_a4 = request.sortDirection) == null ? void 0 : _a4.toLowerCase());
14022
- })) == null ? void 0 : _i.id;
14023
- if (!sortOrder && (sortOrders == null ? void 0 : sortOrders[0])) {
14024
- sortOrder = sortOrders[0].id;
14025
- request.sortDirection = sortOrders[0].sortDirection;
14087
+ this.lastRequest = request;
14088
+ const assets = yield apiGetAssets(__spreadProps(__spreadValues({}, request), {
14089
+ sortOrder
14090
+ }));
14091
+ if (generation !== __privateGet(this, _generation)) {
14092
+ return;
14026
14093
  }
14094
+ if (isRestart) {
14095
+ this.items = assets.items;
14096
+ } else {
14097
+ this.items = uniqBy([...this.items, ...assets.items], "recordId");
14098
+ }
14099
+ this.facets = this.mergeFacetsWithSelected(assets.facets, this.facets, request.selectedFacets);
14100
+ this.totalCount = assets.totalCount;
14101
+ __privateSet(this, _lastPage, {
14102
+ pageSize: request.pageSize || assets.items.length,
14103
+ start: (_g = request.start) != null ? _g : 0
14104
+ });
14105
+ __privateSet(this, _hasFetchedOnce, true);
14106
+ if (this._debounceResolve) {
14107
+ this._debounceResolve(this.lastRequest);
14108
+ }
14109
+ this._debouncePromise = null;
14110
+ this._debounceResolve = null;
14111
+ } finally {
14112
+ const index = __privateGet(this, _inFlight).indexOf(generation);
14113
+ if (index >= 0) {
14114
+ __privateGet(this, _inFlight).splice(index, 1);
14115
+ }
14116
+ this.loading = this.isBusy();
14117
+ this.host.requestUpdate();
14027
14118
  }
14028
- request = __spreadProps(__spreadValues({}, request), {
14029
- limitedToDocTypes: this.availableDocTypes
14030
- });
14031
- this.lastRequest = request;
14032
- const assets = yield apiGetAssets(__spreadProps(__spreadValues({}, request), {
14033
- sortOrder
14034
- }));
14035
- if (request.start && request.start > 0 && !forceRefetch) {
14036
- this.items = uniqBy([...this.items, ...assets.items], "recordId");
14037
- } else {
14038
- this.items = assets.items;
14039
- }
14040
- this.facets = this.mergeFacetsWithSelected(assets.facets, this.facets, request.selectedFacets);
14041
- this.totalCount = assets.totalCount;
14042
- this.loading = false;
14043
- __privateSet(this, _hasFetchedOnce, true);
14044
- this.host.requestUpdate();
14045
- if (this._debounceResolve) {
14046
- this._debounceResolve(this.lastRequest);
14047
- }
14048
- this._debouncePromise = null;
14049
- this._debounceResolve = null;
14050
14119
  }), 200);
14051
14120
  });
14052
14121
  }
14122
+ /**
14123
+ * Where the next page of the list on screen starts, or `null` while a request of that list is queued
14124
+ * or in flight. The start follows the last accepted page, not the last request sent, so a page that
14125
+ * was dropped or discarded never leaves a gap. `lastPageSize` is the size of that accepted page.
14126
+ */
14127
+ getNextPage() {
14128
+ var _a2, _b2;
14129
+ if (this.isBusy()) {
14130
+ return null;
14131
+ }
14132
+ return {
14133
+ lastPageSize: (_b2 = (_a2 = __privateGet(this, _lastPage)) == null ? void 0 : _a2.pageSize) != null ? _b2 : 0,
14134
+ start: __privateGet(this, _lastPage) ? __privateGet(this, _lastPage).start + __privateGet(this, _lastPage).pageSize : 0
14135
+ };
14136
+ }
14137
+ isBusy() {
14138
+ return __privateGet(this, _queued) || __privateGet(this, _inFlight).includes(__privateGet(this, _generation));
14139
+ }
14140
+ /**
14141
+ * A request that starts a new list: the first page, or the same page asked for with a larger page size.
14142
+ */
14143
+ isRestart(request) {
14144
+ var _a2, _b2;
14145
+ 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;
14146
+ }
14053
14147
  fetchAssetFavoriteStatus(id) {
14054
14148
  return __async(this, null, function* () {
14055
14149
  return apiGetAssetFavoriteStatus({
@@ -14059,7 +14153,7 @@ class FetchAndMergeAssetsController {
14059
14153
  }
14060
14154
  fetchAssetByID(id, options) {
14061
14155
  return __async(this, null, function* () {
14062
- var _a2, _b2, _c2, _d2, _e2, _f2, _g, _h, _i, _j, _k, _l, _m, _n;
14156
+ var _a2, _b2, _c2, _d2, _e2, _f2, _g, _h, _i, _j, _k, _l, _m, _n, _o;
14063
14157
  const { allowedExtensions = [], canFavorite = false, simplePick = false } = options != null ? options : {};
14064
14158
  const promises = [
14065
14159
  apiGetAssetsByIDs({
@@ -14139,7 +14233,8 @@ class FetchAndMergeAssetsController {
14139
14233
  }
14140
14234
  return proxyExtension.toLowerCase() === extension.toLowerCase();
14141
14235
  });
14142
- })
14236
+ }),
14237
+ proxiesFailed: (_o = proxyData == null ? void 0 : proxyData.isError) != null ? _o : false
14143
14238
  };
14144
14239
  });
14145
14240
  }
@@ -14239,12 +14334,17 @@ class FetchAndMergeAssetsController {
14239
14334
  this.items = [];
14240
14335
  this.totalCount = 0;
14241
14336
  this.sortOrders = {};
14337
+ __privateSet(this, _lastPage, null);
14242
14338
  }
14243
14339
  }
14244
14340
  _lastGetDataParameters = new WeakMap();
14245
14341
  _lastMappedAvailableExtensions = new WeakMap();
14246
14342
  _lastData = new WeakMap();
14247
14343
  _hasFetchedOnce = new WeakMap();
14344
+ _generation = new WeakMap();
14345
+ _inFlight = new WeakMap();
14346
+ _queued = new WeakMap();
14347
+ _lastPage = new WeakMap();
14248
14348
  function safeInteger(value) {
14249
14349
  if (Number.isNaN(value) || !Number.isInteger(value)) {
14250
14350
  return 0;
@@ -14575,10 +14675,13 @@ let CxContentBrowser = class extends CortexElement {
14575
14675
  }
14576
14676
  handleScrollEnd() {
14577
14677
  return __async(this, null, function* () {
14578
- const newStart = safeInteger(this.lastRequest.start) + safeInteger(this.lastRequest.pageSize);
14678
+ const nextPage = this.fetchAndMergeAssetsController.getNextPage();
14679
+ if (!nextPage) {
14680
+ return;
14681
+ }
14579
14682
  this.lastRequest = __spreadProps(__spreadValues({}, this.lastRequest), {
14580
14683
  pageSize: this.defaultPageSize,
14581
- start: newStart
14684
+ start: nextPage.start
14582
14685
  });
14583
14686
  yield this.fetchAndMergeAssetsController.fetchAndMergeAssets(this.lastRequest);
14584
14687
  });
@@ -14625,13 +14728,17 @@ let CxContentBrowser = class extends CortexElement {
14625
14728
  }
14626
14729
  return;
14627
14730
  }
14731
+ const nextPage = this.fetchAndMergeAssetsController.getNextPage();
14732
+ if (!nextPage) {
14733
+ return;
14734
+ }
14628
14735
  const totalCount = this.fetchAndMergeAssetsController.getData().totalCount;
14629
- const newStart = safeInteger(this.lastRequest.start) + safeInteger(this.lastRequest.pageSize);
14630
- if (newPageSize <= safeInteger(this.lastRequest.pageSize) || newPageSize === 0 || newStart > totalCount) {
14736
+ const newStart = nextPage.start;
14737
+ if (newPageSize <= nextPage.lastPageSize || newPageSize === 0 || newStart > totalCount) {
14631
14738
  return;
14632
14739
  }
14633
14740
  this.lastRequest = __spreadProps(__spreadValues({}, this.lastRequest), {
14634
- pageSize: newPageSize - safeInteger(this.lastRequest.pageSize),
14741
+ pageSize: newPageSize - nextPage.lastPageSize,
14635
14742
  start: newStart
14636
14743
  });
14637
14744
  yield this.fetchAndMergeAssetsController.fetchAndMergeAssets(this.lastRequest);