DocSpace-client/packages/shared/components/combobox/Combobox.docs.mdx

172 lines
4.5 KiB
Plaintext

// (c) Copyright Ascensio System SIA 2009-2024
//
// This program is a free software product.
// You can redistribute it and/or modify it under the terms
// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software
// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended
// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of
// any third-party rights.
//
// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see
// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
//
// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021.
//
// The interactive user interfaces in modified source and object code versions of the Program must
// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3.
//
// Pursuant to Section 7(b) of the License you must retain the original Product logo when
// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under
// trademark law for use of our trademarks.
//
// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
import { Meta, Story, ArgsTable, Canvas, Controls } from "@storybook/blocks";
import CatalogEmployeeReactSvg from "PUBLIC_DIR/images/catalog.employee.react.svg?url";
import { ComboBox } from "./ComboBox";
import * as stories from "./combobox.stories.tsx";
<Meta
title="Components/ComboBox"
component={ComboBox}
argTypes={{
onSelect: {
action: "onSelect",
},
selectedOption: { required: true },
options: { required: true },
}}
/>
# ComboBox
Custom combo box input
<Canvas>
<div
style={{
display: "flex",
justifyContent: "space-between",
alignItems: "center",
}}
>
<Story story={stories.Default} name="Base Option" />
</div>
</Canvas>
### Properties
<Controls />
```js
import {ComboBox } from "@docspace/shared/components"
import NavLogoReactSvg from "PUBLIC_DIR/images/nav.logo.react.svg";
```
```js
const options = [
{
key: 1,
icon: CatalogEmployeeReactSvg, // 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"
>
<NavLogoReactSvg 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"
onToggle={alert("action")}
>
<NavLogoReactSvg size="medium" key="comboIcon" />
</ComboBox>
```