UNPKG

zmp-react

Version:

Build full featured iOS & Android apps using ZMP & React

196 lines (156 loc) 7.22 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _react = _interopRequireWildcard(require("react")); var _useIsomorphicLayoutEffect = require("../shared/use-isomorphic-layout-effect"); var _cardHeader = _interopRequireDefault(require("./card-header")); var _cardContent = _interopRequireDefault(require("./card-content")); var _cardFooter = _interopRequireDefault(require("./card-footer")); var _utils = require("../shared/utils"); var _mixins = require("../shared/mixins"); var _zmp = require("../shared/zmp"); var _watchProp = require("../shared/watch-prop"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } var Card = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) { var className = props.className, id = props.id, style = props.style, title = props.title, content = props.content, footer = props.footer, padding = props.padding, outline = props.outline, expandable = props.expandable, expandableAnimateWidth = props.expandableAnimateWidth, expandableOpened = props.expandableOpened, animate = props.animate, hideNavbarOnOpen = props.hideNavbarOnOpen, hideToolbarOnOpen = props.hideToolbarOnOpen, hideStatusbarOnOpen = props.hideStatusbarOnOpen, scrollableEl = props.scrollableEl, swipeToClose = props.swipeToClose, closeByBackdropClick = props.closeByBackdropClick, backdrop = props.backdrop, backdropEl = props.backdropEl, noShadow = props.noShadow, noBorder = props.noBorder; var extraAttrs = (0, _utils.getExtraAttrs)(props); var elRef = (0, _react.useRef)(null); var open = function open() { if (!elRef.current) return; _zmp.zmp.card.open(elRef.current); }; var close = function close() { if (!elRef.current) return; _zmp.zmp.card.close(elRef.current); }; var onBeforeOpen = function onBeforeOpen(el, prevent) { if (elRef.current !== el) return; (0, _utils.emit)(props, 'cardBeforeOpen', el, prevent); }; var onOpen = function onOpen(el) { if (elRef.current !== el) return; (0, _utils.emit)(props, 'cardOpen', el); }; var onOpened = function onOpened(el, pageEl) { if (elRef.current !== el) return; (0, _utils.emit)(props, 'cardOpened', el, pageEl); }; var onClose = function onClose(el) { if (elRef.current !== el) return; (0, _utils.emit)(props, 'cardClose', el); }; var onClosed = function onClosed(el, pageEl) { if (elRef.current !== el) return; (0, _utils.emit)(props, 'cardClosed', el, pageEl); }; var attachEvents = function attachEvents() { if (!expandable || !elRef.current) return; (0, _zmp.zmpready)(function () { _zmp.zmp.on('cardBeforeOpen', onBeforeOpen); _zmp.zmp.on('cardOpen', onOpen); _zmp.zmp.on('cardOpened', onOpened); _zmp.zmp.on('cardClose', onClose); _zmp.zmp.on('cardClosed', onClosed); }); }; var detachEvents = function detachEvents() { _zmp.zmp.off('cardBeforeOpen', onBeforeOpen); _zmp.zmp.off('cardOpen', onOpen); _zmp.zmp.off('cardOpened', onOpened); _zmp.zmp.off('cardClose', onClose); _zmp.zmp.off('cardClosed', onClosed); }; var onMount = function onMount() { if (!expandable || !elRef.current) return; (0, _zmp.zmpready)(function () { if (expandable && expandableOpened) { _zmp.zmp.card.open(elRef.current, false); } }); }; (0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(function () { onMount(); }, []); (0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(function () { attachEvents(); return detachEvents; }); (0, _watchProp.watchProp)(expandableOpened, function (value) { if (value) { open(); } else { close(); } }); (0, _react.useImperativeHandle)(ref, function () { return { el: elRef.current, open: open, close: close }; }); var headerEl; var contentEl; var footerEl; var classes = (0, _utils.classNames)(className, 'card', { 'card-outline': outline, 'card-expandable': expandable, 'card-expandable-animate-width': expandableAnimateWidth, 'no-shadow': noShadow, 'no-border': noBorder }, (0, _mixins.colorClasses)(props)); var slots = (0, _utils.getSlots)(props); if (title || slots.header) { headerEl = /*#__PURE__*/_react.default.createElement(_cardHeader.default, null, title, slots.header); } if (content || slots.content) { contentEl = /*#__PURE__*/_react.default.createElement(_cardContent.default, { padding: padding }, content, slots.content); } if (footer || slots.footer) { footerEl = /*#__PURE__*/_react.default.createElement(_cardFooter.default, null, footer, slots.footer); } return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({ id: id, style: style, className: classes, "data-animate": typeof animate === 'undefined' ? animate : animate.toString(), "data-hide-navbar-on-open": typeof hideNavbarOnOpen === 'undefined' ? hideNavbarOnOpen : hideNavbarOnOpen.toString(), "data-hide-toolbar-on-open": typeof hideToolbarOnOpen === 'undefined' ? hideToolbarOnOpen : hideToolbarOnOpen.toString(), "data-hide-statusbar-on-open": typeof hideStatusbarOnOpen === 'undefined' ? hideStatusbarOnOpen : hideStatusbarOnOpen.toString(), "data-scrollable-el": scrollableEl, "data-swipe-to-close": typeof swipeToClose === 'undefined' ? swipeToClose : swipeToClose.toString(), "data-close-by-backdrop-click": typeof closeByBackdropClick === 'undefined' ? closeByBackdropClick : closeByBackdropClick.toString(), "data-backdrop": typeof backdrop === 'undefined' ? backdrop : backdrop.toString(), "data-backdrop-el": backdropEl, ref: elRef }, extraAttrs), headerEl, contentEl, footerEl, slots.default); }); Card.displayName = 'zmp-card'; var _default = Card; exports.default = _default;