UNPKG

react-product-slider

Version:
72 lines (71 loc) 4 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var jsx_runtime_1 = require("react/jsx-runtime"); var react_1 = require("react"); var style_1 = require("./style"); var navigator_1 = __importDefault(require("./components/navigator")); var ReactProductSlider = function (_a) { var items = _a.items, classNamePrefix = _a.classNamePrefix, reverse = _a.reverse, initialSelected = _a.initialSelected; var _b = (0, react_1.useState)(initialSelected ? initialSelected : 0), selectedIndex = _b[0], setSelectedIndex = _b[1]; var _c = (0, react_1.useState)(false), zoomStatus = _c[0], setZoomStatus = _c[1]; (0, react_1.useEffect)(function () { if (typeof document !== "undefined") { var item = document.getElementById("thumbnail-".concat(selectedIndex)); item === null || item === void 0 ? void 0 : item.scrollIntoView({ behavior: "smooth", block: "end" }); } }, [zoomStatus, selectedIndex]); (0, react_1.useEffect)(function () { var windowStatus = function () { if (typeof document !== "undefined" && zoomStatus) { document.body.style.overflow = zoomStatus ? "hidden" : "auto"; document.body.style.touchAction = zoomStatus ? "none" : "auto"; } }; windowStatus(); }, [zoomStatus]); var navigate = function (direction) { var newSelected = 0; if (direction === "next") { if (selectedIndex < items.length - 1) { newSelected = selectedIndex + 1; } } if (direction === "prev") { if (selectedIndex !== 0) { newSelected = selectedIndex - 1; } else { newSelected = items.length - 1; } } setSelectedIndex(newSelected); }; var classNameMaker = function (elementName) { if (classNamePrefix) { return classNamePrefix + "__" + elementName; } return ""; }; return ((0, jsx_runtime_1.jsxs)(style_1.SliderContainer, __assign({ zoomStatus: zoomStatus, reverse: reverse, className: classNameMaker("slider-container") }, { children: [zoomStatus && ((0, jsx_runtime_1.jsx)("span", __assign({ className: "close-but ".concat(classNameMaker("close-but")), onClick: function () { setZoomStatus(false); } }, { children: "\u2715" }))), (0, jsx_runtime_1.jsx)(style_1.SelectedPicture, __assign({ className: classNameMaker("selected-picture"), background: items[selectedIndex]["src"], zoomStatus: zoomStatus, onClick: function () { setZoomStatus(true); } }, { children: (0, jsx_runtime_1.jsx)(navigator_1.default, { className: classNameMaker("navigator"), selected: selectedIndex, count: items.length, navigate: navigate }) })), (0, jsx_runtime_1.jsx)(style_1.Thumbnails, __assign({ zoomStatus: zoomStatus, className: classNameMaker("thumbnails") }, { children: items.map(function (img, index) { return ((0, jsx_runtime_1.jsx)("div", __assign({ className: "thumbnail".concat(selectedIndex === index ? " selected" : ""), id: "thumbnail-".concat(index) }, { children: (0, jsx_runtime_1.jsx)("img", { src: img["thumbnail"] ? img["thumbnail"] : img["src"], alt: img["alt"], onClick: function () { setSelectedIndex(index); } }) }), index)); }) }))] }))); }; exports.default = ReactProductSlider;