This module is an etch component that can be used in Atom packages to show a select list with fuzzy filtering, keyboard/mouse navigation and other cool features.
npm install --save atom-select-list
After installing the module, you can simply require it and use it as a standalone component:
const SelectList = require('atom-select-list')
const usersSelectList = new SelectList({
items: ['Alice', 'Bob', 'Carol']
})
document.body.appendChild(usersSelectList.element)
Or within another etch component:
render () {
return (
<SelectList items={this.items} />
)
}
When creating a new instance of a select list, or when calling update
on an existing one, you can supply a JavaScript object that can contain any of the following properties:
items: [Object]
: an array containing the objects you want to show in the select list.elementForItem: (item: Object, options: Object) -> HTMLElement
: a function that is called whenever an item needs to be displayed.
options: Object
:selected: Boolean
: indicating whether item is selected or not.index: Number
: item's index.visible: Boolean
: indicating whether item is visible in viewport or not. Unless initiallyVisibleItemCount
was given, this value is always true
.maxResults: Number
: the number of maximum items that are shown.filter: (items: [Object], query: String) -> [Object]
: a function that allows to decide which items to show whenever the query changes. By default, it uses fuzzaldrin to filter results.filterKeyForItem: (item: Object) -> String
: when filter
is not provided, this function will be called to retrieve a string property on each item and that will be used to filter them.filterQuery: (query: String) -> String
: a function that allows to apply a transformation to the user query and whose return value will be used to filter items.query: String
: a string that will replace the contents of the query editor.selectQuery: Boolean
: a boolean indicating whether the query text should be selected or not.order: (item1: Object, item2: Object) -> Number
: a function that allows to change the order in which items are shown.emptyMessage: String
: a string shown when the list is empty.errorMessage: String
: a string that needs to be set when you want to notify the user that an error occurred.infoMessage: String
: a string that needs to be set when you want to provide some information to the user.loadingMessage: String
: a string that needs to be set when you are loading items in the background.loadingBadge: String/Number
: a string or number that needs to be set when the progress status changes (e.g. a percentage showing how many items have been loaded so far).itemsClassList: [String]
: an array of strings that will be added as class names to the items element.initialSelectionIndex: Number
: the index of the item to initially select and automatically select after query changes; defaults to 0
.didChangeQuery: (query: String) -> Void
: a function that is called when the query changes.didChangeSelection: (item: Object) -> Void
: a function that is called when the selected item changes.didConfirmSelection: (item: Object) -> Void
: a function that is called when the user clicks or presses Enter on an item.didConfirmEmptySelection: () -> Void
: a function that is called when the user presses Enter but the list is empty.didCancelSelection: () -> Void
: a function that is called when the user presses Esc or the list loses focus.initiallyVisibleItemCount: Number
: When this options was provided, SelectList
observe visibility of items in viewport, visibility state is passed as visible
option to elementForItem
. This is mainly used to skip heavy computation for invisible items.