@douyinfe/semi-ui 2.10.2 → 2.10.5
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/index.tsx +20 -17
- package/checkbox/checkbox.tsx +1 -0
- package/checkbox/checkboxInner.tsx +10 -1
- package/datePicker/__test__/datePicker.test.js +1 -0
- package/datePicker/_story/v2/FixTriggerRender.tsx +36 -0
- package/datePicker/_story/v2/index.js +1 -0
- package/datePicker/datePicker.tsx +7 -4
- package/dist/umd/semi-ui.js +5466 -3738
- 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/input/index.tsx +5 -1
- package/inputNumber/index.tsx +5 -2
- package/lib/cjs/cascader/index.d.ts +1 -0
- package/lib/cjs/cascader/index.js +13 -4
- package/lib/cjs/checkbox/checkbox.d.ts +1 -0
- package/lib/cjs/checkbox/checkbox.js +2 -1
- package/lib/cjs/checkbox/checkboxInner.d.ts +8 -0
- package/lib/cjs/checkbox/checkboxInner.js +11 -2
- package/lib/cjs/datePicker/datePicker.d.ts +1 -0
- package/lib/cjs/datePicker/datePicker.js +21 -5
- package/lib/cjs/form/baseForm.d.ts +2 -1
- package/lib/cjs/form/field.d.ts +2 -1
- package/lib/cjs/input/index.d.ts +2 -0
- package/lib/cjs/input/index.js +11 -4
- package/lib/cjs/inputNumber/index.d.ts +1 -0
- package/lib/cjs/inputNumber/index.js +8 -2
- package/lib/cjs/modal/ModalContent.d.ts +1 -0
- package/lib/cjs/modal/ModalContent.js +14 -3
- package/lib/cjs/modal/confirm.d.ts +10 -5
- package/lib/cjs/radio/radio.d.ts +5 -0
- package/lib/cjs/radio/radio.js +2 -1
- package/lib/cjs/radio/radioInner.d.ts +8 -0
- package/lib/cjs/radio/radioInner.js +11 -2
- package/lib/cjs/rating/index.d.ts +2 -0
- package/lib/cjs/rating/index.js +12 -5
- package/lib/cjs/rating/item.d.ts +10 -0
- package/lib/cjs/rating/item.js +4 -1
- package/lib/cjs/select/index.d.ts +2 -0
- package/lib/cjs/select/index.js +15 -3
- package/lib/cjs/table/Table.d.ts +1 -1
- package/lib/cjs/tabs/index.d.ts +1 -0
- package/lib/cjs/tabs/index.js +2 -1
- package/lib/cjs/tabs/interface.d.ts +1 -0
- package/lib/cjs/tagInput/index.d.ts +2 -0
- package/lib/cjs/tagInput/index.js +13 -4
- package/lib/cjs/timePicker/TimeInput.d.ts +2 -1
- package/lib/cjs/timePicker/TimeInput.js +7 -3
- package/lib/cjs/timePicker/TimePicker.d.ts +2 -0
- package/lib/cjs/timePicker/TimePicker.js +2 -1
- package/lib/cjs/timePicker/index.d.ts +1 -0
- package/lib/cjs/tooltip/index.d.ts +3 -0
- package/lib/cjs/tooltip/index.js +8 -2
- package/lib/cjs/tree/index.d.ts +1 -0
- package/lib/cjs/tree/index.js +9 -2
- package/lib/cjs/typography/title.d.ts +1 -1
- package/lib/es/cascader/index.d.ts +1 -0
- package/lib/es/cascader/index.js +13 -4
- package/lib/es/checkbox/checkbox.d.ts +1 -0
- package/lib/es/checkbox/checkbox.js +2 -1
- package/lib/es/checkbox/checkboxInner.d.ts +8 -0
- package/lib/es/checkbox/checkboxInner.js +11 -2
- package/lib/es/datePicker/datePicker.d.ts +1 -0
- package/lib/es/datePicker/datePicker.js +21 -5
- package/lib/es/form/baseForm.d.ts +2 -1
- package/lib/es/form/field.d.ts +2 -1
- package/lib/es/input/index.d.ts +2 -0
- package/lib/es/input/index.js +11 -4
- package/lib/es/inputNumber/index.d.ts +1 -0
- package/lib/es/inputNumber/index.js +8 -2
- package/lib/es/modal/ModalContent.d.ts +1 -0
- package/lib/es/modal/ModalContent.js +14 -3
- package/lib/es/modal/confirm.d.ts +10 -5
- package/lib/es/radio/radio.d.ts +5 -0
- package/lib/es/radio/radio.js +2 -1
- package/lib/es/radio/radioInner.d.ts +8 -0
- package/lib/es/radio/radioInner.js +11 -2
- package/lib/es/rating/index.d.ts +2 -0
- package/lib/es/rating/index.js +12 -5
- package/lib/es/rating/item.d.ts +10 -0
- package/lib/es/rating/item.js +4 -1
- package/lib/es/select/index.d.ts +2 -0
- package/lib/es/select/index.js +15 -3
- package/lib/es/table/Table.d.ts +1 -1
- package/lib/es/tabs/index.d.ts +1 -0
- package/lib/es/tabs/index.js +2 -1
- package/lib/es/tabs/interface.d.ts +1 -0
- package/lib/es/tagInput/index.d.ts +2 -0
- package/lib/es/tagInput/index.js +13 -4
- package/lib/es/timePicker/TimeInput.d.ts +2 -1
- package/lib/es/timePicker/TimeInput.js +7 -3
- package/lib/es/timePicker/TimePicker.d.ts +2 -0
- package/lib/es/timePicker/TimePicker.js +2 -1
- package/lib/es/timePicker/index.d.ts +1 -0
- package/lib/es/tooltip/index.d.ts +3 -0
- package/lib/es/tooltip/index.js +9 -2
- package/lib/es/tree/index.d.ts +1 -0
- package/lib/es/tree/index.js +9 -2
- package/lib/es/typography/title.d.ts +1 -1
- package/modal/ModalContent.tsx +6 -3
- package/package.json +9 -9
- package/radio/radio.tsx +5 -0
- package/radio/radioInner.tsx +10 -1
- package/rating/index.tsx +6 -4
- package/rating/item.tsx +11 -0
- package/select/index.tsx +6 -2
- package/tabs/index.tsx +1 -0
- package/tabs/interface.ts +1 -0
- package/tagInput/index.tsx +6 -3
- package/timePicker/TimeInput.tsx +5 -3
- package/timePicker/TimePicker.tsx +2 -0
- package/tooltip/index.tsx +5 -1
- package/tree/index.tsx +3 -1
- package/yarn-error.log +26235 -0
package/cascader/index.tsx
CHANGED
|
@@ -168,6 +168,7 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
168
168
|
disableStrictly: PropTypes.bool,
|
|
169
169
|
leafOnly: PropTypes.bool,
|
|
170
170
|
enableLeafClick: PropTypes.bool,
|
|
171
|
+
preventScroll: PropTypes.bool,
|
|
171
172
|
};
|
|
172
173
|
|
|
173
174
|
static defaultProps = {
|
|
@@ -268,16 +269,16 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
268
269
|
this.setState({ inputPlaceHolder: value });
|
|
269
270
|
},
|
|
270
271
|
focusInput: () => {
|
|
272
|
+
const { preventScroll } = this.props;
|
|
271
273
|
if (this.inputRef && this.inputRef.current) {
|
|
272
274
|
// TODO: check the reason
|
|
273
|
-
(this.inputRef.current as any).focus();
|
|
275
|
+
(this.inputRef.current as any).focus({ preventScroll });
|
|
274
276
|
}
|
|
275
277
|
},
|
|
276
278
|
};
|
|
277
|
-
const cascaderAdapter: Pick<
|
|
278
|
-
|
|
279
|
-
| 'unregisterClickOutsideHandler'
|
|
280
|
-
| 'rePositionDropdown'
|
|
279
|
+
const cascaderAdapter: Pick<
|
|
280
|
+
CascaderAdapter,
|
|
281
|
+
'registerClickOutsideHandler' | 'unregisterClickOutsideHandler' | 'rePositionDropdown'
|
|
281
282
|
> = {
|
|
282
283
|
registerClickOutsideHandler: cb => {
|
|
283
284
|
const clickOutsideHandler = (e: Event) => {
|
|
@@ -412,13 +413,15 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
412
413
|
realValue as SimpleValueType[][] :
|
|
413
414
|
[realValue] as SimpleValueType[][];
|
|
414
415
|
} else {
|
|
415
|
-
|
|
416
|
+
if (realValue !== undefined) {
|
|
417
|
+
normallizedValue = [[realValue]];
|
|
418
|
+
}
|
|
416
419
|
}
|
|
417
420
|
// formatValuePath is used to save value of valuePath
|
|
418
421
|
const formatValuePath: (string | number)[][] = [];
|
|
419
422
|
normallizedValue.forEach((valueItem: SimpleValueType[]) => {
|
|
420
423
|
const formatItem: (string | number)[] = onChangeWithObject ?
|
|
421
|
-
(valueItem as CascaderData[]).map(i => i
|
|
424
|
+
(valueItem as CascaderData[]).map(i => i?.value) :
|
|
422
425
|
valueItem as (string | number)[];
|
|
423
426
|
formatValuePath.push(formatItem);
|
|
424
427
|
});
|
|
@@ -885,9 +888,9 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
885
888
|
const { isOpen, isFocus, isInput, checkedKeys } = this.state;
|
|
886
889
|
const filterable = Boolean(filterTreeNode);
|
|
887
890
|
const useCustomTrigger = typeof triggerRender === 'function';
|
|
888
|
-
const classNames = useCustomTrigger
|
|
889
|
-
cls(className)
|
|
890
|
-
cls(prefixcls, className, {
|
|
891
|
+
const classNames = useCustomTrigger
|
|
892
|
+
? cls(className)
|
|
893
|
+
: cls(prefixcls, className, {
|
|
891
894
|
[`${prefixcls}-focus`]: isFocus || (isOpen && !isInput),
|
|
892
895
|
[`${prefixcls}-disabled`]: disabled,
|
|
893
896
|
[`${prefixcls}-single`]: true,
|
|
@@ -899,18 +902,18 @@ class Cascader extends BaseComponent<CascaderProps, CascaderState> {
|
|
|
899
902
|
[`${prefixcls}-with-prefix`]: prefix || insetLabel,
|
|
900
903
|
[`${prefixcls}-with-suffix`]: suffix,
|
|
901
904
|
});
|
|
902
|
-
const mouseEvent = showClear
|
|
903
|
-
{
|
|
905
|
+
const mouseEvent = showClear
|
|
906
|
+
? {
|
|
904
907
|
onMouseEnter: () => this.handleMouseOver(),
|
|
905
908
|
onMouseLeave: () => this.handleMouseLeave(),
|
|
906
|
-
}
|
|
907
|
-
{};
|
|
909
|
+
}
|
|
910
|
+
: {};
|
|
908
911
|
const sectionCls = cls(`${prefixcls}-selection`, {
|
|
909
912
|
[`${prefixcls}-selection-multiple`]: multiple && !isEmpty(checkedKeys),
|
|
910
913
|
});
|
|
911
|
-
const inner = useCustomTrigger
|
|
912
|
-
this.renderCustomTrigger()
|
|
913
|
-
[
|
|
914
|
+
const inner = useCustomTrigger
|
|
915
|
+
? this.renderCustomTrigger()
|
|
916
|
+
: [
|
|
914
917
|
<Fragment key={'prefix'}>{prefix || insetLabel ? this.renderPrefix() : null}</Fragment>,
|
|
915
918
|
<Fragment key={'selection'}>
|
|
916
919
|
<div className={sectionCls}>{this.renderSelectContent()}</div>
|
package/checkbox/checkbox.tsx
CHANGED
|
@@ -23,6 +23,10 @@ export interface CheckboxInnerProps {
|
|
|
23
23
|
addonId?: string;
|
|
24
24
|
extraId?: string;
|
|
25
25
|
'aria-label'?: React.AriaAttributes['aria-label'];
|
|
26
|
+
focusInner?: boolean;
|
|
27
|
+
onInputFocus?: (e: any) => void;
|
|
28
|
+
onInputBlur?: (e: any) => void;
|
|
29
|
+
preventScroll?: boolean;
|
|
26
30
|
}
|
|
27
31
|
|
|
28
32
|
class CheckboxInner extends PureComponent<CheckboxInnerProps> {
|
|
@@ -43,6 +47,10 @@ class CheckboxInner extends PureComponent<CheckboxInnerProps> {
|
|
|
43
47
|
isPureCardType: PropTypes.bool,
|
|
44
48
|
addonId: PropTypes.string,
|
|
45
49
|
extraId: PropTypes.string,
|
|
50
|
+
focusInner: PropTypes.bool,
|
|
51
|
+
onInputFocus: PropTypes.func,
|
|
52
|
+
onInputBlur: PropTypes.func,
|
|
53
|
+
preventScroll: PropTypes.bool,
|
|
46
54
|
};
|
|
47
55
|
|
|
48
56
|
static defaultProps = {
|
|
@@ -55,7 +63,8 @@ class CheckboxInner extends PureComponent<CheckboxInnerProps> {
|
|
|
55
63
|
}
|
|
56
64
|
|
|
57
65
|
focus() {
|
|
58
|
-
this.
|
|
66
|
+
const { preventScroll } = this.props;
|
|
67
|
+
this.inputEntity.focus({ preventScroll });
|
|
59
68
|
}
|
|
60
69
|
|
|
61
70
|
render() {
|
|
@@ -1056,6 +1056,7 @@ describe(`DatePicker`, () => {
|
|
|
1056
1056
|
const rightSecondWeek = rightPanel.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-week`)[1];
|
|
1057
1057
|
const rightSecondWeekDays = rightSecondWeek.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-day`);
|
|
1058
1058
|
leftSecondWeekDays[0].click();
|
|
1059
|
+
await sleep();
|
|
1059
1060
|
rightSecondWeekDays[0].click();
|
|
1060
1061
|
|
|
1061
1062
|
const baseElem = elem.find(BaseDatePicker);
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import React, { useState, useCallback, useMemo } from 'react';
|
|
2
|
+
import { DatePicker, Button, Icon, Space } from '@douyinfe/semi-ui';
|
|
3
|
+
|
|
4
|
+
export default function Demo() {
|
|
5
|
+
const [date, setDate] = useState([]);
|
|
6
|
+
const onChange = useCallback(date => {
|
|
7
|
+
setDate(date);
|
|
8
|
+
console.log(date);
|
|
9
|
+
}, []);
|
|
10
|
+
const onClear = useCallback(e => {
|
|
11
|
+
e && e.stopPropagation();
|
|
12
|
+
setDate(null);
|
|
13
|
+
}, []);
|
|
14
|
+
|
|
15
|
+
const closeIcon = useMemo(() => (date ? <Icon type="close" onClick={onClear} /> : <Icon type="chevron_down" />), [date]);
|
|
16
|
+
|
|
17
|
+
return (
|
|
18
|
+
<Space>
|
|
19
|
+
<DatePicker
|
|
20
|
+
type="dateTimeRange"
|
|
21
|
+
onChange={onChange}
|
|
22
|
+
value={date}
|
|
23
|
+
triggerRender={({ placeholder }) => (
|
|
24
|
+
<Button theme={'light'} icon={closeIcon} iconPosition={'right'}>
|
|
25
|
+
{(date && String(date)) || placeholder}
|
|
26
|
+
</Button>
|
|
27
|
+
)}
|
|
28
|
+
/>
|
|
29
|
+
<DatePicker
|
|
30
|
+
type="dateRange"
|
|
31
|
+
motion={false}
|
|
32
|
+
triggerRender={({ placeholder }) => <Button theme={'light'}>{placeholder}</Button>}
|
|
33
|
+
/>
|
|
34
|
+
</Space>
|
|
35
|
+
);
|
|
36
|
+
}
|
|
@@ -4,3 +4,4 @@ export { default as FixInputRangeFocus } from './FixInputRangeFocus';
|
|
|
4
4
|
export { default as InsetInput } from './InsetInput';
|
|
5
5
|
export { default as InsetInputE2E } from './InsetInputE2E';
|
|
6
6
|
export { default as FixDefaultPickerValue } from './FixDefaultPickerValue';
|
|
7
|
+
export { default as FixedTriggerRender } from './FixTriggerRender';
|
|
@@ -125,6 +125,7 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
|
|
|
125
125
|
// Callback function for panel date switching
|
|
126
126
|
onPanelChange: PropTypes.func,
|
|
127
127
|
rangeSeparator: PropTypes.string,
|
|
128
|
+
preventScroll: PropTypes.bool,
|
|
128
129
|
};
|
|
129
130
|
|
|
130
131
|
static defaultProps = {
|
|
@@ -272,13 +273,14 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
|
|
|
272
273
|
typeIsYearOrMonth: () => ['month', 'year'].includes(this.props.type),
|
|
273
274
|
setMotionEnd: motionEnd => this.setState({ motionEnd }),
|
|
274
275
|
setRangeInputFocus: rangeInputFocus => {
|
|
276
|
+
const { preventScroll } = this.props;
|
|
275
277
|
if (rangeInputFocus !== this.state.rangeInputFocus) {
|
|
276
278
|
this.setState({ rangeInputFocus });
|
|
277
279
|
}
|
|
278
280
|
switch (rangeInputFocus) {
|
|
279
281
|
case 'rangeStart':
|
|
280
282
|
const inputStartNode = get(this, 'rangeInputStartRef.current');
|
|
281
|
-
inputStartNode && inputStartNode.focus();
|
|
283
|
+
inputStartNode && inputStartNode.focus({ preventScroll });
|
|
282
284
|
/**
|
|
283
285
|
* 解决选择完startDate,切换到endDate后panel被立马关闭的问题。
|
|
284
286
|
* 用户打开panel,选了startDate后,会执行setRangeInputFocus('rangeEnd'),focus到endDateInput,
|
|
@@ -298,7 +300,7 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
|
|
|
298
300
|
break;
|
|
299
301
|
case 'rangeEnd':
|
|
300
302
|
const inputEndNode = get(this, 'rangeInputEndRef.current');
|
|
301
|
-
inputEndNode && inputEndNode.focus();
|
|
303
|
+
inputEndNode && inputEndNode.focus({ preventScroll });
|
|
302
304
|
/**
|
|
303
305
|
* 解决选择完startDate,切换到endDate后panel被立马关闭的问题。
|
|
304
306
|
* 用户打开panel,选了startDate后,会执行setRangeInputFocus('rangeEnd'),focus到endDateInput,
|
|
@@ -323,19 +325,20 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
|
|
|
323
325
|
couldPanelClosed: () => this.focusRecordsRef.current.rangeStart && this.focusRecordsRef.current.rangeEnd,
|
|
324
326
|
isEventTarget: e => e && e.target === e.currentTarget,
|
|
325
327
|
setInsetInputFocus: () => {
|
|
328
|
+
const { preventScroll } = this.props;
|
|
326
329
|
const { rangeInputFocus } = this.state;
|
|
327
330
|
switch (rangeInputFocus) {
|
|
328
331
|
case 'rangeEnd':
|
|
329
332
|
if (document.activeElement !== this.rangeInputEndRef.current) {
|
|
330
333
|
const inputEndNode = get(this, 'rangeInputEndRef.current');
|
|
331
|
-
inputEndNode && inputEndNode.focus();
|
|
334
|
+
inputEndNode && inputEndNode.focus({ preventScroll });
|
|
332
335
|
}
|
|
333
336
|
break;
|
|
334
337
|
case 'rangeStart':
|
|
335
338
|
default:
|
|
336
339
|
if (document.activeElement !== this.rangeInputStartRef.current) {
|
|
337
340
|
const inputStartNode = get(this, 'rangeInputStartRef.current');
|
|
338
|
-
inputStartNode && inputStartNode.focus();
|
|
341
|
+
inputStartNode && inputStartNode.focus({ preventScroll });
|
|
339
342
|
}
|
|
340
343
|
break;
|
|
341
344
|
}
|