@hh.ru/magritte-ui-scrollable-container 4.5.1 → 4.5.3
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/ScrollableContainer.js +1 -1
- package/ScrollableItem.js +1 -1
- package/index.css +15 -15
- package/index.js +1 -1
- package/index.mock.js +1 -1
- package/package.json +7 -7
- package/{useScrollContainer-fi20ToYI.js → useScrollContainer-B2HfC9He.js} +2 -2
- package/{useScrollContainer-fi20ToYI.js.map → useScrollContainer-B2HfC9He.js.map} +1 -1
- package/useScrollContainer.js +1 -1
package/ScrollableContainer.js
CHANGED
|
@@ -6,7 +6,7 @@ import { Action } from '@hh.ru/magritte-ui-action';
|
|
|
6
6
|
import { Breakpoint, useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';
|
|
7
7
|
import { DotPages } from '@hh.ru/magritte-ui-dot-pages';
|
|
8
8
|
import { ChevronLeftOutlinedSize24, ChevronRightOutlinedSize24 } from '@hh.ru/magritte-ui-icon/icon';
|
|
9
|
-
import { u as useScrollContainer, s as styles } from './useScrollContainer-
|
|
9
|
+
import { u as useScrollContainer, s as styles } from './useScrollContainer-B2HfC9He.js';
|
|
10
10
|
import { VSpacing } from '@hh.ru/magritte-ui-spacing';
|
|
11
11
|
import '@hh.ru/magritte-internal-custom-scroll';
|
|
12
12
|
import './types.js';
|
package/ScrollableItem.js
CHANGED
|
@@ -7,7 +7,7 @@ import '@hh.ru/magritte-ui-action';
|
|
|
7
7
|
import '@hh.ru/magritte-ui-breakpoint';
|
|
8
8
|
import '@hh.ru/magritte-ui-dot-pages';
|
|
9
9
|
import '@hh.ru/magritte-ui-icon/icon';
|
|
10
|
-
import './useScrollContainer-
|
|
10
|
+
import './useScrollContainer-B2HfC9He.js';
|
|
11
11
|
import '@hh.ru/magritte-internal-custom-scroll';
|
|
12
12
|
import './types.js';
|
|
13
13
|
import './utils.js';
|
package/index.css
CHANGED
|
@@ -532,11 +532,11 @@
|
|
|
532
532
|
--magritte-typography-_custom-5-italic-text-transform-v20-1-0:none;
|
|
533
533
|
--magritte-typography-_custom-5-italic-text-decoration-v20-1-0:none;
|
|
534
534
|
}
|
|
535
|
-
.magritte-scroll-wrapper___vTdZl_4-5-
|
|
535
|
+
.magritte-scroll-wrapper___vTdZl_4-5-3{
|
|
536
536
|
position:relative;
|
|
537
537
|
touch-action:pan-y pinch-zoom;
|
|
538
538
|
}
|
|
539
|
-
.magritte-scrollable-container___AKIUp_4-5-
|
|
539
|
+
.magritte-scrollable-container___AKIUp_4-5-3{
|
|
540
540
|
display:block;
|
|
541
541
|
overflow-x:hidden;
|
|
542
542
|
overflow-x:clip;
|
|
@@ -546,57 +546,57 @@
|
|
|
546
546
|
padding:0 4px;
|
|
547
547
|
margin:0 -4px;
|
|
548
548
|
}
|
|
549
|
-
.magritte-fade-both-sides___pBan7_4-5-
|
|
549
|
+
.magritte-fade-both-sides___pBan7_4-5-3:not(.magritte-no-buttons___eCwO-_4-5-3) .magritte-scrollable-container___AKIUp_4-5-3{
|
|
550
550
|
padding:4px 0;
|
|
551
551
|
margin:-4px 0;
|
|
552
552
|
--both-sides-mask:linear-gradient(90deg, transparent 0, transparent 36px, #000 100.504px, #000 calc(100% - 100.50399999999999px), transparent calc(100% - 36px));
|
|
553
553
|
-webkit-mask:var(--both-sides-mask);
|
|
554
554
|
mask:var(--both-sides-mask);
|
|
555
555
|
}
|
|
556
|
-
.magritte-fade-left-side___Hlpre_4-5-
|
|
556
|
+
.magritte-fade-left-side___Hlpre_4-5-3:not(.magritte-no-buttons___eCwO-_4-5-3) .magritte-scrollable-container___AKIUp_4-5-3{
|
|
557
557
|
margin-left:0;
|
|
558
558
|
padding-left:0;
|
|
559
559
|
--left-fade-mask:linear-gradient(90deg, transparent 0, transparent 36px, #000 100.504px);
|
|
560
560
|
-webkit-mask:var(--left-fade-mask);
|
|
561
561
|
mask:var(--left-fade-mask);
|
|
562
562
|
}
|
|
563
|
-
.magritte-fade-right-side___Lskyt_4-5-
|
|
563
|
+
.magritte-fade-right-side___Lskyt_4-5-3:not(.magritte-no-buttons___eCwO-_4-5-3) .magritte-scrollable-container___AKIUp_4-5-3{
|
|
564
564
|
padding-right:0;
|
|
565
565
|
margin-right:0;
|
|
566
566
|
--right-fade-mask:linear-gradient(90deg, #000 0, #000 calc(100% - 100.50399999999999px), transparent calc(100% - 36px));
|
|
567
567
|
-webkit-mask:var(--right-fade-mask);
|
|
568
568
|
mask:var(--right-fade-mask);
|
|
569
569
|
}
|
|
570
|
-
.magritte-scroll-button___4GQu3_4-5-
|
|
570
|
+
.magritte-scroll-button___4GQu3_4-5-3{
|
|
571
571
|
display:none;
|
|
572
572
|
position:absolute;
|
|
573
573
|
top:50%;
|
|
574
574
|
transform:translateY(-50%);
|
|
575
575
|
}
|
|
576
|
-
.magritte-scroll-button-left___UueEY_4-5-
|
|
576
|
+
.magritte-scroll-button-left___UueEY_4-5-3{
|
|
577
577
|
left:0;
|
|
578
578
|
}
|
|
579
|
-
.magritte-fade-left-side___Hlpre_4-5-
|
|
580
|
-
.magritte-fade-both-sides___pBan7_4-5-
|
|
579
|
+
.magritte-fade-left-side___Hlpre_4-5-3:not(.magritte-no-buttons___eCwO-_4-5-3) .magritte-scroll-button-left___UueEY_4-5-3,
|
|
580
|
+
.magritte-fade-both-sides___pBan7_4-5-3:not(.magritte-no-buttons___eCwO-_4-5-3) .magritte-scroll-button-left___UueEY_4-5-3{
|
|
581
581
|
display:block;
|
|
582
582
|
}
|
|
583
|
-
.magritte-scroll-button-right___wZOn-_4-5-
|
|
583
|
+
.magritte-scroll-button-right___wZOn-_4-5-3{
|
|
584
584
|
right:0;
|
|
585
585
|
}
|
|
586
|
-
.magritte-fade-right-side___Lskyt_4-5-
|
|
587
|
-
.magritte-fade-both-sides___pBan7_4-5-
|
|
586
|
+
.magritte-fade-right-side___Lskyt_4-5-3:not(.magritte-no-buttons___eCwO-_4-5-3) .magritte-scroll-button-right___wZOn-_4-5-3,
|
|
587
|
+
.magritte-fade-both-sides___pBan7_4-5-3:not(.magritte-no-buttons___eCwO-_4-5-3) .magritte-scroll-button-right___wZOn-_4-5-3{
|
|
588
588
|
display:block;
|
|
589
589
|
}
|
|
590
|
-
.magritte-position-container___1A4Bv_4-5-
|
|
590
|
+
.magritte-position-container___1A4Bv_4-5-3{
|
|
591
591
|
box-sizing:border-box;
|
|
592
592
|
width:100%;
|
|
593
593
|
}
|
|
594
|
-
.magritte-position-container-animated___XuPNW_4-5-
|
|
594
|
+
.magritte-position-container-animated___XuPNW_4-5-3{
|
|
595
595
|
transition-property:transform;
|
|
596
596
|
transition-duration:var(--magritte-semantic-animation-ease-in-out-tiger-200-duration-v20-1-0);
|
|
597
597
|
transition-timing-function:var(--magritte-semantic-animation-ease-in-out-tiger-200-timing-function-v20-1-0);
|
|
598
598
|
}
|
|
599
|
-
.magritte-dot-container___ahtlG_4-5-
|
|
599
|
+
.magritte-dot-container___ahtlG_4-5-3{
|
|
600
600
|
display:flex;
|
|
601
601
|
justify-content:center;
|
|
602
602
|
}
|
package/index.js
CHANGED
|
@@ -8,7 +8,7 @@ import '@hh.ru/magritte-ui-action';
|
|
|
8
8
|
import '@hh.ru/magritte-ui-breakpoint';
|
|
9
9
|
import '@hh.ru/magritte-ui-dot-pages';
|
|
10
10
|
import '@hh.ru/magritte-ui-icon/icon';
|
|
11
|
-
import './useScrollContainer-
|
|
11
|
+
import './useScrollContainer-B2HfC9He.js';
|
|
12
12
|
import '@hh.ru/magritte-internal-custom-scroll';
|
|
13
13
|
import './types.js';
|
|
14
14
|
import './utils.js';
|
package/index.mock.js
CHANGED
|
@@ -8,7 +8,7 @@ import '@hh.ru/magritte-ui-action';
|
|
|
8
8
|
import '@hh.ru/magritte-ui-breakpoint';
|
|
9
9
|
import '@hh.ru/magritte-ui-dot-pages';
|
|
10
10
|
import '@hh.ru/magritte-ui-icon/icon';
|
|
11
|
-
import './useScrollContainer-
|
|
11
|
+
import './useScrollContainer-B2HfC9He.js';
|
|
12
12
|
import '@hh.ru/magritte-internal-custom-scroll';
|
|
13
13
|
import './types.js';
|
|
14
14
|
import './utils.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hh.ru/magritte-ui-scrollable-container",
|
|
3
|
-
"version": "4.5.
|
|
3
|
+
"version": "4.5.3",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"types": "index.d.ts",
|
|
6
6
|
"sideEffects": [
|
|
@@ -22,12 +22,12 @@
|
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"@hh.ru/magritte-design-tokens": "20.1.0",
|
|
24
24
|
"@hh.ru/magritte-internal-custom-scroll": "1.3.2",
|
|
25
|
-
"@hh.ru/magritte-ui-action": "4.4.
|
|
26
|
-
"@hh.ru/magritte-ui-breakpoint": "
|
|
27
|
-
"@hh.ru/magritte-ui-dot-pages": "3.0.
|
|
28
|
-
"@hh.ru/magritte-ui-icon": "7.9.
|
|
25
|
+
"@hh.ru/magritte-ui-action": "4.4.22",
|
|
26
|
+
"@hh.ru/magritte-ui-breakpoint": "5.0.0",
|
|
27
|
+
"@hh.ru/magritte-ui-dot-pages": "3.0.16",
|
|
28
|
+
"@hh.ru/magritte-ui-icon": "7.9.10",
|
|
29
29
|
"@hh.ru/magritte-ui-mock-component": "1.0.12",
|
|
30
|
-
"@hh.ru/magritte-ui-spacing": "2.0.
|
|
30
|
+
"@hh.ru/magritte-ui-spacing": "2.0.37"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"classnames": ">=2.3.2",
|
|
@@ -36,5 +36,5 @@
|
|
|
36
36
|
"publishConfig": {
|
|
37
37
|
"access": "public"
|
|
38
38
|
},
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "1f85c1274063f28c68e856b26db4540e4f210fa1"
|
|
40
40
|
}
|
|
@@ -5,7 +5,7 @@ import { initScrollHandlers, clamp } from '@hh.ru/magritte-internal-custom-scrol
|
|
|
5
5
|
import { OFFSET_ATTR } from './types.js';
|
|
6
6
|
import { debounce } from './utils.js';
|
|
7
7
|
|
|
8
|
-
var styles = {"scroll-wrapper":"magritte-scroll-wrapper___vTdZl_4-5-
|
|
8
|
+
var styles = {"scroll-wrapper":"magritte-scroll-wrapper___vTdZl_4-5-3","scrollWrapper":"magritte-scroll-wrapper___vTdZl_4-5-3","scrollable-container":"magritte-scrollable-container___AKIUp_4-5-3","scrollableContainer":"magritte-scrollable-container___AKIUp_4-5-3","fade-both-sides":"magritte-fade-both-sides___pBan7_4-5-3","fadeBothSides":"magritte-fade-both-sides___pBan7_4-5-3","no-buttons":"magritte-no-buttons___eCwO-_4-5-3","noButtons":"magritte-no-buttons___eCwO-_4-5-3","fade-left-side":"magritte-fade-left-side___Hlpre_4-5-3","fadeLeftSide":"magritte-fade-left-side___Hlpre_4-5-3","fade-right-side":"magritte-fade-right-side___Lskyt_4-5-3","fadeRightSide":"magritte-fade-right-side___Lskyt_4-5-3","scroll-button":"magritte-scroll-button___4GQu3_4-5-3","scrollButton":"magritte-scroll-button___4GQu3_4-5-3","scroll-button-left":"magritte-scroll-button-left___UueEY_4-5-3","scrollButtonLeft":"magritte-scroll-button-left___UueEY_4-5-3","scroll-button-right":"magritte-scroll-button-right___wZOn-_4-5-3","scrollButtonRight":"magritte-scroll-button-right___wZOn-_4-5-3","position-container":"magritte-position-container___1A4Bv_4-5-3","positionContainer":"magritte-position-container___1A4Bv_4-5-3","position-container-animated":"magritte-position-container-animated___XuPNW_4-5-3","positionContainerAnimated":"magritte-position-container-animated___XuPNW_4-5-3","dot-container":"magritte-dot-container___ahtlG_4-5-3","dotContainer":"magritte-dot-container___ahtlG_4-5-3"};
|
|
9
9
|
|
|
10
10
|
const BUTTON_WIDTH = 44;
|
|
11
11
|
const FOCUS_OUTLINE_WIDTH = 4;
|
|
@@ -474,4 +474,4 @@ const useScrollContainer = (leftCorrection, rightCorrection, disableButtons, sho
|
|
|
474
474
|
};
|
|
475
475
|
|
|
476
476
|
export { styles as s, useScrollContainer as u };
|
|
477
|
-
//# sourceMappingURL=useScrollContainer-
|
|
477
|
+
//# sourceMappingURL=useScrollContainer-B2HfC9He.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useScrollContainer-fi20ToYI.js","sources":["../src/useScrollContainer.ts"],"sourcesContent":["import { useRef, useEffect, RefObject, useCallback, useLayoutEffect, useState } from 'react';\nimport classnames from 'classnames';\n\nimport { ScrollGestureEvent, initScrollHandlers, clamp } from '@hh.ru/magritte-internal-custom-scroll';\nimport { ScrollInternalState, ItemWithOffset, OFFSET_ATTR } from '@hh.ru/magritte-ui-scrollable-container/types';\nimport { debounce } from '@hh.ru/magritte-ui-scrollable-container/utils';\n\nimport styles from './scrollableContainer.less';\n\nconst BUTTON_WIDTH = 44;\nconst FOCUS_OUTLINE_WIDTH = 4;\nconst DEFAULT_DOT = 1;\n\n/**\n * На базе стейта проверяем возможность использования вычисленного index-а\n * @param index значение для проверки\n * @param state Состояние скролла\n */\nconst isIncorrectIndex = (index: number, state: ScrollInternalState) => index < 0 || state.items.length - 1 < index;\n\n/**\n * Валидирует значение анимации и устанавливает ее в контейнер\n * @param translation значение анимации\n * @param state Состояние скролла\n */\nconst setTranslation = (translation: number, state: ScrollInternalState) => {\n const { positionContainerRef, positionContainerWidth, containerWidth } = state;\n if (!positionContainerRef.current) {\n return;\n }\n const prevTranslation = state.positionContainerTranslation;\n state.positionContainerTranslation = clamp(translation, containerWidth - positionContainerWidth, 0);\n positionContainerRef.current.style.transform = `translate3d(${state.positionContainerTranslation}px, 0, 0)`;\n if (prevTranslation !== state.positionContainerTranslation) {\n state.onScroll?.();\n }\n};\n\n/**\n * Вычисляет нужно ли показывать фейды по краям и скрывать кнопки скролла\n * Применяет соответствующие классы к обертке\n * Проверяет что сдвиг контейнера позиционирования находится в допустимых пределах и если нет, то корректирует его\n * @param state Состояние скролла\n */\nconst applyScrollButtonsUpdate = (state: ScrollInternalState) => {\n const { positionContainerRef, wrapperRef, positionContainerWidth, containerWidth } = state;\n let { positionContainerTranslation } = state;\n\n if (!positionContainerRef.current || !wrapperRef.current) {\n return;\n }\n\n if (positionContainerWidth + positionContainerTranslation < containerWidth) {\n positionContainerTranslation = containerWidth - positionContainerWidth;\n setTranslation(positionContainerTranslation, state);\n }\n const isFadeLeft = positionContainerTranslation < 0;\n const isFadeRight = positionContainerTranslation + positionContainerWidth > containerWidth;\n const className = classnames({\n [styles.fadeLeftSide]: isFadeLeft && !isFadeRight,\n [styles.fadeRightSide]: isFadeRight && !isFadeLeft,\n [styles.fadeBothSides]: isFadeRight && isFadeLeft,\n });\n wrapperRef.current.classList.remove(styles.fadeBothSides, styles.fadeLeftSide, styles.fadeRightSide);\n className && wrapperRef.current.classList.add(className);\n};\n\nconst setAnimated = (state: ScrollInternalState, animated: boolean) => {\n state.positionContainerRef.current?.classList.toggle(styles.positionContainerAnimated, animated);\n if (!animated) {\n state.scrollAnimationInProgress = false;\n }\n};\n\n/**\n * Скролл к конкретному элементу группы. Если на момент вызова нет ref контейнера позиционирования, то считаем что\n * функция была при маунте компонента и запоминаем элемент на который нужно скроллить. При маунте вызываем эту функцию\n * еще раз и скроллим к запомненному элементу без анимации.\n * @param state Состояние скролла\n * @param item Элемент к которому нужно подскроллить\n */\nconst scrollTo = (state: ScrollInternalState, item: RefObject<HTMLElement>) => {\n const {\n positionContainerTranslation,\n containerWidth,\n positionContainerRef,\n scrollToItemInProgress,\n disableButtons,\n positionContainerWidth,\n showDotPages,\n items,\n } = state;\n if (!positionContainerRef.current) {\n state.scrollToOnMount = item;\n return;\n }\n\n if (item.current === scrollToItemInProgress?.current) {\n return;\n }\n state.previousActiveIndexItem = items.indexOf(item as unknown as RefObject<HTMLElement & ItemWithOffset>);\n const offset = (item.current as unknown as ItemWithOffset)[OFFSET_ATTR];\n const width = offset.right - offset.left;\n const buttonsCorrection = disableButtons ? 0 : BUTTON_WIDTH;\n\n // нужно ли отцентрировать контейнер по текущему item\n // актуально для режима showDotPages\n // так как контейнер работает как карусель\n const needItemCorrection = showDotPages;\n let translation = positionContainerTranslation;\n if (width > containerWidth) {\n // элемент шире контейнера\n translation = -((width - containerWidth) / 2 + offset.left);\n } else if (offset.left + positionContainerTranslation < buttonsCorrection && positionContainerTranslation < 0) {\n // контейнер движется вправо\n const correction = needItemCorrection ? (containerWidth - width) / 2 : buttonsCorrection;\n translation = -offset.left + correction;\n } else if (\n offset.right + positionContainerTranslation > containerWidth - buttonsCorrection &&\n positionContainerTranslation > containerWidth - positionContainerWidth\n ) {\n // контейнер движется влево\n const correction = needItemCorrection ? (containerWidth - width) / 2 : buttonsCorrection;\n translation = containerWidth - offset.right - correction;\n } else if (showDotPages) {\n // анимация к центру элемента (при необходимости)\n const correction = (containerWidth - width) / 2;\n // если находимся на границе контейнера, то анимации уже не будет (так как граница блока достигнута)\n // то есть translation надо скорректировать на базе контейнера чрз clamp\n translation = clamp(-offset.left + correction, containerWidth - positionContainerWidth, 0);\n }\n\n const isPositionChanged = translation !== positionContainerTranslation;\n const needAnimation = !state.scrollToOnMount && isPositionChanged;\n\n // Если это скролл при маунте, или позиция скролла не изменилась, то его не нужно анимировать\n setAnimated(state, needAnimation);\n setTranslation(translation, state);\n if (needAnimation) {\n state.scrollAnimationInProgress = true;\n state.scrollToItemInProgress = item;\n }\n applyScrollButtonsUpdate(state);\n};\n\n/**\n * Если текущий элемент совпадает с новым\n * Находим следующий активный элемент по направлению и скролим к нему\n */\nconst scrollToNewItemDebounced = debounce((state: ScrollInternalState, indexNearestToCenter: number) => {\n const { previousActiveIndexItem, items, directionRight } = state;\n let index = indexNearestToCenter;\n // определяем ситуацию, когда скрола не хватило до следующего элемента\n if (previousActiveIndexItem === indexNearestToCenter) {\n const indexBasedOnDirection = directionRight ? indexNearestToCenter + 1 : indexNearestToCenter - 1;\n // нужно проверить новый индекс, чтобы не выходить за границы\n if (!isIncorrectIndex(indexBasedOnDirection, state)) {\n index = indexBasedOnDirection;\n state.setActiveDot(index + 1);\n }\n }\n const item: RefObject<HTMLElement> = items[index];\n scrollTo(state, item);\n}, 30);\n\n/**\n * Скролл к конкретному элементу группы (обернуто в debounce)\n */\nconst scrollToDebounced = debounce(\n (state: ScrollInternalState, index: number) => scrollTo(state, state.items[index]),\n 30\n);\n\n/**\n * Пересчитывает позиции элементов и обновляет состояние скролла. Вызывается при изменении размеров контейнера или\n * добавлении/удалении элементов. Проходится по всем элементам и вычисляет сдвиг их правой и левой границы относительно\n * контейнера позиционирования. Сортирует элементы по возрастанию сдвига левой границы. Вычисляет ширину внешнего\n * контейнера и контейнера позиционирования. При вычислении ширины контейнера позиционирования правой его границей\n * считается правая граница самого крайнего справа элемента. Это нужно чтобы при переносе элементов на несколько строк\n * справа не появлялось лишнее пустое пространство.\n * @param state Состояние скролла\n */\nconst recalculateItemPositions = (state: ScrollInternalState) => {\n const { positionContainerRef, containerRef, items, showDotPages, setCountItems } = state;\n\n if (!positionContainerRef.current || !containerRef.current) {\n return;\n }\n const offset = positionContainerRef.current.getBoundingClientRect().left || 0;\n items.forEach((itemRef) => {\n if (!itemRef.current) {\n return;\n }\n const rect = itemRef.current.getBoundingClientRect();\n itemRef.current[OFFSET_ATTR] = { left: rect.left - offset, right: rect.right - offset };\n });\n\n if (showDotPages) {\n setCountItems(items.length);\n }\n\n state.recalcRequired = false;\n // т.к. нам нужна ширина content-box, то вычитаем левую и правую коррекцию, т.к. ей будут равны паддинги\n state.containerWidth =\n containerRef.current.offsetWidth - state.correction.leftCorrection - state.correction.rightCorrection;\n // считаем ширину контейнера позиционирования равной правой границе самого крайнего элемента\n state.positionContainerWidth = items.reduce(\n (position, itemRef) => Math.max(position, itemRef.current?.[OFFSET_ATTR]?.right || 0),\n 0\n );\n if (!state.disableButtons && state.positionContainerWidth > state.containerWidth) {\n state.containerWidth -= FOCUS_OUTLINE_WIDTH;\n }\n\n // если при маунте, когда у нас еще не было информации об элементах и размерах контейнеров был вызван scrollTo,\n // то нужно проскроллить без анимации\n if (state.scrollToOnMount) {\n scrollTo(state, state.scrollToOnMount);\n state.scrollToOnMount = null;\n return;\n }\n\n if (state.showDotPages && state.activeDot && items[state.activeDot - 1] && items[state.activeDot - 1].current) {\n const item = items[state.activeDot - 1].current as HTMLElement & ItemWithOffset;\n const offset = item[OFFSET_ATTR];\n const itemWidth = offset.right - offset.left;\n const translation = (state.containerWidth - itemWidth) / 2 - offset.left;\n\n setAnimated(state, false);\n setTranslation(translation, state);\n }\n\n applyScrollButtonsUpdate(state);\n};\n\n/**\n * Инициализирует ResizeObserver для контейнера и контейнера позиционирования\n */\nconst initResizeObserver = (state: ScrollInternalState) => {\n const { positionContainerRef, containerRef } = state;\n if (!positionContainerRef.current || !containerRef.current) {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n return () => {};\n }\n const observer = new ResizeObserver(() => {\n recalculateItemPositions(state);\n });\n observer.observe(containerRef.current);\n observer.observe(positionContainerRef.current);\n\n return () => observer.disconnect();\n};\n\n/**\n * На базе стейта считает ближайший элемент, который ближе к центру вью контейнера\n * Между блоками могут быть отступы, тогда centerPoint в offset-ы ни одного из элементов не попадет\n * В этом случае, используем предыдущее значение\n * @param state Состояние скролла\n * @returns Индекс элемента в массиве state.items\n */\nconst findIndexNearestToCenter = (state: ScrollInternalState): number => {\n const centerPoint = state.containerWidth / 2 + Math.abs(state.positionContainerTranslation);\n const indexNearestToCenter = state.items.findIndex((itemRef) => {\n if (!itemRef.current) {\n return false;\n }\n const offset = itemRef.current[OFFSET_ATTR];\n return offset.left < centerPoint && offset.right > centerPoint;\n });\n return indexNearestToCenter !== -1 ? indexNearestToCenter + 1 : state.activeDot;\n};\n\ninterface UseScrollContainer {\n registerItem: (ref: RefObject<HTMLElement>) => void;\n removeItem: (ref: RefObject<HTMLElement>) => void;\n scrollToItem: (ref: RefObject<HTMLElement>) => void;\n scrollToFirstItem: VoidFunction;\n scrollToLastItem: VoidFunction;\n scrollSide: (right?: boolean) => void;\n initScrollHandlers: () => VoidFunction;\n wrapperRef: RefObject<HTMLDivElement>;\n positionContainerRef: RefObject<HTMLDivElement>;\n containerRef: RefObject<HTMLDivElement>;\n countItems: number;\n activeDot: number;\n isScrollRightEnabled: () => boolean;\n isScrollLeftEnabled: () => boolean;\n}\n\nexport const useScrollContainer = (\n leftCorrection: number,\n rightCorrection: number,\n disableButtons: boolean,\n showDotPages?: boolean,\n onScroll?: () => void\n): UseScrollContainer => {\n // need state for dot component\n const [activeDot, setActiveDot] = useState(DEFAULT_DOT);\n const [countItems, setCountItems] = useState(0);\n const scrollStateRef = useRef<ScrollInternalState>({\n wrapperRef: useRef<HTMLDivElement>(null),\n positionContainerRef: useRef<HTMLDivElement>(null),\n containerRef: useRef<HTMLDivElement>(null),\n positionContainerWidth: 0,\n positionContainerTranslation: 0,\n containerWidth: 0,\n items: [],\n correction: { leftCorrection: 0, rightCorrection: 0 },\n disableButtons: false,\n scrollAnimationInProgress: false,\n scrollToOnMount: null,\n recalcRequired: false,\n scrollToItemInProgress: null,\n showDotPages: false,\n activeDot: DEFAULT_DOT,\n needCorrectionOnScrollEnd: false,\n setActiveDot,\n setCountItems,\n directionRight: false,\n previousActiveIndexItem: 0,\n onScroll,\n wasInteracted: false,\n });\n\n scrollStateRef.current.correction = { leftCorrection, rightCorrection };\n scrollStateRef.current.disableButtons = disableButtons;\n scrollStateRef.current.showDotPages = Boolean(showDotPages);\n scrollStateRef.current.activeDot = activeDot;\n scrollStateRef.current.onScroll = onScroll;\n\n // eslint-disable-next-line disable-autofix/react-hooks/exhaustive-deps\n const recalculateItemPositionsDebounced = useCallback(\n debounce(() => recalculateItemPositions(scrollStateRef.current), 10),\n []\n );\n\n const scrollToItem = useCallback((ref: RefObject<HTMLElement>) => {\n if (scrollStateRef.current.recalcRequired) {\n recalculateItemPositions(scrollStateRef.current);\n }\n scrollStateRef.current.wasInteracted = true;\n // set active dot here because user can click on item\n if (scrollStateRef.current.showDotPages) {\n scrollStateRef.current.setActiveDot(\n scrollStateRef.current.items.indexOf(ref as unknown as RefObject<HTMLElement & ItemWithOffset>) + 1\n );\n }\n scrollTo(scrollStateRef.current, ref);\n }, []);\n\n const scrollToFirstItem = useCallback(() => {\n const { items } = scrollStateRef.current;\n items.length > 0 && scrollToItem(items[0]);\n }, [scrollToItem]);\n\n const scrollToLastItem = useCallback(() => {\n const { items } = scrollStateRef.current;\n items.length > 0 && scrollToItem(items[items.length - 1]);\n }, [scrollToItem]);\n\n const scrollSide = useCallback(\n (directionRight?: boolean) => {\n const { containerWidth, positionContainerRef, positionContainerTranslation, showDotPages } =\n scrollStateRef.current;\n scrollStateRef.current.wasInteracted = true;\n if (!positionContainerRef.current) {\n return;\n }\n if (!showDotPages) {\n // move container based on container width\n const translation = positionContainerTranslation + (directionRight ? -containerWidth : containerWidth);\n setAnimated(scrollStateRef.current, true);\n setTranslation(translation, scrollStateRef.current);\n applyScrollButtonsUpdate(scrollStateRef.current);\n } else {\n // calc new dot and check it\n const activeDot = scrollStateRef.current.activeDot;\n const newActiveDot = directionRight ? activeDot + 1 : activeDot - 1;\n if (!isIncorrectIndex(newActiveDot - 1, scrollStateRef.current)) {\n // move container to new select ref\n scrollToItem(scrollStateRef.current.items[newActiveDot - 1]);\n }\n }\n },\n [scrollToItem]\n );\n\n const registerItem = useCallback((ref: RefObject<HTMLElement>) => {\n if (!ref.current) {\n return;\n }\n\n scrollStateRef.current.items.push(ref as unknown as RefObject<HTMLElement & ItemWithOffset>);\n scrollStateRef.current.recalcRequired = true;\n recalculateItemPositions(scrollStateRef.current);\n }, []);\n\n const removeItem = useCallback(\n (ref: RefObject<HTMLElement>) => {\n if (!ref.current) {\n return;\n }\n\n scrollStateRef.current.items = scrollStateRef.current.items.filter(\n (storedRef) => storedRef.current !== ref.current\n );\n recalculateItemPositionsDebounced();\n },\n [recalculateItemPositionsDebounced]\n );\n\n useEffect(() => {\n const { wrapperRef, positionContainerRef, containerRef } = scrollStateRef.current;\n if (!containerRef.current || !positionContainerRef.current || !wrapperRef.current) {\n return void 0;\n }\n\n const transitionEndHandler = (event: TransitionEvent) => {\n if (event.target !== scrollStateRef.current?.positionContainerRef.current) {\n return;\n }\n setAnimated(scrollStateRef.current, false);\n if (scrollStateRef.current) {\n scrollStateRef.current.scrollAnimationInProgress = false;\n scrollStateRef.current.scrollToItemInProgress = null;\n }\n };\n const positionContainer = scrollStateRef.current?.positionContainerRef.current;\n positionContainer?.addEventListener('transitionend', transitionEndHandler);\n\n const resizeObserverCleanup = initResizeObserver(scrollStateRef.current);\n\n return () => {\n resizeObserverCleanup();\n positionContainer?.removeEventListener('transitionend', transitionEndHandler);\n };\n }, []);\n\n useLayoutEffect(() => {\n recalculateItemPositions(scrollStateRef.current);\n if (disableButtons) {\n setAnimated(scrollStateRef.current, false);\n }\n }, [disableButtons, leftCorrection, rightCorrection]);\n\n useEffect(() => {\n const wrapperRef = scrollStateRef.current.wrapperRef.current;\n if (!wrapperRef) {\n return void 0;\n }\n const handleTouchStartHandler = (event: TouchEvent) => {\n event.stopPropagation();\n };\n wrapperRef.addEventListener('touchstart', handleTouchStartHandler);\n return () => {\n wrapperRef.removeEventListener('touchstart', handleTouchStartHandler);\n };\n }, []);\n\n useLayoutEffect(() => {\n /* Эффект нужен для пересчета размеров в случае, когда родительский контейнер открывается с анимацией,\n * на которую не срабатывает ResizeObserver - например, Modal с transition: scale */\n const handleParentTransitionEnd = (event: TransitionEvent) => {\n const { wrapperRef, wasInteracted } = scrollStateRef.current;\n /* wasInteracted - флаг, было ли взаимодействие с компонентом (скролл или подскролл к какому-либо элементу).\n * Если взаимодействие было, то пересчитывать не нужно, тк считаем, что анимации появления родительского контейнера\n * завершились */\n if (\n !wasInteracted &&\n event.target instanceof Element &&\n wrapperRef.current &&\n event.target.contains(wrapperRef.current)\n ) {\n recalculateItemPositions(scrollStateRef.current);\n }\n };\n\n document.addEventListener('transitionend', handleParentTransitionEnd);\n\n return () => {\n document.removeEventListener('transitionend', handleParentTransitionEnd);\n };\n }, []);\n\n const onTouchMove = useCallback((event: ScrollGestureEvent) => {\n if (scrollStateRef.current.scrollAnimationInProgress) {\n return;\n }\n scrollStateRef.current.wasInteracted = true;\n const { positionContainerTranslation } = scrollStateRef.current;\n setTranslation(scrollStateRef.current.positionContainerTranslation + event.delta, scrollStateRef.current);\n if (positionContainerTranslation === scrollStateRef.current.positionContainerTranslation) {\n event.preventDefault();\n }\n if (scrollStateRef.current.showDotPages) {\n // by touch change active dot\n const newActiveDot = findIndexNearestToCenter(scrollStateRef.current);\n // update state\n scrollStateRef.current.setActiveDot(newActiveDot);\n // scheduling correction\n scrollStateRef.current.needCorrectionOnScrollEnd = true;\n }\n }, []);\n\n const onTouchEnd = useCallback(() => {\n const { needCorrectionOnScrollEnd, showDotPages, activeDot } = scrollStateRef.current;\n if (showDotPages && needCorrectionOnScrollEnd) {\n scrollStateRef.current.needCorrectionOnScrollEnd = false;\n // center active element\n scrollToDebounced(scrollStateRef.current, activeDot - 1);\n }\n }, []);\n\n const onWheelMove = useCallback((event: ScrollGestureEvent) => {\n const { recalcRequired, scrollAnimationInProgress, positionContainerTranslation, showDotPages } =\n scrollStateRef.current;\n scrollStateRef.current.wasInteracted = true;\n if (recalcRequired) {\n recalculateItemPositions(scrollStateRef.current);\n }\n if (scrollAnimationInProgress) {\n event.preventDefault();\n return;\n }\n scrollStateRef.current.directionRight = event.delta < 0;\n const translation = positionContainerTranslation + event.delta;\n setTranslation(translation, scrollStateRef.current);\n applyScrollButtonsUpdate(scrollStateRef.current);\n\n // эти значения могут быть не равны только в случае если попытались сдвинуть контейнер дальше\n // допустимого значения, это значит что мы уперлись в левую или правую границу, значит дальнейшие события\n // скролла можно не обрабатывать\n if (translation === scrollStateRef.current.positionContainerTranslation) {\n event.preventDefault();\n }\n if (showDotPages) {\n // by wheel change active dot\n const newActiveDot = findIndexNearestToCenter(scrollStateRef.current);\n scrollStateRef.current.setActiveDot(newActiveDot);\n // center active element\n scrollToNewItemDebounced(scrollStateRef.current, newActiveDot - 1);\n }\n }, []);\n\n const _initScrollHandlers = useCallback(\n () =>\n initScrollHandlers({\n axis: 'horizontal',\n wrapperRef: scrollStateRef.current.wrapperRef,\n onTouchMove,\n onTouchEnd,\n onWheelMove,\n }),\n [onTouchMove, onTouchEnd, onWheelMove]\n );\n\n const isScrollRightEnabled = useCallback(() => {\n const { positionContainerTranslation, positionContainerWidth, containerWidth } = scrollStateRef.current;\n return positionContainerTranslation + positionContainerWidth <= containerWidth;\n }, []);\n\n const isScrollLeftEnabled = useCallback(() => {\n const { positionContainerTranslation } = scrollStateRef.current;\n return positionContainerTranslation >= 0;\n }, []);\n\n return {\n registerItem,\n removeItem,\n scrollToItem,\n scrollToFirstItem,\n scrollToLastItem,\n scrollSide,\n initScrollHandlers: _initScrollHandlers,\n wrapperRef: scrollStateRef.current.wrapperRef,\n positionContainerRef: scrollStateRef.current.positionContainerRef,\n containerRef: scrollStateRef.current.containerRef,\n countItems,\n activeDot,\n isScrollRightEnabled,\n isScrollLeftEnabled,\n };\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useScrollContainer-B2HfC9He.js","sources":["../src/useScrollContainer.ts"],"sourcesContent":["import { useRef, useEffect, RefObject, useCallback, useLayoutEffect, useState } from 'react';\nimport classnames from 'classnames';\n\nimport { ScrollGestureEvent, initScrollHandlers, clamp } from '@hh.ru/magritte-internal-custom-scroll';\nimport { ScrollInternalState, ItemWithOffset, OFFSET_ATTR } from '@hh.ru/magritte-ui-scrollable-container/types';\nimport { debounce } from '@hh.ru/magritte-ui-scrollable-container/utils';\n\nimport styles from './scrollableContainer.less';\n\nconst BUTTON_WIDTH = 44;\nconst FOCUS_OUTLINE_WIDTH = 4;\nconst DEFAULT_DOT = 1;\n\n/**\n * На базе стейта проверяем возможность использования вычисленного index-а\n * @param index значение для проверки\n * @param state Состояние скролла\n */\nconst isIncorrectIndex = (index: number, state: ScrollInternalState) => index < 0 || state.items.length - 1 < index;\n\n/**\n * Валидирует значение анимации и устанавливает ее в контейнер\n * @param translation значение анимации\n * @param state Состояние скролла\n */\nconst setTranslation = (translation: number, state: ScrollInternalState) => {\n const { positionContainerRef, positionContainerWidth, containerWidth } = state;\n if (!positionContainerRef.current) {\n return;\n }\n const prevTranslation = state.positionContainerTranslation;\n state.positionContainerTranslation = clamp(translation, containerWidth - positionContainerWidth, 0);\n positionContainerRef.current.style.transform = `translate3d(${state.positionContainerTranslation}px, 0, 0)`;\n if (prevTranslation !== state.positionContainerTranslation) {\n state.onScroll?.();\n }\n};\n\n/**\n * Вычисляет нужно ли показывать фейды по краям и скрывать кнопки скролла\n * Применяет соответствующие классы к обертке\n * Проверяет что сдвиг контейнера позиционирования находится в допустимых пределах и если нет, то корректирует его\n * @param state Состояние скролла\n */\nconst applyScrollButtonsUpdate = (state: ScrollInternalState) => {\n const { positionContainerRef, wrapperRef, positionContainerWidth, containerWidth } = state;\n let { positionContainerTranslation } = state;\n\n if (!positionContainerRef.current || !wrapperRef.current) {\n return;\n }\n\n if (positionContainerWidth + positionContainerTranslation < containerWidth) {\n positionContainerTranslation = containerWidth - positionContainerWidth;\n setTranslation(positionContainerTranslation, state);\n }\n const isFadeLeft = positionContainerTranslation < 0;\n const isFadeRight = positionContainerTranslation + positionContainerWidth > containerWidth;\n const className = classnames({\n [styles.fadeLeftSide]: isFadeLeft && !isFadeRight,\n [styles.fadeRightSide]: isFadeRight && !isFadeLeft,\n [styles.fadeBothSides]: isFadeRight && isFadeLeft,\n });\n wrapperRef.current.classList.remove(styles.fadeBothSides, styles.fadeLeftSide, styles.fadeRightSide);\n className && wrapperRef.current.classList.add(className);\n};\n\nconst setAnimated = (state: ScrollInternalState, animated: boolean) => {\n state.positionContainerRef.current?.classList.toggle(styles.positionContainerAnimated, animated);\n if (!animated) {\n state.scrollAnimationInProgress = false;\n }\n};\n\n/**\n * Скролл к конкретному элементу группы. Если на момент вызова нет ref контейнера позиционирования, то считаем что\n * функция была при маунте компонента и запоминаем элемент на который нужно скроллить. При маунте вызываем эту функцию\n * еще раз и скроллим к запомненному элементу без анимации.\n * @param state Состояние скролла\n * @param item Элемент к которому нужно подскроллить\n */\nconst scrollTo = (state: ScrollInternalState, item: RefObject<HTMLElement>) => {\n const {\n positionContainerTranslation,\n containerWidth,\n positionContainerRef,\n scrollToItemInProgress,\n disableButtons,\n positionContainerWidth,\n showDotPages,\n items,\n } = state;\n if (!positionContainerRef.current) {\n state.scrollToOnMount = item;\n return;\n }\n\n if (item.current === scrollToItemInProgress?.current) {\n return;\n }\n state.previousActiveIndexItem = items.indexOf(item as unknown as RefObject<HTMLElement & ItemWithOffset>);\n const offset = (item.current as unknown as ItemWithOffset)[OFFSET_ATTR];\n const width = offset.right - offset.left;\n const buttonsCorrection = disableButtons ? 0 : BUTTON_WIDTH;\n\n // нужно ли отцентрировать контейнер по текущему item\n // актуально для режима showDotPages\n // так как контейнер работает как карусель\n const needItemCorrection = showDotPages;\n let translation = positionContainerTranslation;\n if (width > containerWidth) {\n // элемент шире контейнера\n translation = -((width - containerWidth) / 2 + offset.left);\n } else if (offset.left + positionContainerTranslation < buttonsCorrection && positionContainerTranslation < 0) {\n // контейнер движется вправо\n const correction = needItemCorrection ? (containerWidth - width) / 2 : buttonsCorrection;\n translation = -offset.left + correction;\n } else if (\n offset.right + positionContainerTranslation > containerWidth - buttonsCorrection &&\n positionContainerTranslation > containerWidth - positionContainerWidth\n ) {\n // контейнер движется влево\n const correction = needItemCorrection ? (containerWidth - width) / 2 : buttonsCorrection;\n translation = containerWidth - offset.right - correction;\n } else if (showDotPages) {\n // анимация к центру элемента (при необходимости)\n const correction = (containerWidth - width) / 2;\n // если находимся на границе контейнера, то анимации уже не будет (так как граница блока достигнута)\n // то есть translation надо скорректировать на базе контейнера чрз clamp\n translation = clamp(-offset.left + correction, containerWidth - positionContainerWidth, 0);\n }\n\n const isPositionChanged = translation !== positionContainerTranslation;\n const needAnimation = !state.scrollToOnMount && isPositionChanged;\n\n // Если это скролл при маунте, или позиция скролла не изменилась, то его не нужно анимировать\n setAnimated(state, needAnimation);\n setTranslation(translation, state);\n if (needAnimation) {\n state.scrollAnimationInProgress = true;\n state.scrollToItemInProgress = item;\n }\n applyScrollButtonsUpdate(state);\n};\n\n/**\n * Если текущий элемент совпадает с новым\n * Находим следующий активный элемент по направлению и скролим к нему\n */\nconst scrollToNewItemDebounced = debounce((state: ScrollInternalState, indexNearestToCenter: number) => {\n const { previousActiveIndexItem, items, directionRight } = state;\n let index = indexNearestToCenter;\n // определяем ситуацию, когда скрола не хватило до следующего элемента\n if (previousActiveIndexItem === indexNearestToCenter) {\n const indexBasedOnDirection = directionRight ? indexNearestToCenter + 1 : indexNearestToCenter - 1;\n // нужно проверить новый индекс, чтобы не выходить за границы\n if (!isIncorrectIndex(indexBasedOnDirection, state)) {\n index = indexBasedOnDirection;\n state.setActiveDot(index + 1);\n }\n }\n const item: RefObject<HTMLElement> = items[index];\n scrollTo(state, item);\n}, 30);\n\n/**\n * Скролл к конкретному элементу группы (обернуто в debounce)\n */\nconst scrollToDebounced = debounce(\n (state: ScrollInternalState, index: number) => scrollTo(state, state.items[index]),\n 30\n);\n\n/**\n * Пересчитывает позиции элементов и обновляет состояние скролла. Вызывается при изменении размеров контейнера или\n * добавлении/удалении элементов. Проходится по всем элементам и вычисляет сдвиг их правой и левой границы относительно\n * контейнера позиционирования. Сортирует элементы по возрастанию сдвига левой границы. Вычисляет ширину внешнего\n * контейнера и контейнера позиционирования. При вычислении ширины контейнера позиционирования правой его границей\n * считается правая граница самого крайнего справа элемента. Это нужно чтобы при переносе элементов на несколько строк\n * справа не появлялось лишнее пустое пространство.\n * @param state Состояние скролла\n */\nconst recalculateItemPositions = (state: ScrollInternalState) => {\n const { positionContainerRef, containerRef, items, showDotPages, setCountItems } = state;\n\n if (!positionContainerRef.current || !containerRef.current) {\n return;\n }\n const offset = positionContainerRef.current.getBoundingClientRect().left || 0;\n items.forEach((itemRef) => {\n if (!itemRef.current) {\n return;\n }\n const rect = itemRef.current.getBoundingClientRect();\n itemRef.current[OFFSET_ATTR] = { left: rect.left - offset, right: rect.right - offset };\n });\n\n if (showDotPages) {\n setCountItems(items.length);\n }\n\n state.recalcRequired = false;\n // т.к. нам нужна ширина content-box, то вычитаем левую и правую коррекцию, т.к. ей будут равны паддинги\n state.containerWidth =\n containerRef.current.offsetWidth - state.correction.leftCorrection - state.correction.rightCorrection;\n // считаем ширину контейнера позиционирования равной правой границе самого крайнего элемента\n state.positionContainerWidth = items.reduce(\n (position, itemRef) => Math.max(position, itemRef.current?.[OFFSET_ATTR]?.right || 0),\n 0\n );\n if (!state.disableButtons && state.positionContainerWidth > state.containerWidth) {\n state.containerWidth -= FOCUS_OUTLINE_WIDTH;\n }\n\n // если при маунте, когда у нас еще не было информации об элементах и размерах контейнеров был вызван scrollTo,\n // то нужно проскроллить без анимации\n if (state.scrollToOnMount) {\n scrollTo(state, state.scrollToOnMount);\n state.scrollToOnMount = null;\n return;\n }\n\n if (state.showDotPages && state.activeDot && items[state.activeDot - 1] && items[state.activeDot - 1].current) {\n const item = items[state.activeDot - 1].current as HTMLElement & ItemWithOffset;\n const offset = item[OFFSET_ATTR];\n const itemWidth = offset.right - offset.left;\n const translation = (state.containerWidth - itemWidth) / 2 - offset.left;\n\n setAnimated(state, false);\n setTranslation(translation, state);\n }\n\n applyScrollButtonsUpdate(state);\n};\n\n/**\n * Инициализирует ResizeObserver для контейнера и контейнера позиционирования\n */\nconst initResizeObserver = (state: ScrollInternalState) => {\n const { positionContainerRef, containerRef } = state;\n if (!positionContainerRef.current || !containerRef.current) {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n return () => {};\n }\n const observer = new ResizeObserver(() => {\n recalculateItemPositions(state);\n });\n observer.observe(containerRef.current);\n observer.observe(positionContainerRef.current);\n\n return () => observer.disconnect();\n};\n\n/**\n * На базе стейта считает ближайший элемент, который ближе к центру вью контейнера\n * Между блоками могут быть отступы, тогда centerPoint в offset-ы ни одного из элементов не попадет\n * В этом случае, используем предыдущее значение\n * @param state Состояние скролла\n * @returns Индекс элемента в массиве state.items\n */\nconst findIndexNearestToCenter = (state: ScrollInternalState): number => {\n const centerPoint = state.containerWidth / 2 + Math.abs(state.positionContainerTranslation);\n const indexNearestToCenter = state.items.findIndex((itemRef) => {\n if (!itemRef.current) {\n return false;\n }\n const offset = itemRef.current[OFFSET_ATTR];\n return offset.left < centerPoint && offset.right > centerPoint;\n });\n return indexNearestToCenter !== -1 ? indexNearestToCenter + 1 : state.activeDot;\n};\n\ninterface UseScrollContainer {\n registerItem: (ref: RefObject<HTMLElement>) => void;\n removeItem: (ref: RefObject<HTMLElement>) => void;\n scrollToItem: (ref: RefObject<HTMLElement>) => void;\n scrollToFirstItem: VoidFunction;\n scrollToLastItem: VoidFunction;\n scrollSide: (right?: boolean) => void;\n initScrollHandlers: () => VoidFunction;\n wrapperRef: RefObject<HTMLDivElement>;\n positionContainerRef: RefObject<HTMLDivElement>;\n containerRef: RefObject<HTMLDivElement>;\n countItems: number;\n activeDot: number;\n isScrollRightEnabled: () => boolean;\n isScrollLeftEnabled: () => boolean;\n}\n\nexport const useScrollContainer = (\n leftCorrection: number,\n rightCorrection: number,\n disableButtons: boolean,\n showDotPages?: boolean,\n onScroll?: () => void\n): UseScrollContainer => {\n // need state for dot component\n const [activeDot, setActiveDot] = useState(DEFAULT_DOT);\n const [countItems, setCountItems] = useState(0);\n const scrollStateRef = useRef<ScrollInternalState>({\n wrapperRef: useRef<HTMLDivElement>(null),\n positionContainerRef: useRef<HTMLDivElement>(null),\n containerRef: useRef<HTMLDivElement>(null),\n positionContainerWidth: 0,\n positionContainerTranslation: 0,\n containerWidth: 0,\n items: [],\n correction: { leftCorrection: 0, rightCorrection: 0 },\n disableButtons: false,\n scrollAnimationInProgress: false,\n scrollToOnMount: null,\n recalcRequired: false,\n scrollToItemInProgress: null,\n showDotPages: false,\n activeDot: DEFAULT_DOT,\n needCorrectionOnScrollEnd: false,\n setActiveDot,\n setCountItems,\n directionRight: false,\n previousActiveIndexItem: 0,\n onScroll,\n wasInteracted: false,\n });\n\n scrollStateRef.current.correction = { leftCorrection, rightCorrection };\n scrollStateRef.current.disableButtons = disableButtons;\n scrollStateRef.current.showDotPages = Boolean(showDotPages);\n scrollStateRef.current.activeDot = activeDot;\n scrollStateRef.current.onScroll = onScroll;\n\n // eslint-disable-next-line disable-autofix/react-hooks/exhaustive-deps\n const recalculateItemPositionsDebounced = useCallback(\n debounce(() => recalculateItemPositions(scrollStateRef.current), 10),\n []\n );\n\n const scrollToItem = useCallback((ref: RefObject<HTMLElement>) => {\n if (scrollStateRef.current.recalcRequired) {\n recalculateItemPositions(scrollStateRef.current);\n }\n scrollStateRef.current.wasInteracted = true;\n // set active dot here because user can click on item\n if (scrollStateRef.current.showDotPages) {\n scrollStateRef.current.setActiveDot(\n scrollStateRef.current.items.indexOf(ref as unknown as RefObject<HTMLElement & ItemWithOffset>) + 1\n );\n }\n scrollTo(scrollStateRef.current, ref);\n }, []);\n\n const scrollToFirstItem = useCallback(() => {\n const { items } = scrollStateRef.current;\n items.length > 0 && scrollToItem(items[0]);\n }, [scrollToItem]);\n\n const scrollToLastItem = useCallback(() => {\n const { items } = scrollStateRef.current;\n items.length > 0 && scrollToItem(items[items.length - 1]);\n }, [scrollToItem]);\n\n const scrollSide = useCallback(\n (directionRight?: boolean) => {\n const { containerWidth, positionContainerRef, positionContainerTranslation, showDotPages } =\n scrollStateRef.current;\n scrollStateRef.current.wasInteracted = true;\n if (!positionContainerRef.current) {\n return;\n }\n if (!showDotPages) {\n // move container based on container width\n const translation = positionContainerTranslation + (directionRight ? -containerWidth : containerWidth);\n setAnimated(scrollStateRef.current, true);\n setTranslation(translation, scrollStateRef.current);\n applyScrollButtonsUpdate(scrollStateRef.current);\n } else {\n // calc new dot and check it\n const activeDot = scrollStateRef.current.activeDot;\n const newActiveDot = directionRight ? activeDot + 1 : activeDot - 1;\n if (!isIncorrectIndex(newActiveDot - 1, scrollStateRef.current)) {\n // move container to new select ref\n scrollToItem(scrollStateRef.current.items[newActiveDot - 1]);\n }\n }\n },\n [scrollToItem]\n );\n\n const registerItem = useCallback((ref: RefObject<HTMLElement>) => {\n if (!ref.current) {\n return;\n }\n\n scrollStateRef.current.items.push(ref as unknown as RefObject<HTMLElement & ItemWithOffset>);\n scrollStateRef.current.recalcRequired = true;\n recalculateItemPositions(scrollStateRef.current);\n }, []);\n\n const removeItem = useCallback(\n (ref: RefObject<HTMLElement>) => {\n if (!ref.current) {\n return;\n }\n\n scrollStateRef.current.items = scrollStateRef.current.items.filter(\n (storedRef) => storedRef.current !== ref.current\n );\n recalculateItemPositionsDebounced();\n },\n [recalculateItemPositionsDebounced]\n );\n\n useEffect(() => {\n const { wrapperRef, positionContainerRef, containerRef } = scrollStateRef.current;\n if (!containerRef.current || !positionContainerRef.current || !wrapperRef.current) {\n return void 0;\n }\n\n const transitionEndHandler = (event: TransitionEvent) => {\n if (event.target !== scrollStateRef.current?.positionContainerRef.current) {\n return;\n }\n setAnimated(scrollStateRef.current, false);\n if (scrollStateRef.current) {\n scrollStateRef.current.scrollAnimationInProgress = false;\n scrollStateRef.current.scrollToItemInProgress = null;\n }\n };\n const positionContainer = scrollStateRef.current?.positionContainerRef.current;\n positionContainer?.addEventListener('transitionend', transitionEndHandler);\n\n const resizeObserverCleanup = initResizeObserver(scrollStateRef.current);\n\n return () => {\n resizeObserverCleanup();\n positionContainer?.removeEventListener('transitionend', transitionEndHandler);\n };\n }, []);\n\n useLayoutEffect(() => {\n recalculateItemPositions(scrollStateRef.current);\n if (disableButtons) {\n setAnimated(scrollStateRef.current, false);\n }\n }, [disableButtons, leftCorrection, rightCorrection]);\n\n useEffect(() => {\n const wrapperRef = scrollStateRef.current.wrapperRef.current;\n if (!wrapperRef) {\n return void 0;\n }\n const handleTouchStartHandler = (event: TouchEvent) => {\n event.stopPropagation();\n };\n wrapperRef.addEventListener('touchstart', handleTouchStartHandler);\n return () => {\n wrapperRef.removeEventListener('touchstart', handleTouchStartHandler);\n };\n }, []);\n\n useLayoutEffect(() => {\n /* Эффект нужен для пересчета размеров в случае, когда родительский контейнер открывается с анимацией,\n * на которую не срабатывает ResizeObserver - например, Modal с transition: scale */\n const handleParentTransitionEnd = (event: TransitionEvent) => {\n const { wrapperRef, wasInteracted } = scrollStateRef.current;\n /* wasInteracted - флаг, было ли взаимодействие с компонентом (скролл или подскролл к какому-либо элементу).\n * Если взаимодействие было, то пересчитывать не нужно, тк считаем, что анимации появления родительского контейнера\n * завершились */\n if (\n !wasInteracted &&\n event.target instanceof Element &&\n wrapperRef.current &&\n event.target.contains(wrapperRef.current)\n ) {\n recalculateItemPositions(scrollStateRef.current);\n }\n };\n\n document.addEventListener('transitionend', handleParentTransitionEnd);\n\n return () => {\n document.removeEventListener('transitionend', handleParentTransitionEnd);\n };\n }, []);\n\n const onTouchMove = useCallback((event: ScrollGestureEvent) => {\n if (scrollStateRef.current.scrollAnimationInProgress) {\n return;\n }\n scrollStateRef.current.wasInteracted = true;\n const { positionContainerTranslation } = scrollStateRef.current;\n setTranslation(scrollStateRef.current.positionContainerTranslation + event.delta, scrollStateRef.current);\n if (positionContainerTranslation === scrollStateRef.current.positionContainerTranslation) {\n event.preventDefault();\n }\n if (scrollStateRef.current.showDotPages) {\n // by touch change active dot\n const newActiveDot = findIndexNearestToCenter(scrollStateRef.current);\n // update state\n scrollStateRef.current.setActiveDot(newActiveDot);\n // scheduling correction\n scrollStateRef.current.needCorrectionOnScrollEnd = true;\n }\n }, []);\n\n const onTouchEnd = useCallback(() => {\n const { needCorrectionOnScrollEnd, showDotPages, activeDot } = scrollStateRef.current;\n if (showDotPages && needCorrectionOnScrollEnd) {\n scrollStateRef.current.needCorrectionOnScrollEnd = false;\n // center active element\n scrollToDebounced(scrollStateRef.current, activeDot - 1);\n }\n }, []);\n\n const onWheelMove = useCallback((event: ScrollGestureEvent) => {\n const { recalcRequired, scrollAnimationInProgress, positionContainerTranslation, showDotPages } =\n scrollStateRef.current;\n scrollStateRef.current.wasInteracted = true;\n if (recalcRequired) {\n recalculateItemPositions(scrollStateRef.current);\n }\n if (scrollAnimationInProgress) {\n event.preventDefault();\n return;\n }\n scrollStateRef.current.directionRight = event.delta < 0;\n const translation = positionContainerTranslation + event.delta;\n setTranslation(translation, scrollStateRef.current);\n applyScrollButtonsUpdate(scrollStateRef.current);\n\n // эти значения могут быть не равны только в случае если попытались сдвинуть контейнер дальше\n // допустимого значения, это значит что мы уперлись в левую или правую границу, значит дальнейшие события\n // скролла можно не обрабатывать\n if (translation === scrollStateRef.current.positionContainerTranslation) {\n event.preventDefault();\n }\n if (showDotPages) {\n // by wheel change active dot\n const newActiveDot = findIndexNearestToCenter(scrollStateRef.current);\n scrollStateRef.current.setActiveDot(newActiveDot);\n // center active element\n scrollToNewItemDebounced(scrollStateRef.current, newActiveDot - 1);\n }\n }, []);\n\n const _initScrollHandlers = useCallback(\n () =>\n initScrollHandlers({\n axis: 'horizontal',\n wrapperRef: scrollStateRef.current.wrapperRef,\n onTouchMove,\n onTouchEnd,\n onWheelMove,\n }),\n [onTouchMove, onTouchEnd, onWheelMove]\n );\n\n const isScrollRightEnabled = useCallback(() => {\n const { positionContainerTranslation, positionContainerWidth, containerWidth } = scrollStateRef.current;\n return positionContainerTranslation + positionContainerWidth <= containerWidth;\n }, []);\n\n const isScrollLeftEnabled = useCallback(() => {\n const { positionContainerTranslation } = scrollStateRef.current;\n return positionContainerTranslation >= 0;\n }, []);\n\n return {\n registerItem,\n removeItem,\n scrollToItem,\n scrollToFirstItem,\n scrollToLastItem,\n scrollSide,\n initScrollHandlers: _initScrollHandlers,\n wrapperRef: scrollStateRef.current.wrapperRef,\n positionContainerRef: scrollStateRef.current.positionContainerRef,\n containerRef: scrollStateRef.current.containerRef,\n countItems,\n activeDot,\n isScrollRightEnabled,\n isScrollLeftEnabled,\n };\n};\n"],"names":[],"mappings":"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"}
|
package/useScrollContainer.js
CHANGED
|
@@ -4,5 +4,5 @@ import 'classnames';
|
|
|
4
4
|
import '@hh.ru/magritte-internal-custom-scroll';
|
|
5
5
|
import './types.js';
|
|
6
6
|
import './utils.js';
|
|
7
|
-
export { u as useScrollContainer } from './useScrollContainer-
|
|
7
|
+
export { u as useScrollContainer } from './useScrollContainer-B2HfC9He.js';
|
|
8
8
|
//# sourceMappingURL=useScrollContainer.js.map
|