zmp-react
Version:
Build full featured iOS & Android apps using ZMP & React
185 lines (164 loc) • 6.6 kB
JavaScript
;
exports.__esModule = true;
exports.default = void 0;
var _react = _interopRequireWildcard(require("react"));
var _utils = require("../shared/utils");
var _mixins = require("../shared/mixins");
var _useIsomorphicLayoutEffect = require("../shared/use-isomorphic-layout-effect");
var _zmp = require("../shared/zmp");
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; }
/* dts-props
id?: string | number;
className?: string;
style?: React.CSSProperties;
pagination: boolean;
scrollbar: boolean;
navigation: boolean;
autoplay?: boolean;
allowSlideNext?: boolean;
allowSlidePrev?: boolean;
allowTouchMove?: boolean;
centeredSlides?: boolean;
direction?: 'horizontal' | 'vertical';
effect?: 'slide' | 'fade' | 'cube' | 'coverflow' | 'flip' | 'creative' | 'cards';
enabled?: boolean;
loop?: boolean;
loopedSlides?: number;
slidesPerView?: number | 'auto';
spaceBetween?: number;
speed?: number;
onSlideChange?: (instance?: swiper) => void
ref?: React.MutableRefObject<{el: HTMLElement | null}>;
CHILDREN_PROP
*/
var Swiper = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
var _useState = (0, _react.useState)(false),
initialUpdate = _useState[0],
setInitialUpdate = _useState[1];
var elRef = (0, _react.useRef)(null);
var paginationElRef = (0, _react.useRef)(null);
var scrollbarElRef = (0, _react.useRef)(null);
var nextElRef = (0, _react.useRef)(null);
var prevElRef = (0, _react.useRef)(null);
var swiper = (0, _react.useRef)(null);
var id = props.id,
style = props.style,
className = props.className,
pagination = props.pagination,
scrollbar = props.scrollbar,
navigation = props.navigation,
autoplay = props.autoplay,
allowSlideNext = props.allowSlideNext,
allowSlidePrev = props.allowSlidePrev,
allowTouchMove = props.allowTouchMove,
centeredSlides = props.centeredSlides,
direction = props.direction,
effect = props.effect,
enabled = props.enabled,
loop = props.loop,
slidesPerView = props.slidesPerView,
spaceBetween = props.spaceBetween,
speed = props.speed,
onSlideChange = props.onSlideChange,
loopedSlides = props.loopedSlides;
var paginationEl;
var scrollbarEl;
var buttonNextEl;
var buttonPrevEl;
(0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(function () {
(0, _zmp.zmpready)(function (zmp) {
// eslint-disable-next-line no-use-before-define
initSwiper(zmp);
});
return function () {
if (swiper.current && !swiper.current.destroyed) {
swiper.current.destroy(true, false);
}
};
}, []);
(0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(function () {
if (!initialUpdate) {
setInitialUpdate(true);
return;
}
if (swiper.current && swiper.current.update && !swiper.current.destroyed) {
swiper.current.update();
}
});
(0, _react.useImperativeHandle)(ref, function () {
return {
el: elRef.current
};
});
var initSwiper = function initSwiper(zmp) {
var newParams = {
pagination: {},
navigation: {},
scrollbar: {}
};
var params = {
autoplay: autoplay,
allowSlideNext: allowSlideNext,
allowSlidePrev: allowSlidePrev,
allowTouchMove: allowTouchMove,
centeredSlides: centeredSlides,
direction: direction,
effect: effect,
enabled: enabled,
loop: loop,
slidesPerView: slidesPerView,
spaceBetween: spaceBetween,
speed: speed,
loopedSlides: loopedSlides
};
if (typeof onSlideChange === 'function') {
params.on = {
slideChange: onSlideChange
};
}
if (params) (0, _utils.extend)(newParams, (0, _utils.noUndefinedProps)(params));
if (pagination && !newParams.pagination.el) newParams.pagination.el = paginationElRef.current;
if (navigation && !newParams.navigation.nextEl && !newParams.navigation.prevEl) {
newParams.navigation.nextEl = nextElRef.current;
newParams.navigation.prevEl = prevElRef.current;
}
if (scrollbar && !newParams.scrollbar.el) newParams.scrollbar.el = scrollbarElRef.current;
swiper.current = zmp.swiper.create(elRef.current, newParams);
};
var slots = (0, _utils.getSlots)(props);
if (pagination) {
paginationEl = /*#__PURE__*/_react.default.createElement("div", {
ref: paginationElRef,
className: "swiper-pagination"
});
}
if (scrollbar) {
scrollbarEl = /*#__PURE__*/_react.default.createElement("div", {
ref: scrollbarElRef,
className: "swiper-scrollbar"
});
}
if (navigation) {
buttonNextEl = /*#__PURE__*/_react.default.createElement("div", {
ref: nextElRef,
className: "swiper-button-next"
});
buttonPrevEl = /*#__PURE__*/_react.default.createElement("div", {
ref: prevElRef,
className: "swiper-button-prev"
});
}
var classes = (0, _utils.classNames)(className, 'swiper-container', (0, _mixins.colorClasses)(props));
return /*#__PURE__*/_react.default.createElement("div", {
id: id,
style: style,
ref: elRef,
className: classes
}, slots['before-wrapper'], /*#__PURE__*/_react.default.createElement("div", {
className: "swiper-wrapper"
}, slots.default), paginationEl, scrollbarEl, buttonPrevEl, buttonNextEl, slots['after-wrapper']);
});
Swiper.displayName = 'zmp-swiper';
var _default = Swiper;
exports.default = _default;