Skip to content

Commit 2019880

Browse files
authored
test: for time pickervalue (#741)
1 parent 41cbcc0 commit 2019880

File tree

4 files changed

+44
-12
lines changed

4 files changed

+44
-12
lines changed

docs/examples/debug.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,13 +149,14 @@ export default () => {
149149
<SinglePicker
150150
// Shared
151151
{...sharedLocale}
152-
disabledDate={(date) => date.isBefore(dayjs())}
152+
// disabledDate={(date) => date.isBefore(dayjs())}
153153
// disabledTime={() => ({
154154
// disabledHours: () => [0, 1, 2, 3, 4, 5],
155155
// disabledMinutes: () => [0, 1, 2, 3, 4, 5],
156156
// disabledSeconds: () => [0, 1, 2, 3, 4, 5],
157157
// })}
158158
open
159+
picker="time"
159160
ref={singleRef}
160161
suffixIcon="🧶"
161162
// showTime={{
@@ -165,7 +166,7 @@ export default () => {
165166
// disabledSeconds: () => [0, 1, 2, 3, 4, 5],
166167
// }),
167168
// }}
168-
showTime={{}}
169+
// showTime={{}}
169170
onChange={(...args) => {
170171
console.log('🔥 Change:', ...args);
171172
}}

src/PickerInput/hooks/useRangePickerValue.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,21 @@ export default function useRangePickerValue<DateType extends object, ValueType e
5252
minDate?: DateType,
5353
maxDate?: DateType,
5454
): [currentIndexPickerValue: DateType, setCurrentIndexPickerValue: (value: DateType) => void] {
55+
const isTimePicker = pickerMode === 'time';
56+
5557
// ======================== Active ========================
5658
// `activeIndex` must be valid to avoid getting empty `pickerValue`
5759
const mergedActiveIndex = activeIndex || 0;
5860

5961
// ===================== Picker Value =====================
60-
const getDefaultPickerValue = (index: number) =>
61-
defaultPickerValue[index] || calendarValue[index] || generateConfig.getNow();
62+
const getDefaultPickerValue = (index: number) => {
63+
let now = generateConfig.getNow();
64+
if (isTimePicker) {
65+
now = fillTime(generateConfig, now);
66+
}
67+
68+
return defaultPickerValue[index] || calendarValue[index] || now;
69+
};
6270

6371
// Align `pickerValue` with `showTime.defaultValue`
6472
const [startPickerValue, endPickerValue] = pickerValue;
@@ -80,11 +88,11 @@ export default function useRangePickerValue<DateType extends object, ValueType e
8088
const current = [mergedStartPickerValue, mergedEndPickerValue][mergedActiveIndex];
8189

8290
// Merge the `showTime.defaultValue` into `pickerValue`
83-
return pickerMode === 'time'
91+
return isTimePicker
8492
? current
8593
: fillTime(generateConfig, current, timeDefaultValue[mergedActiveIndex]);
8694
}, [
87-
pickerMode,
95+
isTimePicker,
8896
mergedStartPickerValue,
8997
mergedEndPickerValue,
9098
mergedActiveIndex,
@@ -155,7 +163,7 @@ export default function useRangePickerValue<DateType extends object, ValueType e
155163
useLayoutEffect(() => {
156164
if (open) {
157165
if (!defaultPickerValue[mergedActiveIndex]) {
158-
let nextPickerValue: DateType = generateConfig.getNow();
166+
let nextPickerValue: DateType = isTimePicker ? null : generateConfig.getNow();
159167

160168
/**
161169
* 1. If has prevActiveIndex, use it to avoid panel jump

tests/picker.spec.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1376,4 +1376,18 @@ describe('Picker.Basic', () => {
13761376
document.querySelector('.rc-picker-time-panel-column:first-child li').textContent,
13771377
).toEqual('01');
13781378
});
1379+
1380+
it('time picker should align to 0', () => {
1381+
jest.useFakeTimers().setSystemTime(getDay('1990-09-03 01:03:05').valueOf());
1382+
1383+
const onCalendarChange = jest.fn();
1384+
render(<DayPicker picker="time" open showNow onCalendarChange={onCalendarChange} />);
1385+
1386+
selectCell('00');
1387+
expect(onCalendarChange).toHaveBeenCalledWith(expect.anything(), '00:00:00', expect.anything());
1388+
onCalendarChange.mockReset();
1389+
1390+
fireEvent.click(document.querySelector('.rc-picker-now-btn'));
1391+
expect(onCalendarChange).toHaveBeenCalledWith(expect.anything(), '01:03:05', expect.anything());
1392+
});
13791393
});

tests/util/commonUtil.tsx

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -138,11 +138,20 @@ export function findCell(text: string | number, index = 0) {
138138

139139
const table = document.querySelectorAll('table')[index];
140140

141-
Array.from(table.querySelectorAll('td')).forEach((td) => {
142-
if (td.textContent === String(text) && td.className.includes('-in-view')) {
143-
matchCell = td;
144-
}
145-
});
141+
if (table) {
142+
Array.from(table.querySelectorAll('td')).forEach((td) => {
143+
if (td.textContent === String(text) && td.className.includes('-in-view')) {
144+
matchCell = td;
145+
}
146+
});
147+
} else {
148+
const column = document.querySelectorAll('.rc-picker-time-panel-column')[index];
149+
Array.from(column.querySelectorAll('li')).forEach((li) => {
150+
if (li.textContent === String(text)) {
151+
matchCell = li;
152+
}
153+
});
154+
}
146155
if (!matchCell) {
147156
throw new Error('Cell not match in picker panel.');
148157
}

0 commit comments

Comments
 (0)