Skip to content

Commit

Permalink
fix: Disabled option should not be closable (#312)
Browse files Browse the repository at this point in the history
  • Loading branch information
zombieJ authored Aug 10, 2022
1 parent 37db73b commit 3a4dda0
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 26 deletions.
7 changes: 4 additions & 3 deletions examples/debug.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import '../assets/index.less';
import Cascader from '../src';

const addressOptions = [
...new Array(20).fill(null).map((_, i) => ({ label: String(i), value: `99${i}` })),
// ...new Array(20).fill(null).map((_, i) => ({ label: String(i), value: `99${i}` })),
{
label: <span>空孩子</span>,
value: 'empty',
Expand All @@ -18,6 +18,7 @@ const addressOptions = [
{
label: '福州',
value: 'fuzhou',
disabled: true,
children: [
{
label: '马尾',
Expand Down Expand Up @@ -82,7 +83,7 @@ const addressOptions = [
},
],
},
...new Array(20).fill(null).map((_, i) => ({ label: String(i), value: i })),
// ...new Array(20).fill(null).map((_, i) => ({ label: String(i), value: i })),
];

// const defaultValue = ['fj', 'fuzhou'];
Expand All @@ -92,7 +93,7 @@ const addressOptions = [
const defaultValue = ['not', 'exist'];

const Demo = () => {
const [multiple, setMultiple] = React.useState(false);
const [multiple, setMultiple] = React.useState(true);
const [, setInputValue] = React.useState('');

const onChange = (value: any, selectedOptions: any) => {
Expand Down
1 change: 1 addition & 0 deletions src/hooks/useDisplayValues.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ export default (
value,
key: value,
valueCells,
disabled: valueOptions[valueOptions.length - 1]?.option?.disabled,
};
});
}, [rawValues, options, fieldNames, displayRender, multiple]);
Expand Down
72 changes: 49 additions & 23 deletions tests/index.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -369,30 +369,56 @@ describe('Cascader.Basic', () => {
expect(menus.length).toBe(1);
});

it('should be unselectable when option is disabled', () => {
const newAddressOptions = [...addressOptions];
newAddressOptions[0] = {
...newAddressOptions[0],
disabled: true,
};
const wrapper = mount(
<Cascader options={newAddressOptions} onChange={onChange}>
<input readOnly />
</Cascader>,
);
wrapper.find('input').simulate('click');
let menus = wrapper.find('.rc-cascader-menu');
expect(menus.length).toBe(1);
const menu1Items = menus.at(0).find('.rc-cascader-menu-item');
expect(menu1Items.length).toBe(3);
expect(selectedValue).toBeFalsy();
describe('option disabled', () => {
it('should be unselectable when option is disabled', () => {
const newAddressOptions = [...addressOptions];
newAddressOptions[0] = {
...newAddressOptions[0],
disabled: true,
};
const wrapper = mount(
<Cascader options={newAddressOptions} onChange={onChange}>
<input readOnly />
</Cascader>,
);
wrapper.find('input').simulate('click');
let menus = wrapper.find('.rc-cascader-menu');
expect(menus.length).toBe(1);
const menu1Items = menus.at(0).find('.rc-cascader-menu-item');
expect(menu1Items.length).toBe(3);
expect(selectedValue).toBeFalsy();

menu1Items.at(0).simulate('click');
expect(
wrapper.find('.rc-cascader-menu-item').first().hasClass('rc-cascader-menu-item-disabled'),
).toBe(true);
menus = wrapper.find('.rc-cascader-menu');
expect(menus.length).toBe(1);
});

menu1Items.at(0).simulate('click');
expect(
wrapper.find('.rc-cascader-menu-item').first().hasClass('rc-cascader-menu-item-disabled'),
).toBe(true);
menus = wrapper.find('.rc-cascader-menu');
expect(menus.length).toBe(1);
it('can not clear selector when disabled', () => {
const newAddressOptions = JSON.parse(JSON.stringify(addressOptions));
newAddressOptions[0].children[0].disabled = true;

const wrapper = mount(
<Cascader
options={newAddressOptions}
value={[
['fj', 'fuzhou'],
['bj', 'chaoyang'],
]}
checkable
/>,
);

expect(wrapper.find('.rc-cascader-selection-item-disabled').text()).toEqual('福州');
expect(
wrapper
.find('.rc-cascader-selection-item:not(.rc-cascader-selection-item-disabled)')
.find('.rc-cascader-selection-item-content')
.text(),
).toEqual('朝阳区');
});
});

it('should have correct active menu items', () => {
Expand Down

1 comment on commit 3a4dda0

@vercel
Copy link

@vercel vercel bot commented on 3a4dda0 Aug 10, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Successfully deployed to the following URLs:

cascader – ./

cascader-react-component.vercel.app
cascader-git-master-react-component.vercel.app

Please sign in to comment.