UNPKG

8 kBJavaScriptView Raw
1"use strict";
2var __assign = (this && this.__assign) || function () {
3 __assign = Object.assign || function(t) {
4 for (var s, i = 1, n = arguments.length; i < n; i++) {
5 s = arguments[i];
6 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7 t[p] = s[p];
8 }
9 return t;
10 };
11 return __assign.apply(this, arguments);
12};
13var __importDefault = (this && this.__importDefault) || function (mod) {
14 return (mod && mod.__esModule) ? mod : { "default": mod };
15};
16Object.defineProperty(exports, "__esModule", { value: true });
17var jsx_runtime_1 = require("react/jsx-runtime");
18var react_1 = require("react");
19var Sensor_1 = __importDefault(require("./Sensor"));
20var scroll_into_view_1 = __importDefault(require("scroll-into-view"));
21var SliderContainer_1 = __importDefault(require("./SliderContainer"));
22var ItemsContainer_1 = __importDefault(require("./ItemsContainer"));
23var utils_1 = require("./utils");
24var SliderButton_1 = __importDefault(require("./SliderButton"));
25var UserCustomButton_1 = __importDefault(require("./UserCustomButton"));
26var errorMessage = "Sensor was unable to detect visible items. Try reducing threshold, increasing slider's width or reducing item's width";
27var Slider = function (_a) {
28 var id = _a.id, children = _a.children, threshold = _a.threshold, spacing = _a.spacing, buttonLeft = _a.buttonLeft, buttonRight = _a.buttonRight, time = _a.time, width = _a.width, outerContainerStyles = _a.outerContainerStyles, innerContainerStyles = _a.innerContainerStyles, buttonLeftStyles = _a.buttonLeftStyles, buttonRightStyles = _a.buttonRightStyles, _b = _a.disableScrollbar, disableScrollbar = _b === void 0 ? false : _b, _c = _a.showButtons, showButtons = _c === void 0 ? true : _c, _d = _a.disappearingButtons, disappearingButtons = _d === void 0 ? true : _d;
29 var itemsRef = (0, react_1.useRef)([]);
30 var _e = (0, react_1.useState)({
31 to: 0,
32 direction: utils_1.slideDirections.LEFT,
33 }), scrollTo = _e[0], setScrollTo = _e[1];
34 var _f = (0, react_1.useState)(true), disableButtons = _f[0], setDisableButtons = _f[1];
35 var _g = (0, react_1.useState)(utils_1.slideDirections.BOTH), lockSlide = _g[0], setLockSlide = _g[1];
36 var _h = (0, react_1.useState)(false), visibleButtons = _h[0], setVisibleButtons = _h[1];
37 var evaluteButtonsLock = function () {
38 setTimeout(function () {
39 var _a, _b, _c, _d;
40 setLockSlide(utils_1.slideDirections.NONE);
41 if (((_a = itemsRef.current[0]) === null || _a === void 0 ? void 0 : _a.inView) === true) {
42 setLockSlide(utils_1.slideDirections.LEFT);
43 }
44 if (((_b = itemsRef.current[itemsRef.current.length - 1]) === null || _b === void 0 ? void 0 : _b.inView) === true)
45 setLockSlide(utils_1.slideDirections.RIGHT);
46 if (((_c = itemsRef.current[0]) === null || _c === void 0 ? void 0 : _c.inView) === true &&
47 ((_d = itemsRef.current[itemsRef.current.length - 1]) === null || _d === void 0 ? void 0 : _d.inView) === true)
48 setLockSlide(utils_1.slideDirections.BOTH);
49 }, 0);
50 };
51 (0, react_1.useEffect)(function () {
52 setDisableButtons(true);
53 //const align = scrollTo.direction === slideDirections.RIGHT ? 0.001 : 1;
54 (0, scroll_into_view_1.default)(itemsRef.current[scrollTo.to], {
55 time: time ? time : 350,
56 align: { left: 0.001, lockY: true },
57 cancellable: false,
58 }, function (_completed) {
59 setDisableButtons(false);
60 evaluteButtonsLock();
61 });
62 }, [scrollTo, time]);
63 (0, react_1.useEffect)(function () {
64 window.addEventListener("resize", evaluteButtonsLock);
65 return function () {
66 window.removeEventListener("resize", evaluteButtonsLock);
67 };
68 }, []);
69 var slideRight = function () {
70 setLockSlide(utils_1.slideDirections.NONE);
71 var scrollToRight = 0;
72 var visibleItems = 0;
73 itemsRef.current.forEach(function (item, index) {
74 var _a, _b;
75 if (item.inView)
76 visibleItems++;
77 if (item.inView &&
78 (((_a = itemsRef.current[index + 1]) === null || _a === void 0 ? void 0 : _a.inView) === false ||
79 ((_b = itemsRef.current[index + 1]) === null || _b === void 0 ? void 0 : _b.inView) === undefined))
80 scrollToRight = index + 1;
81 });
82 if (scrollToRight + visibleItems >= itemsRef.current.length)
83 setLockSlide(utils_1.slideDirections.RIGHT);
84 if (visibleItems === 0)
85 console.error(errorMessage);
86 setScrollTo({ to: scrollToRight, direction: utils_1.slideDirections.RIGHT });
87 };
88 var slideLeft = function () {
89 setLockSlide(utils_1.slideDirections.NONE);
90 var firstVisibleItem = 0;
91 var scrollToLeft = 0;
92 var visibleItems = 0;
93 itemsRef.current.forEach(function (item, index) {
94 var _a;
95 if (item.inView)
96 visibleItems++;
97 if (item.inView && ((_a = itemsRef.current[index - 1]) === null || _a === void 0 ? void 0 : _a.inView) === false) {
98 firstVisibleItem = index;
99 }
100 });
101 scrollToLeft = firstVisibleItem - visibleItems;
102 if (scrollToLeft <= 0) {
103 setLockSlide(utils_1.slideDirections.LEFT);
104 scrollToLeft = 0;
105 }
106 if (visibleItems === 0)
107 console.error(errorMessage);
108 setScrollTo({
109 to: scrollToLeft,
110 direction: utils_1.slideDirections.LEFT,
111 });
112 };
113 return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsxs)(SliderContainer_1.default, __assign({ id: id, width: width, setVisibleButtons: setVisibleButtons, outerContainerStyles: outerContainerStyles }, { children: [buttonLeft && showButtons ? ((0, jsx_runtime_1.jsx)(UserCustomButton_1.default, __assign({ disappearingButtons: disappearingButtons, disabled: disableButtons, visible: visibleButtons, locked: lockSlide, onClick: slideLeft, direction: utils_1.slideDirections.LEFT }, { children: buttonLeft }))) : ((0, jsx_runtime_1.jsx)(SliderButton_1.default, { disappearingButtons: disappearingButtons, disabled: disableButtons, visible: visibleButtons, locked: lockSlide, onClick: slideLeft, styles: buttonLeftStyles, direction: utils_1.slideDirections.LEFT })), (0, jsx_runtime_1.jsx)(ItemsContainer_1.default, __assign({ disableScrollbar: disableScrollbar, innerContainerStyles: innerContainerStyles }, { children: react_1.Children.toArray(children).map(function (item, index) { return ((0, jsx_runtime_1.jsx)(Sensor_1.default, __assign({ spacing: spacing, threshold: threshold, ref: function (element) {
114 itemsRef.current[index] = element;
115 } }, { children: function (inView) {
116 if (itemsRef.current[index]) {
117 itemsRef.current[index].inView = inView;
118 evaluteButtonsLock();
119 }
120 return item;
121 } }), index)); }) })), buttonLeft && showButtons ? ((0, jsx_runtime_1.jsx)(UserCustomButton_1.default, __assign({ disappearingButtons: disappearingButtons, disabled: disableButtons, visible: visibleButtons, locked: lockSlide, onClick: slideRight, direction: utils_1.slideDirections.RIGHT }, { children: buttonRight }))) : ((0, jsx_runtime_1.jsx)(SliderButton_1.default, { disappearingButtons: disappearingButtons, disabled: disableButtons, visible: visibleButtons, locked: lockSlide, onClick: slideRight, styles: buttonRightStyles, direction: utils_1.slideDirections.RIGHT }))] })) }));
122};
123exports.default = Slider;