feat(cascader): add disabled api for panel (#51272)

* feat: add disabled api for panel

* feat: improve demo

* test: update snapshot

* test: update snapshot

* test: update snapshot
This commit is contained in:
Jony J 2024-11-01 15:29:48 +08:00 committed by GitHub
parent 08a9325182
commit f73825ba74
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 78 additions and 11 deletions

View File

@ -6,6 +6,7 @@ import type { PickType } from 'rc-cascader/lib/Panel';
import type { CascaderProps, DefaultOptionType } from '.'; import type { CascaderProps, DefaultOptionType } from '.';
import DefaultRenderEmpty from '../config-provider/defaultRenderEmpty'; import DefaultRenderEmpty from '../config-provider/defaultRenderEmpty';
import DisabledContext from '../config-provider/DisabledContext';
import useCSSVarCls from '../config-provider/hooks/useCSSVarCls'; import useCSSVarCls from '../config-provider/hooks/useCSSVarCls';
import useBase from './hooks/useBase'; import useBase from './hooks/useBase';
import useCheckable from './hooks/useCheckable'; import useCheckable from './hooks/useCheckable';
@ -40,8 +41,12 @@ function CascaderPanel<
notFoundContent, notFoundContent,
direction, direction,
expandIcon, expandIcon,
disabled: customDisabled,
} = props; } = props;
const disabled = React.useContext(DisabledContext);
const mergedDisabled = customDisabled ?? disabled;
const [prefixCls, cascaderPrefixCls, mergedDirection, renderEmpty] = useBase( const [prefixCls, cascaderPrefixCls, mergedDirection, renderEmpty] = useBase(
customizePrefixCls, customizePrefixCls,
direction, direction,
@ -76,6 +81,7 @@ function CascaderPanel<
direction={mergedDirection} direction={mergedDirection}
expandIcon={mergedExpandIcon} expandIcon={mergedExpandIcon}
loadingIcon={loadingIcon} loadingIcon={loadingIcon}
disabled={mergedDisabled}
/>, />,
); );
} }

View File

@ -1763,6 +1763,31 @@ exports[`renders components/cascader/demo/panel.tsx extend context correctly 1`]
<div <div
class="ant-flex ant-flex-align-flex-start ant-flex-gap-small ant-flex-vertical" class="ant-flex ant-flex-align-flex-start ant-flex-gap-small ant-flex-vertical"
> >
<button
aria-checked="false"
aria-label="disabled switch"
class="ant-switch"
role="switch"
type="button"
>
<div
class="ant-switch-handle"
/>
<span
class="ant-switch-inner"
>
<span
class="ant-switch-inner-checked"
>
Enabled
</span>
<span
class="ant-switch-inner-unchecked"
>
Disabled
</span>
</span>
</button>
<div <div
class="ant-cascader-panel" class="ant-cascader-panel"
> >

View File

@ -744,6 +744,31 @@ exports[`renders components/cascader/demo/panel.tsx correctly 1`] = `
<div <div
class="ant-flex ant-flex-align-flex-start ant-flex-gap-small ant-flex-vertical" class="ant-flex ant-flex-align-flex-start ant-flex-gap-small ant-flex-vertical"
> >
<button
aria-checked="false"
aria-label="disabled switch"
class="ant-switch"
role="switch"
type="button"
>
<div
class="ant-switch-handle"
/>
<span
class="ant-switch-inner"
>
<span
class="ant-switch-inner-checked"
>
Enabled
</span>
<span
class="ant-switch-inner-unchecked"
>
Disabled
</span>
</span>
</button>
<div <div
class="ant-cascader-panel" class="ant-cascader-panel"
> >

View File

@ -1,6 +1,6 @@
import React from 'react'; import React, { useState } from 'react';
import type { CascaderProps } from 'antd'; import type { CascaderProps } from 'antd';
import { Cascader, Flex } from 'antd'; import { Cascader, Flex, Switch } from 'antd';
interface Option { interface Option {
value: string | number; value: string | number;
@ -51,12 +51,23 @@ const onMultipleChange: CascaderProps<Option, 'value', true>['onChange'] = (valu
console.log(value); console.log(value);
}; };
const App: React.FC = () => ( const App: React.FC = () => {
<Flex vertical gap="small" align="flex-start"> const [disabled, setDisabled] = useState(false);
<Cascader.Panel options={options} onChange={onChange} />
<Cascader.Panel multiple options={options} onChange={onMultipleChange} /> return (
<Cascader.Panel /> <Flex vertical gap="small" align="flex-start">
</Flex> <Switch
); checked={disabled}
checkedChildren="Enabled"
unCheckedChildren="Disabled"
onChange={setDisabled}
aria-label="disabled switch"
/>
<Cascader.Panel options={options} onChange={onChange} disabled={disabled} />
<Cascader.Panel multiple options={options} onChange={onMultipleChange} disabled={disabled} />
<Cascader.Panel />
</Flex>
);
};
export default App; export default App;

View File

@ -2950,7 +2950,7 @@ Array [
> >
<li <li
aria-checked="false" aria-checked="false"
class="ant-cascader-menu-item ant-cascader-menu-item-expand" class="ant-cascader-menu-item ant-cascader-menu-item-expand ant-cascader-menu-item-disabled"
data-path-key="zhejiang" data-path-key="zhejiang"
role="menuitemcheckbox" role="menuitemcheckbox"
title="Zhejiang" title="Zhejiang"

View File

@ -120,7 +120,7 @@
"classnames": "^2.5.1", "classnames": "^2.5.1",
"copy-to-clipboard": "^3.3.3", "copy-to-clipboard": "^3.3.3",
"dayjs": "^1.11.11", "dayjs": "^1.11.11",
"rc-cascader": "~3.29.0", "rc-cascader": "~3.30.0",
"rc-checkbox": "~3.3.0", "rc-checkbox": "~3.3.0",
"rc-collapse": "~3.9.0", "rc-collapse": "~3.9.0",
"rc-dialog": "~9.6.0", "rc-dialog": "~9.6.0",