UNPKG

zmp-vue

Version:

Build full featured iOS & Android apps using ZMP & Vue

221 lines (198 loc) 7.95 kB
"use strict"; exports.__esModule = true; exports.default = void 0; var _vue = require("vue"); var _utils = require("../shared/utils"); var _mixins = require("../shared/mixins"); var _zmp = require("../shared/zmp"); var _useTab = require("../shared/use-tab"); function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } var _default = { name: 'zmp-list', props: _extends({ inset: Boolean, xsmallInset: Boolean, smallInset: Boolean, mediumInset: Boolean, largeInset: Boolean, xlargeInset: Boolean, mediaList: Boolean, sortable: Boolean, sortableTapHold: Boolean, sortableEnabled: Boolean, sortableMoveElements: { type: Boolean, default: undefined }, sortableOpposite: Boolean, accordionList: Boolean, accordionOpposite: Boolean, contactsList: Boolean, simpleList: Boolean, linksList: Boolean, menuList: Boolean, noHairlines: Boolean, noHairlinesBetween: Boolean, noHairlinesMd: Boolean, noHairlinesBetweenMd: Boolean, noHairlinesIos: Boolean, noHairlinesBetweenIos: Boolean, noHairlinesAurora: Boolean, noHairlinesBetweenAurora: Boolean, // Links Chevron (Arrow) Icon noChevron: Boolean, chevronCenter: Boolean, // Tab tab: Boolean, tabActive: Boolean, // Form form: Boolean, formStoreData: Boolean, inlineLabels: Boolean, // Virtual List virtualList: Boolean, virtualListParams: Object }, _mixins.colorProps), emits: ['submit', 'sortable:enable', 'sortable:disable', 'sortable:sort', 'virtual:itembeforeinsert', 'virtual:beforeclear', 'virtual:itemsbeforeinsert', 'virtual:itemsafterinsert', 'tab:hide', 'tab:show'], setup: function setup(props, _ref) { var emit = _ref.emit, slots = _ref.slots; var zmpVirtualList = null; var elRef = (0, _vue.ref)(null); var onSubmit = function onSubmit(event) { emit('submit', event); }; var onSortableEnable = function onSortableEnable(el) { if (elRef.value !== el) return; emit('sortable:enable'); }; var onSortableDisable = function onSortableDisable(el) { if (elRef.value !== el) return; emit('sortable:disable'); }; var onSortableSort = function onSortableSort(el, sortData, listEl) { if (elRef.value !== listEl) return; emit('sortable:sort', sortData); }; (0, _useTab.useTab)(elRef, emit); (0, _vue.onMounted)(function () { (0, _zmp.zmpready)(function () { _zmp.zmp.on('sortableEnable', onSortableEnable); _zmp.zmp.on('sortableDisable', onSortableDisable); _zmp.zmp.on('sortableSort', onSortableSort); if (!props.virtualList) return; var vlParams = props.virtualListParams || {}; if (!vlParams.renderItem && !vlParams.renderExternal) return; if (vlParams.items) vlParams.items = (0, _vue.toRaw)(vlParams.items); zmpVirtualList = _zmp.zmp.virtualList.create((0, _utils.extend)({ el: elRef.value, on: { itemBeforeInsert: function itemBeforeInsert(itemEl, item) { var vl = this; emit('virtual:itembeforeinsert', vl, itemEl, item); }, beforeClear: function beforeClear(fragment) { var vl = this; emit('virtual:beforeclear', vl, fragment); }, itemsBeforeInsert: function itemsBeforeInsert(fragment) { var vl = this; emit('virtual:itemsbeforeinsert', vl, fragment); }, itemsAfterInsert: function itemsAfterInsert(fragment) { var vl = this; emit('virtual:itemsafterinsert', vl, fragment); } } }, vlParams)); }); }); (0, _vue.onBeforeUnmount)(function () { if (!_zmp.zmp) return; _zmp.zmp.off('sortableEnable', onSortableEnable); _zmp.zmp.off('sortableDisable', onSortableDisable); _zmp.zmp.off('sortableSort', onSortableSort); if (!(props.virtualList && zmpVirtualList)) return; if (zmpVirtualList.destroy) zmpVirtualList.destroy(); zmpVirtualList = null; }); var classes = (0, _vue.computed)(function () { return (0, _utils.classNames)('list', { inset: props.inset, 'xsmall-inset': props.xsmallInset, 'small-inset': props.smallInset, 'medium-inset': props.mediumInset, 'large-inset': props.largeInset, 'xlarge-inset': props.xlargeInset, 'media-list': props.mediaList, 'simple-list': props.simpleList, 'links-list': props.linksList, 'menu-list': props.menuList, sortable: props.sortable, 'sortable-tap-hold': props.sortableTapHold, 'sortable-enabled': props.sortableEnabled, 'sortable-opposite': props.sortableOpposite, 'accordion-list': props.accordionList, 'accordion-opposite': props.accordionOpposite, 'contacts-list': props.contactsList, 'virtual-list': props.virtualList, tab: props.tab, 'tab-active': props.tabActive, 'no-hairlines': props.noHairlines, 'no-hairlines-md': props.noHairlinesMd, 'no-hairlines-ios': props.noHairlinesIos, 'no-hairlines-aurora': props.noHairlinesAurora, 'no-hairlines-between': props.noHairlinesBetween, 'no-hairlines-between-md': props.noHairlinesBetweenMd, 'no-hairlines-between-ios': props.noHairlinesBetweenIos, 'no-hairlines-between-aurora': props.noHairlinesBetweenAurora, 'form-store-data': props.formStoreData, 'inline-labels': props.inlineLabels, 'no-chevron': props.noChevron, 'chevron-center': props.chevronCenter }, (0, _mixins.colorClasses)(props)); }); var ListTag = (0, _vue.computed)(function () { return props.form ? 'form' : 'div'; }); var ListContext = (0, _vue.computed)(function () { return { listIsMedia: props.mediaList, listIsSimple: props.simpleList, listIsSortable: props.sortable, listIsSortableOpposite: props.sortableOpposite }; }); (0, _vue.provide)('ListContext', ListContext); return function () { var slotsList = slots.list, slotsDefault = slots.default; var rootChildrenBeforeList = []; var rootChildrenAfterList = []; var ulChildren = slotsList || []; var wasUlChild = false; if (slotsDefault) { slotsDefault().forEach(function (vnode) { if (typeof vnode === 'undefined') return; var tag = vnode.type && vnode.type.name ? vnode.type.name : vnode.type; if (tag && typeof tag === 'symbol') { wasUlChild = true; ulChildren.push(vnode); } else if (!tag || tag && !(tag === 'li' || tag.indexOf('zmp-list-item') >= 0 || tag.indexOf('zmp-list-button') >= 0 || tag.indexOf('zmp-list-input') >= 0)) { if (wasUlChild) rootChildrenAfterList.push(vnode);else rootChildrenBeforeList.push(vnode); } else if (tag) { wasUlChild = true; ulChildren.push(vnode); } }); } return (0, _vue.h)(ListTag.value, { ref: elRef, class: classes.value, 'data-sortable-move-elements': typeof props.sortableMoveElements !== 'undefined' ? props.sortableMoveElements.toString() : undefined, onSubmit: onSubmit }, [slots['before-list'] && slots['before-list'](), rootChildrenBeforeList, ulChildren.length > 0 && (0, _vue.h)('ul', ulChildren), slots['after-list'] && slots['after-list'](), rootChildrenAfterList]); }; } }; exports.default = _default;