Scrolllist

Scrolllist displays a list of options with the ability to automatically load new options based on the scroll position. It shows a skeleton placeholder while loading new items.

An option in the context of Scrollist is an object with the following properties:

  • id: string or number
  • label: string
  • badge: string (optional)

The dealogicData['countries'] array used in the example is a global variable with a list of country objects, each with the following properties:

  • label: country name
  • sup: country code
  • sub: capital city
  • group: continent name

Attributes

attribute: type: required? default: description:
rpp number no

If set, the 'loading' state whill be shown for this amount of items while loading new items

renderOffset number no 6

How many 'hidden' items should the component render?

Methods

setCallback(callback)

Set the callback function that's called whenever the scroll threshold is reached.

param: type: default: description:
callback function   A function that can returns either an Array of option objects or a Promise that resolves with an Array of option objects. The function receives a single parameter: the page-number of the resultset (0-indexed)

Events

selected

Triggered whenever an option is selected.

Examples

<dl-scrolllist style="width: 240px; height: 450px; border: 1px solid #dfdfe0;" rpp="20" total-item-count="100"></dl-scrolllist>
<p><output></output></p>
var elInput = document.querySelector('dl-scrolllist')
var elOutput = document.querySelector('output')
var id = 1

var countryList = function() {
  var result = []
  var countries = dealogicData['countries']
  var countryCount = countries.length

  for (var i=0; i<20; i++) {
    var index = Math.floor(Math.random() * countryCount)
    var badge = false
    let x = Math.random() * 100
    if (x > 80) {
      badge = Math.ceil(x)
    }

    result.push({
      id: id++,
      label: countries[index]['label'],
      badge: badge,
    })
  }

  return result
}

var promiseCountryList = function(query) {
  return new Promise(function(resolve, reject) {
    setTimeout(function() {
        resolve(countryList())
    }, 2000)
  })
}

elInput.addEventListener('ready', function() {
    elInput.setCallback(promiseCountryList)
})

elInput.addEventListener('selected', function(event) {
    elOutput.value = event.detail.label
})