From b34f58e2ec9c7a27e2ac243d53580c2c41ca4eb2 Mon Sep 17 00:00:00 2001 From: MrHeer Date: Tue, 14 May 2019 23:12:58 +0800 Subject: [PATCH 1/2] feat: Support milliseconds picker column (#149) --- README.md | 9 ++++--- assets/index/Panel.less | 4 ++++ examples/disabled.js | 6 +++++ examples/format.js | 1 + rc-time-picker.d.ts | 46 +++++++++++++++++++++++++++++++++++ src/Combobox.jsx | 33 ++++++++++++++++++++++++- src/Header.jsx | 20 ++++++++++++---- src/Panel.jsx | 30 ++++++++++++++++++++--- src/TimePicker.jsx | 53 ++++++++++++++++++++++++++++++++++------- 9 files changed, 182 insertions(+), 20 deletions(-) create mode 100644 rc-time-picker.d.ts diff --git a/README.md b/README.md index 1098b6ad..8955ee2d 100644 --- a/README.md +++ b/README.md @@ -68,10 +68,12 @@ API | showHour | Boolean | true | whether show hour | | | showMinute | Boolean | true | whether show minute | | showSecond | Boolean | true | whether show second | +| showMillisecond | Boolean | false | whether show millisecond | | format | String | - | moment format | | disabledHours | Function | - | disabled hour options | | disabledMinutes | Function | - | disabled minute options | | disabledSeconds | Function | - | disabled second options | +| disabledMilliseconds | Function | - | disabled millisecond options | | use12Hours | Boolean | false | 12 hours display mode | | hideDisabledOptions | Boolean | false | whether hide disabled options | | onChange | Function | null | called when time-picker a different value | @@ -85,10 +87,11 @@ API | hourStep | Number | 1 | interval between hours in picker | | minuteStep | Number | 1 | interval between minutes in picker | | secondStep | Number | 1 | interval between seconds in picker | +| millisecondStep | Number | 1 | interval between milliseconds in picker | | focusOnOpen | Boolean | false | automatically focus the input when the picker opens | -| inputReadOnly | Boolean | false | set input to read only | -| inputIcon | ReactNode | | specific the time-picker icon. | -| clearIcon | ReactNode | | specific the clear icon. | +| inputReadOnly | Boolean | false | set input to read only | +| inputIcon | ReactNode | | specific the select icon. | +| clearIcon | ReactNode | | specific the clear icon. | ## Test Case diff --git a/assets/index/Panel.less b/assets/index/Panel.less index 68e6c8e7..a46318bf 100644 --- a/assets/index/Panel.less +++ b/assets/index/Panel.less @@ -26,4 +26,8 @@ &-narrow { max-width: 113px; } + + &-wide { + width: 227px; + } } diff --git a/examples/disabled.js b/examples/disabled.js index d7011adb..cbe5c802 100644 --- a/examples/disabled.js +++ b/examples/disabled.js @@ -45,6 +45,10 @@ function disabledSeconds(h, m) { return [h + (m % 60)]; } +function disabledMilliseconds() { + return [1, 5, 10]; +} + const App = () => ( <>

Disabled picker

@@ -52,12 +56,14 @@ const App = () => (

Disabled options

); diff --git a/examples/format.js b/examples/format.js index 6b6d1126..dffabc54 100644 --- a/examples/format.js +++ b/examples/format.js @@ -8,6 +8,7 @@ const App = () => ( + diff --git a/rc-time-picker.d.ts b/rc-time-picker.d.ts new file mode 100644 index 00000000..de02597e --- /dev/null +++ b/rc-time-picker.d.ts @@ -0,0 +1,46 @@ +declare module 'rc-time-picker' { + import { Moment } from 'moment'; + import * as React from 'react'; + + type TimePickerProps = { + prefixCls?: String; + clearText?: String; + disabled?: Boolean; + allowEmpty?: Boolean; + open?: Boolean; + defaultValue?: Moment; + defaultOpenValue?: Moment; + value?: Moment; + placeholder?: String; + className?: String; + id?: String; + popupClassName?: String; + showHour?: Boolean; + showMinute?: Boolean; + showSecond?: Boolean; + showMillisecond?: Boolean; + format?: String; + disabledHours?: Function; + disabledMinutes?: Function; + disabledSeconds?: Function; + disabledMilliseconds?: Function; + use12Hours?: Boolean; + hideDisabledOptions?: Boolean; + onChange?: Function; + addon?: Function; + placement?: String; + transitionName?: String; + name?: String; + onOpen?: Function; + onClose?: Function; + hourStep?: Number; + minuteStep?: Number; + secondStep?: Number; + millisecondStep?: Number; + focusOnOpen?: Boolean; + inputReadOnly?: Boolean; + inputIcon?: React.ReactNode; + clearIcon?: React.ReactNode; + }; + export default class TimePicker extends React.Component {} +} diff --git a/src/Combobox.jsx b/src/Combobox.jsx index 77dc4119..ae36130b 100644 --- a/src/Combobox.jsx +++ b/src/Combobox.jsx @@ -56,8 +56,11 @@ class Combobox extends Component { } } onAmPmChange(ampm); - } else { + } else if (type === 'second') { value.second(+itemValue); + } else { + itemValue += '0'; + value.millisecond(+itemValue); } onChange(value); }; @@ -154,6 +157,33 @@ class Combobox extends Component { ); } + getMillisecondSelect(millisecond) { + const { + prefixCls, + millisecondOptions, + disabledMilliseconds, + showMillisecond, + defaultOpenValue, + value: propValue, + } = this.props; + if (!showMillisecond) { + return null; + } + const value = propValue || defaultOpenValue; + const disabledOptions = disabledMilliseconds(value.hour(), value.minute(), value.second()); + + return ( +