Skip to content

Commit 44a7770

Browse files
committed
fix: remove virtualizer
1 parent 96039a6 commit 44a7770

1 file changed

Lines changed: 32 additions & 62 deletions

File tree

apps/web/src/modules/course-selection/CourseSelector.tsx

Lines changed: 32 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
"use client";
22
import { api } from "@albert-plus/server/convex/_generated/api";
33
import type { Id } from "@albert-plus/server/convex/_generated/dataModel";
4-
import { useVirtualizer } from "@tanstack/react-virtual";
54
import { useMutation, useQuery } from "convex/react";
65
import { ConvexError } from "convex/values";
7-
import React, { useEffect, useState } from "react";
6+
import { useEffect, useRef, useState } from "react";
87
import { toast } from "sonner";
98
import { Button } from "@/components/ui/button";
109
import { useSearchParam } from "@/hooks/use-search-param";
@@ -91,33 +90,28 @@ const CourseSelector = ({
9190
setHoveredSection(section);
9291
};
9392

94-
const parentRef = React.useRef<HTMLDivElement>(null);
93+
const observerTarget = useRef<HTMLDivElement>(null);
9594

96-
const rowVirtualizer = useVirtualizer({
97-
count: filteredData.length,
98-
getScrollElement: () => parentRef.current,
99-
estimateSize: () => 100,
100-
overscan: 5,
101-
gap: 8,
102-
});
103-
104-
useEffect(() => {
105-
onHover?.(hoveredSection);
106-
}, [hoveredSection, onHover]);
107-
108-
// https://tanstack.com/virtual/latest/docs/framework/react/examples/infinite-scroll
109-
// biome-ignore lint/correctness/useExhaustiveDependencies: It's in Tanstack doc
11095
useEffect(() => {
111-
const [lastItem] = [...rowVirtualizer.getVirtualItems()].reverse();
96+
const observer = new IntersectionObserver(
97+
(entries) => {
98+
if (entries[0].isIntersecting && status === "CanLoadMore") {
99+
loadMore(200);
100+
}
101+
},
102+
{ threshold: 0.1 },
103+
);
112104

113-
if (!lastItem) {
114-
return;
105+
if (observerTarget.current) {
106+
observer.observe(observerTarget.current);
115107
}
116108

117-
if (lastItem.index >= filteredData.length - 1 && status === "CanLoadMore") {
118-
loadMore(200);
119-
}
120-
}, [status, loadMore, filteredData.length, rowVirtualizer.getVirtualItems()]);
109+
return () => observer.disconnect();
110+
}, [status, loadMore]);
111+
112+
useEffect(() => {
113+
onHover?.(hoveredSection);
114+
}, [hoveredSection, onHover]);
121115

122116
const handleSectionSelect = async (offering: CourseOffering) => {
123117
if (offering.status === "closed") {
@@ -350,44 +344,20 @@ const CourseSelector = ({
350344
)}
351345

352346
{filteredData.length > 0 && (
353-
<div
354-
ref={parentRef}
355-
className="overflow-auto no-scrollbar w-full flex-1 min-h-0"
356-
>
357-
<div
358-
className="relative w-full"
359-
style={{
360-
height: `${rowVirtualizer.getTotalSize()}px`,
361-
}}
362-
>
363-
{rowVirtualizer.getVirtualItems().map((virtualItem) => {
364-
const course = filteredData[virtualItem.index];
365-
366-
return (
367-
<div
368-
key={virtualItem.key}
369-
data-index={virtualItem.index}
370-
ref={rowVirtualizer.measureElement}
371-
className="absolute top-0 left-0 w-full"
372-
style={{
373-
transform: `translateY(${virtualItem.start}px)`,
374-
}}
375-
>
376-
<CourseCard
377-
course={course}
378-
isExpanded={isExpanded(course.code)}
379-
selectedClassNumbers={selectedClassNumbers}
380-
onToggleExpand={toggleCourseExpansion}
381-
onSectionSelect={handleSectionSelect}
382-
onSectionSelectAsAlternative={
383-
handleSectionSelectAsAlternative
384-
}
385-
onSectionHover={handleSectionHover}
386-
/>
387-
</div>
388-
);
389-
})}
390-
</div>
347+
<div className="overflow-auto no-scrollbar w-full flex-1 min-h-0 space-y-2">
348+
{filteredData.map((course) => (
349+
<CourseCard
350+
key={course._id}
351+
course={course}
352+
isExpanded={isExpanded(course.code)}
353+
selectedClassNumbers={selectedClassNumbers}
354+
onToggleExpand={toggleCourseExpansion}
355+
onSectionSelect={handleSectionSelect}
356+
onSectionSelectAsAlternative={handleSectionSelectAsAlternative}
357+
onSectionHover={handleSectionHover}
358+
/>
359+
))}
360+
<div ref={observerTarget} className="h-1" />
391361
</div>
392362
)}
393363

0 commit comments

Comments
 (0)