/// import * as React from 'react'; import view from './view'; // import classNames from 'classnames'; // import { setTranslate } from '../util/transform'; import PickerCore from '../picker/core'; class Picker extends React.Component { constructor(props: TspComponentPickerProps, state: any) { super(props, state); this.onPanStart = this.onPanStart.bind(this); this.onPan = this.onPan.bind(this); this.onPanEnd = this.onPanEnd.bind(this); this.onOk = this.onOk.bind(this); this.onCancel = this.onCancel.bind(this); this.onOpen = this.onOpen.bind(this); this.onTransitionEnd = this.onTransitionEnd.bind(this); } public static defaultProps: TspComponentPickerProps = { id: '', cascade: false, defaultValue: undefined, data: undefined, // defaultLabel: '请选择' }; /** * PickerCore实例 */ private core: PickerCore; /** * 触发transitionEnd的timeout返回对象 */ private transitionEndTimeout: number; public componentDidMount(): void { const data = []; for (let i = 0; i < this.props.data.length; i++) { data[i] = []; for (let j = 0; j < this.props.data[i].length; j++) { data[i].push(this.props.data[i][j]); } } this.core = new PickerCore({ data, id: this.props.id, cascade: this.props.cascade, defaultValue: this.props.defaultValue, onOk: this.props.onOk, defaultLabel: this.props.defaultLabel, sliderElem: this.refs.slider as HTMLElement, containerElem: this.refs.container['elem'] as HTMLElement, labelElem: this.refs.label as HTMLElement, formatLabel: this.props.formatLabel, required: this.props.required }); this.core.init(); this.core.sliderElem.addEventListener('webkitTransitionEnd', this.onTransitionEnd); } public componentWillReceiveProps(nextProps: TspComponentDatePickerProps): void { this.core.componentWillReceiveProps(this.props, nextProps); } // public componentDidUpdate(nextProps) { // } /** * 开始拖动 */ public onPanStart(evt: TspComponentSliderEvt): void { evt.preventDefault(); this.core.panStart(evt); } /** * 拖动中 */ public onPan(evt: TspComponentSliderEvt): void { evt.preventDefault(); this.core.pan(evt); } /** * 拖动结束后 */ public onPanEnd(evt: TspComponentSliderEvt): void { evt.preventDefault(); this.core.panEnd(evt); if (this.core.isPanEnd) { this.transitionEndTimeout = setTimeout(() => { if (!this.core.isTransitionEnd) { this.onTransitionEnd(); } }, 300); } } /** * 监听translate完成事件 */ public onTransitionEnd(): void { this.core.transitionEnd(this.transitionEndTimeout); } /** * 确定 */ public onOk(): void { this.core.ok(); } /** * 取消 */ public onCancel(): void { this.core.cancel(); } /** * 打开 */ public onOpen(): void { if (!this.props.disabled) { this.core.open(); } } public render(): JSX.Element { return view(this); } } export default Picker;