UNPKG

zmp-vue

Version:

Build full featured iOS & Android apps using ZMP & Vue

214 lines (199 loc) 7.51 kB
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); } import { toDisplayString as _toDisplayString, renderSlot as _renderSlot, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from "vue"; function render(_ctx, _cache) { var _component_zmp_card_header = _resolveComponent("zmp-card-header"); var _component_zmp_card_content = _resolveComponent("zmp-card-content"); var _component_zmp_card_footer = _resolveComponent("zmp-card-footer"); return _openBlock(), _createBlock("div", { ref: "elRef", class: _ctx.classes, "data-animate": typeof _ctx.animate === 'undefined' ? _ctx.animate : _ctx.animate.toString(), "data-hide-navbar-on-open": typeof _ctx.hideNavbarOnOpen === 'undefined' ? _ctx.hideNavbarOnOpen : _ctx.hideNavbarOnOpen.toString(), "data-hide-toolbar-on-open": typeof _ctx.hideToolbarOnOpen === 'undefined' ? _ctx.hideToolbarOnOpen : _ctx.hideToolbarOnOpen.toString(), "data-hide-statusbar-on-open": typeof _ctx.hideStatusbarOnOpen === 'undefined' ? _ctx.hideStatusbarOnOpen : _ctx.hideStatusbarOnOpen.toString(), "data-scrollable-el": _ctx.scrollableEl, "data-swipe-to-close": typeof _ctx.swipeToClose === 'undefined' ? _ctx.swipeToClose : _ctx.swipeToClose.toString(), "data-close-by-backdrop-click": typeof _ctx.closeByBackdropClick === 'undefined' ? _ctx.closeByBackdropClick : _ctx.closeByBackdropClick.toString(), "data-backdrop": typeof _ctx.backdrop === 'undefined' ? _ctx.backdrop : _ctx.backdrop.toString(), "data-backdrop-el": _ctx.backdropEl }, [_ctx.hasHeader ? (_openBlock(), _createBlock(_component_zmp_card_header, { key: 0 }, { default: _withCtx(function () { return [_createTextVNode(_toDisplayString(_ctx.title) + " ", 1), _renderSlot(_ctx.$slots, "header")]; }), _: 3 })) : _createCommentVNode("", true), _ctx.hasContent ? (_openBlock(), _createBlock(_component_zmp_card_content, { key: 1, padding: _ctx.padding }, { default: _withCtx(function () { return [_createTextVNode(_toDisplayString(_ctx.content) + " ", 1), _renderSlot(_ctx.$slots, "content")]; }), _: 3 }, 8, ["padding"])) : _createCommentVNode("", true), _ctx.hasFooter ? (_openBlock(), _createBlock(_component_zmp_card_footer, { key: 2 }, { default: _withCtx(function () { return [_createTextVNode(_toDisplayString(_ctx.footer) + " ", 1), _renderSlot(_ctx.$slots, "footer")]; }), _: 3 })) : _createCommentVNode("", true), _renderSlot(_ctx.$slots, "default")], 10, ["data-animate", "data-hide-navbar-on-open", "data-hide-toolbar-on-open", "data-hide-statusbar-on-open", "data-scrollable-el", "data-swipe-to-close", "data-close-by-backdrop-click", "data-backdrop", "data-backdrop-el"]); } import { computed, ref, onMounted, onBeforeUnmount, watch } from 'vue'; import { classNames } from '../shared/utils'; import { colorClasses, colorProps } from '../shared/mixins'; import { zmp, zmpready } from '../shared/zmp'; import zmpCardHeader from './card-header'; import zmpCardContent from './card-content'; import zmpCardFooter from './card-footer'; export default { name: 'zmp-card', render: render, components: { zmpCardHeader: zmpCardHeader, zmpCardContent: zmpCardContent, zmpCardFooter: zmpCardFooter }, props: _extends({ title: [String, Number], content: [String, Number], footer: [String, Number], outline: Boolean, expandable: Boolean, expandableAnimateWidth: Boolean, expandableOpened: Boolean, animate: { type: Boolean, default: undefined }, hideNavbarOnOpen: { type: Boolean, default: undefined }, hideToolbarOnOpen: { type: Boolean, default: undefined }, hideStatusbarOnOpen: { type: Boolean, default: undefined }, scrollableEl: { type: String, default: undefined }, swipeToClose: { type: Boolean, default: undefined }, closeByBackdropClick: { type: Boolean, default: undefined }, backdrop: { type: Boolean, default: undefined }, backdropEl: { type: String, default: undefined }, noShadow: Boolean, noBorder: Boolean, padding: { type: Boolean, default: true } }, colorProps), emits: ['card:beforeopen', 'card:open', 'card:opened', 'card:close', 'card:closed', 'update:expandableOpened'], setup: function setup(props, _ref) { var emit = _ref.emit, slots = _ref.slots; var elRef = ref(null); var open = function open() { if (!elRef.value) return; zmp.card.open(elRef.value); }; var close = function close() { if (!elRef.value) return; zmp.card.close(elRef.value); }; var onBeforeOpen = function onBeforeOpen(el, prevent) { if (elRef.value !== el) return; emit('card:beforeopen', el, prevent); }; var onOpen = function onOpen(el) { if (elRef.value !== el) return; emit('card:open', el); emit('update:expandableOpened', true); }; var onOpened = function onOpened(el, pageEl) { if (elRef.value !== el) return; emit('card:opened', el, pageEl); }; var onClose = function onClose(el) { if (elRef.value !== el) return; emit('card:close', el); }; var onClosed = function onClosed(el, pageEl) { if (elRef.value !== el) return; emit('card:closed', el, pageEl); emit('update:expandableOpened', false); }; onMounted(function () { if (!props.expandable || !elRef.value) return; zmpready(function () { if (props.expandable && props.expandableOpened) { zmp.card.open(elRef.value, false); } zmp.on('cardBeforeOpen', onBeforeOpen); zmp.on('cardOpen', onOpen); zmp.on('cardOpened', onOpened); zmp.on('cardClose', onClose); zmp.on('cardClosed', onClosed); }); }); onBeforeUnmount(function () { zmp.off('cardBeforeOpen', onBeforeOpen); zmp.off('cardOpen', onOpen); zmp.off('cardOpened', onOpened); zmp.off('cardClose', onClose); zmp.off('cardClosed', onClosed); }); watch(function () { return props.expandableOpened; }, function (value) { if (value) { open(); } else { close(); } }); var hasHeader = computed(function () { return props.title || slots.header; }); var hasContent = computed(function () { return props.content || slots.content; }); var hasFooter = computed(function () { return props.footer || slots.footer; }); var classes = computed(function () { return classNames('card', { 'card-outline': props.outline, 'card-expandable': props.expandable, 'card-expandable-animate-width': props.expandableAnimateWidth, 'no-shadow': props.noShadow, 'no-border': props.noBorder }, colorClasses(props)); }); return { elRef: elRef, classes: classes, hasHeader: hasHeader, hasContent: hasContent, hasFooter: hasFooter }; } };