mirror of
https://github.com/apache/superset.git
synced 2026-04-07 10:31:50 +00:00
309 lines
8.2 KiB
Plaintext
309 lines
8.2 KiB
Plaintext
---
|
|
title: Select
|
|
sidebar_label: Select
|
|
---
|
|
|
|
<!--
|
|
Licensed to the Apache Software Foundation (ASF) under one
|
|
or more contributor license agreements. See the NOTICE file
|
|
distributed with this work for additional information
|
|
regarding copyright ownership. The ASF licenses this file
|
|
to you under the Apache License, Version 2.0 (the
|
|
"License"); you may not use this file except in compliance
|
|
with the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing,
|
|
software distributed under the License is distributed on an
|
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
KIND, either express or implied. See the License for the
|
|
specific language governing permissions and limitations
|
|
under the License.
|
|
-->
|
|
|
|
import { StoryWithControls } from '../../../src/components/StorybookWrapper';
|
|
|
|
# Select
|
|
|
|
A versatile select component supporting single and multi-select modes, search filtering, option creation, and both synchronous and asynchronous data sources.
|
|
|
|
## Live Example
|
|
|
|
<StoryWithControls
|
|
component="Select"
|
|
props={{
|
|
mode: "single",
|
|
placeholder: "Select ...",
|
|
showSearch: true,
|
|
allowNewOptions: false,
|
|
allowClear: false,
|
|
allowSelectAll: true,
|
|
disabled: false,
|
|
invertSelection: false,
|
|
oneLine: false,
|
|
maxTagCount: 4,
|
|
options: [
|
|
{
|
|
label: "Such an incredibly awesome long long label",
|
|
value: "long-label-1"
|
|
},
|
|
{
|
|
label: "Another incredibly awesome long long label",
|
|
value: "long-label-2"
|
|
},
|
|
{
|
|
label: "Option A",
|
|
value: "A"
|
|
},
|
|
{
|
|
label: "Option B",
|
|
value: "B"
|
|
},
|
|
{
|
|
label: "Option C",
|
|
value: "C"
|
|
},
|
|
{
|
|
label: "Option D",
|
|
value: "D"
|
|
},
|
|
{
|
|
label: "Option E",
|
|
value: "E"
|
|
},
|
|
{
|
|
label: "Option F",
|
|
value: "F"
|
|
},
|
|
{
|
|
label: "Option G",
|
|
value: "G"
|
|
},
|
|
{
|
|
label: "Option H",
|
|
value: "H"
|
|
},
|
|
{
|
|
label: "Option I",
|
|
value: "I"
|
|
}
|
|
]
|
|
}}
|
|
controls={[
|
|
{
|
|
name: "mode",
|
|
label: "Mode",
|
|
type: "inline-radio",
|
|
options: [
|
|
"single",
|
|
"multiple"
|
|
],
|
|
description: "Whether to allow selection of a single option or multiple."
|
|
},
|
|
{
|
|
name: "placeholder",
|
|
label: "Placeholder",
|
|
type: "text",
|
|
description: "Placeholder text when no option is selected."
|
|
},
|
|
{
|
|
name: "showSearch",
|
|
label: "Show Search",
|
|
type: "boolean",
|
|
description: "Whether to show a search input for filtering."
|
|
},
|
|
{
|
|
name: "allowNewOptions",
|
|
label: "Allow New Options",
|
|
type: "boolean",
|
|
description: "Whether users can create new options by typing a value not in the list."
|
|
},
|
|
{
|
|
name: "allowClear",
|
|
label: "Allow Clear",
|
|
type: "boolean",
|
|
description: "Whether to show a clear button to reset the selection."
|
|
},
|
|
{
|
|
name: "allowSelectAll",
|
|
label: "Allow Select All",
|
|
type: "boolean",
|
|
description: "Whether to show a \"Select All\" option in multiple mode."
|
|
},
|
|
{
|
|
name: "disabled",
|
|
label: "Disabled",
|
|
type: "boolean",
|
|
description: "Whether the select is disabled."
|
|
},
|
|
{
|
|
name: "invertSelection",
|
|
label: "Invert Selection",
|
|
type: "boolean",
|
|
description: "Shows a stop icon instead of a checkmark on selected options, indicating deselection on click."
|
|
},
|
|
{
|
|
name: "oneLine",
|
|
label: "One Line",
|
|
type: "boolean",
|
|
description: "Forces tags onto one line with overflow count. Requires multiple mode."
|
|
},
|
|
{
|
|
name: "maxTagCount",
|
|
label: "Max Tag Count",
|
|
type: "number",
|
|
description: "Maximum number of tags to display in multiple mode before showing an overflow count."
|
|
}
|
|
]}
|
|
/>
|
|
|
|
## Try It
|
|
|
|
Edit the code below to experiment with the component:
|
|
|
|
```tsx live
|
|
function Demo() {
|
|
return (
|
|
<div style={{ width: 300 }}>
|
|
<Select
|
|
ariaLabel="demo-select"
|
|
options={[
|
|
{ label: 'Dashboards', value: 'dashboards' },
|
|
{ label: 'Charts', value: 'charts' },
|
|
{ label: 'Datasets', value: 'datasets' },
|
|
{ label: 'SQL Lab', value: 'sqllab' },
|
|
{ label: 'Settings', value: 'settings' },
|
|
]}
|
|
placeholder="Select ..."
|
|
showSearch
|
|
/>
|
|
</div>
|
|
);
|
|
}
|
|
```
|
|
|
|
## Multi Select
|
|
|
|
```tsx live
|
|
function MultiSelectDemo() {
|
|
return (
|
|
<div style={{ width: 400 }}>
|
|
<Select
|
|
ariaLabel="multi-select"
|
|
mode="multiple"
|
|
options={[
|
|
{ label: 'Dashboards', value: 'dashboards' },
|
|
{ label: 'Charts', value: 'charts' },
|
|
{ label: 'Datasets', value: 'datasets' },
|
|
{ label: 'SQL Lab', value: 'sqllab' },
|
|
{ label: 'Settings', value: 'settings' },
|
|
]}
|
|
placeholder="Select items..."
|
|
allowSelectAll
|
|
maxTagCount={3}
|
|
/>
|
|
</div>
|
|
);
|
|
}
|
|
```
|
|
|
|
## Allow New Options
|
|
|
|
```tsx live
|
|
function AllowNewDemo() {
|
|
return (
|
|
<div style={{ width: 300 }}>
|
|
<Select
|
|
ariaLabel="allow-new-select"
|
|
mode="multiple"
|
|
options={[
|
|
{ label: 'Red', value: 'red' },
|
|
{ label: 'Green', value: 'green' },
|
|
{ label: 'Blue', value: 'blue' },
|
|
]}
|
|
placeholder="Type to add tags..."
|
|
allowNewOptions
|
|
showSearch
|
|
/>
|
|
</div>
|
|
);
|
|
}
|
|
```
|
|
|
|
## Inverted Selection
|
|
|
|
```tsx live
|
|
function InvertedDemo() {
|
|
return (
|
|
<div style={{ width: 400 }}>
|
|
<Select
|
|
ariaLabel="inverted-select"
|
|
mode="multiple"
|
|
options={[
|
|
{ label: 'Admin', value: 'admin' },
|
|
{ label: 'Editor', value: 'editor' },
|
|
{ label: 'Viewer', value: 'viewer' },
|
|
{ label: 'Public', value: 'public' },
|
|
]}
|
|
placeholder="Exclude roles..."
|
|
invertSelection
|
|
/>
|
|
</div>
|
|
);
|
|
}
|
|
```
|
|
|
|
## One Line Mode
|
|
|
|
```tsx live
|
|
function OneLineDemo() {
|
|
return (
|
|
<div style={{ width: 300 }}>
|
|
<Select
|
|
ariaLabel="oneline-select"
|
|
mode="multiple"
|
|
options={[
|
|
{ label: 'Dashboard 1', value: 'd1' },
|
|
{ label: 'Dashboard 2', value: 'd2' },
|
|
{ label: 'Dashboard 3', value: 'd3' },
|
|
{ label: 'Dashboard 4', value: 'd4' },
|
|
{ label: 'Dashboard 5', value: 'd5' },
|
|
]}
|
|
placeholder="Select dashboards..."
|
|
oneLine
|
|
/>
|
|
</div>
|
|
);
|
|
}
|
|
```
|
|
|
|
## Props
|
|
|
|
| Prop | Type | Default | Description |
|
|
|------|------|---------|-------------|
|
|
| `mode` | `string` | `"single"` | Whether to allow selection of a single option or multiple. |
|
|
| `placeholder` | `string` | `"Select ..."` | Placeholder text when no option is selected. |
|
|
| `showSearch` | `boolean` | `true` | Whether to show a search input for filtering. |
|
|
| `allowNewOptions` | `boolean` | `false` | Whether users can create new options by typing a value not in the list. |
|
|
| `allowClear` | `boolean` | `false` | Whether to show a clear button to reset the selection. |
|
|
| `allowSelectAll` | `boolean` | `true` | Whether to show a "Select All" option in multiple mode. |
|
|
| `disabled` | `boolean` | `false` | Whether the select is disabled. |
|
|
| `invertSelection` | `boolean` | `false` | Shows a stop icon instead of a checkmark on selected options, indicating deselection on click. |
|
|
| `oneLine` | `boolean` | `false` | Forces tags onto one line with overflow count. Requires multiple mode. |
|
|
| `maxTagCount` | `number` | `4` | Maximum number of tags to display in multiple mode before showing an overflow count. |
|
|
| `options` | `any` | `[{"label":"Such an incredibly awesome long long label","value":"long-label-1"},{"label":"Another incredibly awesome long long label","value":"long-label-2"},{"label":"Option A","value":"A"},{"label":"Option B","value":"B"},{"label":"Option C","value":"C"},{"label":"Option D","value":"D"},{"label":"Option E","value":"E"},{"label":"Option F","value":"F"},{"label":"Option G","value":"G"},{"label":"Option H","value":"H"},{"label":"Option I","value":"I"}]` | - |
|
|
|
|
## Import
|
|
|
|
```tsx
|
|
import { Select } from '@superset/components';
|
|
```
|
|
|
|
---
|
|
|
|
:::tip[Improve this page]
|
|
This documentation is auto-generated from the component's Storybook story.
|
|
Help improve it by [editing the story file](https://github.com/apache/superset/edit/master/superset-frontend/packages/superset-ui-core/src/components/Select/Select.stories.tsx).
|
|
:::
|