Skip to content

Commit 6f22c7e

Browse files
committed
refactor: Move cell className logic into hooks
1 parent e7482d9 commit 6f22c7e

File tree

3 files changed

+78
-47
lines changed

3 files changed

+78
-47
lines changed

src/hooks/useCellClassName.ts

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import { isInRange } from '../utils/dateUtil';
2+
import { GenerateConfig } from '../generate';
3+
import { RangeValue, NullableDateType } from '../interface';
4+
5+
export default function useCellClassName<DateType>({
6+
cellPrefixCls,
7+
generateConfig,
8+
rangedValue,
9+
hoverRangedValue,
10+
isSameCell,
11+
today,
12+
value,
13+
}: {
14+
cellPrefixCls: string;
15+
generateConfig: GenerateConfig<DateType>;
16+
isSameCell: (
17+
current: NullableDateType<DateType>,
18+
target: NullableDateType<DateType>,
19+
) => boolean;
20+
rangedValue?: RangeValue<DateType>;
21+
hoverRangedValue?: RangeValue<DateType>;
22+
today?: DateType;
23+
value?: DateType;
24+
}) {
25+
function getClassName(currentDate: DateType) {
26+
return {
27+
[`${cellPrefixCls}-in-range`]: isInRange<DateType>(
28+
generateConfig,
29+
rangedValue && rangedValue[0],
30+
rangedValue && rangedValue[1],
31+
currentDate,
32+
),
33+
[`${cellPrefixCls}-range-start`]: isSameCell(
34+
rangedValue && rangedValue[0],
35+
currentDate,
36+
),
37+
[`${cellPrefixCls}-range-end`]: isSameCell(
38+
rangedValue && rangedValue[1],
39+
currentDate,
40+
),
41+
[`${cellPrefixCls}-range-hover`]: isInRange(
42+
generateConfig,
43+
hoverRangedValue && hoverRangedValue[0],
44+
hoverRangedValue && hoverRangedValue[1],
45+
currentDate,
46+
),
47+
[`${cellPrefixCls}-range-hover-start`]: isSameCell(
48+
hoverRangedValue && hoverRangedValue[0],
49+
currentDate,
50+
),
51+
[`${cellPrefixCls}-range-hover-end`]: isSameCell(
52+
hoverRangedValue && hoverRangedValue[1],
53+
currentDate,
54+
),
55+
[`${cellPrefixCls}-today`]: isSameCell(today, currentDate),
56+
[`${cellPrefixCls}-selected`]: isSameCell(value, currentDate),
57+
};
58+
}
59+
60+
return getClassName;
61+
}

src/panels/DatePanel/DateBody.tsx

Lines changed: 13 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ import {
66
getWeekStartDate,
77
isSameDate,
88
isSameMonth,
9-
isInRange,
109
} from '../../utils/dateUtil';
1110
import { Locale } from '../../interface';
1211
import RangeContext from '../../RangeContext';
1312
import PanelContext from '../../PanelContext';
13+
import useCellClassName from '../../hooks/useCellClassName';
1414

1515
export type DateRender<DateType> = (
1616
currentDate: DateType,
@@ -76,6 +76,16 @@ function DateBody<DateType>({
7676
// =============================== Date ===============================
7777
const rows: React.ReactNode[] = [];
7878
const startDate = getWeekStartDate(locale.locale, generateConfig, viewDate);
79+
const getCellClassName = useCellClassName({
80+
cellPrefixCls: datePrefixCls,
81+
today,
82+
value,
83+
generateConfig,
84+
rangedValue,
85+
hoverRangedValue,
86+
isSameCell: (current, target) =>
87+
isSameDate(generateConfig, current, target),
88+
});
7989

8090
for (let y = 0; y < rowCount; y += 1) {
8191
const row: React.ReactNode[] = [];
@@ -118,48 +128,8 @@ function DateBody<DateType>({
118128
currentDate,
119129
viewDate,
120130
),
121-
[`${datePrefixCls}-in-range`]: isInRange(
122-
generateConfig,
123-
rangedValue && rangedValue[0],
124-
rangedValue && rangedValue[1],
125-
currentDate,
126-
),
127-
[`${datePrefixCls}-range-start`]: isSameDate(
128-
generateConfig,
129-
rangedValue && rangedValue[0],
130-
currentDate,
131-
),
132-
[`${datePrefixCls}-range-end`]: isSameDate(
133-
generateConfig,
134-
rangedValue && rangedValue[1],
135-
currentDate,
136-
),
137-
[`${datePrefixCls}-range-hover`]: isInRange(
138-
generateConfig,
139-
hoverRangedValue && hoverRangedValue[0],
140-
hoverRangedValue && hoverRangedValue[1],
141-
currentDate,
142-
),
143-
[`${datePrefixCls}-range-hover-start`]: isSameDate(
144-
generateConfig,
145-
hoverRangedValue && hoverRangedValue[0],
146-
currentDate,
147-
),
148-
[`${datePrefixCls}-range-hover-end`]: isSameDate(
149-
generateConfig,
150-
hoverRangedValue && hoverRangedValue[1],
151-
currentDate,
152-
),
153-
[`${datePrefixCls}-today`]: isSameDate(
154-
generateConfig,
155-
today,
156-
currentDate,
157-
),
158-
[`${datePrefixCls}-selected`]: isSameDate(
159-
generateConfig,
160-
value,
161-
currentDate,
162-
),
131+
132+
...getCellClassName(currentDate),
163133
})}
164134
>
165135
{dateRender ? (

src/utils/dateUtil.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,11 @@ export function isEqual<DateType>(
108108
/** Between in date but not equal of date */
109109
export function isInRange<DateType>(
110110
generateConfig: GenerateConfig<DateType>,
111-
startDate: DateType,
112-
endDate: DateType,
113-
current: DateType,
111+
startDate: NullableDateType<DateType>,
112+
endDate: NullableDateType<DateType>,
113+
current: NullableDateType<DateType>,
114114
) {
115-
if (!startDate || !endDate) {
115+
if (!startDate || !endDate || !current) {
116116
return false;
117117
}
118118

0 commit comments

Comments
 (0)