-
Notifications
You must be signed in to change notification settings - Fork 42
/
DateDynamic.js
106 lines (88 loc) · 2.99 KB
/
DateDynamic.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
//@flow
import React from 'react';
import FormItemWrapper from './shared/FormItemWrapper';
import DatePicker from 'material-ui/DatePicker';
import Tip from '../../Tip';
import { BaseDynamic } from '../../HoForm';
import type { ComponentContext, DynamicFormNode, ComponentProps, FieldBase } from '../../HoForm';
import IconClear from 'material-ui/svg-icons/content/clear';
import IconButton from 'material-ui/IconButton';
type DateDynamicField = {
type: string,
key: string,
compositeKey: string,
default: ?string,
tip: ?string,
title: ?string
}
type DateDynamicState = {
}
class DateDynamic extends BaseDynamic<DateDynamicField, DateDynamicState> {
normalizeState({state, field}: {state: any, field: DateDynamicField}){
let key = field.key;
if(state[key]===undefined){
state[key] = field.default || undefined;
}
if(state[key]==='now')
{
let date = new Date();
state[key] = '' + date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
}
}
getType(){
return 'date';
}
getDateValue(){
let val = this.props.context.value;
if(val==='now'){
return new Date();
}
else if(val){
let values = val.split('-');
let year = parseInt(values[0],10);
let month = parseInt(values[1],10)-1;
let day = parseInt(values[2],10);
return new Date(year, month, day, 12);
}
return undefined;
}
setDateValue(value: Date){
function toStringWithZeros(value, length){
let str = value.toString();
while(str.length<length)
str = '0'+str;
return str;
}
let year = toStringWithZeros(value.getFullYear(),4);
let month = toStringWithZeros(value.getMonth()+1,2);
let day = toStringWithZeros(value.getDate(),2);
let dateStr = `${year}-${month}-${day}`;
this.props.context.setValue(dateStr);
}
renderComponent(){
let {context} = this.props;
let {node, currentPath} = context;
let {field} = node;
if(currentPath!==context.parentPath){
return (null);
}
let iconButtons = [];
iconButtons.push(<IconButton onClick={()=>context.clearValue()}><IconClear /></IconButton>);
if(field.tip) iconButtons.push(<Tip markdown={field.tip} />)
return (
<FormItemWrapper
control={<DatePicker
value={this.getDateValue()}
onChange={function(e,value){ this.setDateValue(value) }.bind(this)}
floatingLabelFixed={true}
autoOk={true}
fullWidth={true}
underlineShow={true}
floatingLabelText={field.title} />
}
iconButtons={iconButtons}
/>
);
}
}
export default DateDynamic;