@douyinfe/semi-foundation 2.28.0 → 2.28.1
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/datePicker/monthsGridFoundation.ts +36 -15
- package/input/input.scss +4 -0
- package/lib/cjs/datePicker/monthsGridFoundation.d.ts +12 -7
- package/lib/cjs/datePicker/monthsGridFoundation.js +20 -3
- package/lib/cjs/input/input.css +3 -0
- package/lib/cjs/input/input.scss +4 -0
- package/lib/cjs/select/select.css +1 -0
- package/lib/cjs/select/select.scss +2 -0
- package/lib/es/datePicker/monthsGridFoundation.d.ts +12 -7
- package/lib/es/datePicker/monthsGridFoundation.js +20 -3
- package/lib/es/input/input.css +3 -0
- package/lib/es/input/input.scss +4 -0
- package/lib/es/select/select.css +1 -0
- package/lib/es/select/select.scss +2 -0
- package/package.json +2 -2
- package/select/select.scss +2 -0
|
@@ -55,7 +55,8 @@ export type YearMonthChangeType = 'prevMonth' | 'nextMonth' | 'prevYear' | 'next
|
|
|
55
55
|
|
|
56
56
|
export interface MonthsGridFoundationProps extends MonthsGridElementProps {
|
|
57
57
|
type?: Type;
|
|
58
|
-
|
|
58
|
+
/** may be null if selection is not complete when type is dateRange or dateTimeRange */
|
|
59
|
+
defaultValue?: (Date | null)[];
|
|
59
60
|
defaultPickerValue?: ValueType;
|
|
60
61
|
multiple?: boolean;
|
|
61
62
|
max?: number;
|
|
@@ -96,7 +97,11 @@ export interface MonthsGridFoundationProps extends MonthsGridElementProps {
|
|
|
96
97
|
}
|
|
97
98
|
|
|
98
99
|
export interface MonthInfo {
|
|
100
|
+
/** The date displayed in the current date panel, update when switching year and month */
|
|
99
101
|
pickerDate: Date;
|
|
102
|
+
/**
|
|
103
|
+
* Default date or selected date (when selected)
|
|
104
|
+
*/
|
|
100
105
|
showDate: Date;
|
|
101
106
|
isTimePickerOpen: boolean;
|
|
102
107
|
isYearPickerOpen: boolean
|
|
@@ -167,22 +172,22 @@ export default class MonthsGridFoundation extends BaseFoundation<MonthsGridAdapt
|
|
|
167
172
|
}
|
|
168
173
|
}
|
|
169
174
|
|
|
170
|
-
updateSelectedFromProps(values:
|
|
175
|
+
updateSelectedFromProps(values: (Date | null)[], refreshPicker = true) {
|
|
171
176
|
const type: Type = this.getProp('type');
|
|
172
177
|
const { selected, rangeStart, rangeEnd } = this.getStates();
|
|
173
|
-
if (values &&
|
|
178
|
+
if (values && values?.length) {
|
|
174
179
|
switch (type) {
|
|
175
180
|
case 'date':
|
|
176
|
-
this._initDatePickerFromValue(values
|
|
181
|
+
this._initDatePickerFromValue(values, refreshPicker);
|
|
177
182
|
break;
|
|
178
183
|
case 'dateRange':
|
|
179
|
-
this._initDateRangePickerFromValue(values
|
|
184
|
+
this._initDateRangePickerFromValue(values);
|
|
180
185
|
break;
|
|
181
186
|
case 'dateTime':
|
|
182
|
-
this._initDateTimePickerFromValue(values
|
|
187
|
+
this._initDateTimePickerFromValue(values);
|
|
183
188
|
break;
|
|
184
189
|
case 'dateTimeRange':
|
|
185
|
-
this._initDateTimeRangePickerFormValue(values
|
|
190
|
+
this._initDateTimeRangePickerFormValue(values);
|
|
186
191
|
break;
|
|
187
192
|
default:
|
|
188
193
|
break;
|
|
@@ -222,7 +227,7 @@ export default class MonthsGridFoundation extends BaseFoundation<MonthsGridAdapt
|
|
|
222
227
|
}
|
|
223
228
|
}
|
|
224
229
|
|
|
225
|
-
_initDatePickerFromValue(values:
|
|
230
|
+
_initDatePickerFromValue(values: Date[], refreshPicker = true) {
|
|
226
231
|
const monthLeft = this.getState('monthLeft');
|
|
227
232
|
const newMonthLeft = { ...monthLeft };
|
|
228
233
|
// REMOVE:
|
|
@@ -244,16 +249,32 @@ export default class MonthsGridFoundation extends BaseFoundation<MonthsGridAdapt
|
|
|
244
249
|
this._adapter.updateDaySelected(newSelected);
|
|
245
250
|
}
|
|
246
251
|
|
|
247
|
-
_initDateRangePickerFromValue(values:
|
|
252
|
+
_initDateRangePickerFromValue(values: (Date | null)[], withTime = false) {
|
|
248
253
|
// init month panel
|
|
249
|
-
const monthLeft = this.getState('monthLeft');
|
|
250
|
-
const monthRight = this.getState('monthRight');
|
|
254
|
+
const monthLeft = this.getState('monthLeft') as MonthsGridFoundationState['monthLeft'];
|
|
255
|
+
const monthRight = this.getState('monthRight') as MonthsGridFoundationState['monthRight'];
|
|
251
256
|
const adjustResult = this._autoAdjustMonth(
|
|
252
257
|
{ ...monthLeft, pickerDate: values[0] || monthLeft.pickerDate },
|
|
253
258
|
{ ...monthRight, pickerDate: values[1] || monthRight.pickerDate }
|
|
254
259
|
);
|
|
255
|
-
|
|
256
|
-
|
|
260
|
+
|
|
261
|
+
const validValue = Array.isArray(values) && values.filter(item => item).length > 1;
|
|
262
|
+
if (validValue) {
|
|
263
|
+
this.handleShowDateAndTime(strings.PANEL_TYPE_LEFT, adjustResult.monthLeft.pickerDate);
|
|
264
|
+
this.handleShowDateAndTime(strings.PANEL_TYPE_RIGHT, adjustResult.monthRight.pickerDate);
|
|
265
|
+
} else {
|
|
266
|
+
const selectedDate = values.find(item => item) as Date;
|
|
267
|
+
// 如果日期不完整且输入日期不在面板范围内,则更新面板
|
|
268
|
+
if (selectedDate) {
|
|
269
|
+
const notLeftMonth = selectedDate?.getMonth() !== monthLeft.pickerDate.getMonth();
|
|
270
|
+
const notRightMonth = selectedDate?.getMonth() !== monthRight.pickerDate.getMonth();
|
|
271
|
+
|
|
272
|
+
if (notLeftMonth && notRightMonth) {
|
|
273
|
+
this.handleShowDateAndTime(strings.PANEL_TYPE_LEFT, adjustResult.monthLeft.pickerDate);
|
|
274
|
+
this.handleShowDateAndTime(strings.PANEL_TYPE_RIGHT, adjustResult.monthRight.pickerDate);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
257
278
|
|
|
258
279
|
// init range
|
|
259
280
|
const formatToken = withTime ? strings.FORMAT_DATE_TIME : strings.FORMAT_FULL_DATE;
|
|
@@ -268,11 +289,11 @@ export default class MonthsGridFoundation extends BaseFoundation<MonthsGridAdapt
|
|
|
268
289
|
this._adapter.setHoverDay(rangeEnd);
|
|
269
290
|
}
|
|
270
291
|
|
|
271
|
-
_initDateTimePickerFromValue(values:
|
|
292
|
+
_initDateTimePickerFromValue(values: Date[]) {
|
|
272
293
|
this._initDatePickerFromValue(values);
|
|
273
294
|
}
|
|
274
295
|
|
|
275
|
-
_initDateTimeRangePickerFormValue(values:
|
|
296
|
+
_initDateTimeRangePickerFormValue(values: (Date | null)[]) {
|
|
276
297
|
this._initDateRangePickerFromValue(values, true);
|
|
277
298
|
}
|
|
278
299
|
|
package/input/input.scss
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import BaseFoundation, { DefaultAdapter } from '../base/foundation';
|
|
2
2
|
import { strings } from './constants';
|
|
3
3
|
import { WeekStartNumber } from './_utils/getMonthTable';
|
|
4
|
-
import {
|
|
4
|
+
import { PresetPosition, ValueType } from './foundation';
|
|
5
5
|
import { MonthDayInfo } from './monthFoundation';
|
|
6
6
|
import { ArrayElement } from '../utils/type';
|
|
7
7
|
declare type Type = ArrayElement<typeof strings.TYPE_SET>;
|
|
@@ -15,7 +15,8 @@ export declare type PanelType = 'left' | 'right';
|
|
|
15
15
|
export declare type YearMonthChangeType = 'prevMonth' | 'nextMonth' | 'prevYear' | 'nextYear';
|
|
16
16
|
export interface MonthsGridFoundationProps extends MonthsGridElementProps {
|
|
17
17
|
type?: Type;
|
|
18
|
-
|
|
18
|
+
/** may be null if selection is not complete when type is dateRange or dateTimeRange */
|
|
19
|
+
defaultValue?: (Date | null)[];
|
|
19
20
|
defaultPickerValue?: ValueType;
|
|
20
21
|
multiple?: boolean;
|
|
21
22
|
max?: number;
|
|
@@ -58,7 +59,11 @@ export interface MonthsGridFoundationProps extends MonthsGridElementProps {
|
|
|
58
59
|
renderDateInput?: any;
|
|
59
60
|
}
|
|
60
61
|
export interface MonthInfo {
|
|
62
|
+
/** The date displayed in the current date panel, update when switching year and month */
|
|
61
63
|
pickerDate: Date;
|
|
64
|
+
/**
|
|
65
|
+
* Default date or selected date (when selected)
|
|
66
|
+
*/
|
|
62
67
|
showDate: Date;
|
|
63
68
|
isTimePickerOpen: boolean;
|
|
64
69
|
isYearPickerOpen: boolean;
|
|
@@ -101,12 +106,12 @@ export default class MonthsGridFoundation extends BaseFoundation<MonthsGridAdapt
|
|
|
101
106
|
constructor(adapter: MonthsGridAdapter);
|
|
102
107
|
init(): void;
|
|
103
108
|
initDefaultPickerValue(): void;
|
|
104
|
-
updateSelectedFromProps(values:
|
|
109
|
+
updateSelectedFromProps(values: (Date | null)[], refreshPicker?: boolean): void;
|
|
105
110
|
calcDisabledTime(panelType: PanelType): any;
|
|
106
|
-
_initDatePickerFromValue(values:
|
|
107
|
-
_initDateRangePickerFromValue(values:
|
|
108
|
-
_initDateTimePickerFromValue(values:
|
|
109
|
-
_initDateTimeRangePickerFormValue(values:
|
|
111
|
+
_initDatePickerFromValue(values: Date[], refreshPicker?: boolean): void;
|
|
112
|
+
_initDateRangePickerFromValue(values: (Date | null)[], withTime?: boolean): void;
|
|
113
|
+
_initDateTimePickerFromValue(values: Date[]): void;
|
|
114
|
+
_initDateTimeRangePickerFormValue(values: (Date | null)[]): void;
|
|
110
115
|
destroy(): void;
|
|
111
116
|
/**
|
|
112
117
|
* sync change another panel month when change months from the else yam panel
|
|
@@ -79,7 +79,7 @@ class MonthsGridFoundation extends _foundation.default {
|
|
|
79
79
|
rangeEnd
|
|
80
80
|
} = this.getStates();
|
|
81
81
|
|
|
82
|
-
if (values && values.length) {
|
|
82
|
+
if (values && (values === null || values === void 0 ? void 0 : values.length)) {
|
|
83
83
|
switch (type) {
|
|
84
84
|
case 'date':
|
|
85
85
|
this._initDatePickerFromValue(values, refreshPicker);
|
|
@@ -191,8 +191,25 @@ class MonthsGridFoundation extends _foundation.default {
|
|
|
191
191
|
pickerDate: values[1] || monthRight.pickerDate
|
|
192
192
|
}));
|
|
193
193
|
|
|
194
|
-
|
|
195
|
-
|
|
194
|
+
const validValue = Array.isArray(values) && values.filter(item => item).length > 1;
|
|
195
|
+
|
|
196
|
+
if (validValue) {
|
|
197
|
+
this.handleShowDateAndTime(_constants.strings.PANEL_TYPE_LEFT, adjustResult.monthLeft.pickerDate);
|
|
198
|
+
this.handleShowDateAndTime(_constants.strings.PANEL_TYPE_RIGHT, adjustResult.monthRight.pickerDate);
|
|
199
|
+
} else {
|
|
200
|
+
const selectedDate = values.find(item => item); // 如果日期不完整且输入日期不在面板范围内,则更新面板
|
|
201
|
+
|
|
202
|
+
if (selectedDate) {
|
|
203
|
+
const notLeftMonth = (selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate.getMonth()) !== monthLeft.pickerDate.getMonth();
|
|
204
|
+
const notRightMonth = (selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate.getMonth()) !== monthRight.pickerDate.getMonth();
|
|
205
|
+
|
|
206
|
+
if (notLeftMonth && notRightMonth) {
|
|
207
|
+
this.handleShowDateAndTime(_constants.strings.PANEL_TYPE_LEFT, adjustResult.monthLeft.pickerDate);
|
|
208
|
+
this.handleShowDateAndTime(_constants.strings.PANEL_TYPE_RIGHT, adjustResult.monthRight.pickerDate);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
} // init range
|
|
212
|
+
|
|
196
213
|
|
|
197
214
|
const formatToken = withTime ? _constants.strings.FORMAT_DATE_TIME : _constants.strings.FORMAT_FULL_DATE;
|
|
198
215
|
let rangeStart = values[0] && (0, _dateFns.format)(values[0], formatToken);
|
package/lib/cjs/input/input.css
CHANGED
package/lib/cjs/input/input.scss
CHANGED
|
@@ -463,6 +463,8 @@ $overflowList: #{$prefix}-overflow-list;
|
|
|
463
463
|
padding-top: $spacing-select_loading_wrapper-paddingTop;
|
|
464
464
|
padding-bottom: $spacing-select_loading_wrapper-paddingBottom;
|
|
465
465
|
cursor: not-allowed;
|
|
466
|
+
// make sure that spin align vertical, no need to make 20px as a spacing token here
|
|
467
|
+
height: 20px;
|
|
466
468
|
}
|
|
467
469
|
|
|
468
470
|
@import './rtl.scss';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import BaseFoundation, { DefaultAdapter } from '../base/foundation';
|
|
2
2
|
import { strings } from './constants';
|
|
3
3
|
import { WeekStartNumber } from './_utils/getMonthTable';
|
|
4
|
-
import {
|
|
4
|
+
import { PresetPosition, ValueType } from './foundation';
|
|
5
5
|
import { MonthDayInfo } from './monthFoundation';
|
|
6
6
|
import { ArrayElement } from '../utils/type';
|
|
7
7
|
declare type Type = ArrayElement<typeof strings.TYPE_SET>;
|
|
@@ -15,7 +15,8 @@ export declare type PanelType = 'left' | 'right';
|
|
|
15
15
|
export declare type YearMonthChangeType = 'prevMonth' | 'nextMonth' | 'prevYear' | 'nextYear';
|
|
16
16
|
export interface MonthsGridFoundationProps extends MonthsGridElementProps {
|
|
17
17
|
type?: Type;
|
|
18
|
-
|
|
18
|
+
/** may be null if selection is not complete when type is dateRange or dateTimeRange */
|
|
19
|
+
defaultValue?: (Date | null)[];
|
|
19
20
|
defaultPickerValue?: ValueType;
|
|
20
21
|
multiple?: boolean;
|
|
21
22
|
max?: number;
|
|
@@ -58,7 +59,11 @@ export interface MonthsGridFoundationProps extends MonthsGridElementProps {
|
|
|
58
59
|
renderDateInput?: any;
|
|
59
60
|
}
|
|
60
61
|
export interface MonthInfo {
|
|
62
|
+
/** The date displayed in the current date panel, update when switching year and month */
|
|
61
63
|
pickerDate: Date;
|
|
64
|
+
/**
|
|
65
|
+
* Default date or selected date (when selected)
|
|
66
|
+
*/
|
|
62
67
|
showDate: Date;
|
|
63
68
|
isTimePickerOpen: boolean;
|
|
64
69
|
isYearPickerOpen: boolean;
|
|
@@ -101,12 +106,12 @@ export default class MonthsGridFoundation extends BaseFoundation<MonthsGridAdapt
|
|
|
101
106
|
constructor(adapter: MonthsGridAdapter);
|
|
102
107
|
init(): void;
|
|
103
108
|
initDefaultPickerValue(): void;
|
|
104
|
-
updateSelectedFromProps(values:
|
|
109
|
+
updateSelectedFromProps(values: (Date | null)[], refreshPicker?: boolean): void;
|
|
105
110
|
calcDisabledTime(panelType: PanelType): any;
|
|
106
|
-
_initDatePickerFromValue(values:
|
|
107
|
-
_initDateRangePickerFromValue(values:
|
|
108
|
-
_initDateTimePickerFromValue(values:
|
|
109
|
-
_initDateTimeRangePickerFormValue(values:
|
|
111
|
+
_initDatePickerFromValue(values: Date[], refreshPicker?: boolean): void;
|
|
112
|
+
_initDateRangePickerFromValue(values: (Date | null)[], withTime?: boolean): void;
|
|
113
|
+
_initDateTimePickerFromValue(values: Date[]): void;
|
|
114
|
+
_initDateTimeRangePickerFormValue(values: (Date | null)[]): void;
|
|
110
115
|
destroy(): void;
|
|
111
116
|
/**
|
|
112
117
|
* sync change another panel month when change months from the else yam panel
|
|
@@ -58,7 +58,7 @@ export default class MonthsGridFoundation extends BaseFoundation {
|
|
|
58
58
|
rangeEnd
|
|
59
59
|
} = this.getStates();
|
|
60
60
|
|
|
61
|
-
if (values && values.length) {
|
|
61
|
+
if (values && (values === null || values === void 0 ? void 0 : values.length)) {
|
|
62
62
|
switch (type) {
|
|
63
63
|
case 'date':
|
|
64
64
|
this._initDatePickerFromValue(values, refreshPicker);
|
|
@@ -170,8 +170,25 @@ export default class MonthsGridFoundation extends BaseFoundation {
|
|
|
170
170
|
pickerDate: values[1] || monthRight.pickerDate
|
|
171
171
|
}));
|
|
172
172
|
|
|
173
|
-
|
|
174
|
-
|
|
173
|
+
const validValue = Array.isArray(values) && values.filter(item => item).length > 1;
|
|
174
|
+
|
|
175
|
+
if (validValue) {
|
|
176
|
+
this.handleShowDateAndTime(strings.PANEL_TYPE_LEFT, adjustResult.monthLeft.pickerDate);
|
|
177
|
+
this.handleShowDateAndTime(strings.PANEL_TYPE_RIGHT, adjustResult.monthRight.pickerDate);
|
|
178
|
+
} else {
|
|
179
|
+
const selectedDate = values.find(item => item); // 如果日期不完整且输入日期不在面板范围内,则更新面板
|
|
180
|
+
|
|
181
|
+
if (selectedDate) {
|
|
182
|
+
const notLeftMonth = (selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate.getMonth()) !== monthLeft.pickerDate.getMonth();
|
|
183
|
+
const notRightMonth = (selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate.getMonth()) !== monthRight.pickerDate.getMonth();
|
|
184
|
+
|
|
185
|
+
if (notLeftMonth && notRightMonth) {
|
|
186
|
+
this.handleShowDateAndTime(strings.PANEL_TYPE_LEFT, adjustResult.monthLeft.pickerDate);
|
|
187
|
+
this.handleShowDateAndTime(strings.PANEL_TYPE_RIGHT, adjustResult.monthRight.pickerDate);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
} // init range
|
|
191
|
+
|
|
175
192
|
|
|
176
193
|
const formatToken = withTime ? strings.FORMAT_DATE_TIME : strings.FORMAT_FULL_DATE;
|
|
177
194
|
let rangeStart = values[0] && format(values[0], formatToken);
|
package/lib/es/input/input.css
CHANGED
package/lib/es/input/input.scss
CHANGED
package/lib/es/select/select.css
CHANGED
|
@@ -463,6 +463,8 @@ $overflowList: #{$prefix}-overflow-list;
|
|
|
463
463
|
padding-top: $spacing-select_loading_wrapper-paddingTop;
|
|
464
464
|
padding-bottom: $spacing-select_loading_wrapper-paddingBottom;
|
|
465
465
|
cursor: not-allowed;
|
|
466
|
+
// make sure that spin align vertical, no need to make 20px as a spacing token here
|
|
467
|
+
height: 20px;
|
|
466
468
|
}
|
|
467
469
|
|
|
468
470
|
@import './rtl.scss';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@douyinfe/semi-foundation",
|
|
3
|
-
"version": "2.28.
|
|
3
|
+
"version": "2.28.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build:lib": "node ./scripts/compileLib.js",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"*.scss",
|
|
24
24
|
"*.css"
|
|
25
25
|
],
|
|
26
|
-
"gitHead": "
|
|
26
|
+
"gitHead": "24cfaffcba9337a3f4a3f8530e6e069d8d7b6bf0",
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@babel/plugin-transform-runtime": "^7.15.8",
|
|
29
29
|
"@babel/preset-env": "^7.15.8",
|
package/select/select.scss
CHANGED
|
@@ -463,6 +463,8 @@ $overflowList: #{$prefix}-overflow-list;
|
|
|
463
463
|
padding-top: $spacing-select_loading_wrapper-paddingTop;
|
|
464
464
|
padding-bottom: $spacing-select_loading_wrapper-paddingBottom;
|
|
465
465
|
cursor: not-allowed;
|
|
466
|
+
// make sure that spin align vertical, no need to make 20px as a spacing token here
|
|
467
|
+
height: 20px;
|
|
466
468
|
}
|
|
467
469
|
|
|
468
470
|
@import './rtl.scss';
|