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 · 6139db71
This commit adds a reusable dual-calendar date range picker component and integrates it into a MultiBet route. The code is well-structured, uses proper React hooks, and has several configurable props, allowing flexibility. The date range logic includes reasonable validation for the input range. Overall, it provides valuable business functionality and appears secure with minimal risk of bugs or security issues.
Quality
?
85%
Security
?
90%
Business Value
?
90%
Maintainability
?
85%
Issues & Suggested Fixes
?
1AI detects the issue
2Shows file, line, or evidence
3Suggests the fix to apply
Useeffect Dependencies And Early Returns
Where
src/components/common/DateRangePicker.tsx:43
Issue / Evidence
useEffect dependencies and early returns
Suggested Fix
review logic to ensure consistent updates when props change to prevent potential stale state
Redundant Onfrommonthchange Call
Where
src/components/common/DateRangePicker.tsx:54
Issue / Evidence
redundant onFromMonthChange call
Suggested Fix
consider only calling onFromMonthChange once after state update to reduce unnecessary calls
Redundant Ontomonthchange Call
Where
src/components/common/DateRangePicker.tsx:63
Issue / Evidence
redundant onToMonthChange call
Suggested Fix
same as above, reduce redundant callback calls
Missing Validation
Where
src/routes/MultiBet.tsx:53
Issue / Evidence
user input validation error handling
Suggested Fix
enhance user feedback by possibly disabling applying filter if dates are invalid rather than just toast error
Low Descriptiveness
Where
commit message
Issue / Evidence
low descriptiveness
Suggested Fix
improve message to describe added functionality and key changes for better traceability
Code Change Preview · src/components/common/DateRangePicker.tsx
?
Removed / Before Commit
- diff --git a/src/components/common/DateRangePicker.tsx b/src/components/common/DateRangePicker.tsx - new file mode 100644 - index 0000000..7375ec5
Added / After Commit
+ diff --git a/src/components/common/DateRangePicker.tsx b/src/components/common/DateRangePicker.tsx + new file mode 100644 + index 0000000..7375ec5 + import { format } from "date-fns"; + import { ChevronLeft, ChevronRight, Calendar as CalendarIcon } from "lucide-react"; + import { useEffect, useState } from "react"; + import type { DateRange } from "react-day-picker"; + import { Calendar } from "@/components/ui/calendar"; + import { Button } from "@/components/ui/button"; + import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; + + type Props = { + dateRange?: DateRange; + /** Defaults to today if omitted */ + today?: Date; + fromMonth?: Date; + toMonth?: Date; + onDateRangeChange: (value?: DateRange) => void;
Removed / Before Commit
- diff --git a/src/components/ui/Date.tsx b/src/components/ui/Date.tsx - new file mode 100644 - index 0000000..e69de29
Added / After Commit
+ diff --git a/src/components/ui/Date.tsx b/src/components/ui/Date.tsx + new file mode 100644 + index 0000000..e69de29
Removed / Before Commit
- diff --git a/src/routes/bet-list.tsx b/src/routes/bet-list.tsx - index fa0b5dc..b66077b 100644 - import { createFileRoute, useNavigate } from "@tanstack/react-router"; - import { useQuery } from "@tanstack/react-query"; - import TablePagination from "@/components/common/TablePagination"; - import { format } from "date-fns"; - import { Calendar as CalendarIcon, Download, Eye } from "lucide-react"; - import { useMemo, useState } from "react"; - import type { DateRange } from "react-day-picker"; - import { Button } from "@/components/ui/button"; - import { Input } from "@/components/ui/input"; - import { Calendar } from "@/components/ui/calendar"; - import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; - import { - Select, - SelectContent, - export const Route = createFileRoute("/bet-list")({ - component: BetListPage,
Added / After Commit
+ diff --git a/src/routes/bet-list.tsx b/src/routes/bet-list.tsx + index fa0b5dc..b66077b 100644 + import { createFileRoute, useNavigate, useSearch } from "@tanstack/react-router"; + import { useQuery } from "@tanstack/react-query"; + import TablePagination from "@/components/common/TablePagination"; + import { format } from "date-fns"; + import { Download, Eye } from "lucide-react"; + import DateRangePicker from "@/components/common/DateRangePicker"; + import { useMemo, useState } from "react"; + import type { DateRange } from "react-day-picker"; + import { Button } from "@/components/ui/button"; + import { Input } from "@/components/ui/input"; + import { + Select, + SelectContent, + export const Route = createFileRoute("/bet-list")({ + component: BetListPage, + head: () => ({ meta: [{ title: "Bets List - B2B-B2C Panel" }] }),
Removed / Before Commit
- diff --git a/src/routes/bet-ticket.tsx b/src/routes/bet-ticket.tsx - index 7960796..92d6c0e 100644 - maxStake: 1000, - userName: "", - page: 1, - limit: 50, - }; - - function BetTicketPage() {
Added / After Commit
+ diff --git a/src/routes/bet-ticket.tsx b/src/routes/bet-ticket.tsx + index 7960796..92d6c0e 100644 + maxStake: 1000, + userName: "", + page: 1, + limit: 10, + }; + + function BetTicketPage() {
Removed / Before Commit
- diff --git a/src/routes/MultiBet.tsx b/src/routes/MultiBet.tsx - index a421c48..0d4c78e 100644 - import { createFileRoute } from "@tanstack/react-router"; - import { useQuery } from "@tanstack/react-query"; - import { useState } from "react"; - import TablePagination from "@/components/common/TablePagination"; - import { ChevronDown, ChevronUp, Download } from "lucide-react"; - import { toast } from "sonner"; - import { Button } from "@/components/ui/button"; - head: () => ({ meta: [{ title: "Multi Bet P&L - B2B-B2C Panel" }] }), - }); - - const today = new Date().toISOString().split("T")[0]; - const defaultFilters = { fromDate: today, toDate: today }; - - type DateRow = MultiBetProfitLossReport["dates"][number]; - type Bet = DateRow["bets"][number]; -
Added / After Commit
+ diff --git a/src/routes/MultiBet.tsx b/src/routes/MultiBet.tsx + index a421c48..0d4c78e 100644 + import { createFileRoute } from "@tanstack/react-router"; + import { useQuery } from "@tanstack/react-query"; + import { useState } from "react"; + import { format } from "date-fns"; + import type { DateRange } from "react-day-picker"; + import TablePagination from "@/components/common/TablePagination"; + import DateRangePicker from "@/components/common/DateRangePicker"; + import { ChevronDown, ChevronUp, Download } from "lucide-react"; + import { toast } from "sonner"; + import { Button } from "@/components/ui/button"; + head: () => ({ meta: [{ title: "Multi Bet P&L - B2B-B2C Panel" }] }), + }); + + const todayStr = new Date().toISOString().split("T")[0]; + const defaultFilters = { fromDate: todayStr, toDate: todayStr }; +
Removed / Before Commit
- diff --git a/src/routes/pl-by-agent.tsx b/src/routes/pl-by-agent.tsx - index 01edc59..80a51e0 100644 - import { useQuery } from "@tanstack/react-query"; - import { useMemo, useState } from "react"; - import { motion } from "motion/react"; - import { Calendar as CalendarIcon, Download } from "lucide-react"; - import { toast } from "sonner"; - import { Card } from "@/components/ui/card"; - import { Button } from "@/components/ui/button"; - import { Calendar } from "@/components/ui/calendar"; - import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; - import { - Table, - TableBody, - }; - - function PLByAgentPage() { - const [fromDate, setFromDate] = useState(defaultFilters.fromDate);
Added / After Commit
+ diff --git a/src/routes/pl-by-agent.tsx b/src/routes/pl-by-agent.tsx + index 01edc59..80a51e0 100644 + import { useQuery } from "@tanstack/react-query"; + import { useMemo, useState } from "react"; + import { motion } from "motion/react"; + import { format } from "date-fns"; + import { Download } from "lucide-react"; + import { toast } from "sonner"; + import type { DateRange } from "react-day-picker"; + import { Card } from "@/components/ui/card"; + import { Button } from "@/components/ui/button"; + import DateRangePicker from "@/components/common/DateRangePicker"; + import { + Table, + TableBody, + }; + + function PLByAgentPage() {
Removed / Before Commit
- diff --git a/src/routes/pl-by-market.tsx b/src/routes/pl-by-market.tsx - index 5094782..fcb2884 100644 - import { useQuery } from "@tanstack/react-query"; - import { useMemo, useState } from "react"; - import { motion } from "motion/react"; - import { Calendar as CalendarIcon, Download } from "lucide-react"; - import { toast } from "sonner"; - import { Card } from "@/components/ui/card"; - import { Button } from "@/components/ui/button"; - import { Calendar } from "@/components/ui/calendar"; - import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; - import { - Table, - TableBody, - }; - - function PLByMarketPage() { - const [fromDate, setFromDate] = useState(defaultFilters.fromDate);
Added / After Commit
+ diff --git a/src/routes/pl-by-market.tsx b/src/routes/pl-by-market.tsx + index 5094782..fcb2884 100644 + import { useQuery } from "@tanstack/react-query"; + import { useMemo, useState } from "react"; + import { motion } from "motion/react"; + import { format } from "date-fns"; + import { Download } from "lucide-react"; + import { toast } from "sonner"; + import type { DateRange } from "react-day-picker"; + import { Card } from "@/components/ui/card"; + import { Button } from "@/components/ui/button"; + import DateRangePicker from "@/components/common/DateRangePicker"; + import { + Table, + TableBody, + }; + + function PLByMarketPage() {
Removed / Before Commit
- diff --git a/src/routes/statement.tsx b/src/routes/statement.tsx - index 1d66bd9..102d604 100644 - </div> - </div> - - <div className="border-b border-border/60 p-5"> - <Button - variant="default" - className="h-9 rounded-lg bg-primary text-primary-foreground hover:bg-primary/90" - > - Credit Statement - </Button> - </div> - - <div className="p-5"> - <div className="overflow-x-auto rounded-xl border border-border/60">
Added / After Commit
+ diff --git a/src/routes/statement.tsx b/src/routes/statement.tsx + index 1d66bd9..102d604 100644 + </div> + </div> + + {/* <div className="border-b border-border/60 p-5"> + <Button + variant="default" + className="h-9 rounded-lg bg-primary text-primary-foreground hover:bg-primary/90" + > + Credit Statement + </Button> + </div> */} + + <div className="p-5"> + <div className="overflow-x-auto rounded-xl border border-border/60">
Removed / Before Commit
- diff --git a/src/routes/transfer-statement.tsx b/src/routes/transfer-statement.tsx - index 86cd483..17c7804 100644 - import { createFileRoute } from "@tanstack/react-router"; - import { useEffect, useMemo, useState } from "react"; - import TablePagination from "@/components/common/TablePagination"; - import type { DateRange } from "react-day-picker"; - import { format } from "date-fns"; - import { motion } from "motion/react"; - import { authApiClient } from "@/services/api/apiClient"; - import { toast } from "sonner"; - import { - Calendar as CalendarIcon, - ChevronLeft, - ChevronRight, - Download, - RefreshCw, - } from "lucide-react"; - import { Calendar } from "@/components/ui/calendar";
Added / After Commit
+ diff --git a/src/routes/transfer-statement.tsx b/src/routes/transfer-statement.tsx + index 86cd483..17c7804 100644 + import { createFileRoute } from "@tanstack/react-router"; + import { useEffect, useMemo, useState } from "react"; + import TablePagination from "@/components/common/TablePagination"; + import DateRangePicker from "@/components/common/DateRangePicker"; + import type { DateRange } from "react-day-picker"; + import { format } from "date-fns"; + import { motion } from "motion/react"; + import { authApiClient } from "@/services/api/apiClient"; + import { toast } from "sonner"; + import { + Download, + RefreshCw, + } from "lucide-react"; + import { Card } from "@/components/ui/card"; + import { Button } from "@/components/ui/button"; + import { Input } from "@/components/ui/input";
Removed / Before Commit
- diff --git a/src/routes/user-details.$userId.tsx b/src/routes/user-details.$userId.tsx - index bb6d478..743536c 100644 - import { Input } from "@/components/ui/input"; - import { Badge } from "@/components/ui/badge"; - import TablePagination from "@/components/common/TablePagination"; - import { Fragment, useState, useMemo } from "react"; - import { - Table, - TableBody, - TableRow, - } from "@/components/ui/table"; - import { - Calendar, - Search, - Download, - // RefreshCw, - Users, - Eye,
Added / After Commit
+ diff --git a/src/routes/user-details.$userId.tsx b/src/routes/user-details.$userId.tsx + index bb6d478..743536c 100644 + import { Input } from "@/components/ui/input"; + import { Badge } from "@/components/ui/badge"; + import TablePagination from "@/components/common/TablePagination"; + import DateRangePicker from "@/components/common/DateRangePicker"; + import { Fragment, useState, useMemo } from "react"; + import type { DateRange } from "react-day-picker"; + import { + Table, + TableBody, + TableRow, + } from "@/components/ui/table"; + import { + Search, + Download, + // RefreshCw, + Users,
Removed / Before Commit
- diff --git a/src/routes/user-listing.tsx b/src/routes/user-listing.tsx - index 4b44b1c..6f7c530 100644 - "Balance", - "Net Exposure", - "Available Balance", - "Logs.", - "Last Login IP", - "Last Login", - "Credit Actions", - } - numeric - /> - <TableCell> - <Pencil className="h-4 w-4 text-primary" /> - </TableCell> - <TableCell className="whitespace-nowrap text-sm"> - <IpAddressLink - value={
Added / After Commit
+ diff --git a/src/routes/user-listing.tsx b/src/routes/user-listing.tsx + index 4b44b1c..6f7c530 100644 + "Balance", + "Net Exposure", + "Available Balance", + // "Logs.", + "Last Login IP", + "Last Login", + "Credit Actions", + } + numeric + /> + {/* <TableCell> + <Pencil className="h-4 w-4 text-primary" /> + </TableCell> */} + <TableCell className="whitespace-nowrap text-sm"> + <IpAddressLink + value={
Removed / Before Commit
- diff --git a/src/services/api/betTypes.ts b/src/services/api/betTypes.ts - index 954632a..c00742c 100644 - bet_status?: string; - fromDate?: string; - toDate?: string; - }
Added / After Commit
+ diff --git a/src/services/api/betTypes.ts b/src/services/api/betTypes.ts + index 954632a..c00742c 100644 + bet_status?: string; + fromDate?: string; + toDate?: string; + market_id?: string; + }
Removed / Before Commit
- diff --git a/src/services/api/internalServices.ts b/src/services/api/internalServices.ts - index ba41f5a..96d06b5 100644 - } from "@/services/api/internalTypes"; - import type { BetListResponse, BetListParams } from "@/services/api/betTypes"; - import type { DownlineResponse } from "@/services/api/downlineTypes"; - import type {BannerListResponse} from "@/services/api/internalTypes" - - type UnknownRecord = Record<string, unknown>; - export type DownlineRoleFilter = "super_admin" | "master" | "user"; - ), - ); - }, - async updateUser(userId: string, payload: { - password?: string; - repeatPassword?: string; - paymentThreshold?: number; - status?: string; - credit_ref?: string;
Added / After Commit
+ diff --git a/src/services/api/internalServices.ts b/src/services/api/internalServices.ts + index ba41f5a..96d06b5 100644 + } from "@/services/api/internalTypes"; + import type { BetListResponse, BetListParams } from "@/services/api/betTypes"; + import type { DownlineResponse } from "@/services/api/downlineTypes"; + import type { BannerListResponse } from "@/services/api/internalTypes"; + + type UnknownRecord = Record<string, unknown>; + export type DownlineRoleFilter = "super_admin" | "master" | "user"; + ), + ); + }, + async updateUser( + userId: string, + payload: { + password?: string; + repeatPassword?: string; + paymentThreshold?: number;
Removed / Before Commit
- diff --git a/src/services/api/internalTypes.ts b/src/services/api/internalTypes.ts - index 13f2073..074c979 100644 - - export interface ProfitLossAgentRow extends PanelRecord { - groupId?: string; - agentName?: string; - agentUsername?: string; - username?: string;
Added / After Commit
+ diff --git a/src/services/api/internalTypes.ts b/src/services/api/internalTypes.ts + index 13f2073..074c979 100644 + + export interface ProfitLossAgentRow extends PanelRecord { + groupId?: string; + agentId?: string; + agentName?: string; + agentUsername?: string; + username?: string;