CxJS

Infinite Lookup List

When the list of options is too large to load at once, use the infinite flag to enable paged loading. As the user scrolls, additional pages are fetched automatically.

<LabelsTopLayout vertical controller={PageController}>
  <LookupField
    label="Select Cities"
    records={m.selectedCities}
    onQueryPage={(params, instance) =>
      instance.getControllerByType(PageController).onQueryPage(params)
    }
    multiple
    infinite
    pageSize={50}
    queryDelay={150}
    minQueryLength={2}
    placeholder="Type at least 2 characters..."
  />
</LabelsTopLayout>
Type at least 2 characters...

How It Works

With infinite enabled, use onQueryPage instead of onQuery. The callback receives paged query parameters:

class PageController extends Controller {
  onQueryPage({ query, pageSize, page }: { query: string; pageSize: number; page: number }) {
    // query - the search text
    // pageSize - number of items per page
    // page - current page number (1-based)
    return fetchFromServer(query, page, pageSize);
  }
}

<LookupField
  onQueryPage={(params, instance) => instance.getControllerByType(PageController).onQueryPage(params)}
  infinite
  pageSize={50}
/>

The LookupField monitors scroll position and requests the next page when the user scrolls near the end.

Configuration

PropertyTypeDefaultDescription
infinitebooleanfalseEnable infinite scrolling
pageSizenumber100Number of items per page
queryDelaynumber150Delay (ms) before querying after typing
minQueryLengthnumber0Minimum characters required to trigger query