Commit
·
695183e
1
Parent(s):
d2473b9
Remove unused filters
Browse files
frontend/src/pages/LeaderboardPage/components/Leaderboard/Leaderboard.js
CHANGED
@@ -7,100 +7,9 @@ import { useLeaderboard } from "./context/LeaderboardContext";
|
|
7 |
import { useLeaderboardProcessing } from "./hooks/useLeaderboardData";
|
8 |
import { useLeaderboardData } from "./hooks/useLeaderboardData";
|
9 |
|
10 |
-
import LeaderboardFilters from "./components/Filters/Filters";
|
11 |
import LeaderboardTable from "./components/Table/Table";
|
12 |
import SearchBar, { SearchBarSkeleton } from "./components/Filters/SearchBar";
|
13 |
import PerformanceMonitor from "./components/PerformanceMonitor";
|
14 |
-
import QuickFilters, {
|
15 |
-
QuickFiltersSkeleton,
|
16 |
-
} from "./components/Filters/QuickFilters";
|
17 |
-
|
18 |
-
const FilterAccordion = ({ expanded, quickFilters, advancedFilters }) => {
|
19 |
-
const advancedFiltersRef = React.useRef(null);
|
20 |
-
const quickFiltersRef = React.useRef(null);
|
21 |
-
const [height, setHeight] = React.useState("auto");
|
22 |
-
const resizeTimeoutRef = React.useRef(null);
|
23 |
-
|
24 |
-
const updateHeight = React.useCallback(() => {
|
25 |
-
if (expanded && advancedFiltersRef.current) {
|
26 |
-
setHeight(`${advancedFiltersRef.current.scrollHeight}px`);
|
27 |
-
} else if (!expanded && quickFiltersRef.current) {
|
28 |
-
setHeight(`${quickFiltersRef.current.scrollHeight}px`);
|
29 |
-
}
|
30 |
-
}, [expanded]);
|
31 |
-
|
32 |
-
React.useEffect(() => {
|
33 |
-
// Initial height calculation
|
34 |
-
const timer = setTimeout(updateHeight, 100);
|
35 |
-
|
36 |
-
// Resize handler with debounce
|
37 |
-
const handleResize = () => {
|
38 |
-
if (resizeTimeoutRef.current) {
|
39 |
-
clearTimeout(resizeTimeoutRef.current);
|
40 |
-
}
|
41 |
-
resizeTimeoutRef.current = setTimeout(updateHeight, 150);
|
42 |
-
};
|
43 |
-
|
44 |
-
window.addEventListener("resize", handleResize);
|
45 |
-
|
46 |
-
return () => {
|
47 |
-
clearTimeout(timer);
|
48 |
-
window.removeEventListener("resize", handleResize);
|
49 |
-
if (resizeTimeoutRef.current) {
|
50 |
-
clearTimeout(resizeTimeoutRef.current);
|
51 |
-
}
|
52 |
-
};
|
53 |
-
}, [updateHeight]);
|
54 |
-
|
55 |
-
// Update height when expanded state changes
|
56 |
-
React.useEffect(() => {
|
57 |
-
updateHeight();
|
58 |
-
}, [expanded, updateHeight]);
|
59 |
-
|
60 |
-
return (
|
61 |
-
<Box
|
62 |
-
sx={{
|
63 |
-
position: "relative",
|
64 |
-
width: "100%",
|
65 |
-
height,
|
66 |
-
transition: "height 0.3s ease",
|
67 |
-
mb: 0.5,
|
68 |
-
overflow: "hidden",
|
69 |
-
}}
|
70 |
-
>
|
71 |
-
<Box
|
72 |
-
ref={quickFiltersRef}
|
73 |
-
sx={{
|
74 |
-
position: expanded ? "absolute" : "relative",
|
75 |
-
top: 0,
|
76 |
-
left: 0,
|
77 |
-
right: 0,
|
78 |
-
opacity: expanded ? 0 : 1,
|
79 |
-
visibility: expanded ? "hidden" : "visible",
|
80 |
-
transition: "opacity 0.3s ease",
|
81 |
-
mb: 0,
|
82 |
-
}}
|
83 |
-
>
|
84 |
-
{quickFilters}
|
85 |
-
</Box>
|
86 |
-
<Box
|
87 |
-
ref={advancedFiltersRef}
|
88 |
-
sx={{
|
89 |
-
position: !expanded ? "absolute" : "relative",
|
90 |
-
top: 0,
|
91 |
-
left: 0,
|
92 |
-
right: 0,
|
93 |
-
opacity: expanded ? 1 : 0,
|
94 |
-
visibility: !expanded ? "hidden" : "visible",
|
95 |
-
transition: "opacity 0.3s ease",
|
96 |
-
mt: 0,
|
97 |
-
}}
|
98 |
-
>
|
99 |
-
{advancedFilters}
|
100 |
-
</Box>
|
101 |
-
</Box>
|
102 |
-
);
|
103 |
-
};
|
104 |
|
105 |
const Leaderboard = () => {
|
106 |
const { state, actions } = useLeaderboard();
|
@@ -266,49 +175,6 @@ const Leaderboard = () => {
|
|
266 |
]
|
267 |
);
|
268 |
|
269 |
-
const memoizedQuickFilters = useMemo(
|
270 |
-
() => (
|
271 |
-
<QuickFilters
|
272 |
-
totalCount={state.models.length}
|
273 |
-
filteredCount={memoizedFilteredData?.length || 0}
|
274 |
-
data={memoizedFilteredData}
|
275 |
-
table={memoizedTable}
|
276 |
-
/>
|
277 |
-
),
|
278 |
-
[state.models.length, memoizedFilteredData, memoizedTable]
|
279 |
-
);
|
280 |
-
|
281 |
-
const memoizedLeaderboardFilters = useMemo(
|
282 |
-
() => (
|
283 |
-
<LeaderboardFilters
|
284 |
-
data={memoizedFilteredData}
|
285 |
-
loading={loadingStates.showFiltersSkeleton}
|
286 |
-
selectedPrecisions={state.filters.precisions}
|
287 |
-
onPrecisionsChange={onPrecisionsChange}
|
288 |
-
selectedTypes={state.filters.types}
|
289 |
-
onTypesChange={onTypesChange}
|
290 |
-
paramsRange={state.filters.paramsRange}
|
291 |
-
onParamsRangeChange={onParamsRangeChange}
|
292 |
-
selectedBooleanFilters={state.filters.booleanFilters}
|
293 |
-
onBooleanFiltersChange={onBooleanFiltersChange}
|
294 |
-
onReset={onReset}
|
295 |
-
/>
|
296 |
-
),
|
297 |
-
[
|
298 |
-
memoizedFilteredData,
|
299 |
-
loadingStates.showFiltersSkeleton,
|
300 |
-
state.filters.precisions,
|
301 |
-
state.filters.types,
|
302 |
-
state.filters.paramsRange,
|
303 |
-
state.filters.booleanFilters,
|
304 |
-
onPrecisionsChange,
|
305 |
-
onTypesChange,
|
306 |
-
onParamsRangeChange,
|
307 |
-
onBooleanFiltersChange,
|
308 |
-
onReset,
|
309 |
-
]
|
310 |
-
);
|
311 |
-
|
312 |
// No need to memoize LeaderboardTable as it handles its own sorting state
|
313 |
const tableComponent = (
|
314 |
<LeaderboardTable
|
@@ -410,17 +276,6 @@ const Leaderboard = () => {
|
|
410 |
) : (
|
411 |
memoizedSearchBar
|
412 |
)}
|
413 |
-
<Box sx={{ mt: 1 }}>
|
414 |
-
{loadingStates.showFiltersSkeleton ? (
|
415 |
-
<QuickFiltersSkeleton />
|
416 |
-
) : (
|
417 |
-
<FilterAccordion
|
418 |
-
expanded={state.filtersExpanded}
|
419 |
-
quickFilters={memoizedQuickFilters}
|
420 |
-
advancedFilters={memoizedLeaderboardFilters}
|
421 |
-
/>
|
422 |
-
)}
|
423 |
-
</Box>
|
424 |
</Box>
|
425 |
|
426 |
<Box
|
|
|
7 |
import { useLeaderboardProcessing } from "./hooks/useLeaderboardData";
|
8 |
import { useLeaderboardData } from "./hooks/useLeaderboardData";
|
9 |
|
|
|
10 |
import LeaderboardTable from "./components/Table/Table";
|
11 |
import SearchBar, { SearchBarSkeleton } from "./components/Filters/SearchBar";
|
12 |
import PerformanceMonitor from "./components/PerformanceMonitor";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
|
14 |
const Leaderboard = () => {
|
15 |
const { state, actions } = useLeaderboard();
|
|
|
175 |
]
|
176 |
);
|
177 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
178 |
// No need to memoize LeaderboardTable as it handles its own sorting state
|
179 |
const tableComponent = (
|
180 |
<LeaderboardTable
|
|
|
276 |
) : (
|
277 |
memoizedSearchBar
|
278 |
)}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
279 |
</Box>
|
280 |
|
281 |
<Box
|
frontend/src/pages/LeaderboardPage/components/Leaderboard/components/Filters/SearchBar.js
CHANGED
@@ -250,43 +250,6 @@ const SearchBar = ({
|
|
250 |
</Typography>
|
251 |
</Box>
|
252 |
)}
|
253 |
-
<Box
|
254 |
-
onClick={onToggleFilters}
|
255 |
-
sx={{
|
256 |
-
display: "flex",
|
257 |
-
alignItems: "center",
|
258 |
-
gap: 0.5,
|
259 |
-
cursor: "pointer",
|
260 |
-
color:
|
261 |
-
!loading && hasActiveFilters
|
262 |
-
? "primary.main"
|
263 |
-
: filtersOpen
|
264 |
-
? "primary.main"
|
265 |
-
: "text.secondary",
|
266 |
-
backgroundColor: filtersOpen
|
267 |
-
? alpha(theme.palette.primary.main, 0.04)
|
268 |
-
: "transparent",
|
269 |
-
border: "1px solid",
|
270 |
-
borderColor: filtersOpen ? "primary.100" : "divider",
|
271 |
-
borderRadius: 1,
|
272 |
-
padding: "4px 8px",
|
273 |
-
"&:hover": {
|
274 |
-
backgroundColor: alpha(theme.palette.primary.main, 0.08),
|
275 |
-
},
|
276 |
-
userSelect: "none",
|
277 |
-
}}
|
278 |
-
>
|
279 |
-
<FilterListIcon sx={{ fontSize: "1.2rem" }} />
|
280 |
-
<Typography
|
281 |
-
variant="body2"
|
282 |
-
sx={{
|
283 |
-
fontWeight: 600,
|
284 |
-
display: { xs: "none", md: "block" },
|
285 |
-
}}
|
286 |
-
>
|
287 |
-
Advanced Filters
|
288 |
-
</Typography>
|
289 |
-
</Box>
|
290 |
<InfoIconWithTooltip
|
291 |
tooltip={UI_TOOLTIPS.SEARCH_BAR}
|
292 |
iconProps={{
|
|
|
250 |
</Typography>
|
251 |
</Box>
|
252 |
)}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
253 |
<InfoIconWithTooltip
|
254 |
tooltip={UI_TOOLTIPS.SEARCH_BAR}
|
255 |
iconProps={{
|