react-product-slider
Version:
product slider for e-commerce websites
72 lines (71 loc) • 4 kB
JavaScript
;
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;