Skip to content

Commit

Permalink
fix(DateRangePicker): fix week selected style when crossing the year (#…
Browse files Browse the repository at this point in the history
…3275)

* fix(DateRangePicker): 修复week模式下跨年区间样式显示问题

* fix(DateRangePicker): 引入isoWeek解决跨年周计算问题

* chore: remove comment

---------

Co-authored-by: wū yāng <[email protected]>
  • Loading branch information
huangchen1031 and uyarn authored Dec 13, 2024
1 parent 322b252 commit 72e9f22
Showing 1 changed file with 11 additions and 6 deletions.
17 changes: 11 additions & 6 deletions src/date-picker/base/Table.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import React, { useMemo } from 'react';
import classNames from 'classnames';
import dayjs from 'dayjs';
import isoWeek from 'dayjs/plugin/isoWeek';
import { useLocaleReceiver } from '../../locale/LocalReceiver';
import useConfig from '../../hooks/useConfig';
import DatePickerCell from './Cell';
Expand All @@ -8,6 +10,8 @@ import { SinglePanelProps } from '../panel/SinglePanel';
import { PanelContentProps } from '../panel/PanelContent';
import { parseToDayjs } from '../../_common/js/date-picker/format';

dayjs.extend(isoWeek);

export interface DatePickerTableProps
extends Pick<TdDatePickerProps, 'mode' | 'firstDayOfWeek' | 'format'>,
Pick<SinglePanelProps, 'onCellClick' | 'onCellMouseEnter' | 'onCellMouseLeave'>,
Expand Down Expand Up @@ -62,16 +66,17 @@ const DatePickerTable = (props: DatePickerTableProps) => {
if (Array.isArray(value)) {
if (!value.length) return {};

const targetYear = targetDayjs.year();
const targetWeek = targetDayjs.week();
const targetYear = targetDayjs.isoWeekYear();
const targetWeek = targetDayjs.isoWeek();
const isActive =
(targetYear === valueYearWeek.startYear && targetWeek === valueYearWeek.startWeek) ||
(targetYear === valueYearWeek.endYear && targetWeek === valueYearWeek.endWeek);
const isRange =
targetYear >= valueYearWeek.startYear &&
targetYear <= valueYearWeek.endYear &&
targetWeek > valueYearWeek.startWeek &&
targetWeek < valueYearWeek.endWeek;
(targetYear > valueYearWeek.startYear ||
(targetYear === valueYearWeek.startYear && targetWeek > valueYearWeek.startWeek)) &&
(targetYear < valueYearWeek.endYear ||
(targetYear === valueYearWeek.endYear && targetWeek < valueYearWeek.endWeek));

return {
// 同年同周
[`${classPrefix}-date-picker__table-${mode}-row--active`]: isActive,
Expand Down

0 comments on commit 72e9f22

Please sign in to comment.