UNPKG

@wix/design-system

Version:

@wix/design-system

176 lines (175 loc) 7.49 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = _interopRequireWildcard(require("react")); var _wixUiIconsCommon = require("@wix/wix-ui-icons-common"); var _HorizontalScrollSt = require("./HorizontalScroll.st.css.js"); var _IconButton = _interopRequireDefault(require("../IconButton")); var _IconButton2 = require("../IconButton/IconButton.constants"); var _HorizontalScroll = require("./HorizontalScroll.constants"); var _debounce = _interopRequireDefault(require("lodash/debounce")); var _WixDesignSystemIconThemeProvider = require("../WixDesignSystemIconThemeProvider"); var _jsxFileName = "/home/builduser/work/57e038ea7326c1ec/packages/wix-design-system/dist/cjs/HorizontalScroll/HorizontalScroll.tsx"; function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } var DEFAULT_DEBOUNCE_TIMEOUT_MS = 20; var DEFAULT_SCROLL_DISTANCE_PX = 150; var HorizontalScroll = _ref => { var children = _ref.children, _ref$scrollDistance = _ref.scrollDistance, scrollDistance = _ref$scrollDistance === void 0 ? DEFAULT_SCROLL_DISTANCE_PX : _ref$scrollDistance, _ref$scrollDebounce = _ref.scrollDebounce, scrollDebounce = _ref$scrollDebounce === void 0 ? DEFAULT_DEBOUNCE_TIMEOUT_MS : _ref$scrollDebounce, _ref$scrollButtonSkin = _ref.scrollButtonSkin, scrollButtonSkin = _ref$scrollButtonSkin === void 0 ? _IconButton2.SKINS.standard : _ref$scrollButtonSkin, _ref$scrollButtonSize = _ref.scrollButtonSize, scrollButtonSize = _ref$scrollButtonSize === void 0 ? _IconButton2.SIZES.tiny : _ref$scrollButtonSize, gradientColor = _ref.gradientColor, gradientWidth = _ref.gradientWidth, dataHook = _ref.dataHook; var icons = (0, _WixDesignSystemIconThemeProvider.useIcons)('HorizontalScroll', { ChevronLeftSmall: _wixUiIconsCommon.ChevronLeftSmall, ChevronRightSmall: _wixUiIconsCommon.ChevronRightSmall }); var scrollContainerRef = (0, _react.useRef)(null); var _useState = (0, _react.useState)(false), _useState2 = (0, _slicedToArray2.default)(_useState, 2), canScrollLeft = _useState2[0], setCanScrollLeft = _useState2[1]; var _useState3 = (0, _react.useState)(false), _useState4 = (0, _slicedToArray2.default)(_useState3, 2), canScrollRight = _useState4[0], setCanScrollRight = _useState4[1]; var handleScrollByStep = (0, _react.useCallback)(scrollValue => { var container = scrollContainerRef.current; if (!container) return; container.scrollLeft += scrollValue; }, []); var checkOverflow = (0, _react.useCallback)(() => { var container = scrollContainerRef.current; if (!container) return; var scrollLeft = container.scrollLeft, scrollWidth = container.scrollWidth, clientWidth = container.clientWidth; setCanScrollLeft(scrollLeft > 0); setCanScrollRight(Math.round(scrollLeft) < scrollWidth - clientWidth); }, []); var debouncedCheckOverflow = (0, _react.useMemo)(() => (0, _debounce.default)(checkOverflow, scrollDebounce), [checkOverflow, scrollDebounce]); (0, _react.useEffect)(() => { var container = scrollContainerRef.current; if (!container) return; var observer = new ResizeObserver(checkOverflow); observer.observe(container); return () => observer.disconnect(); }, [checkOverflow]); (0, _react.useEffect)(() => { checkOverflow(); return () => { debouncedCheckOverflow.cancel(); }; }, [children, checkOverflow, debouncedCheckOverflow]); return /*#__PURE__*/_react.default.createElement("div", { className: _HorizontalScrollSt.classes.root, "data-hook": dataHook, style: { [_HorizontalScrollSt.vars['wds-horizontal-scroll-gradient-color']]: gradientColor, [_HorizontalScrollSt.vars['wds-horizontal-scroll-gradient-width']]: gradientWidth }, __self: void 0, __source: { fileName: _jsxFileName, lineNumber: 79, columnNumber: 5 } }, canScrollLeft && /*#__PURE__*/_react.default.createElement("div", { className: _HorizontalScrollSt.classes.startScroll, __self: void 0, __source: { fileName: _jsxFileName, lineNumber: 88, columnNumber: 9 } }, /*#__PURE__*/_react.default.createElement("div", { className: _HorizontalScrollSt.classes.startScrollButton, __self: void 0, __source: { fileName: _jsxFileName, lineNumber: 89, columnNumber: 11 } }, /*#__PURE__*/_react.default.createElement(_IconButton.default, { "aria-hidden": true, className: _HorizontalScrollSt.classes.scrollButton, size: scrollButtonSize, priority: "secondary", skin: scrollButtonSkin, onClick: () => handleScrollByStep(-scrollDistance), dataHook: _HorizontalScroll.dataHooks.leftButton, __self: void 0, __source: { fileName: _jsxFileName, lineNumber: 90, columnNumber: 13 } }, /*#__PURE__*/_react.default.createElement(icons.ChevronLeftSmall, { __self: void 0, __source: { fileName: _jsxFileName, lineNumber: 99, columnNumber: 15 } })))), /*#__PURE__*/_react.default.createElement("div", { className: _HorizontalScrollSt.classes.scrollContainer, ref: scrollContainerRef, onScroll: debouncedCheckOverflow, "data-hook": _HorizontalScroll.dataHooks.scrollContainer, tabIndex: -1, __self: void 0, __source: { fileName: _jsxFileName, lineNumber: 105, columnNumber: 7 } }, children), canScrollRight && /*#__PURE__*/_react.default.createElement("div", { className: _HorizontalScrollSt.classes.endScroll, __self: void 0, __source: { fileName: _jsxFileName, lineNumber: 116, columnNumber: 9 } }, /*#__PURE__*/_react.default.createElement("div", { className: _HorizontalScrollSt.classes.endScrollButton, __self: void 0, __source: { fileName: _jsxFileName, lineNumber: 117, columnNumber: 11 } }, /*#__PURE__*/_react.default.createElement(_IconButton.default, { "aria-hidden": true, className: _HorizontalScrollSt.classes.scrollButton, size: scrollButtonSize, priority: "secondary", skin: scrollButtonSkin, onClick: () => handleScrollByStep(scrollDistance), dataHook: _HorizontalScroll.dataHooks.rightButton, __self: void 0, __source: { fileName: _jsxFileName, lineNumber: 118, columnNumber: 13 } }, /*#__PURE__*/_react.default.createElement(icons.ChevronRightSmall, { __self: void 0, __source: { fileName: _jsxFileName, lineNumber: 127, columnNumber: 15 } }))))); }; HorizontalScroll.displayName = 'HorizontalScroll'; var _default = exports.default = HorizontalScroll; //# sourceMappingURL=HorizontalScroll.js.map