MCPcopy
hub / github.com/xiaolin/react-image-gallery / useThumbnails

Function useThumbnails

src/components/hooks/useThumbnails.ts:46–374  ·  view source on GitHub ↗
({
  currentIndex,
  items,
  thumbnailPosition = "bottom",
  disableThumbnailScroll = false,
  slideDuration = DEFAULT_SLIDE_DURATION,
  isRTL = false,
  useTranslate3D = true,
}: UseThumbnailsProps)

Source from the content-addressed store, hash-verified

44 * Custom hook for managing thumbnail bar state and navigation
45 */
46export function useThumbnails({
47 currentIndex,
48 items,
49 thumbnailPosition = "bottom",
50 disableThumbnailScroll = false,
51 slideDuration = DEFAULT_SLIDE_DURATION,
52 isRTL = false,
53 useTranslate3D = true,
54}: UseThumbnailsProps): UseThumbnailsReturn {
55 const [thumbsTranslate, setThumbsTranslate] = useState(0);
56 const [thumbsSwipedTranslate, setThumbsSwipedTranslate] = useState(0);
57 const [thumbsStyle, setThumbsStyle] = useState<CSSProperties>({
58 transition: `all ${slideDuration}ms ease-out`,
59 });
60 const [thumbnailsWrapperWidth, setThumbnailsWrapperWidth] = useState(0);
61 const [thumbnailsWrapperHeight, setThumbnailsWrapperHeight] = useState(0);
62 const [isSwipingThumbnail, setIsSwipingThumbnail] = useState(false);
63
64 const thumbnailsWrapperRef = useRef<HTMLDivElement | null>(null);
65 const thumbnailsRef = useRef<HTMLDivElement | null>(null);
66 const resizeObserverRef = useRef<ResizeObserver | null>(null);
67 const previousIndexRef = useRef(currentIndex);
68
69 const isThumbnailVertical = useCallback(() => {
70 return thumbnailPosition === "left" || thumbnailPosition === "right";
71 }, [thumbnailPosition]);
72
73 // Calculate thumbnail translation based on current index
74 const getThumbsTranslate = useCallback(
75 (indexDifference: number): number => {
76 if (disableThumbnailScroll) return 0;
77
78 const thumbsElement = thumbnailsRef.current;
79 if (!thumbsElement) return 0;
80
81 let hiddenScroll: number;
82 const isVertical = isThumbnailVertical();
83
84 if (isVertical) {
85 if (thumbsElement.scrollHeight <= thumbnailsWrapperHeight) {
86 return 0;
87 }
88 hiddenScroll = thumbsElement.scrollHeight - thumbnailsWrapperHeight;
89 } else {
90 if (
91 thumbsElement.scrollWidth <= thumbnailsWrapperWidth ||
92 thumbnailsWrapperWidth <= 0
93 ) {
94 return 0;
95 }
96 hiddenScroll = thumbsElement.scrollWidth - thumbnailsWrapperWidth;
97 }
98
99 const perIndexScroll = hiddenScroll / (items.length - 1);
100 return indexDifference * perIndexScroll;
101 },
102 [
103 disableThumbnailScroll,

Callers 2

ImageGallery.tsxFile · 0.90

Calls 3

debounceFunction · 0.85
observeMethod · 0.45
unobserveMethod · 0.45

Tested by

no test coverage detected