@arranjae/react-simple-carousel
Version:
Simple Carousel - React and TypeScript
99 lines (98 loc) • 4.56 kB
JavaScript
;
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;