Showing AI reviews for super-admin
Project AI Score ?
72%
Quality Avg ?
77%
Security Avg ?
64%
Reviews ?
91

Review Result ?

solutionbowl/super-admin · cd1a9573
This commit adds disabled states and onClick handlers to various UI elements to manage fetch state more effectively. It improves UX by preventing multiple requests during active fetching. The changes show sensible handling of fetching states across multiple routes, contributing to robustness.
Quality ?
85%
Security ?
80%
Business Value ?
75%
Maintainability ?
83%
Issues & Suggested Fixes ?
1AI detects the issue
2Shows file, line, or evidence
3Suggests the fix to apply
Unclear Description
Where commit message
Issue / Evidence unclear description
Suggested Fix provide a clear, descriptive commit message explaining the purpose and impact of changes for better traceability
Magic Boolean 'Force' Parameter In Refresh...
Where src/routes/pl-by-agent.tsx:77
Issue / Evidence magic boolean 'force' parameter in refreshAppliedReport
Suggested Fix add a comment explaining 'force' usage or refactor for clarity to improve code maintainability
Direct Call To Refreshappliedreport(True)...
Where src/routes/pl-by-agent.tsx:104
Issue / Evidence direct call to refreshAppliedReport(true) without context
Suggested Fix consider adding comments or extracting logic to improve readability
Isfetching Disabling Without Context
Where src/routes/user-details.$userId.tsx:1807
Issue / Evidence isFetching disabling without context
Suggested Fix verify disabling does not hinder important UI state changes or add comments to explain
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);