Skip to content

Commit b3ee273

Browse files
authored
feat: showNow on datetime & time panel (#87)
1 parent 4320d11 commit b3ee273

File tree

4 files changed

+48
-21
lines changed

4 files changed

+48
-21
lines changed

src/PickerPanel.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ export interface PickerPanelBaseProps<DateType> extends PickerPanelSharedProps<D
9292
export interface PickerPanelDateProps<DateType> extends PickerPanelSharedProps<DateType> {
9393
picker?: 'date';
9494
showToday?: boolean;
95+
showNow?: boolean;
9596

9697
// Time
9798
showTime?: boolean | SharedTimeProps<DateType>;
@@ -132,6 +133,7 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
132133
mode,
133134
picker = 'date',
134135
tabIndex = 0,
136+
showNow,
135137
showTime,
136138
showToday,
137139
renderExtraFooter,
@@ -440,6 +442,7 @@ function PickerPanel<DateType>(props: PickerPanelProps<DateType>) {
440442
needConfirmButton,
441443
okDisabled: !mergedValue || (disabledDate && disabledDate(mergedValue)),
442444
locale,
445+
showNow,
443446
onNow:
444447
needConfirmButton &&
445448
(() => {

src/panels/TimePanel/index.tsx

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { createKeyDownHandler } from '../../utils/uiUtil';
77

88
export interface SharedTimeProps<DateType> extends DisabledTimes {
99
format?: string;
10+
showNow?: boolean;
1011
showHour?: boolean;
1112
showMinute?: boolean;
1213
showSecond?: boolean;
@@ -47,20 +48,13 @@ function TimePanel<DateType>(props: TimePanelProps<DateType>) {
4748

4849
// ======================= Keyboard =======================
4950
const [activeColumnIndex, setActiveColumnIndex] = React.useState(-1);
50-
const columnsCount = countBoolean([
51-
showHour,
52-
showMinute,
53-
showSecond,
54-
use12Hours,
55-
]);
51+
const columnsCount = countBoolean([showHour, showMinute, showSecond, use12Hours]);
5652

5753
operationRef.current = {
5854
onKeyDown: event =>
5955
createKeyDownHandler(event, {
6056
onLeftRight: diff => {
61-
setActiveColumnIndex(
62-
(activeColumnIndex + diff + columnsCount) % columnsCount,
63-
);
57+
setActiveColumnIndex((activeColumnIndex + diff + columnsCount) % columnsCount);
6458
},
6559
onUpDown: diff => {
6660
if (activeColumnIndex === -1) {

src/utils/getRanges.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export interface RangesProps {
99
onNow?: null | (() => void) | false;
1010
onOk?: null | (() => void) | false;
1111
okDisabled?: boolean;
12+
showNow?: boolean;
1213
locale: Locale;
1314
}
1415

@@ -20,6 +21,7 @@ export default function getRanges({
2021
onNow,
2122
onOk,
2223
okDisabled,
24+
showNow,
2325
locale,
2426
}: RangesProps) {
2527
let presetNode: React.ReactNode;
@@ -32,11 +34,7 @@ export default function getRanges({
3234
<>
3335
{rangeList.map(({ label, onClick, onMouseEnter, onMouseLeave }) => (
3436
<li key={label} className={`${prefixCls}-preset`}>
35-
<Item
36-
onClick={onClick}
37-
onMouseEnter={onMouseEnter}
38-
onMouseLeave={onMouseLeave}
39-
>
37+
<Item onClick={onClick} onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}>
4038
{label}
4139
</Item>
4240
</li>
@@ -48,7 +46,7 @@ export default function getRanges({
4846
if (needConfirmButton) {
4947
const Button = (components.button || 'button') as any;
5048

51-
if (onNow && !presetNode) {
49+
if (onNow && !presetNode && showNow !== false) {
5250
presetNode = (
5351
<li className={`${prefixCls}-now`}>
5452
<a className={`${prefixCls}-now-btn`} onClick={onNow}>

tests/picker.spec.tsx

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -502,13 +502,45 @@ describe('Picker.Basic', () => {
502502
expect(wrapper.find('.rc-picker-input').render()).toMatchSnapshot();
503503
});
504504

505-
it('datetime should display now', () => {
506-
const onSelect = jest.fn();
507-
const wrapper = mount(<MomentPicker onSelect={onSelect} showTime />);
508-
wrapper.openPicker();
509-
wrapper.find('.rc-picker-now > a').simulate('click');
505+
describe('showNow', () => {
506+
it('datetime should display now', () => {
507+
const onSelect = jest.fn();
508+
const wrapper = mount(<MomentPicker onSelect={onSelect} showTime />);
509+
wrapper.openPicker();
510+
wrapper.find('.rc-picker-now > a').simulate('click');
510511

511-
expect(isSame(onSelect.mock.calls[0][0], '1990-09-03 00:00:00', 'second')).toBeTruthy();
512+
expect(isSame(onSelect.mock.calls[0][0], '1990-09-03 00:00:00', 'second')).toBeTruthy();
513+
});
514+
515+
it("date shouldn't display now", () => {
516+
const onSelect = jest.fn();
517+
const wrapper = mount(<MomentPicker onSelect={onSelect} />);
518+
wrapper.openPicker();
519+
expect(wrapper.find('.rc-picker-now > a').length).toEqual(0);
520+
});
521+
522+
it("datetime shouldn't display now when showNow is false", () => {
523+
const onSelect = jest.fn();
524+
const wrapper = mount(<MomentPicker onSelect={onSelect} showTime showNow={false} />);
525+
wrapper.openPicker();
526+
expect(wrapper.find('.rc-picker-now > a').length).toEqual(0);
527+
});
528+
529+
it('time should display now', () => {
530+
const onSelect = jest.fn();
531+
const wrapper = mount(<MomentPicker onSelect={onSelect} picker="time" />);
532+
wrapper.openPicker();
533+
wrapper.find('.rc-picker-now > a').simulate('click');
534+
535+
expect(isSame(onSelect.mock.calls[0][0], '1990-09-03 00:00:00', 'second')).toBeTruthy();
536+
});
537+
538+
it("time shouldn't display now when showNow is false", () => {
539+
const onSelect = jest.fn();
540+
const wrapper = mount(<MomentPicker onSelect={onSelect} picker="time" showNow={false} />);
541+
wrapper.openPicker();
542+
expect(wrapper.find('.rc-picker-now > a').length).toEqual(0);
543+
});
512544
});
513545

514546
it('pass data- & aria- & role', () => {

0 commit comments

Comments
 (0)