1 | "use strict";
|
2 | var __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 | };
|
13 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
14 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
15 | };
|
16 | Object.defineProperty(exports, "__esModule", { value: true });
|
17 | var jsx_runtime_1 = require("react/jsx-runtime");
|
18 | var react_1 = require("react");
|
19 | var Sensor_1 = __importDefault(require("./Sensor"));
|
20 | var scroll_into_view_1 = __importDefault(require("scroll-into-view"));
|
21 | var SliderContainer_1 = __importDefault(require("./SliderContainer"));
|
22 | var ItemsContainer_1 = __importDefault(require("./ItemsContainer"));
|
23 | var utils_1 = require("./utils");
|
24 | var SliderButton_1 = __importDefault(require("./SliderButton"));
|
25 | var UserCustomButton_1 = __importDefault(require("./UserCustomButton"));
|
26 | var errorMessage = "Sensor was unable to detect visible items. Try reducing threshold, increasing slider's width or reducing item's width";
|
27 | var 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 |
|
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 | };
|
123 | exports.default = Slider;
|