|
@@ -99,6 +99,11 @@ export type OverrideCommonProps =
|
|
*/
|
|
*/
|
|
// eslint-disable-next-line max-len
|
|
// eslint-disable-next-line max-len
|
|
export interface TreeSelectProps extends Omit<BasicTreeSelectProps, OverrideCommonProps | 'validateStatus' | 'searchRender'>, Pick<TreeProps, OverrideCommonProps>{
|
|
export interface TreeSelectProps extends Omit<BasicTreeSelectProps, OverrideCommonProps | 'validateStatus' | 'searchRender'>, Pick<TreeProps, OverrideCommonProps>{
|
|
|
|
+ 'aria-describedby'?: React.AriaAttributes['aria-describedby'];
|
|
|
|
+ 'aria-errormessage'?: React.AriaAttributes['aria-errormessage'];
|
|
|
|
+ 'aria-invalid'?: React.AriaAttributes['aria-invalid'];
|
|
|
|
+ 'aria-labelledby'?: React.AriaAttributes['aria-labelledby'];
|
|
|
|
+ 'aria-required'?: React.AriaAttributes['aria-required'];
|
|
motion?: Motion;
|
|
motion?: Motion;
|
|
mouseEnterDelay?: number;
|
|
mouseEnterDelay?: number;
|
|
mouseLeaveDelay?: number;
|
|
mouseLeaveDelay?: number;
|
|
@@ -110,6 +115,7 @@ export interface TreeSelectProps extends Omit<BasicTreeSelectProps, OverrideComm
|
|
dropdownMatchSelectWidth?: boolean;
|
|
dropdownMatchSelectWidth?: boolean;
|
|
dropdownStyle?: React.CSSProperties;
|
|
dropdownStyle?: React.CSSProperties;
|
|
insetLabel?: React.ReactNode;
|
|
insetLabel?: React.ReactNode;
|
|
|
|
+ insetLabelId?: string;
|
|
maxTagCount?: number;
|
|
maxTagCount?: number;
|
|
motionExpand?: boolean;
|
|
motionExpand?: boolean;
|
|
optionListStyle?: React.CSSProperties;
|
|
optionListStyle?: React.CSSProperties;
|
|
@@ -164,6 +170,11 @@ class TreeSelect extends BaseComponent<TreeSelectProps, TreeSelectState> {
|
|
static contextType = ConfigContext;
|
|
static contextType = ConfigContext;
|
|
|
|
|
|
static propTypes = {
|
|
static propTypes = {
|
|
|
|
+ 'aria-describedby': PropTypes.string,
|
|
|
|
+ 'aria-errormessage': PropTypes.string,
|
|
|
|
+ 'aria-invalid': PropTypes.bool,
|
|
|
|
+ 'aria-labelledby': PropTypes.string,
|
|
|
|
+ 'aria-required': PropTypes.bool,
|
|
loadedKeys: PropTypes.arrayOf(PropTypes.string),
|
|
loadedKeys: PropTypes.arrayOf(PropTypes.string),
|
|
loadData: PropTypes.func,
|
|
loadData: PropTypes.func,
|
|
onLoad: PropTypes.func,
|
|
onLoad: PropTypes.func,
|
|
@@ -218,6 +229,7 @@ class TreeSelect extends BaseComponent<TreeSelectProps, TreeSelectState> {
|
|
suffix: PropTypes.node,
|
|
suffix: PropTypes.node,
|
|
prefix: PropTypes.node,
|
|
prefix: PropTypes.node,
|
|
insetLabel: PropTypes.node,
|
|
insetLabel: PropTypes.node,
|
|
|
|
+ insetLabelId: PropTypes.string,
|
|
zIndex: PropTypes.number,
|
|
zIndex: PropTypes.number,
|
|
getPopupContainer: PropTypes.func,
|
|
getPopupContainer: PropTypes.func,
|
|
dropdownMatchSelectWidth: PropTypes.bool,
|
|
dropdownMatchSelectWidth: PropTypes.bool,
|
|
@@ -614,7 +626,7 @@ class TreeSelect extends BaseComponent<TreeSelectProps, TreeSelectState> {
|
|
};
|
|
};
|
|
|
|
|
|
renderPrefix = () => {
|
|
renderPrefix = () => {
|
|
- const { prefix, insetLabel }: any = this.props;
|
|
|
|
|
|
+ const { prefix, insetLabel, insetLabelId }: any = this.props;
|
|
const labelNode = prefix || insetLabel;
|
|
const labelNode = prefix || insetLabel;
|
|
const prefixWrapperCls = cls({
|
|
const prefixWrapperCls = cls({
|
|
[`${prefixcls}-prefix`]: true,
|
|
[`${prefixcls}-prefix`]: true,
|
|
@@ -624,7 +636,7 @@ class TreeSelect extends BaseComponent<TreeSelectProps, TreeSelectState> {
|
|
[`${prefixcls}-prefix-icon`]: isSemiIcon(labelNode),
|
|
[`${prefixcls}-prefix-icon`]: isSemiIcon(labelNode),
|
|
});
|
|
});
|
|
|
|
|
|
- return <div className={prefixWrapperCls}>{labelNode}</div>;
|
|
|
|
|
|
+ return <div className={prefixWrapperCls} id={insetLabelId}>{labelNode}</div>;
|
|
};
|
|
};
|
|
|
|
|
|
renderContent = () => {
|
|
renderContent = () => {
|
|
@@ -633,7 +645,7 @@ class TreeSelect extends BaseComponent<TreeSelectProps, TreeSelectState> {
|
|
const style = { minWidth: dropdownMinWidth, ...dropdownStyle };
|
|
const style = { minWidth: dropdownMinWidth, ...dropdownStyle };
|
|
const popoverCls = cls(dropdownClassName, `${prefixcls}-popover`);
|
|
const popoverCls = cls(dropdownClassName, `${prefixcls}-popover`);
|
|
return (
|
|
return (
|
|
- <div className={popoverCls} role="list-box" style={style}>
|
|
|
|
|
|
+ <div className={popoverCls} role="listbox" style={style}>
|
|
{this.renderTree()}
|
|
{this.renderTree()}
|
|
</div>
|
|
</div>
|
|
);
|
|
);
|
|
@@ -812,7 +824,7 @@ class TreeSelect extends BaseComponent<TreeSelectProps, TreeSelectState> {
|
|
const clearCls = cls(`${prefixcls}-clearbtn`);
|
|
const clearCls = cls(`${prefixcls}-clearbtn`);
|
|
if (showClearBtn) {
|
|
if (showClearBtn) {
|
|
return (
|
|
return (
|
|
- <div className={clearCls} onClick={this.handleClear}>
|
|
|
|
|
|
+ <div className={clearCls} onClick={this.handleClear} role='button' tabIndex={0}>
|
|
<IconClear />
|
|
<IconClear />
|
|
</div>
|
|
</div>
|
|
);
|
|
);
|
|
@@ -902,14 +914,25 @@ class TreeSelect extends BaseComponent<TreeSelectProps, TreeSelectState> {
|
|
<Fragment key={'arrow'}>{this.renderArrow()}</Fragment>,
|
|
<Fragment key={'arrow'}>{this.renderArrow()}</Fragment>,
|
|
]
|
|
]
|
|
);
|
|
);
|
|
-
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Reasons for disabling the a11y eslint rule:
|
|
|
|
+ * The following attributes(aria-controls,aria-expanded) will be automatically added by Tooltip, no need to declare here
|
|
|
|
+ */
|
|
return (
|
|
return (
|
|
<div
|
|
<div
|
|
className={classNames}
|
|
className={classNames}
|
|
style={style}
|
|
style={style}
|
|
ref={this.triggerRef}
|
|
ref={this.triggerRef}
|
|
onClick={this.handleClick}
|
|
onClick={this.handleClick}
|
|
|
|
+ aria-invalid={this.props['aria-invalid']}
|
|
|
|
+ aria-errormessage={this.props['aria-errormessage']}
|
|
|
|
+ aria-labelledby={this.props['aria-labelledby']}
|
|
|
|
+ aria-describedby={this.props['aria-describedby']}
|
|
|
|
+ aria-required={this.props['aria-required']}
|
|
{...mouseEvent}
|
|
{...mouseEvent}
|
|
|
|
+ // eslint-disable-next-line jsx-a11y/role-has-required-aria-props
|
|
|
|
+ role='combobox'
|
|
|
|
+ tabIndex={0}
|
|
>
|
|
>
|
|
{inner}
|
|
{inner}
|
|
</div>
|
|
</div>
|
|
@@ -1232,7 +1255,7 @@ class TreeSelect extends BaseComponent<TreeSelectProps, TreeSelectState> {
|
|
labelEllipsis: typeof labelEllipsis === 'undefined' ? virtualize : labelEllipsis,
|
|
labelEllipsis: typeof labelEllipsis === 'undefined' ? virtualize : labelEllipsis,
|
|
}}
|
|
}}
|
|
>
|
|
>
|
|
- <div className={wrapperCls} role="list-box">
|
|
|
|
|
|
+ <div className={wrapperCls} role="listbox">
|
|
{outerTopSlot}
|
|
{outerTopSlot}
|
|
{
|
|
{
|
|
!outerTopSlot &&
|
|
!outerTopSlot &&
|