Showing AI reviews for super-admin
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);