UNPKG

@arranjae/react-simple-carousel

Version:
99 lines (98 loc) 4.56 kB
"use strict"; function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _classnames = _interopRequireDefault(require("classnames")); var _react = _interopRequireWildcard(require("react")); var _ = require("./"); var _Common = require("./Common"); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } var SimpleCarousel = function SimpleCarousel(props) { var _a, _b; var _c = (0, _react.useState)(0), actualScroll = _c[0], setActualScroll = _c[1]; var _d = (0, _react.useState)(0), actualItem = _d[0], setActualItem = _d[1]; var _e = (0, _react.useState)(), wrapperRef = _e[0], setWrapperRef = _e[1]; var itemsRefs = {}; var onNext = function onNext() { if (!wrapperRef) return; var halfWidth = wrapperRef.offsetWidth / 2; var scroll = actualScroll + halfWidth; if (scroll > wrapperRef.scrollWidth) return; wrapperRef.scrollLeft = scroll; setActualScroll(scroll); }; var onPrev = function onPrev() { if (!wrapperRef) return; var halfWidth = wrapperRef.offsetWidth / 2; var scroll = actualScroll - halfWidth; if (scroll < 0) { wrapperRef.scrollLeft = 0; return setActualScroll(0); } wrapperRef.scrollLeft = scroll; setActualScroll(scroll); }; var moveToItem = function moveToItem(i) { itemsRefs["ref-item-" + i].current.scrollIntoView({ behavior: 'smooth', inline: 'center' }); setActualScroll(wrapperRef.scrollLeft); setActualItem(i); }; return /*#__PURE__*/_react["default"].createElement("div", { className: "simple-carousel" }, /*#__PURE__*/_react["default"].createElement("div", { ref: function ref(inst) { return setWrapperRef(inst); }, className: (0, _classnames["default"])('simple-carousel-wrapper', props.wrapperClasses) }, props.list.map(function (item, i) { return /*#__PURE__*/_react["default"].createElement(_.SimpleCarouselItem, { key: i, id: "simple-carousel-item-" + i, refer: function refer(inst) { itemsRefs["ref-item-" + i] = inst; }, item: item, setScroll: function setScroll() { setActualScroll(wrapperRef.scrollLeft); setActualItem(i); } }); })), props.showBullets && (/*#__PURE__*/_react["default"].createElement("div", { className: "simple-carousel-bullets" }, props.list.map(function (_item, i) { return /*#__PURE__*/_react["default"].createElement("span", { className: "simple-carousel-bullets-item " + (i === actualItem ? 'active' : ''), key: "bullet-" + i, onClick: function onClick() { moveToItem(i); } }, i); }))), /*#__PURE__*/_react["default"].createElement(_Common.CustomButton, { Elem: (_a = props.customButtons) === null || _a === void 0 ? void 0 : _a.prev, className: (0, _classnames["default"])('btn-scroll prev', { hidden: props.list && props.list.length < 2 }), handleClick: onPrev }, "Prev"), /*#__PURE__*/_react["default"].createElement(_Common.CustomButton, { Elem: (_b = props.customButtons) === null || _b === void 0 ? void 0 : _b.next, className: (0, _classnames["default"])('btn-scroll next', { hidden: props.list && props.list.length < 2 }), handleClick: onNext }, "Next")); }; var _default = exports["default"] = SimpleCarousel; module.exports = exports.default;