///
import * as React from 'react';
import Toast from '../toast';
import Hammer from 'react-hammerjs';
import classNames from 'classnames';
import { validatePattern, validateRequried } from '../util/validate';
const defaultLabel = '发送验证码';
const prefix = 'tsp-component-Verification';
class Verification extends React.Component {
constructor(props: VerificationProps, state: VerificationState) {
super(props, state);
this.onClick = this.onClick.bind(this);
}
public static defaultProps: VerificationProps = {
time: 60,
validate: null,
callback: null,
disabledLabel: '下次发送',
inputId: ''
};
/**
* 存储setInterval,用于销毁定时器
*/
private interval: any;
public state: VerificationState = {
label: defaultLabel,
time: this.props.time
};
public componentWillUnmount(): void {
// 销毁定时器
clearInterval(this.interval);
}
/**
* 设置按钮文本
*/
public setBtnLabel(): void {
const nowTime = --this.state.time;
this.setState({
time: nowTime < 0 ? this.props.time : nowTime,
label: nowTime < 0 ? defaultLabel : `${this.props.disabledLabel}(${nowTime})`
});
}
/**
* 验证码获取
*/
public onClick(): void {
const inputElem = document.getElementById(this.props.inputId);
if (!validateRequried(inputElem, (msg) => Toast.warning(msg))) {
return;
}
if (!validatePattern(inputElem, (msg) => Toast.warning(msg))) {
return;
}
if (this.props.validate) {
if (!this.props.validate()) {
return;
}
}
if (this.state.time === this.props.time) {
this.setBtnLabel();
this.interval = setInterval(() => {
this.setBtnLabel();
if (this.state.time <= 0) {
clearInterval(this.interval);
this.setBtnLabel();
}
}, 1000);
this.props.callback();
}
}
public render(): any {
const disabled = this.state.time !== this.props.time;
return (
);
}
}
export default Verification;