iep-ui
Version:
An enterprise-class UI design language and Vue-based implementation
160 lines (151 loc) • 4.41 kB
JavaScript
import _mergeJSXProps from 'babel-helper-vue-jsx-merge-props';
import _extends from 'babel-runtime/helpers/extends';
import PropTypes from '../_util/vue-types';
import PanelPicker from './panelPicker';
import Slider from './slider';
import { ConfigConsumerProps } from '../config-provider/configConsumerProps';
import classNames from 'classnames';
import { mergeProps } from '../_util/props-util';
export default {
name: 'IepDateProgressSlider',
props: mergeProps({
prefixCls: PropTypes.string,
theme: PropTypes.oneOf(['dark', 'light']).def('dark'),
tipFormat: PropTypes.string.def('YYYY-MM-DD HH:mm:ss'),
track: PropTypes.oneOf(['all', 'odd', 'even', 'bothEnds']).def('bothEnds'),
trackStrictly: PropTypes.bool.def(false),
isPart: PropTypes.bool.def(false),
trackFunc: PropTypes.func,
type: {
type: Array,
'default': function _default() {
return ['minute', 'hour', 'day', 'week', 'month', 'year'];
}
},
pickerVisible: PropTypes.bool.def(true)
}, Slider.props),
inject: {
configProvider: { 'default': function _default() {
return ConfigConsumerProps;
} }
},
data: function data() {
return {
panelMode: 'minute',
sliderValue: []
};
},
created: function created() {
this.sliderValue = this.value;
},
methods: {
changeMode: function changeMode(e) {
this.panelMode = e;
this.$emit('changeMode', e);
},
sliderChange: function sliderChange(e) {
this.$emit('change', e);
},
sliderEnd: function sliderEnd(e) {
this.$emit('sliderEnd', e);
},
sliderStart: function sliderStart(e) {
this.$emit('sliderStart', e);
},
beforeSliderStart: function beforeSliderStart(e) {
this.$emit('beforeSliderStart', e);
},
trackChange: function trackChange(e) {
this.$emit('trackChange', e);
},
sliderKeyboardChange: function sliderKeyboardChange(e) {
this.$emit('sliderKeyboardChange', e);
},
panelChange: function panelChange(e) {
this.sliderValue = e;
this.$emit('changePicker', e);
},
reset: function reset() {
this.$refs.slider.reset();
}
},
watch: {
value: {
handler: function handler(e) {
this.sliderValue = e;
},
deep: true,
immediate: true
},
mode: {
handler: function handler(e) {
this.panelMode = e;
},
immediate: true,
deep: true
}
},
render: function render() {
var _this = this;
var h = arguments[0];
var props = this.$props;
var customizePrefixCls = props.prefixCls,
theme = props.theme,
isPart = props.isPart;
var getPrefixCls = this.configProvider.getPrefixCls;
var prefixCls = getPrefixCls('date-progress-slider', customizePrefixCls);
var wrapperCls = classNames([prefixCls, prefixCls + '-' + theme, this.panelMode === 'hour' && isPart ? prefixCls + '-part' : '']);
var sliderProps = {
props: _extends({}, props, {
mode: this.panelMode,
value: this.sliderValue
})
};
var panelProps = {
props: _extends({}, props, {
type: this.type,
value: this.sliderValue
})
};
return h(
'div',
{ 'class': wrapperCls },
[h(PanelPicker, _mergeJSXProps([panelProps, {
on: {
'mode': function mode(e) {
return _this.changeMode(e);
},
'change': function change(e) {
return _this.panelChange(e);
}
}
}])), h(Slider, _mergeJSXProps([{
attrs: {
'reset-color': true
}
}, sliderProps, {
ref: 'slider',
on: {
'sliderChange': function sliderChange(e) {
return _this.sliderChange(e);
},
'sliderStart': function sliderStart(e) {
return _this.sliderStart(e);
},
'sliderEnd': function sliderEnd(e) {
return _this.sliderEnd(e);
},
'beforeSliderStart': function beforeSliderStart(e) {
return _this.beforeSliderStart(e);
},
'trackChange': function trackChange(e) {
return _this.trackChange(e);
},
'sliderKeyboardChange': function sliderKeyboardChange(e) {
return _this.sliderKeyboardChange(e);
}
}
}]))]
);
}
};