mirror of
https://gitee.com/baidu/amis.git
synced 2024-11-30 02:58:05 +08:00
select多选和检索同时开时,全选支持只选中检索命中的项 (#2542)
Co-authored-by: zhangjun08 <zhangjun08@baidu.com>
This commit is contained in:
parent
e0a7ee2faa
commit
80e5387157
@ -58,6 +58,7 @@ order: 48
|
||||
| extractValue | `boolean` | `false` | [提取值](./options#%E6%8F%90%E5%8F%96%E5%A4%9A%E9%80%89%E5%80%BC-extractvalue) |
|
||||
| checkAll | `boolean` | `false` | 是否支持全选 |
|
||||
| checkAllLabel | `string` | `全选` | 全选的文字 |
|
||||
| checkAllBySearch | `boolean` | `false` | 有检索时只全选检索命中的项 |
|
||||
| defaultCheckAll | `boolean` | `false` | 默认是否全选 |
|
||||
| creatable | `boolean` | `false` | [新增选项](./options#%E5%89%8D%E7%AB%AF%E6%96%B0%E5%A2%9E-creatable) |
|
||||
| multiple | `boolean` | `false` | [多选](./options#多选-multiple) |
|
||||
|
@ -156,6 +156,9 @@
|
||||
max-height: px2rem(300px);
|
||||
overflow: auto;
|
||||
user-select: none;
|
||||
.#{$ns}Checkbox--sm > i {
|
||||
margin-top: px2rem(-3px);
|
||||
}
|
||||
}
|
||||
&--longlist {
|
||||
overflow: hidden;
|
||||
|
@ -286,6 +286,7 @@ interface SelectProps extends OptionProps, ThemeProps, LocaleProps {
|
||||
onBlur?: Function;
|
||||
checkAll?: boolean;
|
||||
checkAllLabel?: string;
|
||||
checkAllBySearch?: boolean;
|
||||
defaultCheckAll?: boolean;
|
||||
simpleValue?: boolean;
|
||||
defaultOpen?: boolean;
|
||||
@ -473,15 +474,29 @@ export class Select extends React.Component<SelectProps, SelectState> {
|
||||
}
|
||||
|
||||
toggleCheckAll() {
|
||||
const {options, onChange, simpleValue} = this.props;
|
||||
const {
|
||||
options,
|
||||
onChange,
|
||||
simpleValue,
|
||||
checkAllBySearch,
|
||||
labelField,
|
||||
valueField
|
||||
} = this.props;
|
||||
const inputValue = this.state.inputValue;
|
||||
let {selection} = this.state;
|
||||
const optionsValues = options.map(option => option.value);
|
||||
let filtedOptions: Array<Option> =
|
||||
inputValue && checkAllBySearch
|
||||
? matchSorter(options, inputValue, {
|
||||
keys: [labelField || 'label', valueField || 'value']
|
||||
})
|
||||
: options.concat();
|
||||
const optionsValues = filtedOptions.map(option => option.value);
|
||||
const selectionValues = selection.map(select => select.value);
|
||||
const checkedAll = optionsValues.every(
|
||||
option => selectionValues.indexOf(option) > -1
|
||||
);
|
||||
|
||||
selection = checkedAll ? [] : options;
|
||||
selection = checkedAll ? [] : filtedOptions;
|
||||
onChange(simpleValue ? selection.map(item => item.value) : selection);
|
||||
}
|
||||
|
||||
@ -687,6 +702,7 @@ export class Select extends React.Component<SelectProps, SelectState> {
|
||||
popoverClassName,
|
||||
checkAll,
|
||||
checkAllLabel,
|
||||
checkAllBySearch,
|
||||
searchable,
|
||||
createBtnLabel,
|
||||
disabled,
|
||||
@ -712,7 +728,9 @@ export class Select extends React.Component<SelectProps, SelectState> {
|
||||
|
||||
const selectionValues = selection.map(select => select[valueField]);
|
||||
if (multiple && checkAll) {
|
||||
const optionsValues = options.map(option => option[valueField]);
|
||||
const optionsValues = (checkAllBySearch ? filtedOptions : options).map(
|
||||
option => option[valueField]
|
||||
);
|
||||
|
||||
checkedAll = optionsValues.every(
|
||||
option => selectionValues.indexOf(option) > -1
|
||||
|
Loading…
Reference in New Issue
Block a user