lulouis-vant
Version:
Lightweight Mobile UI Components built on Vue
204 lines (188 loc) • 5.88 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = void 0;
var _utils = require("../utils");
var _event = require("../utils/event");
var _loading = _interopRequireDefault(require("../loading"));
var _PickerColumn = _interopRequireDefault(require("./PickerColumn"));
var _deepClone = _interopRequireDefault(require("../utils/deep-clone"));
var _picker = _interopRequireDefault(require("../mixins/picker"));
var _use = (0, _utils.use)('picker'),
sfc = _use[0],
bem = _use[1],
t = _use[2];
var _default = sfc({
mixins: [_picker.default],
props: {
columns: Array,
valueKey: {
type: String,
default: 'text'
}
},
data: function data() {
return {
children: []
};
},
computed: {
simple: function simple() {
return this.columns.length && !this.columns[0].values;
}
},
watch: {
columns: function columns() {
this.setColumns();
}
},
methods: {
setColumns: function setColumns() {
var _this = this;
var columns = this.simple ? [{
values: this.columns
}] : this.columns;
columns.forEach(function (column, index) {
_this.setColumnValues(index, (0, _deepClone.default)(column.values));
});
},
emit: function emit(event) {
if (this.simple) {
this.$emit(event, this.getColumnValue(0), this.getColumnIndex(0));
} else {
this.$emit(event, this.getValues(), this.getIndexes());
}
},
onChange: function onChange(columnIndex) {
if (this.simple) {
this.$emit('change', this, this.getColumnValue(0), this.getColumnIndex(0));
} else {
this.$emit('change', this, this.getValues(), columnIndex);
}
},
// get column instance by index
getColumn: function getColumn(index) {
return this.children[index];
},
// get column value by index
getColumnValue: function getColumnValue(index) {
var column = this.getColumn(index);
return column && column.getValue();
},
// set column value by index
setColumnValue: function setColumnValue(index, value) {
var column = this.getColumn(index);
column && column.setValue(value);
},
// get column option index by column index
getColumnIndex: function getColumnIndex(columnIndex) {
return (this.getColumn(columnIndex) || {}).currentIndex;
},
// set column option index by column index
setColumnIndex: function setColumnIndex(columnIndex, optionIndex) {
var column = this.getColumn(columnIndex);
column && column.setIndex(optionIndex);
},
// get options of column by index
getColumnValues: function getColumnValues(index) {
return (this.children[index] || {}).options;
},
// set options of column by index
setColumnValues: function setColumnValues(index, options) {
var column = this.children[index];
if (column && JSON.stringify(column.options) !== JSON.stringify(options)) {
column.options = options;
column.setIndex(0);
}
},
// get values of all columns
getValues: function getValues() {
return this.children.map(function (child) {
return child.getValue();
});
},
// set values of all columns
setValues: function setValues(values) {
var _this2 = this;
values.forEach(function (value, index) {
_this2.setColumnValue(index, value);
});
},
// get indexes of all columns
getIndexes: function getIndexes() {
return this.children.map(function (child) {
return child.currentIndex;
});
},
// set indexes of all columns
setIndexes: function setIndexes(indexes) {
var _this3 = this;
indexes.forEach(function (optionIndex, columnIndex) {
_this3.setColumnIndex(columnIndex, optionIndex);
});
},
onConfirm: function onConfirm() {
this.emit('confirm');
},
onCancel: function onCancel() {
this.emit('cancel');
}
},
render: function render(h) {
var _this4 = this;
var itemHeight = this.itemHeight;
var columns = this.simple ? [this.columns] : this.columns;
var frameStyle = {
height: itemHeight + "px"
};
var columnsStyle = {
height: itemHeight * this.visibleItemCount + "px"
};
var Toolbar = this.showToolbar && h("div", {
"class": ['van-hairline--top-bottom', bem('toolbar')]
}, [this.$slots.default || [h("div", {
"class": bem('cancel'),
"on": {
"click": this.onCancel
}
}, [this.cancelButtonText || t('cancel')]), this.title && h("div", {
"class": ['van-ellipsis', bem('title')]
}, [this.title]), h("div", {
"class": bem('confirm'),
"on": {
"click": this.onConfirm
}
}, [this.confirmButtonText || t('confirm')])]]);
return h("div", {
"class": bem()
}, [Toolbar, this.loading && h("div", {
"class": bem('loading')
}, [h(_loading.default)]), h("div", {
"class": bem('columns'),
"style": columnsStyle,
"on": {
"touchmove": _event.prevent
}
}, [columns.map(function (item, index) {
return h(_PickerColumn.default, {
"attrs": {
"valueKey": _this4.valueKey,
"className": item.className,
"itemHeight": _this4.itemHeight,
"defaultIndex": item.defaultIndex,
"visibleItemCount": _this4.visibleItemCount,
"initialOptions": _this4.simple ? item : item.values
},
"on": {
"change": function change() {
_this4.onChange(index);
}
}
});
}), h("div", {
"class": ['van-hairline--top-bottom', bem('frame')],
"style": frameStyle
})])]);
}
});
exports.default = _default;