diff --git a/README.md b/README.md index 38a8010b..7a572369 100644 --- a/README.md +++ b/README.md @@ -54,58 +54,58 @@ online example: https://tree-select-react-component.vercel.app/ ### TreeSelect props -| name | description | type | default | -| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------- | -| className | additional css class of root dom node | String | '' | -| prefixCls | prefix class | String | '' | -| animation | dropdown animation name. only support slide-up now | String | '' | -| transitionName | dropdown css animation name | String | '' | -| choiceTransitionName | css animation name for selected items at multiple mode | String | '' | -| dropdownMatchSelectWidth | whether dropdown's with is same with select. Default set `min-width` same as input | bool | true | -| dropdownClassName | additional className applied to dropdown | String | - | -| dropdownStyle | additional style applied to dropdown | Object | {} | -| onDropdownVisibleChange | control dropdown visible | function | `() => { return true; }` | -| notFoundContent | specify content to show when no result matches. | String | 'Not Found' | -| showSearch | whether show search input in single mode | bool | true | -| allowClear | whether allowClear | bool | false | -| maxTagTextLength | max tag text length to show | number | - | -| maxTagCount | max tag count to show | number | - | -| maxCount | Limit the maximum number of items that can be selected in multiple mode | number | - | -| maxTagPlaceholder | placeholder for omitted values | ReactNode/function(omittedValues) | - | -| multiple | whether multiple select (true when enable treeCheckable) | bool | false | -| disabled | whether disabled select | bool | false | -| searchValue | work with `onSearch` to make search value controlled. | string | '' | -| defaultValue | initial selected treeNode(s) | same as value type | - | -| value | current selected treeNode(s). | normal: String/Array<String>. labelInValue: {value:String,label:React.Node}/Array<{value,label}>. treeCheckStrictly(halfChecked default false): {value:String,label:React.Node, halfChecked}/Array<{value,label,halfChecked}>. | - | -| labelInValue | whether to embed label in value, see above value type | Bool | false | -| onChange | called when select treeNode or input value change | function(value, label(null), extra) | - | -| onSelect | called when select treeNode | function(value, node, extra) | - | -| onSearch | called when input changed | function | - | -| onTreeExpand | called when tree node expand | function(expandedKeys) | - | -| onPopupScroll | called when popup scroll | function(event) | - | -| showCheckedStrategy | `TreeSelect.SHOW_ALL`: show all checked treeNodes (Include parent treeNode). `TreeSelect.SHOW_PARENT`: show checked treeNodes (Just show parent treeNode). Default just show child. | enum{TreeSelect.SHOW_ALL, TreeSelect.SHOW_PARENT, TreeSelect.SHOW_CHILD } | TreeSelect.SHOW_CHILD | -| treeIcon | show tree icon | bool | false | -| treeLine | show tree line | bool | false | -| treeDefaultExpandAll | default expand all treeNode | bool | false | -| treeDefaultExpandedKeys | default expanded treeNode keys | Array<String> | - | -| treeExpandedKeys | set tree expanded keys | Array<String> | - | -| treeExpandAction | Tree open logic, optional: false \| `click` \| `doubleClick`, same as `expandAction` of `rc-tree` | string \| boolean | `click` | -| treeCheckable | whether tree show checkbox (select callback will not fire) | bool | false | -| treeCheckStrictly | check node precisely, parent and children nodes are not associated | bool | false | -| filterTreeNode | whether filter treeNodes by input value. default filter by treeNode's treeNodeFilterProp prop's value | bool/Function(inputValue:string, treeNode:TreeNode) | Function | -| treeNodeFilterProp | which prop value of treeNode will be used for filter if filterTreeNode return true | String | 'value' | -| treeNodeLabelProp | which prop value of treeNode will render as content of select | String | 'title' | -| treeData | treeNodes data Array, if set it then you need not to construct children TreeNode. (value should be unique across the whole array) | array<{value,label,children, [disabled,selectable]}> | [] | -| treeDataSimpleMode | enable simple mode of treeData.(treeData should be like this: [{id:1, pId:0, value:'1', label:"test1",...},...], `pId` is parent node's id) | bool/object{id:'id', pId:'pId', rootPId:null} | false | -| treeTitleRender | Custom render nodes | (nodeData: OptionType) => ReactNode | -| loadData | load data asynchronously | function(node) | - | -| getPopupContainer | container which popup select menu rendered into | function(trigger:Node):Node | function(){return document.body;} | -| autoClearSearchValue | auto clear search input value when multiple select is selected/deselected | boolean | true | -| suffixIcon | specify the select arrow icon | ReactNode \| (props: TreeProps) => ReactNode | - | -| clearIcon | specify the clear icon | ReactNode \| (props: TreeProps) => ReactNode | - | -| removeIcon | specify the remove icon | ReactNode \| (props: TreeProps) => ReactNode | - | -| switcherIcon | specify the switcher icon | ReactNode \| (props: TreeProps) => ReactNode | - | -| virtual | Disable virtual when `false` | false | - | +| name | description | type | default | +| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------- | +| className | additional css class of root dom node | String | '' | +| prefixCls | prefix class | String | '' | +| animation | dropdown animation name. only support slide-up now | String | '' | +| transitionName | dropdown css animation name | String | '' | +| choiceTransitionName | css animation name for selected items at multiple mode | String | '' | +| popupMatchSelectWidth | whether dropdown's with is same with select. Default set `min-width` same as input | bool | true | +| dropdownClassName | additional className applied to dropdown | String | - | +| dropdownStyle | additional style applied to dropdown | Object | {} | +| onPopupVisibleChange | control dropdown visible | function | `() => { return true; }` | +| notFoundContent | specify content to show when no result matches. | String | 'Not Found' | +| showSearch | whether show search input in single mode | bool | true | +| allowClear | whether allowClear | bool | false | +| maxTagTextLength | max tag text length to show | number | - | +| maxTagCount | max tag count to show | number | - | +| maxCount | Limit the maximum number of items that can be selected in multiple mode | number | - | +| maxTagPlaceholder | placeholder for omitted values | ReactNode/function(omittedValues) | - | +| multiple | whether multiple select (true when enable treeCheckable) | bool | false | +| disabled | whether disabled select | bool | false | +| searchValue | work with `onSearch` to make search value controlled. | string | '' | +| defaultValue | initial selected treeNode(s) | same as value type | - | +| value | current selected treeNode(s). | normal: String/Array<String>. labelInValue: {value:String,label:React.Node}/Array<{value,label}>. treeCheckStrictly(halfChecked default false): {value:String,label:React.Node, halfChecked}/Array<{value,label,halfChecked}>. | - | +| labelInValue | whether to embed label in value, see above value type | Bool | false | +| onChange | called when select treeNode or input value change | function(value, label(null), extra) | - | +| onSelect | called when select treeNode | function(value, node, extra) | - | +| onSearch | called when input changed | function | - | +| onTreeExpand | called when tree node expand | function(expandedKeys) | - | +| onPopupScroll | called when popup scroll | function(event) | - | +| showCheckedStrategy | `TreeSelect.SHOW_ALL`: show all checked treeNodes (Include parent treeNode). `TreeSelect.SHOW_PARENT`: show checked treeNodes (Just show parent treeNode). Default just show child. | enum{TreeSelect.SHOW_ALL, TreeSelect.SHOW_PARENT, TreeSelect.SHOW_CHILD } | TreeSelect.SHOW_CHILD | +| treeIcon | show tree icon | bool | false | +| treeLine | show tree line | bool | false | +| treeDefaultExpandAll | default expand all treeNode | bool | false | +| treeDefaultExpandedKeys | default expanded treeNode keys | Array<String> | - | +| treeExpandedKeys | set tree expanded keys | Array<String> | - | +| treeExpandAction | Tree open logic, optional: false \| `click` \| `doubleClick`, same as `expandAction` of `rc-tree` | string \| boolean | `click` | +| treeCheckable | whether tree show checkbox (select callback will not fire) | bool | false | +| treeCheckStrictly | check node precisely, parent and children nodes are not associated | bool | false | +| filterTreeNode | whether filter treeNodes by input value. default filter by treeNode's treeNodeFilterProp prop's value | bool/Function(inputValue:string, treeNode:TreeNode) | Function | +| treeNodeFilterProp | which prop value of treeNode will be used for filter if filterTreeNode return true | String | 'value' | +| treeNodeLabelProp | which prop value of treeNode will render as content of select | String | 'title' | +| treeData | treeNodes data Array, if set it then you need not to construct children TreeNode. (value should be unique across the whole array) | array<{value,label,children, [disabled,selectable]}> | [] | +| treeDataSimpleMode | enable simple mode of treeData.(treeData should be like this: [{id:1, pId:0, value:'1', label:"test1",...},...], `pId` is parent node's id) | bool/object{id:'id', pId:'pId', rootPId:null} | false | +| treeTitleRender | Custom render nodes | (nodeData: OptionType) => ReactNode | +| loadData | load data asynchronously | function(node) | - | +| getPopupContainer | container which popup select menu rendered into | function(trigger:Node):Node | function(){return document.body;} | +| autoClearSearchValue | auto clear search input value when multiple select is selected/deselected | boolean | true | +| suffixIcon | specify the select arrow icon | ReactNode \| (props: TreeProps) => ReactNode | - | +| clearIcon | specify the clear icon | ReactNode \| (props: TreeProps) => ReactNode | - | +| removeIcon | specify the remove icon | ReactNode \| (props: TreeProps) => ReactNode | - | +| switcherIcon | specify the switcher icon | ReactNode \| (props: TreeProps) => ReactNode | - | +| virtual | Disable virtual when `false` | false | - | ### TreeNode props diff --git a/assets/select.less b/assets/select.less index 2e473db4..a71d5489 100644 --- a/assets/select.less +++ b/assets/select.less @@ -1,3 +1,3 @@ -@import '~rc-select/assets/index'; +@import '~@rc-component/select/assets/index'; @select-prefix: ~'rc-tree-select'; \ No newline at end of file diff --git a/examples/basic.tsx b/examples/basic.tsx index 4b6b8cb4..0346307b 100644 --- a/examples/basic.tsx +++ b/examples/basic.tsx @@ -124,7 +124,7 @@ class Demo extends React.Component { console.log(args); }; - onDropdownVisibleChange = visible => { + onPopupVisibleChange = visible => { const { value } = this.state; console.log(visible, value); if (Array.isArray(value) && value.length > 1 && value.length < 3) { @@ -205,8 +205,8 @@ class Demo extends React.Component { console.log('onChange', val, ...args); this.setState({ value: val }); }} - onDropdownVisibleChange={v => { - console.log('single onDropdownVisibleChange', v); + onPopupVisibleChange={v => { + console.log('single onPopupVisibleChange', v); this.setState({ tsOpen: v, }); @@ -259,11 +259,11 @@ class Demo extends React.Component { choiceTransitionName="rc-tree-select-selection__choice-zoom" style={{ width: 300 }} // dropdownStyle={{ height: 200, overflow: 'auto' }} - dropdownAlign={{ + popupAlign={{ overflow: { adjustY: 0, adjustX: 0 }, offset: [0, 2], }} - onDropdownVisibleChange={this.onDropdownVisibleChange} + onPopupVisibleChange={this.onPopupVisibleChange} placeholder={<i>请下拉选择</i>} treeLine maxTagTextLength={10} @@ -327,7 +327,7 @@ class Demo extends React.Component { <h2>Testing in extreme conditions (Boundary conditions test) </h2> <TreeSelect style={{ width: 200 }} - dropdownStyle={{ maxHeight: 200, overflow: 'auto' }} + popupStyle={{ maxHeight: 200, overflow: 'auto' }} defaultValue="leaf1" multiple treeCheckable diff --git a/examples/custom-icons.tsx b/examples/custom-icons.tsx index 4f4ebfda..7a5d66d2 100644 --- a/examples/custom-icons.tsx +++ b/examples/custom-icons.tsx @@ -86,7 +86,7 @@ function Demo() { placeholder={<span>Please Select</span>} transitionName="rc-tree-select-dropdown-slide-up" style={{ width: 300 }} - dropdownStyle={{ maxHeight: 200, overflow: 'auto', zIndex: 1500 }} + popupStyle={{ maxHeight: 200, overflow: 'auto', zIndex: 1500 }} showSearch allowClear {...iconProps} @@ -99,7 +99,7 @@ function Demo() { placeholder={<span>Please Select</span>} transitionName="rc-tree-select-dropdown-slide-up" style={{ width: 300 }} - dropdownStyle={{ maxHeight: 200, overflow: 'auto', zIndex: 1500 }} + popupStyle={{ maxHeight: 200, overflow: 'auto', zIndex: 1500 }} showSearch allowClear {...iconPropsFunction} diff --git a/examples/filter.tsx b/examples/filter.tsx index 8a7881a0..28ca57e8 100644 --- a/examples/filter.tsx +++ b/examples/filter.tsx @@ -82,7 +82,7 @@ class Demo extends React.Component { <h2>use treeDataSimpleMode</h2> <TreeSelect style={{ width: 300 }} - dropdownStyle={{ maxHeight: 200, overflow: 'auto' }} + popupStyle={{ maxHeight: 200, overflow: 'auto' }} placeholder={<i>请下拉选择</i>} treeLine maxTagTextLength={10} diff --git a/examples/form.tsx b/examples/form.tsx index 17464cd5..7a391f9b 100644 --- a/examples/form.tsx +++ b/examples/form.tsx @@ -1,8 +1,8 @@ import React, { Component } from 'react'; -import Select from 'rc-select'; +import Select from '@rc-component/select'; import Form, { useForm, Field } from 'rc-field-form'; import TreeSelect from '../src'; -import 'rc-select/assets/index.less'; +import '@rc-component/select/assets/index.less'; import '../assets/index.less'; import { gData } from './utils/dataUtil'; diff --git a/examples/width.tsx b/examples/width.tsx index 8a7121f5..922a287e 100644 --- a/examples/width.tsx +++ b/examples/width.tsx @@ -4,7 +4,7 @@ import TreeSelect, { TreeNode } from '../src'; function Demo() { return ( - <TreeSelect style={{ width: 120 }} dropdownMatchSelectWidth={false} treeDefaultExpandAll> + <TreeSelect style={{ width: 120 }} popupMatchSelectWidth={false} treeDefaultExpandAll> <TreeNode value="parent 1" title="parent 1"> <TreeNode value="parent 1-0 sdfsdfsdsdfsd" title="parent 1-0 sdfsdfsd"> <TreeNode value="leaf1 sdfsdf" title="leaf1" /> diff --git a/now.json b/now.json deleted file mode 100644 index f0ac9cc4..00000000 --- a/now.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "version": 2, - "name": "rc-tree-select", - "builds": [ - { - "src": "package.json", - "use": "@now/static-build", - "config": { "distDir": "dist" } - } - ] -} diff --git a/package.json b/package.json index 3f06ab14..f9eb5ad9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "rc-tree-select", - "version": "5.27.0", + "name": "@rc-component/tree-select", + "version": "1.0.0", "description": "tree-select ui component for react", "keywords": [ "react", @@ -35,7 +35,7 @@ "lint": "eslint src/ examples/ --ext .tsx,.ts,.jsx,.js", "now-build": "npm run build", "prepare": "husky && dumi setup", - "prepublishOnly": "npm run compile && np --yolo --no-publish --any-branch", + "prepublishOnly": "npm run compile && rc-np", "prettier": "prettier '{src,tests}/**/*.{ts,tsx}' 'tests/**/*.js' --write", "start": "dumi dev", "test": "rc-test" @@ -44,15 +44,15 @@ "*": "prettier --write --ignore-unknown" }, "dependencies": { - "@babel/runtime": "^7.25.7", "classnames": "2.x", - "rc-select": "~14.16.2", - "rc-tree": "~5.13.0", - "rc-util": "^5.43.0" + "@rc-component/select": "~1.0.0", + "rc-tree": "~5.13.1", + "@rc-component/util": "^1.2.1" }, "devDependencies": { - "@rc-component/father-plugin": "^1.1.0", - "@rc-component/trigger": "^1.18.3", + "@rc-component/father-plugin": "^2.0.2", + "@rc-component/np": "^1.0.3", + "@rc-component/trigger": "^3.0.0", "@testing-library/react": "^12.1.5", "@types/jest": "^29.5.13", "@types/node": "^22.7.5", @@ -73,7 +73,6 @@ "glob": "^11.0.0", "husky": "^9.1.6", "lint-staged": "^15.2.10", - "np": "^10.0.7", "prettier": "^3.3.3", "rc-dialog": "^9.6.0", "rc-field-form": "^2.4.0", diff --git a/src/OptionList.tsx b/src/OptionList.tsx index 5b53047e..b242f505 100644 --- a/src/OptionList.tsx +++ b/src/OptionList.tsx @@ -1,17 +1,17 @@ -import { useBaseProps } from 'rc-select'; -import type { RefOptionListProps } from 'rc-select/lib/OptionList'; +import { useBaseProps } from '@rc-component/select'; +import type { RefOptionListProps } from '@rc-component/select/lib/OptionList'; import type { TreeProps } from 'rc-tree'; import Tree from 'rc-tree'; import { UnstableContext } from 'rc-tree'; import type { EventDataNode, ScrollTo } from 'rc-tree/lib/interface'; -import KeyCode from 'rc-util/lib/KeyCode'; -import useMemo from 'rc-util/lib/hooks/useMemo'; +import KeyCode from '@rc-component/util/lib/KeyCode'; +import useMemo from '@rc-component/util/lib/hooks/useMemo'; import * as React from 'react'; import LegacyContext from './LegacyContext'; import TreeSelectContext from './TreeSelectContext'; import type { DataNode, Key, SafeKey } from './interface'; import { getAllKeys, isCheckDisabled } from './utils/valueUtil'; -import { useEvent } from 'rc-util'; +import { useEvent } from '@rc-component/util'; const HIDDEN_STYLE = { width: 0, @@ -43,7 +43,7 @@ const OptionList: React.ForwardRefRenderFunction<ReviseRefOptionListProps> = (_, treeData, fieldNames, onSelect, - dropdownMatchSelectWidth, + popupMatchSelectWidth, treeExpandAction, treeTitleRender, onPopupScroll, @@ -263,6 +263,7 @@ const OptionList: React.ForwardRefRenderFunction<ReviseRefOptionListProps> = (_, } setActiveKey(nextActiveKey); + // eslint-disable-next-line react-hooks/exhaustive-deps }, [open, searchValue]); // ========================= Keyboard ========================= @@ -305,6 +306,7 @@ const OptionList: React.ForwardRefRenderFunction<ReviseRefOptionListProps> = (_, const hasLoadDataFn = useMemo( () => (searchValue ? false : true), + // eslint-disable-next-line react-hooks/exhaustive-deps [searchValue, treeExpandedKeys || expandedKeys], ([preSearchValue], [nextSearchValue, nextExcludeSearchExpandedKeys]) => preSearchValue !== nextSearchValue && !!(nextSearchValue || nextExcludeSearchExpandedKeys), @@ -347,7 +349,7 @@ const OptionList: React.ForwardRefRenderFunction<ReviseRefOptionListProps> = (_, height={listHeight} itemHeight={listItemHeight} itemScrollOffset={listItemScrollOffset} - virtual={virtual !== false && dropdownMatchSelectWidth !== false} + virtual={virtual !== false && popupMatchSelectWidth !== false} multiple={multiple} icon={treeIcon} showIcon={showTreeIcon} diff --git a/src/TreeSelect.tsx b/src/TreeSelect.tsx index 1a8a938d..ac3d538c 100644 --- a/src/TreeSelect.tsx +++ b/src/TreeSelect.tsx @@ -1,11 +1,10 @@ -import type { BaseSelectPropsWithoutPrivate, BaseSelectRef } from 'rc-select'; -import { BaseSelect } from 'rc-select'; -import useId from 'rc-select/lib/hooks/useId'; +import type { BaseSelectPropsWithoutPrivate, BaseSelectRef } from '@rc-component/select'; +import { BaseSelect } from '@rc-component/select'; +import useId from '@rc-component/select/lib/hooks/useId'; import type { IconType } from 'rc-tree/lib/interface'; import type { ExpandAction } from 'rc-tree/lib/Tree'; import { conductCheck } from 'rc-tree/lib/utils/conductUtil'; -import useMergedState from 'rc-util/lib/hooks/useMergedState'; -import warning from 'rc-util/lib/warning'; +import useMergedState from '@rc-component/util/lib/hooks/useMergedState'; import * as React from 'react'; import useCache from './hooks/useCache'; import useCheckedKeys from './hooks/useCheckedKeys'; @@ -93,7 +92,7 @@ export interface TreeSelectProps<ValueType = any, OptionType extends DataNode = listHeight?: number; listItemHeight?: number; listItemScrollOffset?: number; - onDropdownVisibleChange?: (open: boolean) => void; + onPopupVisibleChange?: (open: boolean) => void; treeTitleRender?: (node: OptionType) => React.ReactNode; // >>> Tree @@ -163,8 +162,8 @@ const TreeSelect = React.forwardRef<BaseSelectRef, TreeSelectProps>((props, ref) listItemHeight = 20, listItemScrollOffset = 0, - onDropdownVisibleChange, - dropdownMatchSelectWidth = true, + onPopupVisibleChange, + popupMatchSelectWidth = true, // Tree treeLine, @@ -582,22 +581,13 @@ const TreeSelect = React.forwardRef<BaseSelectRef, TreeSelectProps>((props, ref) ); // ========================== Dropdown ========================== - const onInternalDropdownVisibleChange = React.useCallback( + const onInternalPopupVisibleChange = React.useCallback( (open: boolean) => { - if (onDropdownVisibleChange) { - const legacyParam = {}; - - Object.defineProperty(legacyParam, 'documentClickClose', { - get() { - warning(false, 'Second param of `onDropdownVisibleChange` has been removed.'); - return false; - }, - }); - - (onDropdownVisibleChange as any)(open, legacyParam); + if (onPopupVisibleChange) { + onPopupVisibleChange(open); } }, - [onDropdownVisibleChange], + [onPopupVisibleChange], ); // ====================== Display Change ======================== @@ -619,7 +609,7 @@ const TreeSelect = React.forwardRef<BaseSelectRef, TreeSelectProps>((props, ref) const treeSelectContext = React.useMemo<TreeSelectContextProps>(() => { return { virtual, - dropdownMatchSelectWidth, + popupMatchSelectWidth, listHeight, listItemHeight, listItemScrollOffset, @@ -636,7 +626,7 @@ const TreeSelect = React.forwardRef<BaseSelectRef, TreeSelectProps>((props, ref) }; }, [ virtual, - dropdownMatchSelectWidth, + popupMatchSelectWidth, listHeight, listItemHeight, listItemScrollOffset, @@ -716,8 +706,8 @@ const TreeSelect = React.forwardRef<BaseSelectRef, TreeSelectProps>((props, ref) // >>> Options OptionList={OptionList} emptyOptions={!mergedTreeData.length} - onDropdownVisibleChange={onInternalDropdownVisibleChange} - dropdownMatchSelectWidth={dropdownMatchSelectWidth} + onPopupVisibleChange={onInternalPopupVisibleChange} + popupMatchSelectWidth={popupMatchSelectWidth} /> </LegacyContext.Provider> </TreeSelectContext.Provider> diff --git a/src/TreeSelectContext.ts b/src/TreeSelectContext.ts index fcb2eba0..f2545071 100644 --- a/src/TreeSelectContext.ts +++ b/src/TreeSelectContext.ts @@ -5,7 +5,7 @@ import type useDataEntities from './hooks/useDataEntities'; export interface TreeSelectContextProps { virtual?: boolean; - dropdownMatchSelectWidth?: boolean | number; + popupMatchSelectWidth?: boolean | number; listHeight: number; listItemHeight: number; listItemScrollOffset?: number; diff --git a/src/hooks/useDataEntities.ts b/src/hooks/useDataEntities.ts index 95e082d0..709b4321 100644 --- a/src/hooks/useDataEntities.ts +++ b/src/hooks/useDataEntities.ts @@ -2,7 +2,7 @@ import * as React from 'react'; import { convertDataToEntities } from 'rc-tree/lib/utils/treeUtil'; import type { DataEntity } from 'rc-tree/lib/interface'; import type { SafeKey, FieldNames } from '../interface'; -import warning from 'rc-util/lib/warning'; +import warning from '@rc-component/util/lib/warning'; import { isNil } from '../utils/valueUtil'; export default (treeData: any, fieldNames: FieldNames) => diff --git a/src/utils/legacyUtil.tsx b/src/utils/legacyUtil.tsx index b670f9a6..d7deef09 100644 --- a/src/utils/legacyUtil.tsx +++ b/src/utils/legacyUtil.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; -import toArray from 'rc-util/lib/Children/toArray'; -import warning from 'rc-util/lib/warning'; +import toArray from '@rc-component/util/lib/Children/toArray'; +import warning from '@rc-component/util/lib/warning'; import type { DataNode, ChangeEventExtra, diff --git a/src/utils/warningPropsUtil.ts b/src/utils/warningPropsUtil.ts index 11c07d64..7ca3050d 100644 --- a/src/utils/warningPropsUtil.ts +++ b/src/utils/warningPropsUtil.ts @@ -1,4 +1,4 @@ -import warning from 'rc-util/lib/warning'; +import warning from '@rc-component/util/lib/warning'; import type { TreeSelectProps } from '../TreeSelect'; import { toArray } from './valueUtil'; diff --git a/tests/Select.SearchInput.spec.js b/tests/Select.SearchInput.spec.js index cd2d15c3..c2c1cc42 100644 --- a/tests/Select.SearchInput.spec.js +++ b/tests/Select.SearchInput.spec.js @@ -3,7 +3,7 @@ import React, { useState } from 'react'; import { mount } from 'enzyme'; import { render, fireEvent } from '@testing-library/react'; import TreeSelect, { TreeNode } from '../src'; -import KeyCode from 'rc-util/lib/KeyCode'; +import KeyCode from '@rc-component/util/lib/KeyCode'; describe('TreeSelect.SearchInput', () => { it('select item will clean searchInput', () => { diff --git a/tests/Select.maxCount.spec.tsx b/tests/Select.maxCount.spec.tsx index 1f9c74e9..74c8cec7 100644 --- a/tests/Select.maxCount.spec.tsx +++ b/tests/Select.maxCount.spec.tsx @@ -1,5 +1,5 @@ import { render, fireEvent, within } from '@testing-library/react'; -import KeyCode from 'rc-util/lib/KeyCode'; +import KeyCode from '@rc-component/util/lib/KeyCode'; import { keyDown, keyUp } from './util'; import React from 'react'; import TreeSelect from '../src'; @@ -104,7 +104,7 @@ describe('TreeSelect.maxCount', () => { }); it('should respect maxCount when checking parent node in treeCheckable mode', () => { - const treeData = [ + const data = [ { key: '0', value: '0', @@ -120,7 +120,7 @@ describe('TreeSelect.maxCount', () => { const handleChange = jest.fn(); const { container } = render( <TreeSelect - treeData={treeData} + treeData={data} treeCheckable multiple maxCount={2} diff --git a/tests/Select.multiple.spec.js b/tests/Select.multiple.spec.js index 5f2cebca..81a70898 100644 --- a/tests/Select.multiple.spec.js +++ b/tests/Select.multiple.spec.js @@ -1,7 +1,7 @@ /* eslint-disable no-undef */ import { render, fireEvent, within } from '@testing-library/react'; import { mount } from 'enzyme'; -import KeyCode from 'rc-util/lib/KeyCode'; +import KeyCode from '@rc-component/util/lib/KeyCode'; import React from 'react'; import TreeSelect, { TreeNode } from '../src'; import focusTest from './shared/focusTest'; diff --git a/tests/Select.props.spec.js b/tests/Select.props.spec.js index 6055a84a..d49c8b67 100644 --- a/tests/Select.props.spec.js +++ b/tests/Select.props.spec.js @@ -275,26 +275,26 @@ describe('TreeSelect.props', () => { expect(wrapper.find('.rc-tree-select-arrow').length).toBeFalsy(); }); - it('dropdownClassName', () => { + it('popupClassName', () => { const wrapper = mount( createOpenSelect({ - dropdownClassName: 'test-dropdownClassName', + popupClassName: 'test-popupClassName', }), ); - expect(wrapper.find('.test-dropdownClassName').length).toBeTruthy(); + expect(wrapper.find('.test-popupClassName').length).toBeTruthy(); }); - it('dropdownStyle', () => { + it('popupStyle', () => { const style = { background: 'red', }; const wrapper = mount( createOpenSelect({ - dropdownClassName: 'test-dropdownClassName', - dropdownStyle: style, + popupClassName: 'test-popupClassName', + popupStyle: style, }), ); - expect(wrapper.find('.test-dropdownClassName').first().props().style).toEqual( + expect(wrapper.find('.test-popupClassName').first().props().style).toEqual( expect.objectContaining(style), ); }); @@ -556,7 +556,7 @@ describe('TreeSelect.props', () => { expect(onSelect).toHaveBeenCalledWith('smart', nodeMatcher(0)); }); - it('dropdownMatchSelectWidth={false} should turn off virtual list', () => { + it('popupMatchSelectWidth={false} should turn off virtual list', () => { const wrapper = mount( <TreeSelect style={{ width: 120 }} open treeDefaultExpandAll> <TreeNode value="parent 1" title="parent 1"> @@ -583,7 +583,7 @@ describe('TreeSelect.props', () => { </TreeSelect>, ); expect(wrapper.find(Tree).props().virtual).toBe(true); - wrapper.setProps({ dropdownMatchSelectWidth: false }); + wrapper.setProps({ popupMatchSelectWidth: false }); expect(wrapper.find(Tree).props().virtual).toBe(false); }); }); diff --git a/tests/Select.spec.tsx b/tests/Select.spec.tsx index d7f52497..d466870c 100644 --- a/tests/Select.spec.tsx +++ b/tests/Select.spec.tsx @@ -1,11 +1,11 @@ import { render } from '@testing-library/react'; import { mount } from 'enzyme'; -import KeyCode from 'rc-util/lib/KeyCode'; +import KeyCode from '@rc-component/util/lib/KeyCode'; import React from 'react'; import TreeSelect, { TreeNode } from '../src'; import focusTest from './shared/focusTest'; import { selectNode } from './util'; -import type { BaseSelectRef } from 'rc-select'; +import type { BaseSelectRef } from '@rc-component/select'; const mockScrollTo = jest.fn(); @@ -60,17 +60,18 @@ describe('TreeSelect.basic', () => { }); it('renders tree correctly', () => { - const wrapper = mount( + const { container } = render( <TreeSelect - dropdownClassName="awesome" - dropdownStyle={{ width: 300 }} + popupClassName="awesome" + popupStyle={{ width: 300 }} multiple treeCheckable treeDefaultExpandAll treeData={treeData} + open />, ); - expect(wrapper.render()).toMatchSnapshot(); + expect(container).toMatchSnapshot(); }); it('not crash if no children', () => { diff --git a/tests/Select.tree.spec.js b/tests/Select.tree.spec.js index 914df004..71dbae7a 100644 --- a/tests/Select.tree.spec.js +++ b/tests/Select.tree.spec.js @@ -1,7 +1,7 @@ /* eslint-disable no-undef, react/no-multi-comp, no-console */ import React from 'react'; import { mount } from 'enzyme'; -import { resetWarned } from 'rc-util/lib/warning'; +import { resetWarned } from '@rc-component/util/lib/warning'; import TreeSelect, { TreeNode as SelectNode } from '../src'; describe('TreeSelect.tree', () => { diff --git a/tests/Select.warning.spec.js b/tests/Select.warning.spec.js index 780c1ec0..8ab3f83b 100644 --- a/tests/Select.warning.spec.js +++ b/tests/Select.warning.spec.js @@ -1,6 +1,6 @@ import React from 'react'; import { mount } from 'enzyme'; -import { resetWarned } from 'rc-util/lib/warning'; +import { resetWarned } from '@rc-component/util/lib/warning'; import TreeSelect from '../src'; describe('TreeSelect.warning', () => { @@ -56,22 +56,6 @@ describe('TreeSelect.warning', () => { ); }); - it('documentClickClose should removed', () => { - const wrapper = mount( - <TreeSelect - onDropdownVisibleChange={(_, { documentClickClose }) => { - expect(documentClickClose).toBeFalsy(); - }} - />, - ); - - wrapper.openSelect(); - - expect(spy).toHaveBeenCalledWith( - 'Warning: Second param of `onDropdownVisibleChange` has been removed.', - ); - }); - it('warns on using maxCount with showCheckedStrategy=SHOW_ALL when treeCheckStrictly=false', () => { mount(<TreeSelect maxCount={2} showCheckedStrategy="SHOW_ALL" />); expect(spy).toHaveBeenCalledWith( diff --git a/tests/__snapshots__/Select.checkable.spec.tsx.snap b/tests/__snapshots__/Select.checkable.spec.tsx.snap index 7ee92e82..5fe525ec 100644 --- a/tests/__snapshots__/Select.checkable.spec.tsx.snap +++ b/tests/__snapshots__/Select.checkable.spec.tsx.snap @@ -250,7 +250,7 @@ exports[`TreeSelect.checkable uncheck remove by selector not treeCheckStrictly 1 </div> <div aria-expanded="false" - class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-checkbox-checked rc-tree-select-tree-treenode-leaf-last" + class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-checkbox-checked rc-tree-select-tree-treenode-leaf-last rc-tree-select-tree-treenode-leaf" draggable="false" role="treeitem" > @@ -472,7 +472,7 @@ exports[`TreeSelect.checkable uncheck remove by selector not treeCheckStrictly 2 </div> <div aria-expanded="false" - class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-leaf-last" + class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-leaf-last rc-tree-select-tree-treenode-leaf" draggable="false" role="treeitem" > @@ -772,7 +772,7 @@ exports[`TreeSelect.checkable uncheck remove by tree check 1`] = ` </div> <div aria-expanded="true" - class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-open rc-tree-select-tree-treenode-checkbox-checked rc-tree-select-tree-treenode-leaf-last filter-node" + class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-open rc-tree-select-tree-treenode-checkbox-checked rc-tree-select-tree-treenode-leaf-last filter-node rc-tree-select-tree-treenode-leaf" draggable="false" role="treeitem" > @@ -991,7 +991,7 @@ exports[`TreeSelect.checkable uncheck remove by tree check 2`] = ` </div> <div aria-expanded="true" - class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-open rc-tree-select-tree-treenode-leaf-last filter-node" + class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-open rc-tree-select-tree-treenode-leaf-last filter-node rc-tree-select-tree-treenode-leaf" draggable="false" role="treeitem" > diff --git a/tests/__snapshots__/Select.spec.tsx.snap b/tests/__snapshots__/Select.spec.tsx.snap index 965c177a..fdc29aa1 100644 --- a/tests/__snapshots__/Select.spec.tsx.snap +++ b/tests/__snapshots__/Select.spec.tsx.snap @@ -87,7 +87,7 @@ exports[`TreeSelect.basic render renders TreeNode correctly 1`] = ` > <div aria-expanded="false" - class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-active" + class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-active rc-tree-select-tree-treenode-leaf" draggable="false" role="treeitem" > @@ -141,7 +141,7 @@ exports[`TreeSelect.basic render renders TreeNode correctly 1`] = ` </div> <div aria-expanded="false" - class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close" + class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-leaf" draggable="false" role="treeitem" > @@ -172,7 +172,7 @@ exports[`TreeSelect.basic render renders TreeNode correctly 1`] = ` </div> <div aria-expanded="false" - class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-leaf-last" + class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-leaf-last rc-tree-select-tree-treenode-leaf" draggable="false" role="treeitem" > @@ -299,7 +299,7 @@ exports[`TreeSelect.basic render renders TreeNode correctly with falsy child 1`] > <div aria-expanded="false" - class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-active" + class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-active rc-tree-select-tree-treenode-leaf" draggable="false" role="treeitem" > @@ -353,7 +353,7 @@ exports[`TreeSelect.basic render renders TreeNode correctly with falsy child 1`] </div> <div aria-expanded="false" - class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close" + class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-leaf" draggable="false" role="treeitem" > @@ -384,7 +384,7 @@ exports[`TreeSelect.basic render renders TreeNode correctly with falsy child 1`] </div> <div aria-expanded="false" - class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-leaf-last" + class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-leaf-last rc-tree-select-tree-treenode-leaf" draggable="false" role="treeitem" > @@ -519,55 +519,254 @@ exports[`TreeSelect.basic render renders disabled correctly 1`] = ` `; exports[`TreeSelect.basic render renders tree correctly 1`] = ` -<div - class="rc-tree-select rc-tree-select-multiple rc-tree-select-show-search" -> +<div> <div - class="rc-tree-select-selector" + class="rc-tree-select rc-tree-select-multiple rc-tree-select-open rc-tree-select-show-search" > - <span - class="rc-tree-select-selection-wrap" + <div + class="rc-tree-select-selector" > - <div - class="rc-tree-select-selection-overflow" + <span + class="rc-tree-select-selection-wrap" > <div - class="rc-tree-select-selection-overflow-item rc-tree-select-selection-overflow-item-suffix" - style="opacity: 1;" + class="rc-tree-select-selection-overflow" > <div - class="rc-tree-select-selection-search" - style="width: 0px;" + class="rc-tree-select-selection-overflow-item rc-tree-select-selection-overflow-item-suffix" + style="opacity: 1;" > - <input - aria-autocomplete="list" - aria-controls="rc_select_TEST_OR_SSR_list" - aria-expanded="false" - aria-haspopup="listbox" - aria-owns="rc_select_TEST_OR_SSR_list" - autocomplete="off" - class="rc-tree-select-selection-search-input" - id="rc_select_TEST_OR_SSR" - readonly="" - role="combobox" - style="opacity: 0;" - type="search" - unselectable="on" - value="" - /> - <span + <div + class="rc-tree-select-selection-search" + style="width: 0px;" + > + <input + aria-autocomplete="list" + aria-controls="rc_select_TEST_OR_SSR_list" + aria-expanded="true" + aria-haspopup="listbox" + aria-owns="rc_select_TEST_OR_SSR_list" + autocomplete="off" + class="rc-tree-select-selection-search-input" + id="rc_select_TEST_OR_SSR" + role="combobox" + style="" + type="search" + value="" + /> + <span + aria-hidden="true" + class="rc-tree-select-selection-search-mirror" + > + + + </span> + </div> + </div> + </div> + <span + class="rc-tree-select-selection-placeholder" + /> + </span> + </div> + <div + class="rc-tree-select-dropdown awesome rc-tree-select-dropdown-placement-bottomLeft" + style="--arrow-x: 0px; --arrow-y: 0px; left: -1000vw; top: -1000vh; box-sizing: border-box; width: 300px;" + > + <div> + <div> + <span + aria-live="assertive" + style="width: 0px; height: 0px; display: flex; overflow: hidden; opacity: 0; border: 0px; padding: 0px; margin: 0px;" + > + 0 + </span> + <div + class="rc-tree-select-tree rc-tree-select-tree-active-focused" + > + <div> + <input + aria-label="for screen reader" + disabled="" + style="width: 0px; height: 0px; display: flex; overflow: hidden; opacity: 0; border: 0px; padding: 0px; margin: 0px;" + value="" + /> + </div> + <div aria-hidden="true" - class="rc-tree-select-selection-search-mirror" + class="rc-tree-select-tree-treenode" + style="position: absolute; pointer-events: none; visibility: hidden; height: 0px; overflow: hidden; border: 0px; padding: 0px;" > - - </span> + <div + class="rc-tree-select-tree-indent" + > + <div + class="rc-tree-select-tree-indent-unit" + /> + </div> + </div> + <div + class="rc-tree-select-tree-list" + role="tree" + style="position: relative;" + > + <div + class="rc-tree-select-tree-list-holder" + style="max-height: 200px; overflow-y: auto;" + > + <div> + <div + class="rc-tree-select-tree-list-holder-inner" + style="display: flex; flex-direction: column;" + > + <div + aria-expanded="false" + class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-active rc-tree-select-tree-treenode-leaf" + draggable="false" + role="treeitem" + > + <span + aria-hidden="true" + class="rc-tree-select-tree-indent" + /> + <span + class="rc-tree-select-tree-switcher rc-tree-select-tree-switcher-noop" + /> + <span + aria-checked="false" + aria-label="Select 0 label" + class="rc-tree-select-tree-checkbox" + role="checkbox" + /> + <span + class="rc-tree-select-tree-node-content-wrapper rc-tree-select-tree-node-content-wrapper-normal" + title="0 label" + > + <span + class="rc-tree-select-tree-iconEle rc-tree-select-tree-icon__docu" + /> + <span + class="rc-tree-select-tree-title" + > + 0 label + </span> + </span> + </div> + <div + aria-expanded="true" + class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-open rc-tree-select-tree-treenode-leaf-last" + draggable="false" + role="treeitem" + > + <span + aria-hidden="true" + class="rc-tree-select-tree-indent" + /> + <span + class="rc-tree-select-tree-switcher rc-tree-select-tree-switcher_open" + /> + <span + aria-checked="false" + aria-label="Select 1 label" + class="rc-tree-select-tree-checkbox" + role="checkbox" + /> + <span + class="rc-tree-select-tree-node-content-wrapper rc-tree-select-tree-node-content-wrapper-open" + title="1 label" + > + <span + class="rc-tree-select-tree-iconEle rc-tree-select-tree-icon__open" + /> + <span + class="rc-tree-select-tree-title" + > + 1 label + </span> + </span> + </div> + <div + aria-expanded="false" + class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-leaf" + draggable="false" + role="treeitem" + > + <span + aria-hidden="true" + class="rc-tree-select-tree-indent" + > + <span + class="rc-tree-select-tree-indent-unit rc-tree-select-tree-indent-unit-end" + /> + </span> + <span + class="rc-tree-select-tree-switcher rc-tree-select-tree-switcher-noop" + /> + <span + aria-checked="false" + aria-label="Select 10 label" + class="rc-tree-select-tree-checkbox" + role="checkbox" + /> + <span + class="rc-tree-select-tree-node-content-wrapper rc-tree-select-tree-node-content-wrapper-normal" + title="10 label" + > + <span + class="rc-tree-select-tree-iconEle rc-tree-select-tree-icon__docu" + /> + <span + class="rc-tree-select-tree-title" + > + 10 label + </span> + </span> + </div> + <div + aria-expanded="false" + class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-leaf-last rc-tree-select-tree-treenode-leaf" + draggable="false" + role="treeitem" + > + <span + aria-hidden="true" + class="rc-tree-select-tree-indent" + > + <span + class="rc-tree-select-tree-indent-unit rc-tree-select-tree-indent-unit-end" + /> + </span> + <span + class="rc-tree-select-tree-switcher rc-tree-select-tree-switcher-noop" + /> + <span + aria-checked="false" + aria-label="Select 11 label" + class="rc-tree-select-tree-checkbox" + role="checkbox" + /> + <span + class="rc-tree-select-tree-node-content-wrapper rc-tree-select-tree-node-content-wrapper-normal" + title="11 label" + > + <span + class="rc-tree-select-tree-iconEle rc-tree-select-tree-icon__docu" + /> + <span + class="rc-tree-select-tree-title" + > + 11 label + </span> + </span> + </div> + </div> + </div> + </div> + </div> </div> </div> </div> - <span - class="rc-tree-select-selection-placeholder" - /> - </span> + </div> </div> </div> `; @@ -687,7 +886,7 @@ exports[`TreeSelect.basic render renders treeDataSimpleMode correctly 1`] = ` </div> <div aria-expanded="false" - class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-leaf-last" + class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-leaf-last rc-tree-select-tree-treenode-leaf" draggable="false" role="treeitem" > @@ -814,7 +1013,7 @@ exports[`TreeSelect.basic search nodes check tree changed by filter 1`] = ` > <div aria-expanded="true" - class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-open rc-tree-select-tree-treenode-active rc-tree-select-tree-treenode-leaf-last filter-node" + class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-open rc-tree-select-tree-treenode-active rc-tree-select-tree-treenode-leaf-last filter-node rc-tree-select-tree-treenode-leaf" draggable="false" role="treeitem" > @@ -937,7 +1136,7 @@ exports[`TreeSelect.basic search nodes check tree changed by filter 2`] = ` > <div aria-expanded="true" - class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-open rc-tree-select-tree-treenode-active" + class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-open rc-tree-select-tree-treenode-active rc-tree-select-tree-treenode-leaf" draggable="false" role="treeitem" > @@ -964,7 +1163,7 @@ exports[`TreeSelect.basic search nodes check tree changed by filter 2`] = ` </div> <div aria-expanded="false" - class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-leaf-last" + class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-leaf-last rc-tree-select-tree-treenode-leaf" draggable="false" role="treeitem" > @@ -1087,7 +1286,7 @@ exports[`TreeSelect.basic search nodes filter node but not remove then 1`] = ` > <div aria-expanded="false" - class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-active filter-node" + class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-active filter-node rc-tree-select-tree-treenode-leaf" draggable="false" role="treeitem" > @@ -1114,7 +1313,7 @@ exports[`TreeSelect.basic search nodes filter node but not remove then 1`] = ` </div> <div aria-expanded="false" - class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-leaf-last" + class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-leaf-last rc-tree-select-tree-treenode-leaf" draggable="false" role="treeitem" > @@ -1235,7 +1434,7 @@ exports[`TreeSelect.basic search nodes renders search input 1`] = ` > <div aria-expanded="false" - class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-active" + class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-active rc-tree-select-tree-treenode-leaf" draggable="false" role="treeitem" > @@ -1262,7 +1461,7 @@ exports[`TreeSelect.basic search nodes renders search input 1`] = ` </div> <div aria-expanded="false" - class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-leaf-last" + class="rc-tree-select-tree-treenode rc-tree-select-tree-treenode-switcher-close rc-tree-select-tree-treenode-leaf-last rc-tree-select-tree-treenode-leaf" draggable="false" role="treeitem" >