From 87e9d855e5a396ea25bfcd15fd6120aabaf0b970 Mon Sep 17 00:00:00 2001 From: Kyrie Lin Date: Tue, 11 Apr 2023 15:03:31 +0800 Subject: [PATCH] =?UTF-8?q?feat(datepicker):=20=E4=BC=98=E5=8C=96=E5=91=A8?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E5=99=A8=E9=AB=98=E4=BA=AE=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E6=80=A7=E8=83=BD=E9=97=AE=E9=A2=98=20(#2136?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/_common | 2 +- src/date-picker/base/Table.tsx | 38 ++++++++++++++++++++++++---------- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/_common b/src/_common index f8c5776da..fc9761ece 160000 --- a/src/_common +++ b/src/_common @@ -1 +1 @@ -Subproject commit f8c5776dab7ed17729b907f71867dbee84aa5f5e +Subproject commit fc9761ecea37456a73258e001e22f73aac1a0b8c diff --git a/src/date-picker/base/Table.tsx b/src/date-picker/base/Table.tsx index 80229e123..a92e0e4ab 100644 --- a/src/date-picker/base/Table.tsx +++ b/src/date-picker/base/Table.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useMemo } from 'react'; import classNames from 'classnames'; import { useLocaleReceiver } from '../../locale/LocalReceiver'; import useConfig from '../../hooks/useConfig'; @@ -36,8 +36,7 @@ const DatePickerTable = (props: DatePickerTableProps) => { const showThead = mode === 'date' || mode === 'week'; - // 高亮周区间 - const weekRowClass = (value, format, targetValue) => { + const valueYearWeek = useMemo(() => { if (mode !== 'week' || !value) return {}; if (Array.isArray(value)) { @@ -48,13 +47,31 @@ const DatePickerTable = (props: DatePickerTableProps) => { const endYear = endObj?.year?.(); const endWeek = endObj?.locale?.(local.dayjsLocale)?.week?.(); - const targetObj = parseToDayjs(targetValue, format); - const targetYear = targetObj.year(); - const targetWeek = targetObj.week(); + return { startYear, startWeek, endYear, endWeek }; + } + + const valueObj = parseToDayjs(value, format).locale(local.dayjsLocale); + return { year: valueObj.year(), week: valueObj.week() }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [mode, value, format]); + + // 高亮周区间 + const weekRowClass = (value, targetDayjs) => { + if (mode !== 'week' || !value) return {}; + + if (Array.isArray(value)) { + if (!value.length) return {}; + + const targetYear = targetDayjs.year(); + const targetWeek = targetDayjs.week(); const isActive = - (targetYear === startYear && targetWeek === startWeek) || (targetYear === endYear && targetWeek === endWeek); + (targetYear === valueYearWeek.startYear && targetWeek === valueYearWeek.startWeek) || + (targetYear === valueYearWeek.endYear && targetWeek === valueYearWeek.endWeek); const isRange = - targetYear >= startYear && targetYear <= endYear && targetWeek > startWeek && targetWeek < endWeek; + targetYear >= valueYearWeek.startYear && + targetYear <= valueYearWeek.endYear && + targetWeek > valueYearWeek.startWeek && + targetWeek < valueYearWeek.endWeek; return { // 同年同周 [`${classPrefix}-date-picker__table-${mode}-row--active`]: isActive, @@ -64,8 +81,7 @@ const DatePickerTable = (props: DatePickerTableProps) => { return { [`${classPrefix}-date-picker__table-${mode}-row--active`]: - parseToDayjs(value, format).locale(local.dayjsLocale).week() === - parseToDayjs(targetValue, format).locale(local.dayjsLocale).week(), + valueYearWeek.year === targetDayjs.year() && valueYearWeek.week === targetDayjs.week(), }; }; @@ -86,7 +102,7 @@ const DatePickerTable = (props: DatePickerTableProps) => { {row.map((col: any, j: number) => (