154 lines
3.1 KiB
Plaintext
154 lines
3.1 KiB
Plaintext
|
import { Meta, Story, ArgsTable, Canvas } from "@storybook/addon-docs/blocks";
|
||
|
|
||
|
import ComboBox from "./";
|
||
|
import * as stories from "./combobox.stories.js";
|
||
|
|
||
|
<Meta
|
||
|
title="Components/ComboBox"
|
||
|
component={ComboBox}
|
||
|
argTypes={{
|
||
|
onSelect: {
|
||
|
action: "onSelect",
|
||
|
},
|
||
|
selectedOption: { required: true },
|
||
|
options: { required: true },
|
||
|
}}
|
||
|
/>
|
||
|
|
||
|
# ComboBox
|
||
|
|
||
|
Custom combo box input
|
||
|
|
||
|
<Canvas>
|
||
|
<Story story={stories.basic} name="Default" />
|
||
|
</Canvas>
|
||
|
|
||
|
### Properties
|
||
|
|
||
|
<ArgsTable story="Default" />
|
||
|
|
||
|
### Base options
|
||
|
|
||
|
<Canvas
|
||
|
parameters={{
|
||
|
source: {
|
||
|
code: stories.baseOption,
|
||
|
},
|
||
|
}}
|
||
|
>
|
||
|
<Story story={stories.baseOption} name="Base Option" />
|
||
|
</Canvas>
|
||
|
|
||
|
### Advanced options
|
||
|
|
||
|
<Canvas>
|
||
|
<Story story={stories.advancedOption} name="Advanced Options" />
|
||
|
</Canvas>
|
||
|
|
||
|
```js
|
||
|
import ComboBox from "@appserver/components/combobox";
|
||
|
import NavLogoIcon from "../../../../../public/images/nav.logo.react.svg";
|
||
|
```
|
||
|
|
||
|
```js
|
||
|
const options = [
|
||
|
{
|
||
|
key: 1,
|
||
|
icon: "static/images/catalog.employee.react.svg", // optional item
|
||
|
label: "Option 1",
|
||
|
disabled: false, // optional item
|
||
|
onClick: clickFunction, // optional item
|
||
|
},
|
||
|
];
|
||
|
```
|
||
|
|
||
|
```jsx
|
||
|
<ComboBox
|
||
|
options={options}
|
||
|
isDisabled={false}
|
||
|
selectedOption={{
|
||
|
key: 0,
|
||
|
label: "Select",
|
||
|
}}
|
||
|
dropDownMaxHeight={200}
|
||
|
noBorder={false}
|
||
|
scale={true}
|
||
|
scaledOptions={true}
|
||
|
size="content"
|
||
|
onSelect={(option) => console.log("selected", option)}
|
||
|
/>
|
||
|
```
|
||
|
|
||
|
Options have options:
|
||
|
|
||
|
- key - Item key, may be a string or a number
|
||
|
- label - Display text
|
||
|
- icon - Optional name of icon that will be displayed before label
|
||
|
- disabled - Make option disabled
|
||
|
- onClick - On click function
|
||
|
|
||
|
ComboBox perceives all property`s for positioning from DropDown!
|
||
|
|
||
|
If you need to display a custom list of options, you must use advancedOptions property. Like this:
|
||
|
|
||
|
```js
|
||
|
const advancedOptions = (
|
||
|
<>
|
||
|
<DropDownItem>
|
||
|
<RadioButton value="asc" name="first" label="A-Z" isChecked={true} />
|
||
|
</DropDownItem>
|
||
|
<DropDownItem>
|
||
|
<RadioButton value="desc" name="first" label="Z-A" />
|
||
|
</DropDownItem>
|
||
|
<DropDownItem isSeparator />
|
||
|
<DropDownItem>
|
||
|
<RadioButton value="first" name="second" label="First name" />
|
||
|
</DropDownItem>
|
||
|
<DropDownItem>
|
||
|
<RadioButton
|
||
|
value="last"
|
||
|
name="second"
|
||
|
label="Last name"
|
||
|
isChecked={true}
|
||
|
/>
|
||
|
</DropDownItem>
|
||
|
</>
|
||
|
);
|
||
|
```
|
||
|
|
||
|
```jsx
|
||
|
<ComboBox
|
||
|
options={[]} // An empty array will enable advancedOptions
|
||
|
advancedOptions={advancedOptions}
|
||
|
onSelect={(option) => console.log("Selected option", option)}
|
||
|
selectedOption={{
|
||
|
key: 0,
|
||
|
label: "Select",
|
||
|
}}
|
||
|
isDisabled={false}
|
||
|
scaled={false}
|
||
|
size="content"
|
||
|
directionX="right"
|
||
|
>
|
||
|
<NavLogoIcon size="medium" key="comboIcon" />
|
||
|
</ComboBox>
|
||
|
```
|
||
|
|
||
|
To use Combobox as a toggle button, you must declare it according to the parameters:
|
||
|
|
||
|
```jsx
|
||
|
<ComboBox
|
||
|
options={[]} // Required to display correctly
|
||
|
selectedOption={{
|
||
|
key: 0,
|
||
|
label: "Selected option",
|
||
|
}}
|
||
|
scaled={false}
|
||
|
size="content"
|
||
|
displayType="toggle"
|
||
|
toggleAction={alert("action")}
|
||
|
>
|
||
|
<NavLogoIcon size="medium" key="comboIcon" />
|
||
|
</ComboBox>
|
||
|
```
|