timepicker component feature fix

This commit is contained in:
MG12 2015-11-17 23:44:32 +08:00
parent f65abf1d6d
commit dbb8eaaa35
14 changed files with 122 additions and 50 deletions

View File

@ -1,5 +1,4 @@
基本 # 基本
====
- order: 0 - order: 0

View File

@ -1,5 +1,4 @@
禁用 # 禁用
====
- order: 4 - order: 4

View File

@ -0,0 +1,15 @@
# 无默认值
- order: 5
没有默认时间。
---
````jsx
import { Timepicker } from 'antd';
ReactDOM.render(
<Timepicker placeholder="Select sth." />
, document.getElementById('components-timepicker-demo-no-default-value'));
````

View File

@ -0,0 +1,19 @@
# 三种大小
- order: 6
三种大小的输入框,大的用在表单中,中的为默认。
---
````jsx
import { Timepicker } from 'antd';
ReactDOM.render(
<div>
<Timepicker defaultValue="12:08:23" size="large" />
<Timepicker defaultValue="12:08:23" />
<Timepicker defaultValue="12:08:23" size="small" />
</div>
, document.getElementById('components-timepicker-demo-size'));
````

View File

@ -1,5 +1,4 @@
特定选项 # 特定选项
====
- order: 3 - order: 3

View File

@ -1,5 +1,4 @@
不展示秒 # 不展示秒
====
- order: 2 - order: 2

View File

@ -1,9 +1,6 @@
import React from 'react'; import React from 'react';
import DateTimeFormat from 'gregorian-calendar-format'; import DateTimeFormat from 'gregorian-calendar-format';
import TimePicker from 'rc-time-picker/lib/TimePicker'; import TimePicker from 'rc-time-picker/lib/TimePicker';
import TimePanel from 'rc-time-picker/lib/TimePanel';
// import defaultLocale from './locale'; // import defaultLocale from './locale';
import TimePickerLocale from 'rc-time-picker/lib/locale/zh_CN'; import TimePickerLocale from 'rc-time-picker/lib/locale/zh_CN';
@ -17,54 +14,68 @@ const AntTimepicker = React.createClass({
onChange() {}, // onChange Validator onChange() {}, // onChange Validator
locale: {}, locale: {},
align: { align: {
offset: [0, -8], offset: [0, -1],
}, },
open: false, open: false,
disabled: false, disabled: false,
hourOptions: undefined, hourOptions: undefined,
minuteOptions: undefined, minuteOptions: undefined,
secondOptions: undefined, secondOptions: undefined,
size: '',
placement: 'bottomLeft',
transitionName: 'slide-up',
}; };
}, },
render() { /**
const { defaultValue, format, placeholder, align, disabled, hourOptions, minuteOptions, secondOptions } = this.props; * 获得输入框的 className
const prefixCls = 'ant-timepicker'; */
const formatter = new DateTimeFormat(format); getSizeClass() {
let sizeClass = '';
if (this.props.size === 'large') {
sizeClass = ' ant-input-lg';
} else if (this.props.size === 'small') {
sizeClass = ' ant-input-sm';
}
return sizeClass;
},
let showValue = undefined; /**
* 获得输入框的默认值
*/
getDefaultValue(formatter) {
const defaultValue = this.props.defaultValue;
if (defaultValue) { if (defaultValue) {
showValue = formatter.parse(defaultValue, { return formatter.parse(defaultValue, {
locale: defaultValue.locale, locale: defaultValue.locale,
obeyCount: true, obeyCount: true,
}); });
} }
return undefined;
},
const timePanel = ( render() {
<TimePanel const { format, placeholder, align, disabled, hourOptions, minuteOptions, secondOptions, placement, transitionName } = this.props;
const prefixCls = 'ant-timepicker';
const formatter = new DateTimeFormat(format);
return (
<TimePicker
prefixCls={prefixCls} prefixCls={prefixCls}
defaultValue={showValue}
locale={TimePickerLocale} locale={TimePickerLocale}
formatter={formatter} formatter={formatter}
hourOptions={hourOptions} hourOptions={hourOptions}
minuteOptions={minuteOptions} minuteOptions={minuteOptions}
secondOptions={secondOptions} secondOptions={secondOptions}
disabled={disabled}
align={align}
placeholder={placeholder}
inputClassName={`ant-input ${this.getSizeClass()}`}
defaultValue={this.getDefaultValue(formatter)}
placement={placement}
transitionName={transitionName}
/> />
); );
return (
<TimePicker prefixCls={prefixCls} panel={timePanel} align={align} disabled={disabled} value={showValue}>
{
({value}) => {
return (
<span>
<input className={`${prefixCls}-picker-input ant-input`} type="text" placeholder={placeholder} readOnly disabled={disabled} value={value && formatter.format(value)} />
<span className={`${prefixCls}-picker-icon`} />
</span>
);
}
}
</TimePicker>
);
} }
}); });

View File

@ -1,5 +1,4 @@
Timepicker # Timepicker
==========
- category: Components - category: Components
- chinese: 时间选择框 - chinese: 时间选择框
@ -21,13 +20,17 @@ API
<Timepicker value="13:30:56" /> <Timepicker value="13:30:56" />
``` ```
| 参数 | 说明 | 类型 | 默认值 | | 参数 | 说明 | 类型 | 默认值 |
|---------------|---------------------------------------------------------------|----------|-----------------------------------------------------------------| |-----------------|-----|-----|-------|
| defaultValue | 默认时间 | string | 无 | | defaultValue | 默认时间 | string | 无 |
| format | 展示的时间格式 | string | "HH:mm:ss"、"HH:mm"、"mm:ss" | | placeholder | 没有值的时候显示的内容 | string | "请选择时间" |
| disabled | 禁用 | bool | false | | format | 展示的时间格式 | string | "HH:mm:ss"、"HH:mm"、"mm:ss" |
| hourOptions | 特定可选择的小时 | array | 0 到 24 组成的数组 | | disabled | 禁用 | bool | false |
| hourOptions | 特定可选择的小时 | array | 0 到 24 组成的数组 |
| minuteOptions | 特定可选择的分钟 | array | 0 到 60 组成的数组 | | minuteOptions | 特定可选择的分钟 | array | 0 到 60 组成的数组 |
| secondOptions | 特定可选择的秒 | array | 0 到 60 组成的数组 | | secondOptions | 特定可选择的秒 | array | 0 到 60 组成的数组 |
| inputClassName | 输入框的样式 | string | |
| placement | 显示位置 | string | bottomLeft |
| transitionName | 显示动画 | string | slide-up |
<style> .code-box-demo .ant-timepicker-picker { margin: 0 12px 12px 0; }</style> <style> .code-box-demo .ant-timepicker-picker { margin: 0 12px 12px 0; }</style>

View File

@ -57,7 +57,7 @@
"rc-switch": "~1.3.1", "rc-switch": "~1.3.1",
"rc-table": "~3.6.1", "rc-table": "~3.6.1",
"rc-tabs": "~5.5.0", "rc-tabs": "~5.5.0",
"rc-time-picker": "^0.2.0", "rc-time-picker": "~0.5.6",
"rc-tooltip": "~3.2.0", "rc-tooltip": "~3.2.0",
"rc-tree": "~0.19.0", "rc-tree": "~0.19.0",
"rc-trigger": "~1.0.6", "rc-trigger": "~1.0.6",

View File

@ -1,4 +1,4 @@
.@{calendar-prefix-cls}-picker-container { .@{calendar-prefix-cls}-picker-container {
position: absolute; position: absolute;
z-index: 1070; z-index: 1070;

View File

@ -1,7 +1,6 @@
@timepicker-prefix-cls: ant-timepicker; @timepicker-prefix-cls: ant-timepicker;
.@{timepicker-prefix-cls} { .@{timepicker-prefix-cls} {
display: inline;
box-sizing: border-box; box-sizing: border-box;
* { * {
box-sizing: border-box; box-sizing: border-box;
@ -9,6 +8,6 @@
} }
@import "timepicker/Picker"; @import "timepicker/Picker";
@import "timepicker/TimePanel"; @import "timepicker/Panel";
@import "timepicker/Header"; @import "timepicker/Header";
@import "timepicker/Select"; @import "timepicker/Select";

View File

@ -1,3 +1,32 @@
.@{timepicker-prefix-cls}-picker-container {
z-index: 1070;
position: absolute;
&.slide-up-enter.slide-up-enter-active&-placement-topLeft,
&.slide-up-enter.slide-up-enter-active&-placement-topRight,
&.slide-up-appear.slide-up-appear-active&-placement-topLeft,
&.slide-up-appear.slide-up-appear-active&-placement-topRight {
animation-name: antSlideDownIn;
}
&.slide-up-enter.slide-up-enter-active&-placement-bottomLeft,
&.slide-up-enter.slide-up-enter-active&-placement-bottomRight,
&.slide-up-appear.slide-up-appear-active&-placement-bottomLeft,
&.slide-up-appear.slide-up-appear-active&-placement-bottomRight {
animation-name: antSlideUpIn;
}
&.slide-up-leave.slide-up-leave-active&-placement-topLeft,
&.slide-up-leave.slide-up-leave-active&-placement-topRight {
animation-name: antSlideDownOut;
}
&.slide-up-leave.slide-up-leave-active&-placement-bottomLeft,
&.slide-up-leave.slide-up-leave-active&-placement-bottomRight {
animation-name: antSlideUpOut;
}
}
.@{timepicker-prefix-cls}-picker { .@{timepicker-prefix-cls}-picker {
position: relative; position: relative;
display: inline-block; display: inline-block;
@ -5,8 +34,7 @@
font-size: @font-size-base; font-size: @font-size-base;
transition: opacity 0.3s ease; transition: opacity 0.3s ease;
&-input { > input {
outline: none;
width: 100px; width: 100px;
} }
@ -26,7 +54,7 @@
top: 50%; top: 50%;
margin-top: -6px; margin-top: -6px;
&:after { &:after {
content: "\e642"; content: "\e643";
font-family: "anticon"; font-family: "anticon";
font-size: 12px; font-size: 12px;
color: #999; color: #999;

View File

@ -45,6 +45,7 @@
&:hover { &:hover {
background: tint(@primary-color, 90%); background: tint(@primary-color, 90%);
transition: background 0.3s ease;
} }
} }
} }