Skip to content

Commit 05d19a9

Browse files
authored
refactor: no closable when disabled (#554)
1 parent f05d794 commit 05d19a9

File tree

3 files changed

+58
-25
lines changed

3 files changed

+58
-25
lines changed

src/Selector/MultipleSelector.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ const SelectSelector: React.FC<SelectorProps> = props => {
132132
>
133133
{({ key, label, value, disabled: itemDisabled, className, style }) => {
134134
const mergedKey = key || value;
135-
const closable = key !== REST_TAG_KEY && !itemDisabled;
135+
const closable = !disabled && key !== REST_TAG_KEY && !itemDisabled;
136136
const onMouseDown = (event: React.MouseEvent) => {
137137
event.preventDefault();
138138
event.stopPropagation();

tests/Tags.test.tsx

Lines changed: 54 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* eslint-disable import/no-named-as-default-member */
12
import { mount } from 'enzyme';
23
import KeyCode from 'rc-util/lib/KeyCode';
34
import classNames from 'classnames';
@@ -268,26 +269,58 @@ describe('Select.Tags', () => {
268269
expect(onChange).toHaveBeenCalledWith(['a'], expect.anything());
269270
});
270271

271-
it('can render custom tags', () => {
272-
const onTagRender = jest.fn();
273-
const tagRender = (props: any) => {
274-
const { label } = props;
275-
onTagRender(label);
276-
return (
277-
<span className={classNames(label, 'customize-tag')}>
278-
{label}
279-
{label}
280-
</span>
272+
describe('tagRender', () => {
273+
it('can render custom tags', () => {
274+
const onTagRender = jest.fn();
275+
const tagRender = (props: any) => {
276+
const { label } = props;
277+
onTagRender(label);
278+
return (
279+
<span className={classNames(label, 'customize-tag')}>
280+
{label}
281+
{label}
282+
</span>
283+
);
284+
};
285+
const wrapper = mount(<Select mode="tags" tokenSeparators={[',']} tagRender={tagRender} />);
286+
287+
wrapper.find('input').simulate('change', { target: { value: '1,A,42' } });
288+
289+
expect(wrapper.find('span.A').length).toBe(1);
290+
expect(wrapper.find('span.A').text()).toBe('AA');
291+
expect(onTagRender).toHaveBeenCalled();
292+
expect(wrapper.find('.customize-tag')).toHaveLength(3);
293+
});
294+
295+
it('disabled', () => {
296+
const tagRender = jest.fn();
297+
mount(
298+
<Select
299+
mode="tags"
300+
disabled
301+
value={['light']}
302+
tagRender={tagRender}
303+
options={[{ value: 'light' }]}
304+
/>,
281305
);
282-
};
283-
const wrapper = mount(<Select mode="tags" tokenSeparators={[',']} tagRender={tagRender} />);
284306

285-
wrapper.find('input').simulate('change', { target: { value: '1,A,42' } });
307+
expect(tagRender).toHaveBeenCalledWith(expect.objectContaining({ closable: false }));
308+
});
286309

287-
expect(wrapper.find('span.A').length).toBe(1);
288-
expect(wrapper.find('span.A').text()).toBe('AA');
289-
expect(onTagRender).toHaveBeenCalledTimes(3);
290-
expect(wrapper.find('.customize-tag')).toHaveLength(3);
310+
it('option disabled', () => {
311+
const tagRender = jest.fn();
312+
mount(
313+
<Select
314+
mode="tags"
315+
disabled
316+
value={['light']}
317+
tagRender={tagRender}
318+
options={[{ value: 'light', disabled: true }]}
319+
/>,
320+
);
321+
322+
expect(tagRender).toHaveBeenCalledWith(expect.objectContaining({ closable: false }));
323+
});
291324
});
292325

293326
describe('OptGroup', () => {
@@ -326,12 +359,14 @@ describe('Select.Tags', () => {
326359
});
327360

328361
it('should work fine when filterOption function exists', () => {
362+
const LegacyOption = Select.Option as any; // Compatible to legacy usage
363+
329364
const children = [];
330365
for (let i = 10; i < 36; i += 1) {
331366
children.push(
332-
<Option key={i.toString(36) + i} disabled={!(i % 3)}>
367+
<LegacyOption key={i.toString(36) + i} disabled={!(i % 3)}>
333368
{i.toString(36) + i}
334-
</Option>,
369+
</LegacyOption>,
335370
);
336371
}
337372
const wrapper = mount(

tests/shared/removeSelectedTest.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,15 @@ export default function removeSelectedTest(mode: any) {
3434
value={['1']}
3535
onChange={handleChange}
3636
onDeselect={handleDeselect}
37-
disabled={true}
37+
disabled
3838
mode={mode}
3939
>
4040
<Option value="1">1</Option>
4141
<Option value="2">2</Option>
4242
</Select>,
4343
);
44-
removeSelection(wrapper);
4544

46-
expect(handleDeselect).not.toHaveBeenCalled();
47-
expect(handleChange).not.toHaveBeenCalled();
45+
expect(wrapper.find('.rc-select-selection-item-remove')).toHaveLength(0);
4846
});
4947

5048
it('wrap value when labelInValue', () => {
@@ -55,7 +53,7 @@ export default function removeSelectedTest(mode: any) {
5553
value={[{ key: '1' }, { key: '2' }]}
5654
onChange={handleChange}
5755
onDeselect={handleDeselect}
58-
labelInValue={true}
56+
labelInValue
5957
mode={mode}
6058
>
6159
<Option value="1">1</Option>

0 commit comments

Comments
 (0)