Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: 修复右侧面板月份展示错误 #1802

Merged
merged 2 commits into from
Dec 14, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions src/date-picker/DateRangePicker.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,14 @@ import { TdDateRangePickerProps } from './type';
import { RangeInputPopup } from '../range-input';
import RangePanel from './panel/RangePanel';
import useRange from './hooks/useRange';
import { initYearMonthTime } from './hooks/useRangeValue';
import { parseToDayjs, formatTime, formatDate, isValidDate, getDefaultFormat } from '../_common/js/date-picker/format';
import {
parseToDayjs,
formatTime,
formatDate,
isValidDate,
getDefaultFormat,
initYearMonthTime,
} from '../_common/js/date-picker/format';
import { subtractMonth, addMonth, extractTimeObj } from '../_common/js/date-picker/utils';
import { dateRangePickerDefaultProps } from './defaultProps';
import log from '../_common/js/log';
Expand Down Expand Up @@ -77,8 +83,9 @@ const DateRangePicker = forwardRef<HTMLDivElement, DateRangePickerProps>((props,

// 空数据重置为当前年月
if (!value.length) {
setYear(initYearMonthTime({ value, mode, format }).year);
setMonth(initYearMonthTime({ value, mode, format, enableTimePicker }).month);
const { year: defaultYear, month: defaultMonth } = initYearMonthTime({ value, mode, format, enableTimePicker });
setYear(defaultYear);
setMonth(defaultMonth);
} else if (value.length === 2 && !enableTimePicker) {
// 确保右侧面板月份比左侧大 避免两侧面板月份一致
const nextMonth = value.map((v: string) => parseToDayjs(v, format).month());
Expand Down
43 changes: 2 additions & 41 deletions src/date-picker/hooks/useRangeValue.ts
Original file line number Diff line number Diff line change
@@ -1,57 +1,18 @@
import { useState, useEffect } from 'react';
import dayjs from 'dayjs';
import useControlled from '../../hooks/useControlled';
import { TdDateRangePickerProps, DateRangeValue } from '../type';
import { TdDateRangePickerProps } from '../type';
import {
isValidDate,
formatDate,
formatTime,
getDefaultFormat,
parseToDayjs,
initYearMonthTime,
} from '../../_common/js/date-picker/format';
import { extractTimeFormat } from '../../_common/js/date-picker/utils';
import log from '../../_common/js/log';

export const PARTIAL_MAP = { first: 'start', second: 'end' };

// 初始化面板年份月份
export function initYearMonthTime({
value,
mode = 'date',
format,
timeFormat = 'HH:mm:ss',
enableTimePicker,
}: {
value: DateRangeValue;
mode: string;
format: string;
timeFormat?: string;
enableTimePicker?: boolean;
}) {
const defaultYearMonthTime = {
year: [dayjs().year(), dayjs().year()],
month: [dayjs().month(), dayjs().month()],
time: [dayjs().format(timeFormat), dayjs().format(timeFormat)],
};
if (mode === 'year') {
defaultYearMonthTime.year[1] += 10;
} else if (mode === 'month' || mode === 'quarter') {
defaultYearMonthTime.year[1] += 1;
} else if ((mode === 'date' || mode === 'week') && !enableTimePicker) {
defaultYearMonthTime.month[1] += 1;
}

if (!value || !Array.isArray(value) || !value.length) {
return defaultYearMonthTime;
}

return {
year: value.map((v) => parseToDayjs(v, format).year()),
month: value.map((v) => parseToDayjs(v, format).month()),
time: value.map((v) => parseToDayjs(v, format).format(timeFormat)),
};
}

export default function useRange(props: TdDateRangePickerProps) {
const [value, onChange] = useControlled(props, 'value', props.onChange);

Expand Down
28 changes: 12 additions & 16 deletions test/snap/__snapshots__/csr.test.jsx.snap
Original file line number Diff line number Diff line change
Expand Up @@ -69970,22 +69970,20 @@ exports[`csr snapshot test > csr test src/date-picker/_example/panel.jsx 1`] = `
>
<div
class="t-input__wrap"
value=" "
value="Jan"
>
<div
class="t-input t-is-readonly t-size-m t-align-left t-is-default t-input--prefix t-input--suffix"
>
<div
class="t-input__prefix"
>
12
</div>
/>
<input
class="t-input__inner"
placeholder=""
placeholder="please select"
readonly=""
type="text"
value=" "
value="Jan"
/>
<span
class="t-input__suffix t-input__suffix-icon"
Expand Down Expand Up @@ -70018,7 +70016,7 @@ exports[`csr snapshot test > csr test src/date-picker/_example/panel.jsx 1`] = `
>
<div
class="t-input__wrap"
value="2020"
value="2021"
>
<div
class="t-input t-is-readonly t-size-m t-align-left t-is-default t-input--prefix t-input--suffix"
Expand All @@ -70031,7 +70029,7 @@ exports[`csr snapshot test > csr test src/date-picker/_example/panel.jsx 1`] = `
placeholder="please select"
readonly=""
type="text"
value="2020"
value="2021"
/>
<span
class="t-input__suffix t-input__suffix-icon"
Expand Down Expand Up @@ -74618,22 +74616,20 @@ exports[`csr snapshot test > csr test src/date-picker/_example/panel.jsx 1`] = `
>
<div
class="t-input__wrap"
value=" "
value="Jan"
>
<div
class="t-input t-is-readonly t-size-m t-align-left t-is-default t-input--prefix t-input--suffix"
>
<div
class="t-input__prefix"
>
12
</div>
/>
<input
class="t-input__inner"
placeholder=""
placeholder="please select"
readonly=""
type="text"
value=" "
value="Jan"
/>
<span
class="t-input__suffix t-input__suffix-icon"
Expand Down Expand Up @@ -74666,7 +74662,7 @@ exports[`csr snapshot test > csr test src/date-picker/_example/panel.jsx 1`] = `
>
<div
class="t-input__wrap"
value="2020"
value="2021"
>
<div
class="t-input t-is-readonly t-size-m t-align-left t-is-default t-input--prefix t-input--suffix"
Expand All @@ -74679,7 +74675,7 @@ exports[`csr snapshot test > csr test src/date-picker/_example/panel.jsx 1`] = `
placeholder="please select"
readonly=""
type="text"
value="2020"
value="2021"
/>
<span
class="t-input__suffix t-input__suffix-icon"
Expand Down