mirror of
https://github.com/apache/superset.git
synced 2026-08-04 04:52:32 +00:00
310 lines
14 KiB
Plaintext
310 lines
14 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-ui/core/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).
|
|
:::
|