UNPKG

react-product-slider

Version:
67 lines (66 loc) 3.61 kB
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); }; import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { useState, useEffect } from "react"; import { SliderContainer, SelectedPicture, Thumbnails } from "./style"; import Navigator from "./components/navigator"; var ReactProductSlider = function (_a) { var items = _a.items, classNamePrefix = _a.classNamePrefix, reverse = _a.reverse, initialSelected = _a.initialSelected; var _b = useState(initialSelected ? initialSelected : 0), selectedIndex = _b[0], setSelectedIndex = _b[1]; var _c = useState(false), zoomStatus = _c[0], setZoomStatus = _c[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]); 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 (_jsxs(SliderContainer, __assign({ zoomStatus: zoomStatus, reverse: reverse, className: classNameMaker("slider-container") }, { children: [zoomStatus && (_jsx("span", __assign({ className: "close-but ".concat(classNameMaker("close-but")), onClick: function () { setZoomStatus(false); } }, { children: "\u2715" }))), _jsx(SelectedPicture, __assign({ className: classNameMaker("selected-picture"), background: items[selectedIndex]["src"], zoomStatus: zoomStatus, onClick: function () { setZoomStatus(true); } }, { children: _jsx(Navigator, { className: classNameMaker("navigator"), selected: selectedIndex, count: items.length, navigate: navigate }) })), _jsx(Thumbnails, __assign({ zoomStatus: zoomStatus, className: classNameMaker("thumbnails") }, { children: items.map(function (img, index) { return (_jsx("div", __assign({ className: "thumbnail".concat(selectedIndex === index ? " selected" : ""), id: "thumbnail-".concat(index) }, { children: _jsx("img", { src: img["thumbnail"] ? img["thumbnail"] : img["src"], alt: img["alt"], onClick: function () { setSelectedIndex(index); } }) }), index)); }) }))] }))); }; export default ReactProductSlider;