UNPKG

zmp-react

Version:

Build full featured iOS & Android apps using ZMP & React

185 lines (164 loc) 6.6 kB
"use strict"; 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;