@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.
Files changed (119) hide show
  1. package/cascader/__test__/cascader.test.js +24 -0
  2. package/cascader/_story/cascader.stories.js +73 -0
  3. package/cascader/index.tsx +5 -2
  4. package/datePicker/_story/RenderDate/index.js +13 -3
  5. package/datePicker/_story/RenderFullDate/index.js +36 -14
  6. package/datePicker/_story/RenderFullDate/index.scss +1 -1
  7. package/datePicker/_story/datePicker.stories.js +19 -11
  8. package/datePicker/_story/v2/PanelOpen.jsx +39 -0
  9. package/datePicker/_story/v2/index.js +2 -1
  10. package/datePicker/datePicker.tsx +1 -0
  11. package/dist/css/semi.css +84 -36
  12. package/dist/css/semi.min.css +1 -1
  13. package/dist/umd/semi-ui.js +487 -170
  14. package/dist/umd/semi-ui.js.map +1 -1
  15. package/dist/umd/semi-ui.min.js +1 -1
  16. package/dist/umd/semi-ui.min.js.map +1 -1
  17. package/form/_story/demo.jsx +1 -0
  18. package/input/index.tsx +1 -0
  19. package/input/textarea.tsx +6 -4
  20. package/inputNumber/__test__/inputNumber.test.js +36 -8
  21. package/lib/cjs/autoComplete/index.d.ts +1 -1
  22. package/lib/cjs/cascader/index.js +6 -0
  23. package/lib/cjs/datePicker/datePicker.js +12 -8
  24. package/lib/cjs/dropdown/index.d.ts +1 -1
  25. package/lib/cjs/form/baseForm.d.ts +1 -1
  26. package/lib/cjs/form/field.d.ts +1 -1
  27. package/lib/cjs/input/index.js +2 -1
  28. package/lib/cjs/input/textarea.js +5 -3
  29. package/lib/cjs/navigation/Item.js +1 -1
  30. package/lib/cjs/navigation/SubNav.js +1 -1
  31. package/lib/cjs/scrollList/scrollItem.d.ts +5 -1
  32. package/lib/cjs/scrollList/scrollItem.js +7 -0
  33. package/lib/cjs/select/index.d.ts +1 -1
  34. package/lib/cjs/select/index.js +1 -1
  35. package/lib/cjs/select/option.js +2 -2
  36. package/lib/cjs/table/Table.d.ts +1 -1
  37. package/lib/cjs/table/Table.js +17 -7
  38. package/lib/cjs/table/interface.d.ts +1 -0
  39. package/lib/cjs/tabs/interface.d.ts +1 -1
  40. package/lib/cjs/timePicker/TimePicker.d.ts +2 -0
  41. package/lib/cjs/timePicker/TimePicker.js +4 -4
  42. package/lib/cjs/timePicker/index.d.ts +1 -0
  43. package/lib/cjs/tooltip/index.d.ts +1 -1
  44. package/lib/cjs/tree/index.d.ts +2 -0
  45. package/lib/cjs/tree/index.js +15 -8
  46. package/lib/cjs/tree/treeNode.js +10 -1
  47. package/lib/cjs/treeSelect/index.d.ts +2 -0
  48. package/lib/cjs/treeSelect/index.js +75 -30
  49. package/lib/cjs/typography/util.js +0 -1
  50. package/lib/cjs/upload/fileCard.js +31 -22
  51. package/lib/cjs/upload/index.d.ts +6 -0
  52. package/lib/cjs/upload/index.js +15 -8
  53. package/lib/cjs/upload/interface.d.ts +8 -6
  54. package/lib/es/autoComplete/index.d.ts +1 -1
  55. package/lib/es/cascader/index.js +5 -0
  56. package/lib/es/datePicker/datePicker.js +12 -8
  57. package/lib/es/dropdown/index.d.ts +1 -1
  58. package/lib/es/form/baseForm.d.ts +1 -1
  59. package/lib/es/form/field.d.ts +1 -1
  60. package/lib/es/input/index.js +2 -1
  61. package/lib/es/input/textarea.js +5 -3
  62. package/lib/es/navigation/Item.js +1 -1
  63. package/lib/es/navigation/SubNav.js +1 -1
  64. package/lib/es/scrollList/scrollItem.d.ts +5 -1
  65. package/lib/es/scrollList/scrollItem.js +7 -0
  66. package/lib/es/select/index.d.ts +1 -1
  67. package/lib/es/select/index.js +1 -1
  68. package/lib/es/select/option.js +2 -2
  69. package/lib/es/table/Table.d.ts +1 -1
  70. package/lib/es/table/Table.js +19 -7
  71. package/lib/es/table/interface.d.ts +1 -0
  72. package/lib/es/tabs/interface.d.ts +1 -1
  73. package/lib/es/timePicker/TimePicker.d.ts +2 -0
  74. package/lib/es/timePicker/TimePicker.js +4 -4
  75. package/lib/es/timePicker/index.d.ts +1 -0
  76. package/lib/es/tooltip/index.d.ts +1 -1
  77. package/lib/es/tree/index.d.ts +2 -0
  78. package/lib/es/tree/index.js +15 -8
  79. package/lib/es/tree/treeNode.js +9 -1
  80. package/lib/es/treeSelect/index.d.ts +2 -0
  81. package/lib/es/treeSelect/index.js +76 -31
  82. package/lib/es/typography/util.js +0 -1
  83. package/lib/es/upload/fileCard.js +31 -24
  84. package/lib/es/upload/index.d.ts +6 -0
  85. package/lib/es/upload/index.js +14 -8
  86. package/lib/es/upload/interface.d.ts +8 -6
  87. package/navigation/Item.tsx +1 -1
  88. package/navigation/SubNav.tsx +1 -1
  89. package/package.json +9 -8
  90. package/scrollList/scrollItem.tsx +10 -3
  91. package/select/index.tsx +6 -1
  92. package/select/option.tsx +2 -2
  93. package/table/Table.tsx +16 -8
  94. package/table/_story/table.stories.js +1 -0
  95. package/table/_story/v2/FixedColumnsChange/index.jsx +104 -0
  96. package/table/_story/v2/FixedHeaderMerge/index.jsx +98 -0
  97. package/table/_story/v2/FixedZIndex/index.jsx +87 -0
  98. package/table/_story/v2/defaultFilteredValue.tsx +123 -0
  99. package/table/_story/v2/index.js +4 -0
  100. package/table/interface.ts +1 -0
  101. package/tabs/interface.ts +1 -1
  102. package/timePicker/TimePicker.tsx +4 -1
  103. package/timePicker/__test__/timePicker.test.js +42 -3
  104. package/timePicker/_story/timepicker.stories.js +18 -0
  105. package/tooltip/_story/tooltip.stories.js +83 -1
  106. package/tree/__test__/treeMultiple.test.js +94 -0
  107. package/tree/_story/tree.stories.js +169 -0
  108. package/tree/index.tsx +12 -5
  109. package/tree/treeNode.tsx +9 -2
  110. package/treeSelect/__test__/treeMultiple.test.js +94 -0
  111. package/treeSelect/__test__/treeSelect.test.js +157 -0
  112. package/treeSelect/_story/treeSelect.stories.js +242 -0
  113. package/treeSelect/index.tsx +93 -52
  114. package/typography/_story/typography.stories.js +8 -0
  115. package/typography/util.tsx +0 -1
  116. package/upload/_story/upload.stories.js +22 -6
  117. package/upload/fileCard.tsx +23 -23
  118. package/upload/index.tsx +15 -6
  119. 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
- const { checkedKeys, halfCheckedKeys } = calcCheckedKeys(checkedKeyValues, keyEntities);
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
- newState.checkedKeys = checkedKeys;
415
- newState.halfCheckedKeys = halfCheckedKeys;
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
- return customLabel;
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
  })