Skip to content

Commit 6746eb5

Browse files
fix(select): fix check all option bug (#3216)
* fix(select): 多选下拉框全选功能失效 * fix(select): 补充多选模式下全选功能单测
1 parent ca02d7d commit 6746eb5

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

src/select/__tests__/select.test.tsx

+33
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,39 @@ describe('Select 组件测试', () => {
177177
});
178178
});
179179

180+
test('多选全选测试', async () => {
181+
const MultipleSelect = () => {
182+
const [value, setValue] = useState(['apple']);
183+
const onChange = (value) => {
184+
setValue(value);
185+
};
186+
return (
187+
<Select value={value} onChange={onChange} multiple>
188+
<Option key="all" label="All" value="all" checkAll />
189+
<Option key="apple" label="Apple" value="apple" />
190+
<Option key="orange" label="Orange" value="orange" />
191+
<Option key="banana" label="Banana" value="banana" />
192+
</Select>
193+
);
194+
};
195+
196+
const { getByText } = render(<MultipleSelect />);
197+
198+
fireEvent.click(document.querySelector('.t-input'));
199+
200+
// 点击全选,input 展示 Apple、Banana、Orange 选项
201+
fireEvent.click(getByText('All'));
202+
expect(document.querySelector(selectSelector)).toHaveTextContent('Apple');
203+
expect(document.querySelector(selectSelector)).toHaveTextContent('Banana');
204+
expect(document.querySelector(selectSelector)).toHaveTextContent('Orange');
205+
206+
// 再次点击全选,input 清空选项
207+
fireEvent.click(getByText('All'));
208+
expect(document.querySelector(selectSelector)).not.toHaveTextContent('Apple');
209+
expect(document.querySelector(selectSelector)).not.toHaveTextContent('Banana');
210+
expect(document.querySelector(selectSelector)).not.toHaveTextContent('Orange');
211+
});
212+
180213
test('分组选择器测试', async () => {
181214
const OptionGroupSelect = () => {
182215
const [value, setValue] = useState('apple');

src/select/base/Select.tsx

+4-2
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,10 @@ const Select = forwardRefWithStatics(
192192
return;
193193
}
194194

195-
const values = currentOptions.filter((option) => !option.checkAll && !option.disabled)
196-
const selectableOptions = getSelectedOptions(values, multiple, valueType, keys, tmpPropOptions)
195+
const values = currentOptions
196+
.filter((option) => !option.checkAll && !option.disabled)
197+
.map((option) => option[keys?.value || 'value']);
198+
const selectableOptions = getSelectedOptions(values, multiple, valueType, keys, tmpPropOptions);
197199

198200
const checkAllValue =
199201
!checkAll && selectableOptions.length !== (props.value as Array<SelectOption>)?.length ? selectableOptions : [];

0 commit comments

Comments
 (0)