109 lines
3.6 KiB
JavaScript
109 lines
3.6 KiB
JavaScript
import React from 'react';
|
|
import { Scrollpicker } from '../Scrollpicker';
|
|
import { range, convert2Digit } from '../../common/utils';
|
|
export class Timepicker extends React.Component {
|
|
constructor(props) {
|
|
super(props);
|
|
this.handleChange = (columnIndex, rowIndex) => {
|
|
const { list, value } = this.state;
|
|
const tmpValue = value.concat();
|
|
tmpValue.splice(columnIndex, 1, rowIndex);
|
|
const ret = tmpValue.map((valueItem, valueIndex) => {
|
|
return list[valueIndex][valueItem].value;
|
|
});
|
|
this.props.onChange && this.props.onChange(ret.join(':'));
|
|
};
|
|
this.state = {
|
|
...this.init(props)
|
|
};
|
|
}
|
|
init(props) {
|
|
const { hourStep, minuteStep, secondStep, value } = props;
|
|
const hourSum = 24;
|
|
const minuteSum = 60;
|
|
const secondSum = 60;
|
|
if (hourSum % hourStep !== 0) {
|
|
throw TypeError(`hourStep 参数 ${hourStep} 无效`);
|
|
}
|
|
if (minuteSum % minuteStep !== 0) {
|
|
throw TypeError(`minuteStep 参数 ${minuteStep} 无效`);
|
|
}
|
|
if (secondSum % secondStep !== 0) {
|
|
throw TypeError(`secondStep 参数 ${secondStep} 无效`);
|
|
}
|
|
const hours = range(hourSum / hourStep).map((item) => {
|
|
item = convert2Digit(item * hourStep);
|
|
return {
|
|
label: `${item} 时`,
|
|
value: item
|
|
};
|
|
});
|
|
const minutes = range(minuteSum / minuteStep).map((item) => {
|
|
item = convert2Digit(item * minuteStep);
|
|
return {
|
|
label: `${item} 分`,
|
|
value: item
|
|
};
|
|
});
|
|
const seconds = range(secondSum / secondStep).map((item) => {
|
|
item = convert2Digit(item * secondStep);
|
|
return {
|
|
label: `${item} 秒`,
|
|
value: item
|
|
};
|
|
});
|
|
const list = [
|
|
hours,
|
|
minutes,
|
|
seconds
|
|
];
|
|
let valueArray = [];
|
|
let valueRet = [0, 0, 0];
|
|
if (value) {
|
|
valueArray = value.split(':');
|
|
}
|
|
if (valueArray && valueArray.length && valueArray.length !== 3) {
|
|
throw TypeError(`value 参数 ${value} 无效`);
|
|
}
|
|
if (valueArray && valueArray.length) {
|
|
valueArray.forEach((valueItem, valueIndex) => {
|
|
const tag = list[valueIndex].some((targetItem, targetIndex) => {
|
|
if (targetItem.value === valueItem) {
|
|
valueRet[valueIndex] = targetIndex;
|
|
return true;
|
|
}
|
|
else {
|
|
return false;
|
|
}
|
|
});
|
|
if (!tag) {
|
|
throw TypeError(`value 参数${valueIndex === 0 ? '时' : (valueIndex === 1 ? '分' : '秒')}字段 ${valueItem} 无效`);
|
|
}
|
|
});
|
|
}
|
|
const data = {
|
|
value: valueRet,
|
|
list
|
|
};
|
|
return data;
|
|
}
|
|
componentWillReceiveProps(nextProps) {
|
|
if (nextProps.value !== this.props.value) {
|
|
this.setState({
|
|
...this.state,
|
|
...this.init(nextProps)
|
|
});
|
|
}
|
|
}
|
|
render() {
|
|
const { value, list } = this.state;
|
|
return (React.createElement(Scrollpicker, Object.assign({}, this.props, { value: value, list: list, onChange: this.handleChange })));
|
|
}
|
|
}
|
|
Timepicker.defaultProps = {
|
|
...Scrollpicker.defaultProps,
|
|
hourStep: 1,
|
|
minuteStep: 1,
|
|
secondStep: 1
|
|
};
|
|
//# sourceMappingURL=index.js.map
|