{"version":3,"file":"useReelCells.cjs","sources":["../../../src/components/Table/useReelCells.ts"],"sourcesContent":["import { type ReactNode, useEffect, useState } from 'react'\n\nconst TR_SELECTOR = 'table tr'\nconst FIXED_LEFT_SELECTOR = '[data-fixed=\"left\"]'\nconst FIXED_RIGHT_SELECTOR = '[data-fixed=\"right\"]'\n\nconst HAS_FIXED_SELECTOR = `${TR_SELECTOR} ${FIXED_LEFT_SELECTOR},${TR_SELECTOR} ${FIXED_RIGHT_SELECTOR}`\n\nexport const useReelCells = (\n  children: ReactNode,\n  tableWrapperRef: React.RefObject<HTMLDivElement>,\n) => {\n  const [showShadow, setShowShadow] = useState(false)\n\n  useEffect(() => {\n    const wrapper = tableWrapperRef.current\n\n    if (!wrapper) {\n      return\n    }\n\n    let cellCleans: Array<() => void> = []\n    const allClean = () => {\n      cellCleans.forEach((clean) => clean())\n      cellCleans = []\n    }\n\n    const handleScroll = () => {\n      if (!wrapper.querySelector(HAS_FIXED_SELECTOR)) {\n        return\n      }\n\n      let isVisible = false\n      const commonAction = (\n        cells: HTMLElement[] | NodeListOf<HTMLElement>,\n        direction: 'left' | 'right',\n        visible: boolean,\n      ) => {\n        allClean()\n\n        const action = () => {\n          let position = 0\n\n          cells.forEach((cell, index) => {\n            if (cell.classList.toggle('fixed', visible)) {\n              isVisible = true\n              cell.style[direction] = `${position}px`\n              cell.style.zIndex = (index + 1).toString()\n\n              position += cell.offsetWidth\n            }\n          })\n        }\n\n        action()\n        const observer = new ResizeObserver(action)\n\n        cells.forEach((cell) => {\n          observer.observe(cell)\n        })\n\n        cellCleans.push(() => {\n          cells.forEach((cell) => {\n            observer.unobserve(cell)\n          })\n        })\n      }\n\n      wrapper.querySelectorAll<HTMLElement>(TR_SELECTOR).forEach((tr) => {\n        const leftCells = tr.querySelectorAll<HTMLElement>(FIXED_LEFT_SELECTOR)\n        const rightCells = Array.from(\n          tr.querySelectorAll<HTMLElement>(FIXED_RIGHT_SELECTOR),\n        ).reverse()\n\n        if (leftCells.length > 0) {\n          commonAction(leftCells, 'left' as const, wrapper.scrollLeft > 0)\n        }\n\n        if (rightCells.length > 0) {\n          commonAction(\n            rightCells,\n            'right' as const,\n            wrapper.scrollLeft < wrapper.scrollWidth - wrapper.clientWidth - 1,\n          )\n        }\n      })\n\n      setShowShadow(isVisible)\n    }\n\n    handleScroll()\n    wrapper.addEventListener('scroll', handleScroll)\n\n    const observer = new ResizeObserver(handleScroll)\n\n    observer.observe(wrapper)\n\n    return () => {\n      wrapper.removeEventListener('scroll', handleScroll)\n      observer.unobserve(wrapper)\n      allClean()\n    }\n    // HINT: Paginationと組み合わせた際などに再生成したい\n  }, [children, tableWrapperRef])\n\n  return { tableWrapperRef, showShadow }\n}\n"],"names":["useState","useEffect"],"mappings":"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"}