@genesislcap/foundation-ui 15.10.4 → 15.10.6

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.
@@ -1 +1 @@
1
- {"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../../src/combobox/combobox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAclE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI9C;;;;;GAKG;AACH,qBAAa,QAAS,SAAQ,YAAY;;IACxC,OAAO,CAAC,SAAS,CAAS;IAI1B,OAAO,CAAC,6BAA6B,CAAkB;IACvD,IACI,gBAAgB,WAKnB;IAEW,iBAAiB,EAAE,eAAe,CAAC;IAC/C;;;;;;;;;OASG;IACwB,KAAK,UAAS;IACnC,QAAQ,EAAE,MAAM,CAAiB;IACvC,eAAe,CAAC,QAAQ,KAAA,EAAE,QAAQ,EAAE,MAAM;IAG1C,qBAAqB,MAAC;IACtB,iFAAiF;IAE1E,aAAa,EAAE,OAAO,CAAS;IAEtC,wFAAwF;IAEjF,gBAAgB,EAAE,OAAO,CAAS;IAEzC,2DAA2D;IAEpD,UAAU,EAAE,UAAU,CAAgB;IAE7C;;;OAGG;IAEH,2BAA2B,EAAE,OAAO,CAAS;IAE7C;;;OAGG;IAEH,kCAAkC,EAAE,OAAO,GAAG,qBAAqB,CAGjE;IAEF;;;OAGG;IAEH,0BAA0B,EAAE,OAAO,CAAS;IAE5C;;;OAGG;IAEH,iCAAiC,EAAE,OAAO,GAAG,qBAAqB,CAGhE;IAEF;;;;OAIG;IACH,IAAW,iBAAiB,IAAI,WAAW,GAAG,IAAI,CAEjD;IAED,WAAW;IAqBX,IAAW,KAAK,IAKO,MAAM,CAF5B;IAED,IAAW,KAAK,CAAC,IAAI,EAAE,MAAM,EA6B5B;IAEe,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAOzF;;;;;;OAMG;IACH,OAAO,CAAC,sCAAsC;IAY9B,aAAa,IAAI,IAAI;IAmBrB,YAAY,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,IAAI;IAuB3C,cAAc,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO,GAAG,IAAI;IAgDhD,YAAY,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO,GAAG,IAAI;IAgC9D;;;;OAIG;IACH,SAAS,KAAK,SAAS,IAAI,OAAO,CAGjC;IAED;;;;;OAKG;IACH,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM;IAKhC,YAAY,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,IAAI;IAQpD,cAAc;IAmBd,aAAa,aAOX;IAEF,OAAO,CAAC,2BAA2B;CAUpC;AAGD,eAAO,MAAM,+BAA+B,EAAE,cAG7C,CAAC;AAEF,eAAO,MAAM,qBAAqB;;CAajC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,8SAM7B,CAAC"}
1
+ {"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../../src/combobox/combobox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAclE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI9C;;;;;GAKG;AACH,qBAAa,QAAS,SAAQ,YAAY;;IACxC,OAAO,CAAC,SAAS,CAAS;IAI1B,OAAO,CAAC,6BAA6B,CAAkB;IACvD,IACI,gBAAgB,WAKnB;IAEW,iBAAiB,EAAE,eAAe,CAAC;IAC/C;;;;;;;;;OASG;IACwB,KAAK,UAAS;IACnC,QAAQ,EAAE,MAAM,CAAiB;IACvC,eAAe,CAAC,QAAQ,KAAA,EAAE,QAAQ,EAAE,MAAM;IAG1C,qBAAqB,MAAC;IACtB,iFAAiF;IAE1E,aAAa,EAAE,OAAO,CAAS;IAEtC,wFAAwF;IAEjF,gBAAgB,EAAE,OAAO,CAAS;IAEzC,2DAA2D;IAEpD,UAAU,EAAE,UAAU,CAAgB;IAE7C;;;OAGG;IAEH,2BAA2B,EAAE,OAAO,CAAS;IAE7C;;;OAGG;IAEH,kCAAkC,EAAE,OAAO,GAAG,qBAAqB,CAGjE;IAEF;;;OAGG;IAEH,0BAA0B,EAAE,OAAO,CAAS;IAE5C;;;OAGG;IAEH,iCAAiC,EAAE,OAAO,GAAG,qBAAqB,CAGhE;IAEF;;;;OAIG;IACH,IAAW,iBAAiB,IAAI,WAAW,GAAG,IAAI,CAEjD;IAED,WAAW;IAqBX,IAAW,KAAK,IAKO,MAAM,CAF5B;IAED,IAAW,KAAK,CAAC,IAAI,EAAE,MAAM,EA6B5B;IAEe,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAUzF;;;;;;OAMG;IACH,OAAO,CAAC,sCAAsC;IAY9B,aAAa,IAAI,IAAI;IA2BrB,YAAY,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,IAAI;IAuB3C,cAAc,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO,GAAG,IAAI;IAgDhD,YAAY,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO,GAAG,IAAI;IAgC9D;;;;OAIG;IACH,SAAS,KAAK,SAAS,IAAI,OAAO,CAGjC;IAED;;;;;OAKG;IACH,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM;IAKhC,YAAY,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,IAAI;IAQpD,cAAc;IA0Bd,aAAa,aAOX;IAEF,OAAO,CAAC,2BAA2B;CAUpC;AAGD,eAAO,MAAM,+BAA+B,EAAE,cAG7C,CAAC;AAEF,eAAO,MAAM,qBAAqB;;CAajC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,8SAM7B,CAAC"}
@@ -82,11 +82,17 @@ export declare class OptionsDatasource extends BaseDatasource {
82
82
  */
83
83
  private applyInfiniteScrollFetchMode;
84
84
  private attachListboxScrollListener;
85
+ /**
86
+ * Also true when the options do not fill the listbox: it cannot be scrolled, so the
87
+ * bottom is already in view.
88
+ */
89
+ private isNearListboxBottom;
85
90
  private listboxScrollHandler;
86
91
  private loadNextPage;
87
92
  /**
88
- * If the loaded options don't fill the visible listbox (so it can't be scrolled),
89
- * keep requesting pages until it overflows or the server runs out of rows.
93
+ * Keeps requesting pages while the bottom of the listbox is in view either because
94
+ * the loaded options do not fill it, or because the user is already scrolled there and
95
+ * appending rows fires no further scroll event.
90
96
  */
91
97
  private topUpVisibleListbox;
92
98
  private resizeObserverCallback;
@@ -1 +1 @@
1
- {"version":3,"file":"options-datasource.d.ts","sourceRoot":"","sources":["../../../src/options-datasource/options-datasource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAgB,MAAM,+BAA+B,CAAC;AAY/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EACL,cAAc,EAKf,MAAM,UAAU,CAAC;AAElB;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,GAAG,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,qBAGa,iBAAkB,SAAQ,cAAc;IACjC,SAAS,EAAG,gBAAgB,CAAC;IAEX,UAAU,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAyB;IAC1B,kBAAkB,UAAS;IAEzF;;;;;;;;;;;;OAYG;IACsD,cAAc,UAAS;IAEhF;;OAEG;IAEH,QAAQ,SAAqC;IACjC,cAAc,MAAC;IACf,iBAAiB,EAAE,CAAC,GAAG,KAAA,KAAK,MAAM,CAAC;IAEnC,oBAAoB,EAAE,MAAM,GAAG,MAAM,CAAC;IAClD,2BAA2B,CAAC,QAAQ,KAAA,EAAE,QAAQ,KAAA;IAY9C,8BAA8B,EAAE,OAAO,CAAS;IAEhD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC7B,UAAU,EAAE,OAAO,CAAQ;IAElC,SAAS,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,YAAY,EAAE,MAAM,CAAM;IAEjC,OAAO,CAAC,cAAc,CAAiB;IAEvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAM;IAC7C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAM;IACnD,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,qBAAqB,CAAM;IACnC,OAAO,CAAC,eAAe,CAAkC;IAEnD,iBAAiB;IA+BvB,oBAAoB;IAYpB;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB,CAM7B;IAEF;;;;OAIG;YACW,4BAA4B;IAU1C,OAAO,CAAC,2BAA2B;IAmBnC,OAAO,CAAC,oBAAoB,CAW1B;YAEY,YAAY;IAoB1B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,sBAAsB,CAI5B;IAEF,mBAAmB,GAAI,MAAC,UAQtB;IAEF,SAAS;IAcH,sBAAsB;IAa5B,SAAS,IAAI,IAAI;IAkBjB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,qBAAqB;IAO7B,iBAAiB,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE;IAuDtC,eAAe;IAIf,OAAO,CAAC,kBAAkB;IAS1B,aAAa;IAMb;;;OAGG;IACH,mBAAmB,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,IAAI;IAc9C;;;;;;OAMG;IACH,mBAAmB,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,IAAI;IAI7C;;;OAGG;IACH,mBAAmB,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,IAAI;CAG9C"}
1
+ {"version":3,"file":"options-datasource.d.ts","sourceRoot":"","sources":["../../../src/options-datasource/options-datasource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAgB,MAAM,+BAA+B,CAAC;AAY/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EACL,cAAc,EAKf,MAAM,UAAU,CAAC;AAElB;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,GAAG,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,qBAGa,iBAAkB,SAAQ,cAAc;IACjC,SAAS,EAAG,gBAAgB,CAAC;IAEX,UAAU,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAyB;IAC1B,kBAAkB,UAAS;IAEzF;;;;;;;;;;;;OAYG;IACsD,cAAc,UAAS;IAEhF;;OAEG;IAEH,QAAQ,SAAqC;IACjC,cAAc,MAAC;IACf,iBAAiB,EAAE,CAAC,GAAG,KAAA,KAAK,MAAM,CAAC;IAEnC,oBAAoB,EAAE,MAAM,GAAG,MAAM,CAAC;IAClD,2BAA2B,CAAC,QAAQ,KAAA,EAAE,QAAQ,KAAA;IAY9C,8BAA8B,EAAE,OAAO,CAAS;IAEhD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC7B,UAAU,EAAE,OAAO,CAAQ;IAElC,SAAS,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5C,YAAY,EAAE,MAAM,CAAM;IAEjC,OAAO,CAAC,cAAc,CAAiB;IAEvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAM;IAC7C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAM;IACnD,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,qBAAqB,CAAM;IACnC,OAAO,CAAC,eAAe,CAAkC;IAEnD,iBAAiB;IAgCvB,oBAAoB;IAYpB;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB,CAM7B;IAEF;;;;OAIG;YACW,4BAA4B;IAU1C,OAAO,CAAC,2BAA2B;IAmBnC;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,oBAAoB,CAO1B;YAEY,YAAY;IAoB1B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,sBAAsB,CAI5B;IAEF,mBAAmB,GAAI,MAAC,UAQtB;IAEF,SAAS;IAcH,sBAAsB;IAa5B,SAAS,IAAI,IAAI;IAmBjB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,qBAAqB;IAO7B,iBAAiB,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE;IA6DtC,eAAe;IAIf,OAAO,CAAC,kBAAkB;IAS1B,aAAa;IAMb;;;OAGG;IACH,mBAAmB,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,IAAI;IA4B9C;;;;;;OAMG;IACH,mBAAmB,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,IAAI;IAI7C;;;OAGG;IACH,mBAAmB,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,IAAI;CAG9C"}
@@ -1 +1 @@
1
- {"version":3,"file":"base-datasource.d.ts","sourceRoot":"","sources":["../../../src/utils/base-datasource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-datasource.d.ts","sourceRoot":"","sources":["../../../src/utils/base-datasource.ts"],"names":[],"mappings":"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"}
@@ -144,9 +144,12 @@ export class Combobox extends FASTComboBox {
144
144
  }
145
145
  slottedOptionsChanged(prev, next) {
146
146
  this.enableAsyncForInfiniteScrollDatasource();
147
- const shouldEmit = this.async ? true : false;
148
147
  super.slottedOptionsChanged(prev, next);
149
- this['updateValue'](shouldEmit);
148
+ // Never emit `change` here. Async typeahead / infinite-scroll paging reloads options
149
+ // without a user selection, and a consumer that writes the value back (JSON Forms feeds
150
+ // it to `initialSelectedValue`) then clears and refetches from OFFSET 0, appending the
151
+ // first page again. Keep the typed/selected text without notifying.
152
+ this['updateValue'](false);
150
153
  }
151
154
  /**
152
155
  * When the slotted datasource pages its options (infinite scroll), only a page of the
@@ -165,6 +168,13 @@ export class Combobox extends FASTComboBox {
165
168
  }
166
169
  }
167
170
  filterOptions() {
171
+ // Server-side filtering already applied the criteria; hiding options locally would
172
+ // conceal the next infinite-scroll page (and duplicate the visible first page).
173
+ if (this.async) {
174
+ this.filteredOptions = [...this._options];
175
+ this._options.forEach((o) => (o.hidden = false));
176
+ return;
177
+ }
168
178
  if (!this.autocomplete || this.autocomplete === ComboboxAutocomplete.none) {
169
179
  this['filter'] = '';
170
180
  }
@@ -308,7 +318,15 @@ export class Combobox extends FASTComboBox {
308
318
  .assignedNodes()
309
319
  .filter((x) => x instanceof OptionsDatasource);
310
320
  if (datasourceNode.length > 0) {
311
- criteriaMatchBuilder(datasourceNode[0], this.control.value);
321
+ const datasource = datasourceNode[0];
322
+ // An empty input must not become `containsIgnoreCase(field, '')` — that is a
323
+ // criteria change and refetches OFFSET 0, replacing/appending the first page.
324
+ if (cachedControlValue == null || cachedControlValue === '') {
325
+ datasource.criteria = datasource.baseCriteria || '';
326
+ }
327
+ else {
328
+ criteriaMatchBuilder(datasource, cachedControlValue);
329
+ }
312
330
  DOM.queueUpdate(() => {
313
331
  this.control.value = cachedControlValue;
314
332
  });
@@ -62,9 +62,7 @@ let OptionsDatasource = OptionsDatasource_1 = class OptionsDatasource extends Ba
62
62
  const listbox = this.listboxElement;
63
63
  if (!listbox)
64
64
  return;
65
- const nearBottom = listbox.scrollTop + listbox.clientHeight >=
66
- listbox.scrollHeight - OptionsDatasource_1.scrollLoadThresholdPx;
67
- if (nearBottom) {
65
+ if (this.isNearListboxBottom(listbox)) {
68
66
  this.loadNextPage();
69
67
  }
70
68
  };
@@ -111,6 +109,7 @@ let OptionsDatasource = OptionsDatasource_1 = class OptionsDatasource extends Ba
111
109
  this.select.addEventListener('change', this.selectChangeHandler);
112
110
  this.resizeObserver = new ResizeObserver(this.resizeObserverCallback);
113
111
  if (this.infiniteScroll) {
112
+ this.isSnapshot = true;
114
113
  this.maxRows = this.pageSize > 0 ? this.pageSize : OptionsDatasource_1.defaultPageSize;
115
114
  // Note: the combobox switches itself to async (server-side) filtering when it
116
115
  // detects a slotted infinite-scroll datasource — see Combobox.slottedOptionsChanged
@@ -171,6 +170,14 @@ let OptionsDatasource = OptionsDatasource_1 = class OptionsDatasource extends Ba
171
170
  }
172
171
  this.listboxElement.addEventListener('scroll', this.listboxScrollHandler);
173
172
  }
173
+ /**
174
+ * Also true when the options do not fill the listbox: it cannot be scrolled, so the
175
+ * bottom is already in view.
176
+ */
177
+ isNearListboxBottom(listbox) {
178
+ return (listbox.scrollTop + listbox.clientHeight >=
179
+ listbox.scrollHeight - OptionsDatasource_1.scrollLoadThresholdPx);
180
+ }
174
181
  loadNextPage() {
175
182
  return __awaiter(this, void 0, void 0, function* () {
176
183
  if (this.loadingMoreRows || !this.canRequestMoreRows())
@@ -194,8 +201,9 @@ let OptionsDatasource = OptionsDatasource_1 = class OptionsDatasource extends Ba
194
201
  });
195
202
  }
196
203
  /**
197
- * If the loaded options don't fill the visible listbox (so it can't be scrolled),
198
- * keep requesting pages until it overflows or the server runs out of rows.
204
+ * Keeps requesting pages while the bottom of the listbox is in view either because
205
+ * the loaded options do not fill it, or because the user is already scrolled there and
206
+ * appending rows fires no further scroll event.
199
207
  */
200
208
  topUpVisibleListbox() {
201
209
  if (!this.infiniteScroll)
@@ -207,7 +215,7 @@ let OptionsDatasource = OptionsDatasource_1 = class OptionsDatasource extends Ba
207
215
  // clientHeight is 0 while the dropdown is closed; scrolling isn't possible then anyway
208
216
  if (!listbox || listbox.clientHeight === 0)
209
217
  return;
210
- if (listbox.scrollHeight > listbox.clientHeight)
218
+ if (!this.isNearListboxBottom(listbox))
211
219
  return;
212
220
  // If the last top-up didn't grow the listbox (e.g. options hidden by CSS),
213
221
  // fetching further pages would loop until the resource is exhausted
@@ -246,6 +254,7 @@ let OptionsDatasource = OptionsDatasource_1 = class OptionsDatasource extends Ba
246
254
  // Rows accumulated from a previous stream must not leak into the next fetch
247
255
  // (e.g. when the criteria changes in async mode).
248
256
  this.rowsSyncedWithStream.clear();
257
+ this.options = [];
249
258
  this.renderedOptionsCount = 0;
250
259
  this.lastTopUpScrollHeight = -1;
251
260
  this.emptyDataOption = null;
@@ -308,6 +317,9 @@ let OptionsDatasource = OptionsDatasource_1 = class OptionsDatasource extends Ba
308
317
  const isFirstRenderAfterClear = this.renderedOptionsCount === 0;
309
318
  this.renderListboxOptions(this.options.slice(this.renderedOptionsCount));
310
319
  this.renderedOptionsCount = this.options.length;
320
+ // Keep the OFFSET cursor in step with what is loaded: the first page arrives from the
321
+ // initial fetch, which never sets nextRequestOffset, so the next page would repeat it.
322
+ this.nextRequestOffset = Math.max(this.nextRequestOffset, this.renderedOptionsCount);
311
323
  this.topUpVisibleListbox();
312
324
  if (!this.initalSelectedValueInitialized ||
313
325
  (this.select instanceof FASTComboBox && !this.select.async && isFirstRenderAfterClear)) {
@@ -315,7 +327,10 @@ let OptionsDatasource = OptionsDatasource_1 = class OptionsDatasource extends Ba
315
327
  const initialLabel = this.getInitialLabel();
316
328
  DOM.queueUpdate(() => {
317
329
  this.select.value = String(initialLabel);
318
- if (this.select instanceof FASTComboBox && this.select.async) {
330
+ // Only report a resolved selection. An empty label means nothing is selected yet
331
+ // (no initial value, or its row is not in the loaded page), and `value-change`
332
+ // with an empty payload is indistinguishable from the user clearing the field.
333
+ if (initialLabel && this.select instanceof FASTComboBox && this.select.async) {
319
334
  this.selectChangeHandler({ target: { value: initialLabel } });
320
335
  }
321
336
  });
@@ -366,15 +381,26 @@ let OptionsDatasource = OptionsDatasource_1 = class OptionsDatasource extends Ba
366
381
  * infinite scroll paging, where each page contains only the new rows.
367
382
  */
368
383
  handleStreamInserts(insertedRows) {
369
- var _a;
384
+ var _a, _b;
370
385
  this.loadingMoreRows = false;
371
386
  if (!(insertedRows === null || insertedRows === void 0 ? void 0 : insertedRows.length))
372
387
  return;
373
388
  this.removeEmptyDataOption();
374
- const newOptions = insertedRows.map((row) => this.rowToOption(row));
375
- this.options = [...((_a = this.options) !== null && _a !== void 0 ? _a : []), ...newOptions];
389
+ const existingValues = new Set(((_a = this.options) !== null && _a !== void 0 ? _a : []).map((option) => String(option.value)));
390
+ const newRows = insertedRows.filter((row) => !existingValues.has(String(row[this.valueField])));
391
+ if (!newRows.length) {
392
+ // Every row was already loaded, so requesting further pages would append the same
393
+ // rows indefinitely (a resource that ignores OFFSET and reports no MORE_ROWS keeps
394
+ // looking like it has another full page).
395
+ logger.warn(`Infinite scroll for ${this.resourceName} received a page of options that were all already loaded, so paging has stopped. Request Server resources only honour OFFSET when declared with criteriaOnlyRequest; otherwise every page returns the same rows. Also set a stable order-by so pages cannot overlap.`);
396
+ this.moreRowsAvailable = false;
397
+ return;
398
+ }
399
+ const newOptions = newRows.map((row) => this.rowToOption(row));
400
+ this.options = [...((_b = this.options) !== null && _b !== void 0 ? _b : []), ...newOptions];
376
401
  this.renderListboxOptions(newOptions);
377
402
  this.renderedOptionsCount = this.options.length;
403
+ this.nextRequestOffset = Math.max(this.nextRequestOffset, this.renderedOptionsCount);
378
404
  this.topUpVisibleListbox();
379
405
  }
380
406
  /**
@@ -275,19 +275,23 @@ export class BaseDatasource extends DatasourceEventHandler(FoundationElement) {
275
275
  return;
276
276
  }
277
277
  const pagingResult = result;
278
+ const nextOffset = pagingResult.NEXT_OFFSET;
279
+ const nextOffsetAdvances = typeof nextOffset === 'number' && nextOffset > requestedOffset;
278
280
  const requestedMaxRows = Number(this.maxRows) || 0;
279
- // Honour an explicit MORE_ROWS regardless of rowCount: a page can legitimately come
280
- // back empty (e.g. rows filtered server-side) while the server still has more to give,
281
- // and forcing moreRowsAvailable to false here would stall scroll paging permanently.
281
+ const fullPage = rowCount > 0 && requestedMaxRows > 0 && rowCount >= requestedMaxRows;
282
+ // Only a fallback: an entity-db request/reply reads MAX_ROWS + 1 rows, so MORE_ROWS is
283
+ // accurate whenever it is sent. It is absent on a non-SQL storage engine (those replies
284
+ // carry no paging metadata at all), under VIEW_NUMBER paging of a filtered resource, and
285
+ // from custom request/replies. -1 is the legacy "no more data" sentinel, read the same
286
+ // way by grid-pro's req/rep server-side datasource.
282
287
  this.moreRowsAvailable =
283
288
  typeof pagingResult.MORE_ROWS === 'boolean'
284
289
  ? pagingResult.MORE_ROWS
285
- : // Fallback when the server omits MORE_ROWS: a full page suggests more may follow
286
- rowCount > 0 && requestedMaxRows > 0 && rowCount >= requestedMaxRows;
287
- this.nextRequestOffset =
288
- typeof pagingResult.NEXT_OFFSET === 'number' && pagingResult.NEXT_OFFSET > 0
289
- ? pagingResult.NEXT_OFFSET
290
- : requestedOffset + rowCount;
290
+ : nextOffset !== -1 && (nextOffsetAdvances || fullPage);
291
+ // NEXT_OFFSET is not just requestedOffset + rowCount: the server counts the rows it
292
+ // read from the database, so the cursor also steps over rows it dropped (auth/row
293
+ // filters). Falling back to the arithmetic would re-request rows already served.
294
+ this.nextRequestOffset = nextOffsetAdvances ? nextOffset : requestedOffset + rowCount;
291
295
  }
292
296
  initialRequestOffset() {
293
297
  var _a, _b;
@@ -5972,11 +5972,17 @@ export declare class OptionsDatasource extends BaseDatasource {
5972
5972
  */
5973
5973
  private applyInfiniteScrollFetchMode;
5974
5974
  private attachListboxScrollListener;
5975
+ /**
5976
+ * Also true when the options do not fill the listbox: it cannot be scrolled, so the
5977
+ * bottom is already in view.
5978
+ */
5979
+ private isNearListboxBottom;
5975
5980
  private listboxScrollHandler;
5976
5981
  private loadNextPage;
5977
5982
  /**
5978
- * If the loaded options don't fill the visible listbox (so it can't be scrolled),
5979
- * keep requesting pages until it overflows or the server runs out of rows.
5983
+ * Keeps requesting pages while the bottom of the listbox is in view either because
5984
+ * the loaded options do not fill it, or because the user is already scrolled there and
5985
+ * appending rows fires no further scroll event.
5980
5986
  */
5981
5987
  private topUpVisibleListbox;
5982
5988
  private resizeObserverCallback;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@genesislcap/foundation-ui",
3
3
  "description": "Genesis Foundation UI",
4
- "version": "15.10.4",
4
+ "version": "15.10.6",
5
5
  "sideEffects": false,
6
6
  "license": "SEE LICENSE IN license.txt",
7
7
  "main": "dist/esm/index.js",
@@ -85,13 +85,13 @@
85
85
  }
86
86
  },
87
87
  "devDependencies": {
88
- "@genesislcap/foundation-testing": "15.10.4",
89
- "@genesislcap/genx": "15.10.4",
90
- "@genesislcap/rollup-builder": "15.10.4",
91
- "@genesislcap/ts-builder": "15.10.4",
92
- "@genesislcap/uvu-playwright-builder": "15.10.4",
93
- "@genesislcap/vite-builder": "15.10.4",
94
- "@genesislcap/webpack-builder": "15.10.4",
88
+ "@genesislcap/foundation-testing": "15.10.6",
89
+ "@genesislcap/genx": "15.10.6",
90
+ "@genesislcap/rollup-builder": "15.10.6",
91
+ "@genesislcap/ts-builder": "15.10.6",
92
+ "@genesislcap/uvu-playwright-builder": "15.10.6",
93
+ "@genesislcap/vite-builder": "15.10.6",
94
+ "@genesislcap/webpack-builder": "15.10.6",
95
95
  "copyfiles": "^2.4.1"
96
96
  },
97
97
  "dependencies": {
@@ -100,16 +100,16 @@
100
100
  "@fortawesome/free-regular-svg-icons": "^6.2.1",
101
101
  "@fortawesome/free-solid-svg-icons": "^6.2.1",
102
102
  "@genesiscommunitysuccess/analyzer-import-alias-plugin": "^5.0.3",
103
- "@genesislcap/expression-builder": "15.10.4",
104
- "@genesislcap/foundation-ai": "15.10.4",
105
- "@genesislcap/foundation-comms": "15.10.4",
106
- "@genesislcap/foundation-criteria": "15.10.4",
107
- "@genesislcap/foundation-errors": "15.10.4",
108
- "@genesislcap/foundation-events": "15.10.4",
109
- "@genesislcap/foundation-logger": "15.10.4",
110
- "@genesislcap/foundation-notifications": "15.10.4",
111
- "@genesislcap/foundation-user": "15.10.4",
112
- "@genesislcap/foundation-utils": "15.10.4",
103
+ "@genesislcap/expression-builder": "15.10.6",
104
+ "@genesislcap/foundation-ai": "15.10.6",
105
+ "@genesislcap/foundation-comms": "15.10.6",
106
+ "@genesislcap/foundation-criteria": "15.10.6",
107
+ "@genesislcap/foundation-errors": "15.10.6",
108
+ "@genesislcap/foundation-events": "15.10.6",
109
+ "@genesislcap/foundation-logger": "15.10.6",
110
+ "@genesislcap/foundation-notifications": "15.10.6",
111
+ "@genesislcap/foundation-user": "15.10.6",
112
+ "@genesislcap/foundation-utils": "15.10.6",
113
113
  "@microsoft/fast-colors": "5.3.1",
114
114
  "@microsoft/fast-components": "2.30.6",
115
115
  "@microsoft/fast-element": "1.14.0",
@@ -142,5 +142,5 @@
142
142
  "require": "./dist/react.cjs"
143
143
  }
144
144
  },
145
- "gitHead": "2747f342a1681832c041ac612b854039ef908ab7"
145
+ "gitHead": "2fd12f28a04c8dc20974ab54d3ea143b80229510"
146
146
  }