UNPKG

3.18 kBJavaScriptView Raw
1function _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); }
2
3function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
4
5import React, { useRef, useLayoutEffect, useState, forwardRef } from 'react';
6import { uniqueClasses } from './utils';
7var SwiperSlide = forwardRef(function (_temp, externalRef) {
8 var _ref = _temp === void 0 ? {} : _temp,
9 _ref$tag = _ref.tag,
10 Tag = _ref$tag === void 0 ? 'div' : _ref$tag,
11 children = _ref.children,
12 _ref$className = _ref.className,
13 className = _ref$className === void 0 ? '' : _ref$className,
14 swiper = _ref.swiper,
15 zoom = _ref.zoom,
16 rest = _objectWithoutPropertiesLoose(_ref, ["tag", "children", "className", "swiper", "zoom"]);
17
18 var slideElRef = useRef(null);
19
20 var _useState = useState('swiper-slide'),
21 slideClasses = _useState[0],
22 setSlideClasses = _useState[1];
23
24 function updateClasses(swiper, el, classNames) {
25 if (el === slideElRef.current) {
26 setSlideClasses(classNames);
27 }
28 }
29
30 useLayoutEffect(function () {
31 if (externalRef) {
32 externalRef.current = slideElRef.current;
33 }
34
35 if (!slideElRef.current || !swiper) return;
36
37 if (swiper.destroyed) {
38 if (slideClasses !== 'swiper-slide') {
39 setSlideClasses('swiper-slide');
40 }
41
42 return;
43 }
44
45 swiper.on('_slideClass', updateClasses); // eslint-disable-next-line
46
47 return function () {
48 if (!swiper) return;
49 swiper.off('_slideClass', updateClasses);
50 };
51 });
52 var slideData;
53
54 if (typeof children === 'function') {
55 slideData = {
56 isActive: slideClasses.indexOf('swiper-slide-active') >= 0 || slideClasses.indexOf('swiper-slide-duplicate-active') >= 0,
57 isVisible: slideClasses.indexOf('swiper-slide-visible') >= 0,
58 isDuplicate: slideClasses.indexOf('swiper-slide-duplicate') >= 0,
59 isPrev: slideClasses.indexOf('swiper-slide-prev') >= 0 || slideClasses.indexOf('swiper-slide-duplicate-prev') >= 0,
60 isNext: slideClasses.indexOf('swiper-slide-next') >= 0 || slideClasses.indexOf('swiper-slide-duplicate next') >= 0
61 };
62 }
63
64 var renderChildren = function renderChildren() {
65 return typeof children === 'function' ? children(slideData) : children;
66 };
67
68 return /*#__PURE__*/React.createElement(Tag, _extends({
69 ref: slideElRef,
70 className: uniqueClasses("" + slideClasses + (className ? " " + className : ''))
71 }, rest), zoom ? /*#__PURE__*/React.createElement("div", {
72 className: "swiper-zoom-container",
73 "data-swiper-zoom": typeof zoom === 'number' ? zoom : undefined
74 }, renderChildren()) : renderChildren());
75});
76SwiperSlide.displayName = 'SwiperSlide';
77export { SwiperSlide };
\No newline at end of file