Properties#
| Type | Description | |
|---|---|---|
data | {DATA} () => {DATA} | (required) The data we want to fill the list with. Details on the type of {DATA} can be found below. The data can be provided as an array or object. Or as a function that returns the data (called when user opens the list). |
groups | Array<React.ReactNode> | (optional) An array of group titles for the list items. Only the first group can be undefined. |
value | string number | (optional) Define a preselected data entry. In order of priority, value can be set to: object key (if data is an object), selectedKey property (if data is an array), array index (if no selectedKey) or content (if value is a non-integer string). |
defaultValue | number | (optional) Define a startup value or handle a re-render without handling the state during the re-render by yourself. Defaults to null. |
noDivider | boolean | (optional) Removes the divider line between options. Defaults to false. |
direction | "auto" "top" "bottom" | (optional) Defines the direction of how the drawer-list shows the options list. Can be bottom or top. Defaults to auto. |
preventSelection | boolean | (optional) If set to true, the DrawerList will then not make any permanent selection. |
focusable | boolean | (optional) If set to true, the element is then focusable by assertive technologies. |
preventClose | boolean | (optional) If set to true, the DrawerList will not close on any events. |
keepOpen | boolean | (optional) If set to true, the DrawerList will close on outside clicks, but not on selection. |
independentWidth | boolean | (optional) If set to true, the DrawerList will handle its width and position independently of the parent element. |
fixedPosition | boolean | (optional) If set to true, the DrawerList will be fixed in its scroll position by using CSS position: fixed;. |
enableBodyLock | boolean | (optional) If set to true, the HTML body will get locked from scrolling when the Dropdown is open. |
skipKeysearch | boolean | (optional) If set to true, search items by the first key will be ignored. |
ignoreEvents | boolean | (optional) If set to true, all keyboard and mouse events will be ignored. |
alignDrawer | string | (optional) Use 'right' to change the options alignment direction. Only makes sense to use in combination with preventSelection - or if an independent width is used. |
listClass | string | (optional) Define an HTML class that will be set on the list, alongside dnb-drawer-list__list. |
portalClass | string | (optional) Define an HTML class that will be set on the DOM portal alongside dnb-drawer-list__portal__style. Can be useful to handle e.g. a custom z-index in relation to a header. |
scrollable | boolean | (optional) Defines if the options list should be scrollable (the max-height is set by default to 50vh). |
noScrollAnimation | boolean | (optional) To disable scrolling animation. |
noAnimation | boolean | (optional) To disable appear/disappear (show/hide) animation. |
skipPortal | boolean | (optional) To disable the React Portal behavior. |
inline | boolean | (optional) If set to true, the list is rendered in normal document flow instead of an absolute overlay, with a flat look instead of a floating card. Implies skipPortal. Defaults to false. |
minHeight | string | (optional) Defines the minimum height (in rem) of the options list. |
maxHeight | string | (optional) Defines the maximum height (in rem) of the options list. |
pageOffset | string | (optional) Defines the available scrollable height. If scrolling should not change the height of the drawer-list, then set it to 0 (useful if the DrawerList is used in fixed positions in contrast to a scrollable page content). |
observerElement | string | (optional) Set an HTML element, either as a selector or a DOM element. Can be used to send in an element which will be used to make the direction calculation on. |
cacheHash | string | (optional) Set a cacheHash as a string to enable internal memorizing of the list to enhance rerendering performance. Components like Autocomplete are using this because of the huge data changes due to search and reorder. |
wrapperElement | string HTMLElement | (optional) Has to be an HTML Element, or a selector for one, ideally a parent element, used to calculate sizes and distances. Also used for the 'click outside' detection. Clicking on the wrapperElement will not trigger an outside click. |
optionsRender | function | (optional) Has to be a function, returning the items again. See example. This can be used to add additional options above the actual rendered list. |
listDriver | DrawerListDriver | (optional) Opt in to a custom list renderer. Use createDrawerListVirtualization from @dnb/eufemia/fragments/drawer-list/Virtualization to render large data sets without mounting every option. Install the optional @tanstack/react-virtual peer dependency when using this driver. Cannot be combined with optionsRender. |
Space | string object | (optional) Spacing properties like top or bottom are supported. |
arrowPosition | string | (deprecated) Does nothing as there is no longer any arrow. Legacy docs: Position of the arrow on the popup drawer. Set to left or right. Defaults to left if not set. |
The data property#
The data can be structured in two main ways:
- As an array
- As an object.
An array is preferred as it gives you the most options.
data as an array#
// an array can contain complex items and offers the most controlconst data = [{content: "Item 1",},{content: <span>Item 2</span>},{content: ["Item 3", "Line 2", <span>Line 3</span>]},{content: ['Main account', '1234 12 12345'],selectedValue: 'Main account (605,22 kr)',suffixValue: '605,22 kr',},{content: ['Old account', <i>Closed</i>],disabled: true,suffixValue: '0,00 kr',},]// If you only use the `content` property, you can use it directly in the array.// This list is identical to the one above:const data = ["Item 1",<span>Item 2</span>,["Item 3", "Line 2", <span>Line 3</span>],{content: ['Main account', '1234 12 12345'],selectedValue: 'Main account (605,22 kr)',suffixValue: '605,22 kr',},{content: ['Old account', <i>Closed</i>],disabled: true,suffixValue: '0,00 kr',},]const onChange = ({ data, value }) => {console.log(data) // returns the item as it appears in the arrayconsole.log(value) // returns the index of the item}
Each object in the array have the following properties:
| Type | Description | |
|---|---|---|
content | string React.ReactNode Array<(string | React.ReactNode)> | (optional) Visual content in the list item. |
disabled | boolean | (optional) Disables the list item from selection. |
groupIndex | number | (optional) What group index in the groups property this item belongs to. |
selectedKey | string number | (optional) If set, can be used instead of array index by the value prop. |
selectedValue | string React.ReactNode | (optional) Replaces the standard value output for selected item. Only used in some implementations (Dropdown, Autocomplete). |
suffixValue | string React.ReactNode | (optional) Content placed to the right in the list item. |
data as an object#
A simpler alternative, but with less options
// Each entry can contain the same type of value as the array's `content` propertyconst data = {first: "Item 1",,second: <span>Item 2</span>,last: ["Item 3", "Line 2", <span>Line 3</span>],}const onChange = ({ data, value }) => {console.log(data)// returns a generated object representing the item:// {// selectedKey: 'first',// value: 'first',// content: 'Item 1',// type: 'object'// }console.log(value) // returns the key ("first", "second", or "last"), instead of an index}
data types overview#
The following is an overview of all the types that the data property accepts. (These are not actual names of actual types in the library.)
// The visual content that is shown in one DrawerList item.// An array can be used to define multiple lines.type CONTENT = string | React.ReactNode | (string | React.ReactNode)[]// An array itemtype ARRAY_OBJECT = {content: CONTENTdisabled?: booleanselectedKey?: string | numberselectedValue?: string | React.ReactNodesuffixValue?: string | React.ReactNodestyle?: React.CSSProperties}// `data` as an array. A list of "ARRAY_OBJECT" types is preferred,// but the "CONTENT" type can be useful for simple lists.type ARRAY = (CONTENT | ARRAY_OBJECT)[]// `data` as an object. Can only contain the "CONTENT" type.// Each `key` behaves like the "ARRAY_OBJECT"'s `selectedKey`.type RECORD = Record<string, CONTENT>// An object or array that represents the entire DrawerList list.type DATA = ARRAY | RECORD// The final type of the `data` property:let data: DATA | () => DATA
JSON string#
There is technically support for sending in a JSON string of the data to the data property. But this is an old functionality that we do not really support anymore.
Translations#
More info about translations can be found in the general localization and Eufemia Forms localization docs.
| Key | nb-NO | en-GB | sv-SE | da-DK |
|---|---|---|---|---|
DrawerList.defaultGroupSR | Standardvalg | Default options | Standardval | Standardvalg |
DrawerList.missingGroup | Gruppe | Group | Grupp | Gruppe |
DrawerList.noGroupSR | Andre valg | Other options | Andra val | Andre valg |