diff --git a/src/_common b/src/_common index 9cda79e0f..4a1314b1a 160000 --- a/src/_common +++ b/src/_common @@ -1 +1 @@ -Subproject commit 9cda79e0f081494413e26fb279e93c03c9450e88 +Subproject commit 4a1314b1a9a7a50eb035fa403e55aa3141433e01 diff --git a/src/date-picker/DatePicker.tsx b/src/date-picker/DatePicker.tsx index 3c46eddb4..5ab45c26f 100644 --- a/src/date-picker/DatePicker.tsx +++ b/src/date-picker/DatePicker.tsx @@ -61,13 +61,13 @@ const DatePicker = forwardRef((props, ref) => { useEffect(() => { // 面板展开重置数据 if (popupVisible) { - setYear(parseToDayjs(value || new Date(), format).year()); - setMonth(parseToDayjs(value || new Date(), format).month()); - setTime(formatTime(value || new Date(), timeFormat)); + setYear(parseToDayjs(value, format).year()); + setMonth(parseToDayjs(value, format).month()); + setTime(formatTime(value, timeFormat)); value && setCacheValue(formatDate(value, { format, targetFormat: format })); } // eslint-disable-next-line - }, [value, popupVisible]); + }, [popupVisible]); // 日期 hover function onCellMouseEnter(date: Date) { diff --git a/src/date-picker/DateRangePicker.tsx b/src/date-picker/DateRangePicker.tsx index 8c3336724..c9619d391 100644 --- a/src/date-picker/DateRangePicker.tsx +++ b/src/date-picker/DateRangePicker.tsx @@ -72,7 +72,6 @@ const DateRangePicker = forwardRef((props, // 面板展开重置数据 if (popupVisible) { setIsSelected(false); - setIsFirstValueSelected(false); setCacheValue(formatDate(value || [], { format, targetFormat: format })); setTime(formatTime(value || [dayjs().format(timeFormat), dayjs().format(timeFormat)], timeFormat)); @@ -91,9 +90,13 @@ const DateRangePicker = forwardRef((props, setYear(value.map((v: string) => parseToDayjs(v || new Date(), format).year())); setMonth(value.map((v: string) => parseToDayjs(v || new Date(), format).month())); } + } else { + setIsHoverCell(false); + setIsFirstValueSelected(false); + setInputValue(formatDate(value || [], { format, targetFormat: format })); } // eslint-disable-next-line - }, [value, popupVisible]); + }, [popupVisible]); // 日期 hover function onCellMouseEnter(date: Date) { @@ -139,20 +142,22 @@ const DateRangePicker = forwardRef((props, // 确保两端都是有效值 const notValidIndex = nextValue.findIndex((v) => !v || !isValidDate(v, format)); - // 首次点击不关闭、确保两端都有有效值并且无时间选择器时点击后自动关闭 - if (notValidIndex === -1 && nextValue.length === 2 && !enableTimePicker && isFirstValueSelected) { + // 当两端都有有效值时更改 value + if (notValidIndex === -1 && nextValue.length === 2) { onChange(formatDate(nextValue, { format, targetFormat: valueType }), { dayjsValue: nextValue.map((v) => dayjs(v)), trigger: 'pick', }); - setIsFirstValueSelected(false); - setPopupVisible(false); - } else if (notValidIndex !== -1) { - setActiveIndex(notValidIndex); + } + + // 首次点击不关闭、确保两端都有有效值并且无时间选择器时点击后自动关闭 + if (!isFirstValueSelected) { + let nextIndex = notValidIndex; + if (nextIndex === -1) nextIndex = activeIndex ? 0 : 1; + setActiveIndex(nextIndex); setIsFirstValueSelected(true); } else { - setActiveIndex(activeIndex ? 0 : 1); - setIsFirstValueSelected(true); + setPopupVisible(false); } } @@ -232,23 +237,25 @@ const DateRangePicker = forwardRef((props, const notValidIndex = nextValue.findIndex((v) => !v || !isValidDate(v, format)); - // 首次点击不关闭、确保两端都有有效值并且无时间选择器时点击后自动关闭 - if (notValidIndex === -1 && nextValue.length === 2 && isFirstValueSelected) { + // 当两端都有有效值时更改 value + if (notValidIndex === -1 && nextValue.length === 2) { onChange(formatDate(nextValue, { format, targetFormat: valueType }), { dayjsValue: nextValue.map((v) => dayjs(v)), trigger: 'confirm', }); setYear(nextValue.map((v) => dayjs(v, format).year())); setMonth(nextValue.map((v) => dayjs(v, format).month())); - setPopupVisible(false); - } else if (notValidIndex !== -1) { - setActiveIndex(notValidIndex); - } else { - setActiveIndex(activeIndex ? 0 : 1); } - // 记录选中一次 - setIsFirstValueSelected(true); + // 首次点击不关闭、确保两端都有有效值并且无时间选择器时点击后自动关闭 + if (!isFirstValueSelected) { + let nextIndex = notValidIndex; + if (nextIndex === -1) nextIndex = activeIndex ? 0 : 1; + setActiveIndex(nextIndex); + setIsFirstValueSelected(true); + } else { + setPopupVisible(false); + } } // 预设 diff --git a/src/date-picker/DateRangePickerPanel.tsx b/src/date-picker/DateRangePickerPanel.tsx index fe122a859..ed6b26bed 100644 --- a/src/date-picker/DateRangePickerPanel.tsx +++ b/src/date-picker/DateRangePickerPanel.tsx @@ -98,7 +98,7 @@ const DateRangePickerPanel = forwardRef dayjs(v)), trigger: 'pick', diff --git a/src/date-picker/__tests__/__snapshots__/date-picker.test.tsx.snap b/src/date-picker/__tests__/__snapshots__/date-picker.test.tsx.snap index 6622dc1b3..a20658f58 100644 --- a/src/date-picker/__tests__/__snapshots__/date-picker.test.tsx.snap +++ b/src/date-picker/__tests__/__snapshots__/date-picker.test.tsx.snap @@ -2847,7 +2847,7 @@ exports[`panel.jsx 1`] = `
- 08:00:00 + 00:00:00
  • 00
  • @@ -2910,7 +2910,7 @@ exports[`panel.jsx 1`] = ` 07
  • 08
  • diff --git a/src/date-picker/__tests__/__snapshots__/date-range-picker.test.tsx.snap b/src/date-picker/__tests__/__snapshots__/date-range-picker.test.tsx.snap index b64586d1f..e7819d178 100644 --- a/src/date-picker/__tests__/__snapshots__/date-range-picker.test.tsx.snap +++ b/src/date-picker/__tests__/__snapshots__/date-range-picker.test.tsx.snap @@ -3021,7 +3021,7 @@ exports[`panel.jsx 1`] = `
    - 08:00:00 + 00:00:00
  • 00
  • @@ -3084,7 +3084,7 @@ exports[`panel.jsx 1`] = ` 07
  • 08
  • diff --git a/src/date-picker/__tests__/date-range-picker.test.tsx b/src/date-picker/__tests__/date-range-picker.test.tsx index 013fbc7c3..c112c1047 100644 --- a/src/date-picker/__tests__/date-range-picker.test.tsx +++ b/src/date-picker/__tests__/date-range-picker.test.tsx @@ -208,7 +208,7 @@ describe('DateRangePicker', () => { fireEvent.click(firstTBody.firstChild.firstChild.firstChild); }); setTimeout(async () => { - expect(changeFn).toBeCalledTimes(1); + expect(changeFn).toBeCalledTimes(2); expect(pickFn).toBeCalledTimes(2); }, 0); }); diff --git a/src/date-picker/hooks/useRange.tsx b/src/date-picker/hooks/useRange.tsx index f1551cd86..692605932 100644 --- a/src/date-picker/hooks/useRange.tsx +++ b/src/date-picker/hooks/useRange.tsx @@ -126,9 +126,6 @@ export default function useRange(props: TdDateRangePickerProps) { inputRef.current.focus({ position: indexMap[activeIndex] }); return setPopupVisible(true); } - if (!visible) { - setIsHoverCell(false); - } setPopupVisible(visible); }, diff --git a/test/ssr/__snapshots__/ssr.test.js.snap b/test/ssr/__snapshots__/ssr.test.js.snap index c1943fe8f..041601504 100644 --- a/test/ssr/__snapshots__/ssr.test.js.snap +++ b/test/ssr/__snapshots__/ssr.test.js.snap @@ -260,7 +260,7 @@ exports[`ssr snapshot test renders ./src/date-picker/_example/first-day-of-week. exports[`ssr snapshot test renders ./src/date-picker/_example/month.jsx correctly 1`] = `"
    ~
    "`; -exports[`ssr snapshot test renders ./src/date-picker/_example/panel.jsx correctly 1`] = `"
    MonTueWedThuFriSatSun
    29
    30
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    1
    2
    3
    4
    5
    6
    7
    8
    9
    MonTueWedThuFriSatSun
    29
    30
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    1
    2
    3
    4
    5
    6
    7
    8
    9
    08:00:00
    MonTueWedThuFriSatSun
    29
    30
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    1
    2
    3
    4
    5
    6
    7
    8
    9
    MonTueWedThuFriSatSun
    27
    28
    29
    30
    31
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    1
    2
    3
    4
    5
    6
    MonTueWedThuFriSatSun
    29
    30
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    1
    2
    3
    4
    5
    6
    7
    8
    9
    08:00:00
    "`; +exports[`ssr snapshot test renders ./src/date-picker/_example/panel.jsx correctly 1`] = `"
    MonTueWedThuFriSatSun
    29
    30
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    1
    2
    3
    4
    5
    6
    7
    8
    9
    MonTueWedThuFriSatSun
    29
    30
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    1
    2
    3
    4
    5
    6
    7
    8
    9
    00:00:00
    MonTueWedThuFriSatSun
    29
    30
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    1
    2
    3
    4
    5
    6
    7
    8
    9
    MonTueWedThuFriSatSun
    27
    28
    29
    30
    31
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    1
    2
    3
    4
    5
    6
    MonTueWedThuFriSatSun
    29
    30
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    1
    2
    3
    4
    5
    6
    7
    8
    9
    08:00:00
    "`; exports[`ssr snapshot test renders ./src/date-picker/_example/quarter.jsx correctly 1`] = `"
    ~
    "`;