Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import React from "react";
import { render, screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { WaveleaderboardSort } from "@/components/waves/leaderboard/header/WaveleaderboardSort";
import { WaveDropsLeaderboardSort } from "@/hooks/useWaveDropsLeaderboard";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { render, screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";

describe("WaveleaderboardSort", () => {
it("highlights active sort and triggers changes", async () => {
Expand All @@ -28,7 +27,7 @@ describe("WaveleaderboardSort", () => {
WaveDropsLeaderboardSort.RATING_PREDICTION
);

await user.click(screen.getByText("🔥 Hot"));
await user.click(screen.getByText("Hot"));
expect(onSortChange).toHaveBeenCalledWith(WaveDropsLeaderboardSort.TREND);

await user.click(screen.getByText("Newest"));
Expand Down
30 changes: 15 additions & 15 deletions components/waves/leaderboard/header/WaveleaderboardSort.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
"use client";

import React, { useCallback, useEffect, useMemo } from "react";
import { debounce } from "lodash";
import { WaveDropsLeaderboardSort } from "@/hooks/useWaveDropsLeaderboard";
import { useQueryClient } from "@tanstack/react-query";
import { commonApiFetch } from "@/services/api/common-api";
import type { ApiDropsLeaderboardPage } from "@/generated/models/ApiDropsLeaderboardPage";
import { QueryKey } from "@/components/react-query-wrapper/ReactQueryWrapper";
import {
WAVE_DROPS_PARAMS,
getDefaultQueryRetry,
} from "@/components/react-query-wrapper/utils/query-utils";
import type { ApiDropsLeaderboardPage } from "@/generated/models/ApiDropsLeaderboardPage";
import { WaveDropsLeaderboardSort } from "@/hooks/useWaveDropsLeaderboard";
import { commonApiFetch } from "@/services/api/common-api";
import { useQueryClient } from "@tanstack/react-query";
import { debounce } from "lodash";
import React, { useCallback, useEffect, useMemo } from "react";

interface WaveleaderboardSortProps {
readonly sort: WaveDropsLeaderboardSort;
Expand Down Expand Up @@ -89,12 +89,12 @@ export const WaveleaderboardSort: React.FC<WaveleaderboardSortProps> = ({
staleTime: 60000,
...getDefaultQueryRetry(),
})
.catch((error) => {
.catch((error: unknown) => {
// Log prefetch errors for debugging while not blocking the UI
console.warn("Failed to prefetch leaderboard data:", {
waveId,
targetSort,
error: error?.message ?? error,
error: error instanceof Error ? error.message : error,
});
});
},
Expand Down Expand Up @@ -128,13 +128,6 @@ export const WaveleaderboardSort: React.FC<WaveleaderboardSortProps> = ({
id="tabsId"
className="tw-flex tw-rounded-lg tw-border tw-border-solid tw-border-white/10 tw-bg-iron-950 tw-p-1"
>
<button
className={getButtonClassName(WaveDropsLeaderboardSort.TREND)}
onClick={() => onSortChange(WaveDropsLeaderboardSort.TREND)}
onMouseEnter={() => prefetchSort(WaveDropsLeaderboardSort.TREND)}
>
🔥 Hot
</button>
<button
className={getButtonClassName(WaveDropsLeaderboardSort.RANK)}
onClick={() => onSortChange(WaveDropsLeaderboardSort.RANK)}
Expand All @@ -153,6 +146,13 @@ export const WaveleaderboardSort: React.FC<WaveleaderboardSortProps> = ({
>
Projected Vote
</button>
<button
className={getButtonClassName(WaveDropsLeaderboardSort.TREND)}
onClick={() => onSortChange(WaveDropsLeaderboardSort.TREND)}
onMouseEnter={() => prefetchSort(WaveDropsLeaderboardSort.TREND)}
>
Hot
</button>
<button
className={getButtonClassName(WaveDropsLeaderboardSort.CREATED_AT)}
onClick={() => onSortChange(WaveDropsLeaderboardSort.CREATED_AT)}
Expand Down