Demos
Default dropdown
No value
is defined, but a title
is given.
const data = [// Every data item can, beside "content" - contain what ever{// (optional) can be what everselected_key: 'key_0',// (optional) is show instead of "content", once selectedselected_value: 'Item 1 Value',// Item content as a string or arraycontent: 'Item 1 Content',},{selected_key: 'key_1',content: ['Item 2 Value', 'Item 2 Content'],},{selected_value: (<NumberFormat always_selectall ban>11345678962</NumberFormat>),content: [<NumberFormat key="ban" always_selectall ban>11345678962</NumberFormat>,'Bank account number',],},{selected_key: 'key_2',selected_value: 'Item 3 Value',content: ['Item 3 Content A', 'Item 3 Content B'],},{selected_key: 'key_3',selected_value: 'Item 4 Value',content: ['Item 4 Content A', <>Custom Component</>],},]render(<Dropdowndata={data}label="Label:"title="Please select a value"on_change={({ data }) => {console.log('on_change', data)}}/>)
Dropdown with different item content directions
<Dropdownlabel="Label:"data={[['Vertical', 'alignment'],<><P modifier="medium">Vertical</P><P>alignment</P></>,<Dropdown.HorizontalItem key="item-1"><P modifier="medium" right="x-small">Horizontal</P><P>alignment</P></Dropdown.HorizontalItem>,]}{...visualTestProps(globalThis.IS_TEST &&window.location.search.includes('item-directions'))}/>
Icon on left side
<Dropdownlabel="Label:"icon_position="left"data={data}value={3}skip_portal={true}on_change={({ data: selectedDataItem }) => {console.log('on_change', selectedDataItem)}}on_show={() => {console.log('on_show')}}/>
ActionMenu
The ActionMenu will change its characteristics in mobile view. It will hide the title, and the DrawerList will be placed on the bottom of the page.
<Dropdowntitle="ActionMenu"action_menu={true}align_dropdown="left"data={[<><IconPrimary icon="check" right />Save</>,<><IconPrimary icon="download" right />Download</>,]}/>
MoreMenu
No lasting selection will be made.
<Dropdownmore_menu={true}size="small"title="Choose an item"data={() => [<Link href="/" key="item-1">Go to this Link</Link>,'Or press on me',<>Custom component</>,]}right="small"{...visualTestProps(globalThis.IS_TEST && window.location.search.includes('left-side'))}/><Dropdownprevent_selection={true}align_dropdown="right"size="small"title={null}aria-label="Choose an item"data={() => [<Link href="/" key="item-1">Go to this Link</Link>,'Or press on me',<>Custom component</>,]}right="small"{...visualTestProps(globalThis.IS_TEST && window.location.search.includes('right-side'))}/><Dropdownmore_menu={true}title="Choose an item"data={[<Link href="/" key="item-1">Go to this Link</Link>,'Or press on me',<>Custom component</>,]}right="small"/><Dropdownprevent_selection={true}align_dropdown="right"title={null}aria-label="Choose an item"data={[<Link href="/" key="item-1">Go to this Link</Link>,'Or press on me',<>Custom component</>,]}on_change={({ value }) => {console.log('on_change', value)}}on_select={({ active_item }) => {console.log('on_select', active_item)}}/>
Dropdown as tertiary variant
<Dropdownvariant="tertiary"independent_width={true}icon_position="left"align_dropdown="left"data={data}/>
Custom item events
const CustomComponent = () => (<CustomComponentInneronTouchStart={preventDefault}onClick={(e) => {console.log('Do something different')preventDefault(e)}}>Custom event handler</CustomComponentInner>)const CustomComponentInner = styled.span`display: block;width: 100%;margin: -1rem -2rem -1rem -1rem;padding: 1rem 2rem 1rem 1rem;`const preventDefault = (e) => {e.stopPropagation()e.preventDefault()}render(<Dropdownaction_menurightlabel="Label:"title="Choose an item"data={() => [<Link href="/" key="item-1">Go to this Link</Link>,'Or press on me',<CustomComponent key="item-2" />,]}on_change={({ value }) => {console.log('More menu:', value)}}suffix={<HelpButton title="Modal Title">Modal content</HelpButton>}{...visualTestProps(globalThis.IS_TEST &&window.location.search.includes('action_menu-custom'))}/>)
Dropdown in different sizes
Four sizes are available: small
, default
, medium
and large
<FormRow direction="vertical"><Dropdown label="Label:" size="default" bottom data={() => data} /><Dropdown label="Label:" size="medium" bottom data={() => data} /><Dropdown label="Label:" size="large" bottom data={() => data} /></FormRow>
Custom width
const CustomWidthOne = styled(Dropdown)`.dnb-dropdown__shell {width: 10rem;}`const CustomWidthTwo = styled(Dropdown)`&.dnb-dropdown--is-popup .dnb-drawer-list__root {width: 12rem;}`const CustomWidthThree = styled(Dropdown)`/** Change the "__shell" width */.dnb-dropdown__shell {width: 10rem;}/** Change the "__list" width */.dnb-drawer-list__root {width: 20rem;}`const CustomWidthFour = styled(Dropdown)`width: 60%;min-width: 224px; /** 14rem (please use pixels on min-width!) */max-width: 25rem;/** In case we have a label */.dnb-form-label + .dnb-dropdown__inner {width: 100%;}`render(<FormRow direction="vertical"><CustomWidthOnelabel="Label:"size="default"icon_position="left"bottomdata={data}/><CustomWidthTwolabel="Label:"size="small"more_menubottomdata={data}/><CustomWidthThreelabel="Label:"size="large"align_dropdown="right"bottomdata={data}/><CustomWidthFourtitle="Min and max width"stretch={true}bottomdata={data}/></FormRow>)
Dropdown with status
And vertical label layout.
<Dropdowndata={data}label="Label:"label_direction="vertical"status="Message to the user"/>
Findable list
With long list to make it scrollable and searchable
const scrollableData = [{content: 'A',},{content: 'B',},{selected_value: (<NumberFormat always_selectall ban>11345678962</NumberFormat>),content: [<NumberFormat key="ban-1" always_selectall ban>11345678962</NumberFormat>,'C',],},{selected_value: (<NumberFormat always_selectall ban>15349648901</NumberFormat>),content: [<NumberFormat key="ban-2" always_selectall ban>15349648901</NumberFormat>,'D',],},{content: 'E',},{selected_key: 'key_1',selected_value: 'Find me by keypress',content: ['F', 'F', 'F', 'F'],},{content: 'G',},{content: 'H',},]render(<Dropdowndata={scrollableData}value="key_1" // use either index (5) or selected_key: 'key_1'label="Label:"/>)
Disabled dropdown
<Dropdown disabled data={['Disabled Dropdown']} label="Label:" />
Disabled tertiary dropdown
<Dropdowndisabledvariant="tertiary"data={['Disabled Dropdown']}label="Disabled tertiary dropdown"/>
DrawerList opened
Only to visualize and used for visual testing