AI Review Center
Commit Review Workspace ?
Select a commit on the left to inspect quality, security, business value, findings, and suggested code changes.
Project AI Score
?
72%
Quality Avg
?
77%
Security Avg
?
64%
Reviews
?
91
Review Result ?
solutionbowl/super-admin · 935221a1
The commit adds refresh capabilities with disabled states on fetch-related UI elements, improving UX by preventing multiple refreshes while fetching. However, the commit message is vague and some repeated patterns could be abstracted to reduce code duplication.
Quality
?
75%
Security
?
50%
Business Value
?
80%
Maintainability
?
78%
Issues & Suggested Fixes
?
1AI detects the issue
2Shows file, line, or evidence
3Suggests the fix to apply
Vague Commit Message
Where
commit message
Issue / Evidence
vague commit message
Suggested Fix
improve commit message to clearly describe what 'refresh enable aaply on counter-refresh' means for better team understanding
Code Pattern For Conditional Refresh
Where
src/routes/pl-by-agent.tsx:77
Issue / Evidence
code pattern for conditional refresh
Suggested Fix
consider abstracting refresh logic into reusable hook or utility to enhance maintainability
Inline Arrow Function In Onclick
Where
src/routes/balance.tsx:92
Issue / Evidence
inline arrow function in onClick
Suggested Fix
memoize or extract handler to prevent unnecessary re-renders and improve performance
Duplicate Logic
Where
src/routes/credit-transactions.tsx:121
Issue / Evidence
repeated refetch button logic
Suggested Fix
create a reusable component for refetch button with isFetching disabled prop to reduce repetition
Inline Handlers With Disabled State
Where
src/routes/bet-ticket.tsx:196
Issue / Evidence
inline handlers with disabled state
Suggested Fix
ensure consistent naming and handling for isFetching flags to avoid potential bugs
Code Change Preview · src/routes/agency-management.user-details.$userId.tsx
?
Removed / Before Commit
- diff --git a/src/routes/agency-management.user-details.$userId.tsx b/src/routes/agency-management.user-details.$userId.tsx - index 105ec20..d948c69 100644 - DownlineUser, - } from "@/services/api/internalTypes"; - import CsvExportButton from "@/components/common/CsvExportButton"; - import { useRefreshToggle } from "@/hooks/useRefreshToggle"; - - export const Route = createFileRoute("/agency-management/user-details/$userId")({ - component: UserDetailsPage, - function UserDetailsPage() { - const { userId } = Route.useParams(); - const [search, setSearch] = useState(""); - const { isRefreshEnabled } = useRefreshToggle(); - - const usersQuery = useQuery({ - queryKey: ["credit-downline-users"], - <Button - variant="outline"
Added / After Commit
+ diff --git a/src/routes/agency-management.user-details.$userId.tsx b/src/routes/agency-management.user-details.$userId.tsx + index 105ec20..d948c69 100644 + DownlineUser, + } from "@/services/api/internalTypes"; + import CsvExportButton from "@/components/common/CsvExportButton"; + + export const Route = createFileRoute("/agency-management/user-details/$userId")({ + component: UserDetailsPage, + function UserDetailsPage() { + const { userId } = Route.useParams(); + const [search, setSearch] = useState(""); + + const usersQuery = useQuery({ + queryKey: ["credit-downline-users"], + <Button + variant="outline" + onClick={() => { + usersQuery.refetch();
Removed / Before Commit
- diff --git a/src/routes/balance.tsx b/src/routes/balance.tsx - index d260023..3dfed93 100644 - import { Badge } from "@/components/ui/badge"; - import { internalServices } from "@/services/api/internalServices"; - import type { CreditBalanceSummary } from "@/services/api/internalTypes"; - import { useRefreshToggle } from "@/hooks/useRefreshToggle"; - - export const Route = createFileRoute("/balance")({ - component: BalancePage, - function BalancePage() { - const [lookupUserId, setLookupUserId] = useState(""); - const [selectedUserId, setSelectedUserId] = useState(""); - const { isRefreshEnabled } = useRefreshToggle(); - - const balanceQuery = useQuery({ - queryKey: ["credit-balance-summary", selectedUserId || "current-user"], - </Button> */} - <Button
Added / After Commit
+ diff --git a/src/routes/balance.tsx b/src/routes/balance.tsx + index d260023..3dfed93 100644 + import { Badge } from "@/components/ui/badge"; + import { internalServices } from "@/services/api/internalServices"; + import type { CreditBalanceSummary } from "@/services/api/internalTypes"; + + export const Route = createFileRoute("/balance")({ + component: BalancePage, + function BalancePage() { + const [lookupUserId, setLookupUserId] = useState(""); + const [selectedUserId, setSelectedUserId] = useState(""); + + const balanceQuery = useQuery({ + queryKey: ["credit-balance-summary", selectedUserId || "current-user"], + </Button> */} + <Button + variant="outline" + onClick={() => balanceQuery.refetch()}
Removed / Before Commit
- diff --git a/src/routes/bet-list.tsx b/src/routes/bet-list.tsx - index 49b9845..b39c5d0 100644 - }; - - const handleManualRefresh = () => { - if (!isRefreshEnabled) return; - if (isAgentMode) { - agentBetsQuery.refetch(); - } else { - <Button - type="button" - onClick={handleManualRefresh} - disabled={!isRefreshEnabled || activeIsFetching} - className="h-9 rounded-lg gradient-plum px-6 text-white shadow-plum hover:opacity-90" - > - Refresh ({refreshCountdown}s)
Added / After Commit
+ diff --git a/src/routes/bet-list.tsx b/src/routes/bet-list.tsx + index 49b9845..b39c5d0 100644 + }; + + const handleManualRefresh = () => { + if (isAgentMode) { + agentBetsQuery.refetch(); + } else { + <Button + type="button" + onClick={handleManualRefresh} + disabled={activeIsFetching} + className="h-9 rounded-lg gradient-plum px-6 text-white shadow-plum hover:opacity-90" + > + Refresh ({refreshCountdown}s)
Removed / Before Commit
- diff --git a/src/routes/bet-ticket.tsx b/src/routes/bet-ticket.tsx - index 9a935d5..e7fefbe 100644 - import { format } from "date-fns"; - import { useAutoRefresh } from "@/hooks/useAutoRefresh"; - import BetsExcelExportButton from "@/components/common/BetsExcelExportButton"; - import { useRefreshToggle } from "@/hooks/useRefreshToggle"; - - export const Route = createFileRoute("/bet-ticket")({ - component: BetTicketPage, - const [maxStake, setMaxStake] = useState(1000); - const [userName, setUserName] = useState(""); - const navigate = useNavigate(); - const { isRefreshEnabled } = useRefreshToggle(); - - const [applied, setApplied] = useState<BetTickerParams>(DEFAULT_PARAMS); - const [expandedBetId, setExpandedBetId] = useState<string | null>(null); - <div className="flex items-center gap-2"> - <Button
Added / After Commit
+ diff --git a/src/routes/bet-ticket.tsx b/src/routes/bet-ticket.tsx + index 9a935d5..e7fefbe 100644 + import { format } from "date-fns"; + import { useAutoRefresh } from "@/hooks/useAutoRefresh"; + import BetsExcelExportButton from "@/components/common/BetsExcelExportButton"; + + export const Route = createFileRoute("/bet-ticket")({ + component: BetTicketPage, + const [maxStake, setMaxStake] = useState(1000); + const [userName, setUserName] = useState(""); + const navigate = useNavigate(); + + const [applied, setApplied] = useState<BetTickerParams>(DEFAULT_PARAMS); + const [expandedBetId, setExpandedBetId] = useState<string | null>(null); + <div className="flex items-center gap-2"> + <Button + className="h-9 rounded-lg gradient-plum text-white hover:opacity-90 px-6 shadow-plum" + onClick={() => refetch()}
Removed / Before Commit
- diff --git a/src/routes/blocked-ips.tsx b/src/routes/blocked-ips.tsx - index 264abe0..35e4a5a 100644 - import { RefreshCw } from "lucide-react"; - import CsvExportButton from "@/components/common/CsvExportButton"; - import type { CsvColumn } from "@/utils/csv/types"; - import { useRefreshToggle } from "@/hooks/useRefreshToggle"; - - export const Route = createFileRoute("/blocked-ips")({ - component: BlockedIPsPage, - const [blockForm, setBlockForm] = useState({ ipAddress: "", reason: "" }); - const pageSize = 10; - const queryClient = useQueryClient(); - const { isRefreshEnabled } = useRefreshToggle(); - - // Fetch blocked IPs - const { - </Button> - <Button
Added / After Commit
+ diff --git a/src/routes/blocked-ips.tsx b/src/routes/blocked-ips.tsx + index 264abe0..35e4a5a 100644 + import { RefreshCw } from "lucide-react"; + import CsvExportButton from "@/components/common/CsvExportButton"; + import type { CsvColumn } from "@/utils/csv/types"; + + export const Route = createFileRoute("/blocked-ips")({ + component: BlockedIPsPage, + const [blockForm, setBlockForm] = useState({ ipAddress: "", reason: "" }); + const pageSize = 10; + const queryClient = useQueryClient(); + + // Fetch blocked IPs + const { + </Button> + <Button + variant="outline" + onClick={() => refetch()}
Removed / Before Commit
- diff --git a/src/routes/credit-transactions.tsx b/src/routes/credit-transactions.tsx - index 8993ff8..201bc3b 100644 - import { internalServices } from "@/services/api/internalServices"; - import type { CreditTransaction, CreditTransactionUser } from "@/services/api/internalTypes"; - import type { CsvColumn } from "@/utils/csv/types"; - import { useRefreshToggle } from "@/hooks/useRefreshToggle"; - - export const Route = createFileRoute("/credit-transactions")({ - component: CreditTransactionsPage, - - function CreditTransactionsPage() { - const [search, setSearch] = useState(""); - const { isRefreshEnabled } = useRefreshToggle(); - - const [currentPage, setCurrentPage] = useState(1); - const pageSize = 10; - </div> - <Button
Added / After Commit
+ diff --git a/src/routes/credit-transactions.tsx b/src/routes/credit-transactions.tsx + index 8993ff8..201bc3b 100644 + import { internalServices } from "@/services/api/internalServices"; + import type { CreditTransaction, CreditTransactionUser } from "@/services/api/internalTypes"; + import type { CsvColumn } from "@/utils/csv/types"; + + export const Route = createFileRoute("/credit-transactions")({ + component: CreditTransactionsPage, + + function CreditTransactionsPage() { + const [search, setSearch] = useState(""); + + const [currentPage, setCurrentPage] = useState(1); + const pageSize = 10; + </div> + <Button + variant="outline" + onClick={() => transactionsQuery.refetch()}
Removed / Before Commit
- diff --git a/src/routes/marketing.tsx b/src/routes/marketing.tsx - index 786e687..96f5390 100644 - import { internalServices } from "@/services/api/internalServices"; - import type { Banner, BannerFormValues } from "@/services/api/internalTypes"; - import TablePagination from "@/components/common/TablePagination"; - import { useRefreshToggle } from "@/hooks/useRefreshToggle"; - export const Route = createFileRoute("/marketing")({ - component: MarketingPage, - head: () => ({ meta: [{ title: "Banners - B2B-B2C Panel" }] }), - - function MarketingPage() { - const { user, hasPermission } = useAuth(); - const { isRefreshEnabled } = useRefreshToggle(); - const isOwner = getNavigationMode(getPanelRole(user)) === "full"; - const canView = isOwner || hasPermission("banner.view"); - const canCreate = isOwner || hasPermission("banner.create"); - /> - <Button
Added / After Commit
+ diff --git a/src/routes/marketing.tsx b/src/routes/marketing.tsx + index 786e687..96f5390 100644 + import { internalServices } from "@/services/api/internalServices"; + import type { Banner, BannerFormValues } from "@/services/api/internalTypes"; + import TablePagination from "@/components/common/TablePagination"; + export const Route = createFileRoute("/marketing")({ + component: MarketingPage, + head: () => ({ meta: [{ title: "Banners - B2B-B2C Panel" }] }), + + function MarketingPage() { + const { user, hasPermission } = useAuth(); + const isOwner = getNavigationMode(getPanelRole(user)) === "full"; + const canView = isOwner || hasPermission("banner.view"); + const canCreate = isOwner || hasPermission("banner.create"); + /> + <Button + variant="outline" + onClick={() => bannersQuery.refetch()}
Removed / Before Commit
- diff --git a/src/routes/MultiBet.tsx b/src/routes/MultiBet.tsx - index c5d1083..f82443d 100644 - }, [isRefreshEnabled, refetch, refreshCountdown]); - - const refreshReport = () => { - if (!isRefreshEnabled) return; - refetch(); - setRefreshCountdown(30); - }; - <Button - className="h-9 rounded-lg gradient-plum text-white hover:opacity-90 px-6 shadow-plum" - onClick={refreshReport} - disabled={!isRefreshEnabled || isFetching} - > - Refresh - </Button>
Added / After Commit
+ diff --git a/src/routes/MultiBet.tsx b/src/routes/MultiBet.tsx + index c5d1083..f82443d 100644 + }, [isRefreshEnabled, refetch, refreshCountdown]); + + const refreshReport = () => { + refetch(); + setRefreshCountdown(30); + }; + <Button + className="h-9 rounded-lg gradient-plum text-white hover:opacity-90 px-6 shadow-plum" + onClick={refreshReport} + disabled={isFetching} + > + Refresh + </Button>
Removed / Before Commit
- diff --git a/src/routes/net-exposure-bet.tsx b/src/routes/net-exposure-bet.tsx - index c4bf679..70ff53a 100644 - }, [isRefreshEnabled, refetch, refreshCountdown]); - - const handleManualRefresh = () => { - if (!isRefreshEnabled) return; - refetch(); - setRefreshCountdown(15); - }; - size="sm" - className="ml-auto h-8 rounded-md bg-emerald-600 px-4 text-white hover:bg-emerald-700" - onClick={handleManualRefresh} - disabled={!isRefreshEnabled || isFetching} - > - <RefreshCw className={cn("mr-2 h-3.5 w-3.5", isFetching && "animate-spin")} /> - Refresh ({refreshCountdown}s)
Added / After Commit
+ diff --git a/src/routes/net-exposure-bet.tsx b/src/routes/net-exposure-bet.tsx + index c4bf679..70ff53a 100644 + }, [isRefreshEnabled, refetch, refreshCountdown]); + + const handleManualRefresh = () => { + refetch(); + setRefreshCountdown(15); + }; + size="sm" + className="ml-auto h-8 rounded-md bg-emerald-600 px-4 text-white hover:bg-emerald-700" + onClick={handleManualRefresh} + disabled={isFetching} + > + <RefreshCw className={cn("mr-2 h-3.5 w-3.5", isFetching && "animate-spin")} /> + Refresh ({refreshCountdown}s)
Removed / Before Commit
- diff --git a/src/routes/net-exposure-detail.tsx b/src/routes/net-exposure-detail.tsx - index db2815c..dc32c77 100644 - // }, [isRefreshEnabled, refreshCountdown]); - - // const handleManualRefresh = () => { - // if (!isRefreshEnabled) return; - // refetchAll(); - // setRefreshCountdown(10); - // }; - size="sm" - className="ml-auto h-8 rounded-md bg-emerald-600 px-4 text-white hover:bg-emerald-700" - onClick={handleManualRefresh} - disabled={!isRefreshEnabled || isFetching} - > - <RefreshCw className={cn("mr-2 h-3.5 w-3.5", isFetching && "animate-spin")} /> - Refresh ({refreshCountdown}s)
Added / After Commit
+ diff --git a/src/routes/net-exposure-detail.tsx b/src/routes/net-exposure-detail.tsx + index db2815c..dc32c77 100644 + // }, [isRefreshEnabled, refreshCountdown]); + + // const handleManualRefresh = () => { + // refetchAll(); + // setRefreshCountdown(10); + // }; + size="sm" + className="ml-auto h-8 rounded-md bg-emerald-600 px-4 text-white hover:bg-emerald-700" + onClick={handleManualRefresh} + disabled={isFetching} + > + <RefreshCw className={cn("mr-2 h-3.5 w-3.5", isFetching && "animate-spin")} /> + Refresh ({refreshCountdown}s)
Removed / Before Commit
- diff --git a/src/routes/net-exposure-herarchy.tsx b/src/routes/net-exposure-herarchy.tsx - index 18f44ed..c074f5e 100644 - import { Button } from "@/components/ui/button"; - import { cn } from "@/lib/utils"; - import { getExposureParams } from "@/lib/nav-params"; - import { useRefreshToggle } from "@/hooks/useRefreshToggle"; - - export const Route = createFileRoute("/net-exposure-herarchy")({ - component: NetExposureHierarchyPage, - function NetExposureHierarchyPage() { - const { raceId, marketId, userId: initialUserId } = getExposureParams(); - const navigate = useNavigate(); - const { isRefreshEnabled } = useRefreshToggle(); - - const [activeUserId, setActiveUserId] = useState(initialUserId ?? ""); - const [drillStack, setDrillStack] = useState<string[]>([]); - const downlineUsers = hierarchy.slice(1); -
Added / After Commit
+ diff --git a/src/routes/net-exposure-herarchy.tsx b/src/routes/net-exposure-herarchy.tsx + index 18f44ed..c074f5e 100644 + import { Button } from "@/components/ui/button"; + import { cn } from "@/lib/utils"; + import { getExposureParams } from "@/lib/nav-params"; + + export const Route = createFileRoute("/net-exposure-herarchy")({ + component: NetExposureHierarchyPage, + function NetExposureHierarchyPage() { + const { raceId, marketId, userId: initialUserId } = getExposureParams(); + const navigate = useNavigate(); + + const [activeUserId, setActiveUserId] = useState(initialUserId ?? ""); + const [drillStack, setDrillStack] = useState<string[]>([]); + const downlineUsers = hierarchy.slice(1); + + const handleRefresh = () => { + hierarchyQuery.refetch();
Removed / Before Commit
- diff --git a/src/routes/net-exposure.tsx b/src/routes/net-exposure.tsx - index d907588..21b2b6c 100644 - import { useAutoRefresh } from "@/hooks/useAutoRefresh"; - import { internalServices } from "@/services/api/internalServices"; - import { setExposureParams } from "@/lib/nav-params"; - import { useRefreshToggle } from "@/hooks/useRefreshToggle"; - - export const Route = createFileRoute("/net-exposure")({ - component: NetExposurePage, - function NetExposurePage() { - const [selectedSport, setSelectedSport] = useState<SportType>("My P/L"); - const navigate = useNavigate(); - const { isRefreshEnabled } = useRefreshToggle(); - - const sportOptions: SportType[] = [ - "My P/L", - <h2 className="text-xl font-bold tracking-tight">Net Exposure</h2> - <Button
Added / After Commit
+ diff --git a/src/routes/net-exposure.tsx b/src/routes/net-exposure.tsx + index d907588..21b2b6c 100644 + import { useAutoRefresh } from "@/hooks/useAutoRefresh"; + import { internalServices } from "@/services/api/internalServices"; + import { setExposureParams } from "@/lib/nav-params"; + + export const Route = createFileRoute("/net-exposure")({ + component: NetExposurePage, + function NetExposurePage() { + const [selectedSport, setSelectedSport] = useState<SportType>("My P/L"); + const navigate = useNavigate(); + + const sportOptions: SportType[] = [ + "My P/L", + <h2 className="text-xl font-bold tracking-tight">Net Exposure</h2> + <Button + className="h-9 rounded-lg gradient-plum text-white hover:opacity-90 px-6 shadow-plum" + onClick={() => refetch()}
Removed / Before Commit
- diff --git a/src/routes/pl-by-agent.tsx b/src/routes/pl-by-agent.tsx - index a081a22..b22dc1e 100644 - const csvRows = useMemo(() => flattenCsvRows(report), [report]); - const refetchReport = reportQuery.refetch; - - const refreshAppliedReport = () => { - if (!isRefreshEnabled) return; - refetchReport(); - setRefreshCountdown(refreshIntervalSeconds); - }; - }, [isRefreshEnabled, refreshCountdown, refetchReport]); - - const handleManualRefresh = () => { - refreshAppliedReport(); - }; - const csvExportRows = useMemo( - () => [ - </Button>
Added / After Commit
+ diff --git a/src/routes/pl-by-agent.tsx b/src/routes/pl-by-agent.tsx + index a081a22..b22dc1e 100644 + const csvRows = useMemo(() => flattenCsvRows(report), [report]); + const refetchReport = reportQuery.refetch; + + const refreshAppliedReport = (force = false) => { + if (!force && !isRefreshEnabled) return; + refetchReport(); + setRefreshCountdown(refreshIntervalSeconds); + }; + }, [isRefreshEnabled, refreshCountdown, refetchReport]); + + const handleManualRefresh = () => { + refreshAppliedReport(true); + }; + const csvExportRows = useMemo( + () => [ + </Button>
Removed / Before Commit
- diff --git a/src/routes/pl-by-market.tsx b/src/routes/pl-by-market.tsx - index 491d0ab..99787c9 100644 - }, [isRefreshEnabled, refreshCountdown, refetchReport]); - - const handleManualRefresh = () => { - if (!isRefreshEnabled) return; - refetchReport(); - setRefreshCountdown(refreshIntervalSeconds); - }; - </Button> - <Button - onClick={handleManualRefresh} - disabled={!isRefreshEnabled || reportQuery.isFetching} - className="h-9 rounded-lg gradient-plum px-6 text-white shadow-plum hover:opacity-90" - > - Refresh ({refreshCountdown}s)
Added / After Commit
+ diff --git a/src/routes/pl-by-market.tsx b/src/routes/pl-by-market.tsx + index 491d0ab..99787c9 100644 + }, [isRefreshEnabled, refreshCountdown, refetchReport]); + + const handleManualRefresh = () => { + refetchReport(); + setRefreshCountdown(refreshIntervalSeconds); + }; + </Button> + <Button + onClick={handleManualRefresh} + disabled={reportQuery.isFetching} + className="h-9 rounded-lg gradient-plum px-6 text-white shadow-plum hover:opacity-90" + > + Refresh ({refreshCountdown}s)
Removed / Before Commit
- diff --git a/src/routes/statement.tsx b/src/routes/statement.tsx - index 1ad3958..e26a717 100644 - import { cn } from "@/lib/utils"; - import CsvExportButton from "@/components/common/CsvExportButton"; - import type { CsvColumn } from "@/utils/csv/types"; - import { useRefreshToggle } from "@/hooks/useRefreshToggle"; - - export const Route = createFileRoute("/statement")({ - component: StatementPage, - function StatementPage() { - const [searchQuery, setSearchQuery] = useState(""); - const [currentPage, setCurrentPage] = useState(1); - const { isRefreshEnabled } = useRefreshToggle(); - const pageSize = 10; - const transactionsQuery = useQuery({ - queryKey: ["credit-transactions"], - </div> - <Button
Added / After Commit
+ diff --git a/src/routes/statement.tsx b/src/routes/statement.tsx + index 1ad3958..e26a717 100644 + import { cn } from "@/lib/utils"; + import CsvExportButton from "@/components/common/CsvExportButton"; + import type { CsvColumn } from "@/utils/csv/types"; + + export const Route = createFileRoute("/statement")({ + component: StatementPage, + function StatementPage() { + const [searchQuery, setSearchQuery] = useState(""); + const [currentPage, setCurrentPage] = useState(1); + const pageSize = 10; + const transactionsQuery = useQuery({ + queryKey: ["credit-transactions"], + </div> + <Button + variant="outline" + onClick={() => transactionsQuery.refetch()}
Removed / Before Commit
- diff --git a/src/routes/transfer-statement.tsx b/src/routes/transfer-statement.tsx - index 1274784..c5fca50 100644 - import { Input } from "@/components/ui/input"; - import CsvExportButton from "@/components/common/CsvExportButton"; - import type { CsvColumn } from "@/utils/csv/types"; - import { useRefreshToggle } from "@/hooks/useRefreshToggle"; - import { - Table, - TableBody, - const [appliedFilters, setAppliedFilters] = useState(defaultFilters); - const [currentPage, setCurrentPage] = useState(1); - const [pageInput, setPageInput] = useState("1"); - const { isRefreshEnabled } = useRefreshToggle(); - - useEffect(() => { - setPageInput(String(currentPage)); - - <Button
Added / After Commit
+ diff --git a/src/routes/transfer-statement.tsx b/src/routes/transfer-statement.tsx + index 1274784..c5fca50 100644 + import { Input } from "@/components/ui/input"; + import CsvExportButton from "@/components/common/CsvExportButton"; + import type { CsvColumn } from "@/utils/csv/types"; + import { + Table, + TableBody, + const [appliedFilters, setAppliedFilters] = useState(defaultFilters); + const [currentPage, setCurrentPage] = useState(1); + const [pageInput, setPageInput] = useState("1"); + + useEffect(() => { + setPageInput(String(currentPage)); + + <Button + type="button" + onClick={() => refetch()}
Removed / Before Commit
- diff --git a/src/routes/transfer.tsx b/src/routes/transfer.tsx - index 900b345..dd93b4f 100644 - TransferListUser, - } from "@/services/api/internalTypes"; - import type { CsvColumn } from "@/utils/csv/types"; - import { useRefreshToggle } from "@/hooks/useRefreshToggle"; - - export const Route = createFileRoute("/transfer")({ - component: TransferPage, - - function TransferPage() { - const { user } = useAuth(); - const { isRefreshEnabled } = useRefreshToggle(); - const queryClient = useQueryClient(); - const panelRole = getPanelRole(user); - const isOwner = panelRole === "owner"; - </div> - <Button
Added / After Commit
+ diff --git a/src/routes/transfer.tsx b/src/routes/transfer.tsx + index 900b345..dd93b4f 100644 + TransferListUser, + } from "@/services/api/internalTypes"; + import type { CsvColumn } from "@/utils/csv/types"; + + export const Route = createFileRoute("/transfer")({ + component: TransferPage, + + function TransferPage() { + const { user } = useAuth(); + const queryClient = useQueryClient(); + const panelRole = getPanelRole(user); + const isOwner = panelRole === "owner"; + </div> + <Button + className="h-9 rounded-lg gradient-plum text-white hover:opacity-90 gap-1.5 px-6 shadow-plum" + onClick={() => transferQuery.refetch()}
Removed / Before Commit
- diff --git a/src/routes/user-details.$userId.tsx b/src/routes/user-details.$userId.tsx - index b5c02fc..1985931 100644 - }); - - // const handleRefresh = () => { - // if (!isRefreshEnabled) return; - // if (activeTab === "activity") refetchActivity(); - // else if (activeTab === "balance") refetchBalance(); - // else if (activeTab === "betlist") refetchBetList(); - {/* {activeTab !== "net-exposure" && ( - <Button - onClick={handleRefresh} - disabled={!isRefreshEnabled || isCurrentTabFetching} - className="ml-auto h-9 rounded-lg gradient-plum text-white px-4 shadow-plum hover:opacity-90" - > - <RefreshCw className={cn("mr-2 h-4 w-4", isCurrentTabFetching && "animate-spin")} /> - {/* <Button - className="ml-auto h-9 rounded-lg gradient-plum text-white hover:opacity-90 px-6 shadow-plum"
Added / After Commit
+ diff --git a/src/routes/user-details.$userId.tsx b/src/routes/user-details.$userId.tsx + index b5c02fc..1985931 100644 + }); + + // const handleRefresh = () => { + // if (activeTab === "activity") refetchActivity(); + // else if (activeTab === "balance") refetchBalance(); + // else if (activeTab === "betlist") refetchBetList(); + {/* {activeTab !== "net-exposure" && ( + <Button + onClick={handleRefresh} + disabled={isCurrentTabFetching} + className="ml-auto h-9 rounded-lg gradient-plum text-white px-4 shadow-plum hover:opacity-90" + > + <RefreshCw className={cn("mr-2 h-4 w-4", isCurrentTabFetching && "animate-spin")} /> + {/* <Button + className="ml-auto h-9 rounded-lg gradient-plum text-white hover:opacity-90 px-6 shadow-plum" + onClick={() => refetch()}
Removed / Before Commit
- diff --git a/src/routes/user-exposure-detail.tsx b/src/routes/user-exposure-detail.tsx - index c9e489c..39024d6 100644 - // }, [isRefreshEnabled, refreshCountdown]); - - // const handleManualRefresh = () => { - // if (!isRefreshEnabled) return; - // refetchAll(); - // setRefreshCountdown(10); - // }; - size="sm" - className="ml-auto h-8 rounded-md bg-emerald-600 px-4 text-white hover:bg-emerald-700" - onClick={handleManualRefresh} - disabled={!isRefreshEnabled || isFetching} - > - <RefreshCw className={cn("mr-2 h-3.5 w-3.5", isFetching && "animate-spin")} /> - Refresh ({refreshCountdown}s)
Added / After Commit
+ diff --git a/src/routes/user-exposure-detail.tsx b/src/routes/user-exposure-detail.tsx + index c9e489c..39024d6 100644 + // }, [isRefreshEnabled, refreshCountdown]); + + // const handleManualRefresh = () => { + // refetchAll(); + // setRefreshCountdown(10); + // }; + size="sm" + className="ml-auto h-8 rounded-md bg-emerald-600 px-4 text-white hover:bg-emerald-700" + onClick={handleManualRefresh} + disabled={isFetching} + > + <RefreshCw className={cn("mr-2 h-3.5 w-3.5", isFetching && "animate-spin")} /> + Refresh ({refreshCountdown}s)
Removed / Before Commit
- diff --git a/src/routes/user-listing.tsx b/src/routes/user-listing.tsx - index 4bfc704..2b8a7d1 100644 - import CsvExportButton from "@/components/common/CsvExportButton"; - import type { CsvColumn } from "@/utils/csv/types"; - import { cn } from "@/lib/utils"; - import { useRefreshToggle } from "@/hooks/useRefreshToggle"; - - const statusFilterValues = ["ACTIVE", "INACTIVE", "CLOSED"] as const; - type StatusFilter = (typeof statusFilterValues)[number]; - const navigate = useNavigate({ from: "/user-listing" }); - const { status: statusParam } = Route.useSearch(); - const { permissions, refreshPermissions, user } = useAuth(); - const { isRefreshEnabled } = useRefreshToggle(); - const panelRole = getPanelRole(user); - const hasFullAccess = panelRole === "owner"; - const creatableRoles = getCreatableRoles(panelRole); - const totalPages = Math.max(1, Math.ceil(filteredUsers.length / pageSize)); -
Added / After Commit
+ diff --git a/src/routes/user-listing.tsx b/src/routes/user-listing.tsx + index 4bfc704..2b8a7d1 100644 + import CsvExportButton from "@/components/common/CsvExportButton"; + import type { CsvColumn } from "@/utils/csv/types"; + import { cn } from "@/lib/utils"; + + const statusFilterValues = ["ACTIVE", "INACTIVE", "CLOSED"] as const; + type StatusFilter = (typeof statusFilterValues)[number]; + const navigate = useNavigate({ from: "/user-listing" }); + const { status: statusParam } = Route.useSearch(); + const { permissions, refreshPermissions, user } = useAuth(); + const panelRole = getPanelRole(user); + const hasFullAccess = panelRole === "owner"; + const creatableRoles = getCreatableRoles(panelRole); + const totalPages = Math.max(1, Math.ceil(filteredUsers.length / pageSize)); + + const handleRefreshUsers = async () => { + setIsRefreshSpinning(true);