Skip to content

Commit ec6ffe6

Browse files
author
liyuan-meng
committed
🐛[Select][TreeSelect]修改showTag默认值
1 parent 576a951 commit ec6ffe6

12 files changed

Lines changed: 175 additions & 159 deletions

File tree

src/components/select/demos/searchable.md

Lines changed: 78 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -69,94 +69,84 @@ export default function SelectDemo() {
6969
<Checkbox checked={disabled} onChange={checked => {
7070
setDisabled(checked)
7171
}}>禁用</Checkbox>
72-
<div>
73-
<h5>搜索框在下拉框内(单选)</h5>
74-
<Select
75-
searchable
76-
searchInBox={false}
77-
allowClear
78-
disabled={disabled}
79-
supportLightText
80-
placeholder="带搜索的下拉单选"
81-
onSearch={handleSearch}
82-
onChange={handleChange}
83-
style={{width: 260}}
84-
dataSource={dataList}
85-
position="auto"
86-
// size="large"
87-
/>
88-
</div>
89-
<div>
90-
<h5>搜索框在下拉框内(多选)</h5>
91-
<Select
92-
hasSelectAll
93-
multiple
94-
searchable
95-
searchInBox={false}
96-
allowClear
97-
disabled={disabled}
98-
supportLightText
99-
placeholder="带搜索的下拉单选"
100-
onSearch={handleSearch}
101-
onChange={handleChange}
102-
style={{width: 260}}
103-
dataSource={dataList}
104-
// size="large"
105-
/>
106-
</div>
107-
<div>
108-
<h5>搜索框在下拉框外(单选-新)</h5>
109-
<Select
110-
searchable
111-
allowClear
112-
disabled={disabled}
113-
supportLightText
114-
placeholder="带搜索的下拉单选"
115-
onSearch={handleSearch}
116-
onChange={handleChange}
117-
style={{width: 260}}
118-
dataSource={dataList}
119-
// size="large"
120-
/>
121-
</div>
122-
<div>
123-
<h5>搜索框在下拉框外(多选-新)</h5>
124-
<Select
125-
hasSelectAll
126-
searchable
127-
allowClear
128-
disabled={disabled}
129-
multiple
130-
supportLightText
131-
placeholder="带搜索的下拉多选"
132-
onSearch={handleSearch}
133-
onChange={handleChange}
134-
style={{width: 260}}
135-
labelKey="name"
136-
valueKey="userId"
137-
dataSource={dataList.map(item => ({
138-
name: item.label,
139-
userId: item.value
140-
}))}
141-
/>
142-
</div>
143-
<div>
144-
<h5>搜索框在下拉框外(多选限制标签数量-新)</h5>
145-
<Select
146-
hasSelectAll
147-
searchable
148-
allowClear
149-
disabled={disabled}
150-
multiple
151-
supportLightText
152-
placeholder="带搜索的下拉多选"
153-
onSearch={handleSearch}
154-
onChange={handleChange}
155-
style={{width: 260}}
156-
dataSource={dataList}
157-
maxTagCount={1}
158-
/>
159-
</div>
72+
<h5>搜索框在下拉框外(单选-新)</h5>
73+
<Select
74+
searchable
75+
allowClear
76+
disabled={disabled}
77+
supportLightText
78+
placeholder="带搜索的下拉单选"
79+
onSearch={handleSearch}
80+
onChange={handleChange}
81+
style={{width: 260}}
82+
dataSource={dataList}
83+
// size="large"
84+
/>
85+
<h5>搜索框在下拉框外(多选-新)</h5>
86+
<Select
87+
hasSelectAll
88+
searchable
89+
allowClear
90+
disabled={disabled}
91+
multiple
92+
supportLightText
93+
placeholder="带搜索的下拉多选"
94+
onSearch={handleSearch}
95+
onChange={handleChange}
96+
style={{width: 260}}
97+
labelKey="name"
98+
valueKey="userId"
99+
dataSource={dataList.map(item => ({
100+
name: item.label,
101+
userId: item.value
102+
}))}
103+
/>
104+
<h5>搜索框在下拉框外(多选限制标签数量-新)</h5>
105+
<Select
106+
hasSelectAll
107+
searchable
108+
allowClear
109+
disabled={disabled}
110+
multiple
111+
supportLightText
112+
placeholder="带搜索的下拉多选"
113+
onSearch={handleSearch}
114+
onChange={handleChange}
115+
style={{width: 260}}
116+
dataSource={dataList}
117+
maxTagCount={1}
118+
/>
119+
<h5 style={{ color: 'rgba(0,0,0,0.45)', fontWeight: 400 }}>搜索框在下拉框内(单选-旧)</h5>
120+
<Select
121+
searchable
122+
searchInBox={false}
123+
allowClear
124+
disabled={disabled}
125+
supportLightText
126+
placeholder="带搜索的下拉单选"
127+
onSearch={handleSearch}
128+
onChange={handleChange}
129+
style={{width: 260}}
130+
dataSource={dataList}
131+
position="auto"
132+
// size="large"
133+
/>
134+
<h5 style={{ color: 'rgba(0,0,0,0.45)', fontWeight: 400 }}>搜索框在下拉框内(多选-旧)</h5>
135+
<Select
136+
hasSelectAll
137+
multiple
138+
searchable
139+
searchInBox={false}
140+
allowClear
141+
disabled={disabled}
142+
supportLightText
143+
placeholder="带搜索的下拉单选"
144+
onSearch={handleSearch}
145+
onChange={handleChange}
146+
style={{width: 260}}
147+
dataSource={dataList}
148+
// size="large"
149+
/>
160150
</div>
161151
);
162152
}

src/components/select/index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,8 @@ class Select extends Component {
519519
value={value}
520520
dataSource={this.children}
521521
onChange={this.onSimpleOptionChange}
522+
searchValue={this.state.searchValue}
523+
onSearchValueChange={this.onSearchValueChange}
522524
/>
523525
);
524526
}
@@ -644,6 +646,7 @@ Select.propTypes = {
644646
lightTextColor: PropTypes.string,
645647
supportUnlimited: PropTypes.bool,
646648
unlimitedLabel: PropTypes.string,
649+
showTag: PropTypes.bool,
647650
maxTagCount: PropTypes.number,
648651
dropdownStyle: PropTypes.object,
649652
dropdownClassName: PropTypes.string,
@@ -686,6 +689,7 @@ Select.defaultProps = {
686689
lightTextColor: undefined,
687690
supportUnlimited: false,
688691
unlimitedLabel: '不限',
692+
showTag: true,
689693
maxTagCount: undefined,
690694
dropdownStyle: {},
691695
dropdownClassName: '',

src/components/select/index.less

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,9 @@
146146
position: relative;
147147

148148
.@{select-prefix-cls}-search-input {
149+
position: absolute;
150+
top: 50%;
151+
transform: translate(0, -50%);
149152
width: 100%;
150153
height: 30px;
151154
border: none;
@@ -213,6 +216,7 @@
213216
font-size: 12px;
214217
padding: 0 6px;
215218
max-width: 49%;
219+
min-width: 38px;
216220

217221
&-text {
218222
white-space: nowrap;

src/components/select/index.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ group:
3838
| placeholder | 选择框默认文案 | string | - |
3939
| searchable | 使下拉框带搜索 | boolean | false |
4040
| searchInBox | 搜索框在输入框内 | boolean | true |
41+
| showTag | 多选下拉已选项为tag形式 | boolean | true |
4142
| maxTagCount | 多选下拉最多显示多少个tag | number | - |
4243
| searchPlaceholder | 搜索框默认文案 | string | - |
4344
| emptyRender | 数据为空时下拉框显示内容 | string \| node | '暂无数据'+缺省图 |
@@ -89,9 +90,6 @@ group:
8990
### 大小
9091
<embed src="@components/select/demos/sizeSelect.md" />
9192

92-
### 可搜索
93-
<embed src="@components/select/demos/searchable.md" />
94-
9593
### 定制化选项
9694
<embed src="@components/select/demos/customItem.md" />
9795

@@ -113,6 +111,9 @@ group:
113111
### 分组可搜索
114112
<embed src="@components/select/demos/groupSearch.md" />
115113

114+
### 可搜索
115+
<embed src="@components/select/demos/searchable.md" />
116+
116117
### 多选下拉支持不限
117118
<embed src="@components/select/demos/unlimited.md" />
118119

src/components/select/views/group-select.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,11 @@ export default function GroupSelect(props) {
3131
onSearch,
3232
searchPlaceholder,
3333
className,
34+
searchInBox,
35+
searchValue,
36+
onSearchValueChange: setSearchValue,
3437
} = props;
3538
const [ options, setOptions ] = useState(dataSource);
36-
const [ searchValue, setSearchValue ] = useState('');
3739
const classNames = classnames(
3840
`${selector}-group-select-options ${selector}-select-options`,
3941
className,
@@ -86,7 +88,7 @@ export default function GroupSelect(props) {
8688
return (
8789
<div className={classNames}>
8890
<div className={`${selector}-single-options`}>
89-
{searchable && (
91+
{searchable && !searchInBox && (
9092
<OptionsSearch
9193
searchValue={searchValue}
9294
placeholder={searchPlaceholder}

src/components/select/views/multi-search.js

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export default function MultiSearch({
1616
maxTagCount,
1717
setSearchStatus,
1818
disabled,
19+
searchable,
1920
}) {
2021
const searchRef = useRef();
2122
const [selectList, setSelectList] = useState([]);
@@ -33,14 +34,16 @@ export default function MultiSearch({
3334
};
3435

3536
useEffect(() => {
36-
if (open) {
37-
searchRef.current.querySelector('input').focus();
38-
setSearchStatus(true);
39-
} else {
40-
setSearchStatus(false);
41-
clearSearchValue();
37+
if (searchable) {
38+
if (open) {
39+
searchRef.current.querySelector('input').focus();
40+
setSearchStatus(true);
41+
} else {
42+
setSearchStatus(false);
43+
clearSearchValue();
44+
}
4245
}
43-
}, [open, selectedList]);
46+
}, [open, selectedList, searchable]);
4447

4548
useEffect(() => {
4649
setSelectList([...selectedList]);
@@ -58,7 +61,6 @@ export default function MultiSearch({
5861
positionPop();
5962
}
6063
};
61-
console.log(selectList);
6264

6365
const onItemClose = (evt, item) => {
6466
evt.stopPropagation();
@@ -87,17 +89,19 @@ export default function MultiSearch({
8789
{hideSelectList.length}
8890
</span>
8991
) : null}
90-
<div ref={searchRef} className={`${selector}-search`}>
91-
<Input
92-
disabled={disabled}
93-
// useComposition
94-
value={searchValue}
95-
placeholder=""
96-
onChange={onOptionsSearch}
97-
className={`${selector}-search-input`}
98-
onKeyDown={onKeyDown}
99-
/>
100-
</div>
92+
{searchable && (
93+
<div ref={searchRef} className={`${selector}-search`}>
94+
<Input
95+
disabled={disabled}
96+
// useComposition
97+
value={searchValue}
98+
placeholder=""
99+
onChange={onOptionsSearch}
100+
className={`${selector}-search-input`}
101+
onKeyDown={onKeyDown}
102+
/>
103+
</div>
104+
)}
101105
<p className={`${selector}-multi-search-placeholder`}>{selectList.length || searchValue ? '' : placeholder}</p>
102106
</>
103107
);

src/components/select/views/selected.js

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ export default class Selected extends React.Component {
140140
maxTagCount,
141141
isSearch,
142142
setSearchStatus,
143+
showTag,
143144
},
144145
state: { selected, clear },
145146
onMouseEnter,
@@ -149,8 +150,8 @@ export default class Selected extends React.Component {
149150
disabled,
150151
empty: supportUnlimited ? false : !dataSource.length,
151152
hidden: !showSelectStyle,
152-
'search-in-box': searchable && searchInBox,
153-
'multi-search-in-box': searchable && searchInBox && multiple,
153+
'search-in-box': searchable && searchInBox || multiple && showTag,
154+
'multi-search-in-box': multiple && (searchable && searchInBox || showTag),
154155
[`${size}`]: true,
155156
});
156157
const iconClasses = classnames(`${selector}-select-icon`, {
@@ -181,7 +182,7 @@ export default class Selected extends React.Component {
181182
if (searchable && searchInBox && !multiple) {
182183
SearchCom = SingleSearch;
183184
}
184-
if (searchable && searchInBox && multiple) {
185+
if ((searchable && searchInBox || showTag) && multiple) {
185186
SearchCom = MultiSearch;
186187
}
187188

@@ -193,12 +194,7 @@ export default class Selected extends React.Component {
193194
onMouseEnter={onMouseEnter}
194195
onMouseLeave={onMouseLeave}
195196
>
196-
{(!searchable || searchable && !searchInBox) && (
197-
<span className={`${selector}-selected`} title={title}>
198-
{selected.length ? selected : placeholder}
199-
</span>
200-
)}
201-
{SearchCom && (
197+
{SearchCom ? (
202198
<SearchCom
203199
placeholder={placeholder}
204200
selected={this.state.selected}
@@ -214,7 +210,12 @@ export default class Selected extends React.Component {
214210
maxTagCount={maxTagCount}
215211
setSearchStatus={setSearchStatus}
216212
disabled={disabled}
213+
searchable={searchable && searchInBox}
217214
/>
215+
) : (
216+
<span className={`${selector}-selected`} title={title}>
217+
{selected.length ? selected : placeholder}
218+
</span>
218219
)}
219220
<Icon type="close-fill-1" className={clearClasses} onClick={onClear} />
220221
<Icon type="search" className={searchClasses} />

0 commit comments

Comments
 (0)