UNPKG

lulouis-vant

Version:

Lightweight Mobile UI Components built on Vue

204 lines (188 loc) 5.88 kB
"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;