@sima-land/moleculas 16.0.0-alpha.37 → 16.0.0-alpha.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common/components/hover-slider/hover-slider.js +10 -2
- package/common/components/hover-slider/hover-slider.js.map +1 -1
- package/common/components/hover-slider/utils.d.ts +6 -0
- package/common/components/hover-slider/utils.js +14 -1
- package/common/components/hover-slider/utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -19,10 +19,14 @@ const hover_slider_m_scss_1 = __importDefault(require("./hover-slider.m.scss"));
|
|
|
19
19
|
* @return Элемент.
|
|
20
20
|
*/
|
|
21
21
|
function HoverSlider({ rootRef: rootRefProp, withNav = true, navProps, children, beforeList, afterList, className, 'data-testid': testId = 'hover-slider', ...restProps }) {
|
|
22
|
+
const [isScrolling, setIsScrolling] = (0, react_1.useState)(false);
|
|
22
23
|
const rootRef = (0, react_1.useRef)(null);
|
|
23
24
|
const listRef = (0, react_1.useRef)(null);
|
|
24
25
|
const [activeIndex, setActiveIndex] = (0, react_1.useState)(0);
|
|
25
26
|
const { count, contextValue } = (0, utils_1.useSlideCount)();
|
|
27
|
+
const scrollingEnd = (0, react_1.useCallback)((0, utils_1.debounce)(() => {
|
|
28
|
+
setIsScrolling(false);
|
|
29
|
+
}, 100), []);
|
|
26
30
|
(0, react_1.useImperativeHandle)(rootRefProp, () => rootRef.current);
|
|
27
31
|
// ВАЖНО: подписываемся напрямую через ref так как React вызывает onMouseLeave не на mouseleave а на mouseout
|
|
28
32
|
(0, react_1.useEffect)(() => {
|
|
@@ -33,6 +37,8 @@ function HoverSlider({ rootRef: rootRefProp, withNav = true, navProps, children,
|
|
|
33
37
|
}
|
|
34
38
|
/** @inheritdoc */
|
|
35
39
|
const onMouseMove = (event) => {
|
|
40
|
+
if (isScrolling)
|
|
41
|
+
return;
|
|
36
42
|
const rootRect = root.getBoundingClientRect();
|
|
37
43
|
const rootClientX = event.clientX - rootRect.left;
|
|
38
44
|
const imageIndex = Math.floor(rootClientX / (rootRect.width / count));
|
|
@@ -52,7 +58,7 @@ function HoverSlider({ rootRef: rootRefProp, withNav = true, navProps, children,
|
|
|
52
58
|
return () => {
|
|
53
59
|
off.forEach(fn => fn());
|
|
54
60
|
};
|
|
55
|
-
}, [count]);
|
|
61
|
+
}, [count, isScrolling]);
|
|
56
62
|
(0, react_1.useEffect)(() => {
|
|
57
63
|
const list = listRef.current;
|
|
58
64
|
if (!list || count < 2) {
|
|
@@ -60,7 +66,9 @@ function HoverSlider({ rootRef: rootRefProp, withNav = true, navProps, children,
|
|
|
60
66
|
}
|
|
61
67
|
/** @inheritdoc */
|
|
62
68
|
const onScroll = () => {
|
|
69
|
+
setIsScrolling(true);
|
|
63
70
|
setActiveIndex(Math.round(list.scrollLeft / list.getBoundingClientRect().width));
|
|
71
|
+
scrollingEnd();
|
|
64
72
|
};
|
|
65
73
|
const off = [
|
|
66
74
|
//
|
|
@@ -69,7 +77,7 @@ function HoverSlider({ rootRef: rootRefProp, withNav = true, navProps, children,
|
|
|
69
77
|
return () => {
|
|
70
78
|
off.forEach(fn => fn());
|
|
71
79
|
};
|
|
72
|
-
}, [count]);
|
|
80
|
+
}, [count, isScrolling]);
|
|
73
81
|
return ((0, jsx_runtime_1.jsx)(utils_1.HoverSliderContext.Provider, { value: contextValue, children: (0, jsx_runtime_1.jsxs)("div", { ...restProps, ref: rootRef, className: (0, classnames_1.default)(hover_slider_m_scss_1.default.root, className), "data-testid": testId, children: [beforeList, (0, jsx_runtime_1.jsx)("div", { ref: listRef, className: hover_slider_m_scss_1.default.list, children: children }), afterList, withNav && count > 1 && ((0, jsx_runtime_1.jsx)(hover_slider_nav_1.HoverSliderNav, { ...navProps, className: (0, classnames_1.default)(hover_slider_m_scss_1.default.nav, navProps === null || navProps === void 0 ? void 0 : navProps.className), current: activeIndex, total: count }))] }) }));
|
|
74
82
|
}
|
|
75
83
|
/** @inheritdoc */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hover-slider.js","sourceRoot":"","sources":["../../../../src/common/components/hover-slider/hover-slider.tsx"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"hover-slider.js","sourceRoot":"","sources":["../../../../src/common/components/hover-slider/hover-slider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -5,3 +5,9 @@ export declare function useSlideCount(): {
|
|
|
5
5
|
count: number;
|
|
6
6
|
contextValue: HoverSliderContextValue;
|
|
7
7
|
};
|
|
8
|
+
/**
|
|
9
|
+
* @param fn Функция вызова.
|
|
10
|
+
* @param ms Задержка в миллисекундах.
|
|
11
|
+
* @return Функция вызова.
|
|
12
|
+
*/
|
|
13
|
+
export declare const debounce: <T>(fn: (...args: T[]) => void, ms: number) => (this: any, ...args: any[]) => void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HoverSliderContext = void 0;
|
|
3
|
+
exports.debounce = exports.HoverSliderContext = void 0;
|
|
4
4
|
exports.useSlideCount = useSlideCount;
|
|
5
5
|
const react_1 = require("react");
|
|
6
6
|
exports.HoverSliderContext = (0, react_1.createContext)({
|
|
@@ -20,4 +20,17 @@ function useSlideCount() {
|
|
|
20
20
|
}), []);
|
|
21
21
|
return { count: slideIds.length, contextValue };
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* @param fn Функция вызова.
|
|
25
|
+
* @param ms Задержка в миллисекундах.
|
|
26
|
+
* @return Функция вызова.
|
|
27
|
+
*/
|
|
28
|
+
const debounce = (fn, ms) => {
|
|
29
|
+
let timeoutId;
|
|
30
|
+
return function (...args) {
|
|
31
|
+
clearTimeout(timeoutId);
|
|
32
|
+
timeoutId = setTimeout(() => fn.apply(this, args), ms);
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
exports.debounce = debounce;
|
|
23
36
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/common/components/hover-slider/utils.ts"],"names":[],"mappings":";;;AASA,sCAgBC;AAzBD,iCAAyD;AAG5C,QAAA,kBAAkB,GAAG,IAAA,qBAAa,EAA0B;IACvE,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC;IACrB,aAAa,EAAE,GAAG,EAAE,GAAE,CAAC;CACxB,CAAC,CAAC;AAEH,kBAAkB;AAClB,SAAgB,aAAa;IAC3B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAW,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAE7D,MAAM,YAAY,GAAG,IAAA,eAAO,EAC1B,GAAG,EAAE,CAAC,CAAC;QACL,WAAW,EAAE,MAAM,CAAC,EAAE;YACpB,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC;QACD,aAAa,EAAE,MAAM,CAAC,EAAE;YACtB,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7F,CAAC;KACF,CAAC,EACF,EAAE,CACH,CAAC;IAEF,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;AAClD,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/common/components/hover-slider/utils.ts"],"names":[],"mappings":";;;AASA,sCAgBC;AAzBD,iCAAyD;AAG5C,QAAA,kBAAkB,GAAG,IAAA,qBAAa,EAA0B;IACvE,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC;IACrB,aAAa,EAAE,GAAG,EAAE,GAAE,CAAC;CACxB,CAAC,CAAC;AAEH,kBAAkB;AAClB,SAAgB,aAAa;IAC3B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAW,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAE7D,MAAM,YAAY,GAAG,IAAA,eAAO,EAC1B,GAAG,EAAE,CAAC,CAAC;QACL,WAAW,EAAE,MAAM,CAAC,EAAE;YACpB,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC;QACD,aAAa,EAAE,MAAM,CAAC,EAAE;YACtB,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7F,CAAC;KACF,CAAC,EACF,EAAE,CACH,CAAC;IAEF,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACI,MAAM,QAAQ,GAAG,CAAI,EAA0B,EAAE,EAAU,EAAE,EAAE;IACpE,IAAI,SAAwC,CAAC;IAC7C,OAAO,UAAqB,GAAG,IAAW;QACxC,YAAY,CAAC,SAAS,CAAC,CAAC;QACxB,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC;AACJ,CAAC,CAAC;AANW,QAAA,QAAQ,YAMnB"}
|
package/package.json
CHANGED