zmp-react
Version:
Build full featured iOS & Android apps using ZMP & React
196 lines (156 loc) • 7.22 kB
JavaScript
;
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;