Skip to content

Commit

Permalink
feat: replace timepicker dropdownClassName to popupClassName (#139)
Browse files Browse the repository at this point in the history
* feat: replace timepicker dropdownClassName to popupClassName

* feat: edit warning info

* feat: add rangePicker
  • Loading branch information
heiyu4585 authored Aug 29, 2022
1 parent 7ae1333 commit 2c26b66
Show file tree
Hide file tree
Showing 5 changed files with 124 additions and 0 deletions.
4 changes: 4 additions & 0 deletions docs/demo/TimePicker.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
## TimePicker


<code src="../examples/TimePicker.tsx" />
16 changes: 16 additions & 0 deletions docs/examples/TimePicker.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import React from 'react';
import { TimePicker, } from '../../src';
import type { Dayjs } from 'dayjs';
import dayjs from 'dayjs';
import customParseFormat from 'dayjs/plugin/customParseFormat';
dayjs.extend(customParseFormat);

export default () => {
const onChange = (time: Dayjs, timeString: string) => {
console.log(time, timeString);
};

return (
<TimePicker onChange={onChange} defaultValue={dayjs('00:00:00', 'HH:mm:ss')} />
);
};
58 changes: 58 additions & 0 deletions src/TimePicker.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import * as React from 'react';
import { TimePicker } from 'antd';
import warning from 'rc-util/lib/warning';

type TimePickerProps = Parameters<typeof TimePicker>[0];
type TimePickerRef = TimePickerProps['ref'];

type RangePickerProps = Parameters<typeof TimePicker>[0];
type RangePickerRef = RangePickerProps['ref'];

type CompatibleTimePickerProps = TimePickerProps & {
/** @deprecated Please use `popupClassName` instead. */
dropdownClassName?: string;
};

type CompatibleRangePickerProps = RangePickerProps & {
/** @deprecated Please use `popupClassName` instead. */
dropdownClassName?: string;
};

const CompatibleTimePicker = React.forwardRef(
(
{ dropdownClassName, popupClassName, ...restProps }: CompatibleTimePickerProps,
ref: TimePickerRef,
) => {
warning(
!dropdownClassName,
"[antd: TimePicker] `dropdownClassName` is removed in v5, please use `popupClassName` instead.",
);

return (
<TimePicker {...restProps} popupClassName={popupClassName || dropdownClassName} ref={ref} />
);
},
);



CompatibleTimePicker.RangePicker = React.forwardRef(
(
{ dropdownClassName, popupClassName, ...restProps }: CompatibleRangePickerProps,
ref: RangePickerRef,
) => {
warning(
!dropdownClassName,
"[antd: RangePicker] `dropdownClassName` is removed in v5, please use `popupClassName` instead.",
);

return (
<TimePicker.RangePicker {...restProps} popupClassName={popupClassName || dropdownClassName} ref={ref} />
);
},
);

if (process.env.NODE_ENV !== 'production') {
CompatibleTimePicker.displayName = 'CompatibleTimePicker';
}
export default CompatibleTimePicker;
1 change: 1 addition & 0 deletions src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ export { default as Mentions } from './Mentions';
export { default as Select } from './Select';
export { default as TreeSelect } from './TreeSelect';
export { default as DatePicker } from './DatePicker';
export { default as TimePicker } from './TimePicker';
45 changes: 45 additions & 0 deletions tests/TimePicker.test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import React from 'react';
import { TimePicker } from '../src';
import { render } from '@testing-library/react';

describe('TimePicker', () => {


it('TimePicker dropdownClassName', async () => {
const errSpy = jest.spyOn(console, 'error').mockImplementation(() => {});

const { container } = render(
<TimePicker
dropdownClassName="test"
/>,
);

expect(errSpy).toHaveBeenCalledWith(
"Warning: [antd: TimePicker] `dropdownClassName` is removed in v5, please use `popupClassName` instead.",
);

// TODO: Remove this when antd release version
// expect(container.querySelector('.test')).toBeTruthy();

errSpy.mockRestore();
});

it('TimePicker.RangePicker dropdownClassName', async () => {
const errSpy = jest.spyOn(console, 'error').mockImplementation(() => {});

const { container } = render(
<TimePicker.RangePicker
dropdownClassName="test"
/>,
);

expect(errSpy).toHaveBeenCalledWith(
"Warning: [antd: RangePicker] `dropdownClassName` is removed in v5, please use `popupClassName` instead.",
);

// TODO: Remove this when antd release version
// expect(container.querySelector('.test')).toBeTruthy();

errSpy.mockRestore();
});
});

1 comment on commit 2c26b66

@vercel
Copy link

@vercel vercel bot commented on 2c26b66 Aug 29, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.