MCPcopy Create free account
hub / github.com/evolify/dumpfun / useStickyTable

Function useStickyTable

common/hooks/table.ts:64–105  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

62}
63
64export function useStickyTable() {
65 const tableRef = useRef<HTMLTableElement>(null)
66 const fixedHeaderRef = useRef<HTMLDivElement>(null)
67 const wrapperRef = useRef<HTMLDivElement>(null)
68
69 function onScroll() {
70 if (!tableRef.current) return
71 const table = tableRef.current
72 const rect = table.getBoundingClientRect()
73 if (rect.top < 0) {
74 wrapperRef.current!.style.display = "block"
75 } else {
76 wrapperRef.current!.style.display = "none"
77 }
78 }
79
80 function onTableScroll(e: Event) {
81 if (!fixedHeaderRef.current) return
82 fixedHeaderRef.current.scrollLeft =
83 tableRef.current?.parentElement?.scrollLeft ?? 0
84 }
85
86 useEffect(() => {
87 if (!tableRef.current) return
88 const table = tableRef.current
89 const [wrapper, fixedHeader] = cloneHeader(table)
90 fixedHeaderRef.current = fixedHeader
91 wrapperRef.current = wrapper
92 const debouncedOnScroll = throttle(onScroll, 100)
93 window.addEventListener("scroll", debouncedOnScroll)
94 tableRef.current.parentElement?.addEventListener("scroll", onTableScroll)
95 return () => {
96 window.removeEventListener("scroll", debouncedOnScroll)
97 tableRef.current?.parentElement?.removeEventListener(
98 "scroll",
99 onTableScroll
100 )
101 }
102 }, [])
103
104 return { tableRef }
105}

Callers 1

DataTableFunction · 0.90

Calls 2

cloneHeaderFunction · 0.85
throttleFunction · 0.85

Tested by

no test coverage detected