Skip to content

Commit 8a330dc

Browse files
committed
feat: More className for customize style
1 parent 0dfc8d6 commit 8a330dc

File tree

2 files changed

+47
-15
lines changed

2 files changed

+47
-15
lines changed

src/hooks/useCellClassName.ts

Lines changed: 40 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,21 +30,35 @@ export default function useCellClassName<DateType>({
3030
function getClassName(currentDate: DateType) {
3131
const prevDate = offsetCell(currentDate, -1);
3232
const nextDate = offsetCell(currentDate, 1);
33+
34+
const rangeStart = getValue(rangedValue, 0);
35+
const rangeEnd = getValue(rangedValue, 1);
36+
37+
const hoverStart = getValue(hoverRangedValue, 0);
38+
const hoverEnd = getValue(hoverRangedValue, 1);
39+
3340
const isRangeHovered = isInRange(
3441
generateConfig,
35-
getValue(hoverRangedValue, 0),
36-
getValue(hoverRangedValue, 1),
42+
hoverStart,
43+
hoverEnd,
3744
currentDate,
3845
);
3946

4047
function isRangeStart(date: DateType) {
41-
return isSameCell(getValue(rangedValue, 0), date);
48+
return isSameCell(rangeStart, date);
4249
}
4350
function isRangeEnd(date: DateType) {
44-
return isSameCell(getValue(rangedValue, 1), date);
51+
return isSameCell(rangeEnd, date);
4552
}
46-
const isHoverStart = isSameCell(getValue(hoverRangedValue, 0), currentDate);
47-
const isHoverEnd = isSameCell(getValue(hoverRangedValue, 1), currentDate);
53+
const isHoverStart = isSameCell(hoverStart, currentDate);
54+
const isHoverEnd = isSameCell(hoverEnd, currentDate);
55+
56+
const isHoverEdgeStart =
57+
(isRangeHovered || isHoverEnd) &&
58+
(!isInView(prevDate) || isRangeEnd(prevDate));
59+
const isHoverEdgeEnd =
60+
(isRangeHovered || isHoverStart) &&
61+
(!isInView(nextDate) || isRangeStart(nextDate));
4862

4963
return {
5064
// In view
@@ -53,25 +67,37 @@ export default function useCellClassName<DateType>({
5367
// Range
5468
[`${cellPrefixCls}-in-range`]: isInRange<DateType>(
5569
generateConfig,
56-
getValue(rangedValue, 0),
57-
getValue(rangedValue, 1),
70+
rangeStart,
71+
rangeEnd,
5872
currentDate,
5973
),
6074
[`${cellPrefixCls}-range-start`]: isRangeStart(currentDate),
6175
[`${cellPrefixCls}-range-end`]: isRangeEnd(currentDate),
76+
[`${cellPrefixCls}-range-start-single`]:
77+
isRangeStart(currentDate) && !rangeEnd,
78+
[`${cellPrefixCls}-range-end-single`]:
79+
isRangeEnd(currentDate) && !rangeStart,
80+
[`${cellPrefixCls}-range-start-near-hover`]:
81+
isRangeStart(currentDate) &&
82+
(isSameCell(prevDate, hoverStart) ||
83+
isInRange(generateConfig, hoverStart, hoverEnd, prevDate)),
84+
[`${cellPrefixCls}-range-end-near-hover`]:
85+
isRangeEnd(currentDate) &&
86+
(isSameCell(nextDate, hoverEnd) ||
87+
isInRange(generateConfig, hoverStart, hoverEnd, nextDate)),
6288

6389
// Range Hover
6490
[`${cellPrefixCls}-range-hover`]: isRangeHovered,
6591
[`${cellPrefixCls}-range-hover-start`]: isHoverStart,
6692
[`${cellPrefixCls}-range-hover-end`]: isHoverEnd,
6793

6894
// Range Edge
69-
[`${cellPrefixCls}-range-hover-edge-start`]:
70-
(isRangeHovered || isHoverEnd) &&
71-
(!isInView(prevDate) || isRangeEnd(prevDate)),
72-
[`${cellPrefixCls}-range-hover-edge-end`]:
73-
(isRangeHovered || isHoverStart) &&
74-
(!isInView(nextDate) || isRangeStart(nextDate)),
95+
[`${cellPrefixCls}-range-hover-edge-start`]: isHoverEdgeStart,
96+
[`${cellPrefixCls}-range-hover-edge-end`]: isHoverEdgeEnd,
97+
[`${cellPrefixCls}-range-hover-edge-start-near-range`]:
98+
isHoverEdgeStart && isSameCell(prevDate, rangeEnd),
99+
[`${cellPrefixCls}-range-hover-edge-end-near-range`]:
100+
isHoverEdgeEnd && isSameCell(nextDate, rangeStart),
75101

76102
// Others
77103
[`${cellPrefixCls}-today`]: isSameCell(today, currentDate),

tests/range.spec.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -653,7 +653,7 @@ describe('Picker.Range', () => {
653653
it('range edge className', () => {
654654
const wrapper = mount(
655655
<MomentRangePicker
656-
value={[getMoment('1990-09-20'), getMoment('1990-09-20')]}
656+
value={[getMoment('2019-12-20'), getMoment('2019-12-20')]}
657657
/>,
658658
);
659659

@@ -663,6 +663,9 @@ describe('Picker.Range', () => {
663663
expect(
664664
wrapper.findCell(19).hasClass('rc-picker-cell-range-hover-edge-end'),
665665
).toBeTruthy();
666+
expect(
667+
wrapper.findCell(20).hasClass('rc-picker-cell-range-start-near-hover'),
668+
).toBeTruthy();
666669
wrapper.findCell(10).simulate('mouseOut');
667670

668671
// Start edge
@@ -671,6 +674,9 @@ describe('Picker.Range', () => {
671674
expect(
672675
wrapper.findCell(21).hasClass('rc-picker-cell-range-hover-edge-start'),
673676
).toBeTruthy();
677+
expect(
678+
wrapper.findCell(20).hasClass('rc-picker-cell-range-end-near-hover'),
679+
).toBeTruthy();
674680
wrapper.findCell(28).simulate('mouseOut');
675681
});
676682
});

0 commit comments

Comments
 (0)