@douyinfe/semi-ui 2.3.1 → 2.5.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cascader/__test__/cascader.test.js +24 -0
- package/cascader/_story/cascader.stories.js +73 -0
- package/cascader/index.tsx +5 -2
- package/datePicker/_story/RenderDate/index.js +13 -3
- package/datePicker/_story/RenderFullDate/index.js +36 -14
- package/datePicker/_story/RenderFullDate/index.scss +1 -1
- package/datePicker/_story/datePicker.stories.js +19 -11
- package/datePicker/_story/v2/PanelOpen.jsx +39 -0
- package/datePicker/_story/v2/index.js +2 -1
- package/datePicker/datePicker.tsx +1 -0
- package/dist/css/semi.css +84 -36
- package/dist/css/semi.min.css +1 -1
- package/dist/umd/semi-ui.js +487 -170
- package/dist/umd/semi-ui.js.map +1 -1
- package/dist/umd/semi-ui.min.js +1 -1
- package/dist/umd/semi-ui.min.js.map +1 -1
- package/form/_story/demo.jsx +1 -0
- package/input/index.tsx +1 -0
- package/input/textarea.tsx +6 -4
- package/inputNumber/__test__/inputNumber.test.js +36 -8
- package/lib/cjs/autoComplete/index.d.ts +1 -1
- package/lib/cjs/cascader/index.js +6 -0
- package/lib/cjs/datePicker/datePicker.js +12 -8
- package/lib/cjs/dropdown/index.d.ts +1 -1
- package/lib/cjs/form/baseForm.d.ts +1 -1
- package/lib/cjs/form/field.d.ts +1 -1
- package/lib/cjs/input/index.js +2 -1
- package/lib/cjs/input/textarea.js +5 -3
- package/lib/cjs/navigation/Item.js +1 -1
- package/lib/cjs/navigation/SubNav.js +1 -1
- package/lib/cjs/scrollList/scrollItem.d.ts +5 -1
- package/lib/cjs/scrollList/scrollItem.js +7 -0
- package/lib/cjs/select/index.d.ts +1 -1
- package/lib/cjs/select/index.js +1 -1
- package/lib/cjs/select/option.js +2 -2
- package/lib/cjs/table/Table.d.ts +1 -1
- package/lib/cjs/table/Table.js +17 -7
- package/lib/cjs/table/interface.d.ts +1 -0
- package/lib/cjs/tabs/interface.d.ts +1 -1
- package/lib/cjs/timePicker/TimePicker.d.ts +2 -0
- package/lib/cjs/timePicker/TimePicker.js +4 -4
- package/lib/cjs/timePicker/index.d.ts +1 -0
- package/lib/cjs/tooltip/index.d.ts +1 -1
- package/lib/cjs/tree/index.d.ts +2 -0
- package/lib/cjs/tree/index.js +15 -8
- package/lib/cjs/tree/treeNode.js +10 -1
- package/lib/cjs/treeSelect/index.d.ts +2 -0
- package/lib/cjs/treeSelect/index.js +75 -30
- package/lib/cjs/typography/util.js +0 -1
- package/lib/cjs/upload/fileCard.js +31 -22
- package/lib/cjs/upload/index.d.ts +6 -0
- package/lib/cjs/upload/index.js +15 -8
- package/lib/cjs/upload/interface.d.ts +8 -6
- package/lib/es/autoComplete/index.d.ts +1 -1
- package/lib/es/cascader/index.js +5 -0
- package/lib/es/datePicker/datePicker.js +12 -8
- package/lib/es/dropdown/index.d.ts +1 -1
- package/lib/es/form/baseForm.d.ts +1 -1
- package/lib/es/form/field.d.ts +1 -1
- package/lib/es/input/index.js +2 -1
- package/lib/es/input/textarea.js +5 -3
- package/lib/es/navigation/Item.js +1 -1
- package/lib/es/navigation/SubNav.js +1 -1
- package/lib/es/scrollList/scrollItem.d.ts +5 -1
- package/lib/es/scrollList/scrollItem.js +7 -0
- package/lib/es/select/index.d.ts +1 -1
- package/lib/es/select/index.js +1 -1
- package/lib/es/select/option.js +2 -2
- package/lib/es/table/Table.d.ts +1 -1
- package/lib/es/table/Table.js +19 -7
- package/lib/es/table/interface.d.ts +1 -0
- package/lib/es/tabs/interface.d.ts +1 -1
- package/lib/es/timePicker/TimePicker.d.ts +2 -0
- package/lib/es/timePicker/TimePicker.js +4 -4
- package/lib/es/timePicker/index.d.ts +1 -0
- package/lib/es/tooltip/index.d.ts +1 -1
- package/lib/es/tree/index.d.ts +2 -0
- package/lib/es/tree/index.js +15 -8
- package/lib/es/tree/treeNode.js +9 -1
- package/lib/es/treeSelect/index.d.ts +2 -0
- package/lib/es/treeSelect/index.js +76 -31
- package/lib/es/typography/util.js +0 -1
- package/lib/es/upload/fileCard.js +31 -24
- package/lib/es/upload/index.d.ts +6 -0
- package/lib/es/upload/index.js +14 -8
- package/lib/es/upload/interface.d.ts +8 -6
- package/navigation/Item.tsx +1 -1
- package/navigation/SubNav.tsx +1 -1
- package/package.json +9 -8
- package/scrollList/scrollItem.tsx +10 -3
- package/select/index.tsx +6 -1
- package/select/option.tsx +2 -2
- package/table/Table.tsx +16 -8
- package/table/_story/table.stories.js +1 -0
- package/table/_story/v2/FixedColumnsChange/index.jsx +104 -0
- package/table/_story/v2/FixedHeaderMerge/index.jsx +98 -0
- package/table/_story/v2/FixedZIndex/index.jsx +87 -0
- package/table/_story/v2/defaultFilteredValue.tsx +123 -0
- package/table/_story/v2/index.js +4 -0
- package/table/interface.ts +1 -0
- package/tabs/interface.ts +1 -1
- package/timePicker/TimePicker.tsx +4 -1
- package/timePicker/__test__/timePicker.test.js +42 -3
- package/timePicker/_story/timepicker.stories.js +18 -0
- package/tooltip/_story/tooltip.stories.js +83 -1
- package/tree/__test__/treeMultiple.test.js +94 -0
- package/tree/_story/tree.stories.js +169 -0
- package/tree/index.tsx +12 -5
- package/tree/treeNode.tsx +9 -2
- package/treeSelect/__test__/treeMultiple.test.js +94 -0
- package/treeSelect/__test__/treeSelect.test.js +157 -0
- package/treeSelect/_story/treeSelect.stories.js +242 -0
- package/treeSelect/index.tsx +93 -52
- package/typography/_story/typography.stories.js +8 -0
- package/typography/util.tsx +0 -1
- package/upload/_story/upload.stories.js +22 -6
- package/upload/fileCard.tsx +23 -23
- package/upload/index.tsx +15 -6
- package/upload/interface.ts +7 -5
|
@@ -2170,3 +2170,172 @@ export const RenderFullLabelWithDraggable = () => {
|
|
|
2170
2170
|
RenderFullLabelWithDraggable.story = {
|
|
2171
2171
|
name: 'renderFullLabel with draggable',
|
|
2172
2172
|
};
|
|
2173
|
+
|
|
2174
|
+
export const CheckRelationDemo = () => {
|
|
2175
|
+
const treeData = [
|
|
2176
|
+
{
|
|
2177
|
+
label: 'Asia',
|
|
2178
|
+
value: 'Asia',
|
|
2179
|
+
key: '0',
|
|
2180
|
+
children: [
|
|
2181
|
+
{
|
|
2182
|
+
label: 'China',
|
|
2183
|
+
value: 'China',
|
|
2184
|
+
key: '0-0',
|
|
2185
|
+
children: [
|
|
2186
|
+
{
|
|
2187
|
+
label: 'Beijing',
|
|
2188
|
+
value: 'Beijing',
|
|
2189
|
+
key: '0-0-0',
|
|
2190
|
+
},
|
|
2191
|
+
{
|
|
2192
|
+
label: 'Shanghai',
|
|
2193
|
+
value: 'Shanghai',
|
|
2194
|
+
key: '0-0-1',
|
|
2195
|
+
},
|
|
2196
|
+
{
|
|
2197
|
+
label: 'Chengdu',
|
|
2198
|
+
value: 'Chengdu',
|
|
2199
|
+
key: '0-0-2',
|
|
2200
|
+
},
|
|
2201
|
+
],
|
|
2202
|
+
},
|
|
2203
|
+
{
|
|
2204
|
+
label: 'Japan',
|
|
2205
|
+
value: 'Japan',
|
|
2206
|
+
key: '0-1',
|
|
2207
|
+
children: [
|
|
2208
|
+
{
|
|
2209
|
+
label: 'Osaka',
|
|
2210
|
+
value: 'Osaka',
|
|
2211
|
+
key: '0-1-0'
|
|
2212
|
+
}
|
|
2213
|
+
]
|
|
2214
|
+
},
|
|
2215
|
+
],
|
|
2216
|
+
},
|
|
2217
|
+
{
|
|
2218
|
+
label: 'North America',
|
|
2219
|
+
value: 'North America',
|
|
2220
|
+
key: '1',
|
|
2221
|
+
children: [
|
|
2222
|
+
{
|
|
2223
|
+
label: 'United States',
|
|
2224
|
+
value: 'United States',
|
|
2225
|
+
key: '1-0'
|
|
2226
|
+
},
|
|
2227
|
+
{
|
|
2228
|
+
label: 'Canada',
|
|
2229
|
+
value: 'Canada',
|
|
2230
|
+
key: '1-1'
|
|
2231
|
+
}
|
|
2232
|
+
]
|
|
2233
|
+
}
|
|
2234
|
+
];
|
|
2235
|
+
const [value, setValue] = useState('China');
|
|
2236
|
+
const [value2, setValue2] = useState();
|
|
2237
|
+
const [value3, setValue3] = useState();
|
|
2238
|
+
const style = {
|
|
2239
|
+
width: 260,
|
|
2240
|
+
height: 420,
|
|
2241
|
+
border: '1px solid var(--semi-color-border)'
|
|
2242
|
+
};
|
|
2243
|
+
const handleChange = value => {
|
|
2244
|
+
console.log(value);
|
|
2245
|
+
setValue(value);
|
|
2246
|
+
};
|
|
2247
|
+
const handleChange2 = value => {
|
|
2248
|
+
console.log(value);
|
|
2249
|
+
setValue2(value);
|
|
2250
|
+
};
|
|
2251
|
+
const handleChange3 = value => {
|
|
2252
|
+
console.log(value);
|
|
2253
|
+
setValue3(value);
|
|
2254
|
+
};
|
|
2255
|
+
return (
|
|
2256
|
+
<>
|
|
2257
|
+
<div>checkRelation='unRelated'</div>
|
|
2258
|
+
<Tree
|
|
2259
|
+
treeData={treeData}
|
|
2260
|
+
multiple
|
|
2261
|
+
checkRelation='unRelated'
|
|
2262
|
+
defaultExpandAll
|
|
2263
|
+
style={style}
|
|
2264
|
+
/>
|
|
2265
|
+
<br /><br />
|
|
2266
|
+
<div>checkRelation='unRelated' + 中国节点为 disabled</div>
|
|
2267
|
+
<Tree
|
|
2268
|
+
treeData={treeData1}
|
|
2269
|
+
multiple
|
|
2270
|
+
checkRelation='unRelated'
|
|
2271
|
+
defaultExpandAll
|
|
2272
|
+
style={style}
|
|
2273
|
+
/>
|
|
2274
|
+
<br /><br />
|
|
2275
|
+
<div>checkRelation='unRelated' + 中国节点为 disabled + 严格禁用</div>
|
|
2276
|
+
<Tree
|
|
2277
|
+
treeData={treeData1}
|
|
2278
|
+
multiple
|
|
2279
|
+
checkRelation='unRelated'
|
|
2280
|
+
defaultExpandAll
|
|
2281
|
+
disableStrictly
|
|
2282
|
+
style={style}
|
|
2283
|
+
/>
|
|
2284
|
+
<br /><br />
|
|
2285
|
+
<div>checkRelation='unRelated' + defaultValue 为 China</div>
|
|
2286
|
+
<Tree
|
|
2287
|
+
treeData={treeData}
|
|
2288
|
+
multiple
|
|
2289
|
+
checkRelation='unRelated'
|
|
2290
|
+
defaultExpandAll
|
|
2291
|
+
style={style}
|
|
2292
|
+
defaultValue='China'
|
|
2293
|
+
/>
|
|
2294
|
+
<br /><br />
|
|
2295
|
+
<div>checkRelation='unRelated' + 受控 + value 初始为 China</div>
|
|
2296
|
+
<Tree
|
|
2297
|
+
treeData={treeData}
|
|
2298
|
+
multiple
|
|
2299
|
+
checkRelation='unRelated'
|
|
2300
|
+
defaultExpandAll
|
|
2301
|
+
style={style}
|
|
2302
|
+
value={value}
|
|
2303
|
+
onChange={handleChange}
|
|
2304
|
+
/>
|
|
2305
|
+
<br /><br />
|
|
2306
|
+
<div>checkRelation='unRelated' + 受控 + onChangeWithObject</div>
|
|
2307
|
+
<Tree
|
|
2308
|
+
treeData={treeData}
|
|
2309
|
+
multiple
|
|
2310
|
+
checkRelation='unRelated'
|
|
2311
|
+
defaultExpandAll
|
|
2312
|
+
style={style}
|
|
2313
|
+
value={value2}
|
|
2314
|
+
onChangeWithObject
|
|
2315
|
+
onChange={handleChange2}
|
|
2316
|
+
/>
|
|
2317
|
+
<br /><br />
|
|
2318
|
+
<div>checkRelation='unRelated' + 受控 + leafOnly,此时 leafOnly 失效</div>
|
|
2319
|
+
<Tree
|
|
2320
|
+
leafOnly
|
|
2321
|
+
treeData={treeData}
|
|
2322
|
+
multiple
|
|
2323
|
+
checkRelation='unRelated'
|
|
2324
|
+
defaultExpandAll
|
|
2325
|
+
style={style}
|
|
2326
|
+
value={value3}
|
|
2327
|
+
onChange={handleChange3}
|
|
2328
|
+
/>
|
|
2329
|
+
<br /><br />
|
|
2330
|
+
<div>checkRelation='unRelated' + onSelect </div>
|
|
2331
|
+
<Tree
|
|
2332
|
+
treeData={treeData}
|
|
2333
|
+
multiple
|
|
2334
|
+
checkRelation='unRelated'
|
|
2335
|
+
defaultExpandAll
|
|
2336
|
+
style={style}
|
|
2337
|
+
onSelect={(value,status,node)=>console.log('select', value, status, node)}
|
|
2338
|
+
/>
|
|
2339
|
+
</>
|
|
2340
|
+
);
|
|
2341
|
+
};
|
package/tree/index.tsx
CHANGED
|
@@ -112,6 +112,7 @@ class Tree extends BaseComponent<TreeProps, TreeState> {
|
|
|
112
112
|
onDragStart: PropTypes.func,
|
|
113
113
|
onDrop: PropTypes.func,
|
|
114
114
|
labelEllipsis: PropTypes.bool,
|
|
115
|
+
checkRelation: PropTypes.string,
|
|
115
116
|
'aria-label': PropTypes.string,
|
|
116
117
|
};
|
|
117
118
|
|
|
@@ -133,6 +134,7 @@ class Tree extends BaseComponent<TreeProps, TreeState> {
|
|
|
133
134
|
disableStrictly: false,
|
|
134
135
|
draggable: false,
|
|
135
136
|
autoExpandWhenDragEnter: true,
|
|
137
|
+
checkRelation: 'related',
|
|
136
138
|
};
|
|
137
139
|
|
|
138
140
|
static TreeNode: typeof TreeNode;
|
|
@@ -152,6 +154,7 @@ class Tree extends BaseComponent<TreeProps, TreeState> {
|
|
|
152
154
|
selectedKeys: [],
|
|
153
155
|
checkedKeys: new Set(),
|
|
154
156
|
halfCheckedKeys: new Set(),
|
|
157
|
+
realCheckedKeys: new Set([]),
|
|
155
158
|
motionKeys: new Set([]),
|
|
156
159
|
motionType: 'hide',
|
|
157
160
|
expandedKeys: new Set(props.expandedKeys),
|
|
@@ -409,10 +412,14 @@ class Tree extends BaseComponent<TreeProps, TreeState> {
|
|
|
409
412
|
}
|
|
410
413
|
|
|
411
414
|
if (checkedKeyValues) {
|
|
412
|
-
|
|
415
|
+
if (props.checkRelation === 'unRelated') {
|
|
416
|
+
newState.realCheckedKeys = new Set(checkedKeyValues);
|
|
417
|
+
} else if (props.checkRelation === 'related') {
|
|
418
|
+
const { checkedKeys, halfCheckedKeys } = calcCheckedKeys(checkedKeyValues, keyEntities);
|
|
413
419
|
|
|
414
|
-
|
|
415
|
-
|
|
420
|
+
newState.checkedKeys = checkedKeys;
|
|
421
|
+
newState.halfCheckedKeys = halfCheckedKeys;
|
|
422
|
+
}
|
|
416
423
|
}
|
|
417
424
|
}
|
|
418
425
|
|
|
@@ -422,7 +429,7 @@ class Tree extends BaseComponent<TreeProps, TreeState> {
|
|
|
422
429
|
}
|
|
423
430
|
|
|
424
431
|
// update disableStrictly
|
|
425
|
-
if (treeData && props.disableStrictly) {
|
|
432
|
+
if (treeData && props.disableStrictly && props.checkRelation === 'related') {
|
|
426
433
|
newState.disabledKeys = calcDisabledKeys(keyEntities);
|
|
427
434
|
}
|
|
428
435
|
|
|
@@ -706,7 +713,7 @@ class Tree extends BaseComponent<TreeProps, TreeState> {
|
|
|
706
713
|
const ariaAttr = {
|
|
707
714
|
role: noData ? 'none' : 'tree'
|
|
708
715
|
};
|
|
709
|
-
if (ariaAttr.role === 'tree'){
|
|
716
|
+
if (ariaAttr.role === 'tree') {
|
|
710
717
|
ariaAttr['aria-multiselectable'] = multiple ? true : false;
|
|
711
718
|
}
|
|
712
719
|
return (
|
package/tree/treeNode.tsx
CHANGED
|
@@ -3,7 +3,7 @@ import cls from 'classnames';
|
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
4
|
import { cssClasses } from '@douyinfe/semi-foundation/tree/constants';
|
|
5
5
|
import isEnterPress from '@douyinfe/semi-foundation/utils/isEnterPress';
|
|
6
|
-
import { debounce, isFunction, isString, get } from 'lodash';
|
|
6
|
+
import { debounce, isFunction, isString, get, isEmpty } from 'lodash';
|
|
7
7
|
import { IconTreeTriangleDown, IconFile, IconFolder, IconFolderOpen } from '@douyinfe/semi-icons';
|
|
8
8
|
import { Checkbox } from '../checkbox';
|
|
9
9
|
import TreeContext from './treeContext';
|
|
@@ -392,7 +392,14 @@ export default class TreeNode extends PureComponent<TreeNodeProps, TreeNodeState
|
|
|
392
392
|
...dragProps
|
|
393
393
|
});
|
|
394
394
|
} else {
|
|
395
|
-
|
|
395
|
+
if (isEmpty(style)) {
|
|
396
|
+
return customLabel;
|
|
397
|
+
} else {
|
|
398
|
+
// In virtualization, props.style will contain location information
|
|
399
|
+
return React.cloneElement(customLabel, {
|
|
400
|
+
style: { ...get(customLabel, ['props', 'style']), ...style }
|
|
401
|
+
});
|
|
402
|
+
}
|
|
396
403
|
}
|
|
397
404
|
}
|
|
398
405
|
const labelCls = cls(`${prefixcls}-label`, {
|
|
@@ -678,4 +678,98 @@ describe('TreeSelect', () => {
|
|
|
678
678
|
expect(treeSelect.find(`.${BASE_CLASS_PREFIX}-tree-option-highlight`).at(1).instance().textContent).toEqual('北');
|
|
679
679
|
|
|
680
680
|
});
|
|
681
|
+
|
|
682
|
+
it('unRelated', () => {
|
|
683
|
+
const spyOnChange = sinon.spy(() => { });
|
|
684
|
+
const tree = getTreeSelect({
|
|
685
|
+
defaultExpandAll: true,
|
|
686
|
+
onChange: spyOnChange,
|
|
687
|
+
checkRelation: 'unRelated',
|
|
688
|
+
});
|
|
689
|
+
const nodelevel2 = tree.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-2`);
|
|
690
|
+
const selectedNode = nodelevel2.at(0);
|
|
691
|
+
selectedNode.simulate('click');
|
|
692
|
+
expect(spyOnChange.calledOnce).toBe(true);
|
|
693
|
+
expect(spyOnChange.calledWithMatch(['Zhongguo'])).toEqual(true);
|
|
694
|
+
// Note: selectedNode cannot be used directly here. selectedNode is the original node in the unselected state
|
|
695
|
+
expect(
|
|
696
|
+
tree
|
|
697
|
+
.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-2`)
|
|
698
|
+
.at(0)
|
|
699
|
+
.exists(`.${BASE_CLASS_PREFIX}-checkbox-checked`)
|
|
700
|
+
).toEqual(true);
|
|
701
|
+
const nodelevel3 = tree.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`);
|
|
702
|
+
expect(
|
|
703
|
+
nodelevel3
|
|
704
|
+
.exists(`.${BASE_CLASS_PREFIX}-checkbox-unChecked` )
|
|
705
|
+
).toEqual(true);
|
|
706
|
+
expect(
|
|
707
|
+
nodelevel3
|
|
708
|
+
.at(1)
|
|
709
|
+
.exists(`.${BASE_CLASS_PREFIX}-checkbox-unChecked` )
|
|
710
|
+
).toEqual(true);
|
|
711
|
+
});
|
|
712
|
+
|
|
713
|
+
it('unRelated + value', () => {
|
|
714
|
+
const tree = getTreeSelect({
|
|
715
|
+
defaultExpandAll: true,
|
|
716
|
+
checkRelation: 'unRelated',
|
|
717
|
+
value: 'Zhongguo'
|
|
718
|
+
});
|
|
719
|
+
expect(
|
|
720
|
+
tree
|
|
721
|
+
.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-2`)
|
|
722
|
+
.at(0)
|
|
723
|
+
.exists(`.${BASE_CLASS_PREFIX}-checkbox-checked`)
|
|
724
|
+
).toEqual(true);
|
|
725
|
+
const nodelevel3 = tree.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`);
|
|
726
|
+
expect(
|
|
727
|
+
nodelevel3
|
|
728
|
+
.exists(`.${BASE_CLASS_PREFIX}-checkbox-unChecked` )
|
|
729
|
+
).toEqual(true);
|
|
730
|
+
expect(
|
|
731
|
+
nodelevel3
|
|
732
|
+
.at(1)
|
|
733
|
+
.exists(`.${BASE_CLASS_PREFIX}-checkbox-unChecked` )
|
|
734
|
+
).toEqual(true);
|
|
735
|
+
});
|
|
736
|
+
|
|
737
|
+
it('unRelated + defaultValue', () => {
|
|
738
|
+
const tree = getTreeSelect({
|
|
739
|
+
defaultExpandAll: true,
|
|
740
|
+
checkRelation: 'unRelated',
|
|
741
|
+
defaultValue: 'Zhongguo'
|
|
742
|
+
});
|
|
743
|
+
expect(
|
|
744
|
+
tree
|
|
745
|
+
.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-2`)
|
|
746
|
+
.at(0)
|
|
747
|
+
.exists(`.${BASE_CLASS_PREFIX}-checkbox-checked`)
|
|
748
|
+
).toEqual(true);
|
|
749
|
+
const nodelevel3 = tree.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-3`);
|
|
750
|
+
expect(
|
|
751
|
+
nodelevel3
|
|
752
|
+
.exists(`.${BASE_CLASS_PREFIX}-checkbox-unChecked` )
|
|
753
|
+
).toEqual(true);
|
|
754
|
+
expect(
|
|
755
|
+
nodelevel3
|
|
756
|
+
.at(1)
|
|
757
|
+
.exists(`.${BASE_CLASS_PREFIX}-checkbox-unChecked` )
|
|
758
|
+
).toEqual(true);
|
|
759
|
+
});
|
|
760
|
+
|
|
761
|
+
it('unRelated + onSelect', () => {
|
|
762
|
+
const spyOnSelect = sinon.spy(() => { });
|
|
763
|
+
const tree = getTreeSelect({
|
|
764
|
+
defaultExpandAll: true,
|
|
765
|
+
onSelect: spyOnSelect,
|
|
766
|
+
checkRelation: 'unRelated',
|
|
767
|
+
});
|
|
768
|
+
const nodelevel2 = tree.find(`.${BASE_CLASS_PREFIX}-tree-option.${BASE_CLASS_PREFIX}-tree-option-level-2`);
|
|
769
|
+
const selectedNode = nodelevel2.at(0);
|
|
770
|
+
selectedNode.simulate('click');
|
|
771
|
+
expect(spyOnSelect.calledOnce).toBe(true);
|
|
772
|
+
// onSelect first args is key, not value
|
|
773
|
+
expect(spyOnSelect.calledWithMatch('zhongguo')).toEqual(true);
|
|
774
|
+
});
|
|
681
775
|
})
|
|
@@ -97,6 +97,26 @@ const treeData2 = [
|
|
|
97
97
|
}
|
|
98
98
|
];
|
|
99
99
|
|
|
100
|
+
const treeData3 = [
|
|
101
|
+
{
|
|
102
|
+
label: '亚洲',
|
|
103
|
+
value: 'Asia',
|
|
104
|
+
key: '0',
|
|
105
|
+
children: [
|
|
106
|
+
{
|
|
107
|
+
label: '中国',
|
|
108
|
+
value: 'China',
|
|
109
|
+
key: '0-0',
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
label: '北美洲',
|
|
115
|
+
value: 'North America',
|
|
116
|
+
key: '1',
|
|
117
|
+
}
|
|
118
|
+
];
|
|
119
|
+
|
|
100
120
|
let commonProps = {
|
|
101
121
|
motion: false,
|
|
102
122
|
motionExpand: false,
|
|
@@ -780,4 +800,141 @@ describe('TreeSelect', () => {
|
|
|
780
800
|
done();
|
|
781
801
|
}, 100);
|
|
782
802
|
});
|
|
803
|
+
|
|
804
|
+
it('treeData is updated should not clear value when uncontrolled mode and single selection', () => {
|
|
805
|
+
const nativeEvent = { nativeEvent: { stopImmediatePropagation: () => { } } }
|
|
806
|
+
const treeSelect = getTreeSelect({
|
|
807
|
+
defaultExpandAll: true
|
|
808
|
+
});
|
|
809
|
+
treeSelect
|
|
810
|
+
.find(`.${BASE_CLASS_PREFIX}-tree-option-list .${BASE_CLASS_PREFIX}-tree-option`)
|
|
811
|
+
.at(2)
|
|
812
|
+
.simulate('click', nativeEvent);
|
|
813
|
+
expect(
|
|
814
|
+
treeSelect
|
|
815
|
+
.find(`.${BASE_CLASS_PREFIX}-tree-select .${BASE_CLASS_PREFIX}-tree-select-selection span`)
|
|
816
|
+
.getDOMNode()
|
|
817
|
+
.textContent
|
|
818
|
+
).toEqual('北京');
|
|
819
|
+
treeSelect.setProps({ treeData: treeChildren});
|
|
820
|
+
treeSelect.update();
|
|
821
|
+
expect(
|
|
822
|
+
treeSelect
|
|
823
|
+
.find(`.${BASE_CLASS_PREFIX}-tree-select .${BASE_CLASS_PREFIX}-tree-select-selection span`)
|
|
824
|
+
.getDOMNode()
|
|
825
|
+
.textContent
|
|
826
|
+
).toEqual('北京');
|
|
827
|
+
treeSelect.setProps({ treeData: treeData2});
|
|
828
|
+
treeSelect.update();
|
|
829
|
+
expect(
|
|
830
|
+
treeSelect
|
|
831
|
+
.find(`.${BASE_CLASS_PREFIX}-tree-select .${BASE_CLASS_PREFIX}-tree-select-selection span`)
|
|
832
|
+
.getDOMNode()
|
|
833
|
+
.textContent
|
|
834
|
+
).toEqual('');
|
|
835
|
+
});
|
|
836
|
+
|
|
837
|
+
it('treeData is updated should not clear value when uncontrolled mode and multiple selection', () => {
|
|
838
|
+
const nativeEvent = { nativeEvent: { stopImmediatePropagation: () => { } } }
|
|
839
|
+
const treeSelect = getTreeSelect({
|
|
840
|
+
defaultExpandAll: true,
|
|
841
|
+
multiple: true,
|
|
842
|
+
});
|
|
843
|
+
treeSelect
|
|
844
|
+
.find(`.${BASE_CLASS_PREFIX}-tree-option-list .${BASE_CLASS_PREFIX}-tree-option`)
|
|
845
|
+
.at(2)
|
|
846
|
+
.simulate('click', nativeEvent);
|
|
847
|
+
expect(
|
|
848
|
+
treeSelect
|
|
849
|
+
.find(`.${BASE_CLASS_PREFIX}-tree-select-selection .${BASE_CLASS_PREFIX}-tag-group .${BASE_CLASS_PREFIX}-tag`)
|
|
850
|
+
.at(0)
|
|
851
|
+
.find(`.${BASE_CLASS_PREFIX}-tag-content`)
|
|
852
|
+
.getDOMNode()
|
|
853
|
+
.textContent
|
|
854
|
+
).toEqual('北京');
|
|
855
|
+
treeSelect.setProps({ treeData: treeChildren});
|
|
856
|
+
treeSelect.update();
|
|
857
|
+
expect(
|
|
858
|
+
treeSelect
|
|
859
|
+
.find(`.${BASE_CLASS_PREFIX}-tree-select-selection .${BASE_CLASS_PREFIX}-tag-group .${BASE_CLASS_PREFIX}-tag`)
|
|
860
|
+
.at(0)
|
|
861
|
+
.find(`.${BASE_CLASS_PREFIX}-tag-content`)
|
|
862
|
+
.getDOMNode()
|
|
863
|
+
.textContent
|
|
864
|
+
).toEqual('北京');
|
|
865
|
+
treeSelect.setProps({ treeData: treeData2});
|
|
866
|
+
treeSelect.update();
|
|
867
|
+
expect(
|
|
868
|
+
treeSelect
|
|
869
|
+
.find(`.${BASE_CLASS_PREFIX}-tree-select-selection .${BASE_CLASS_PREFIX}-tag-group .${BASE_CLASS_PREFIX}-tag`)
|
|
870
|
+
.at(0)
|
|
871
|
+
.find(`.${BASE_CLASS_PREFIX}-tag-content`)
|
|
872
|
+
.length
|
|
873
|
+
).toEqual(0);
|
|
874
|
+
});
|
|
875
|
+
|
|
876
|
+
it('treeData is updated should not clear value when controlled mode and single selection', () => {
|
|
877
|
+
const treeSelect = getTreeSelect({
|
|
878
|
+
defaultExpandAll: true,
|
|
879
|
+
value: 'Beijing'
|
|
880
|
+
});
|
|
881
|
+
expect(
|
|
882
|
+
treeSelect
|
|
883
|
+
.find(`.${BASE_CLASS_PREFIX}-tree-select .${BASE_CLASS_PREFIX}-tree-select-selection span`)
|
|
884
|
+
.getDOMNode()
|
|
885
|
+
.textContent
|
|
886
|
+
).toEqual('北京');
|
|
887
|
+
treeSelect.setProps({ treeData: treeChildren});
|
|
888
|
+
treeSelect.update();
|
|
889
|
+
expect(
|
|
890
|
+
treeSelect
|
|
891
|
+
.find(`.${BASE_CLASS_PREFIX}-tree-select .${BASE_CLASS_PREFIX}-tree-select-selection span`)
|
|
892
|
+
.getDOMNode()
|
|
893
|
+
.textContent
|
|
894
|
+
).toEqual('北京');
|
|
895
|
+
treeSelect.setProps({ treeData: treeData3});
|
|
896
|
+
treeSelect.update();
|
|
897
|
+
expect(
|
|
898
|
+
treeSelect
|
|
899
|
+
.find(`.${BASE_CLASS_PREFIX}-tree-select .${BASE_CLASS_PREFIX}-tree-select-selection span`)
|
|
900
|
+
.getDOMNode()
|
|
901
|
+
.textContent
|
|
902
|
+
).toEqual('');
|
|
903
|
+
});
|
|
904
|
+
|
|
905
|
+
it('treeData is updated should not clear value when controlled mode and multiple selection', () => {
|
|
906
|
+
const treeSelect = getTreeSelect({
|
|
907
|
+
defaultExpandAll: true,
|
|
908
|
+
multiple: true,
|
|
909
|
+
value: 'Beijing'
|
|
910
|
+
});
|
|
911
|
+
expect(
|
|
912
|
+
treeSelect
|
|
913
|
+
.find(`.${BASE_CLASS_PREFIX}-tree-select-selection .${BASE_CLASS_PREFIX}-tag-group .${BASE_CLASS_PREFIX}-tag`)
|
|
914
|
+
.at(0)
|
|
915
|
+
.find(`.${BASE_CLASS_PREFIX}-tag-content`)
|
|
916
|
+
.getDOMNode()
|
|
917
|
+
.textContent
|
|
918
|
+
).toEqual('北京');
|
|
919
|
+
treeSelect.setProps({ treeData: treeChildren});
|
|
920
|
+
treeSelect.update();
|
|
921
|
+
expect(
|
|
922
|
+
treeSelect
|
|
923
|
+
.find(`.${BASE_CLASS_PREFIX}-tree-select-selection .${BASE_CLASS_PREFIX}-tag-group .${BASE_CLASS_PREFIX}-tag`)
|
|
924
|
+
.at(0)
|
|
925
|
+
.find(`.${BASE_CLASS_PREFIX}-tag-content`)
|
|
926
|
+
.getDOMNode()
|
|
927
|
+
.textContent
|
|
928
|
+
).toEqual('北京');
|
|
929
|
+
treeSelect.setProps({ treeData: treeData3});
|
|
930
|
+
treeSelect.update();
|
|
931
|
+
expect(
|
|
932
|
+
treeSelect
|
|
933
|
+
.find(`.${BASE_CLASS_PREFIX}-tree-select-selection .${BASE_CLASS_PREFIX}-tag-group .${BASE_CLASS_PREFIX}-tag`)
|
|
934
|
+
.at(0)
|
|
935
|
+
.find(`.${BASE_CLASS_PREFIX}-tag-content`)
|
|
936
|
+
.length
|
|
937
|
+
).toEqual(0);
|
|
938
|
+
});
|
|
939
|
+
|
|
783
940
|
})
|