Showing AI reviews for crm-dashbaord
Project AI Score ?
73%
Quality Avg ?
74%
Security Avg ?
74%
Reviews ?
130

Review Result ?

solutionbowl/crm-dashbaord · 34ad8622
The commit adds functionality to toggle visibility of Back and Lay static volume data on AdminRacepage and AdminMarketPage components using checkbox inputs and state hooks. The implementation uses Sets to track hidden markets, with callbacks to toggle membership. This improves user customization and UI clarity without notable bug risk or security issues. However, code repetition occurs across two similar pages and some inline styles could be extracted.
Quality ?
85%
Security ?
80%
Business Value ?
75%
Maintainability ?
88%
Issues & Suggested Fixes ?
1AI detects the issue
2Shows file, line, or evidence
3Suggests the fix to apply
Duplicate Logic
Where src/modules/horse/pages/Race/AdminRacepage.tsx:456-576
Issue / Evidence Repeated state and toggle logic
Suggested Fix extract reuseable hook or utility to reduce duplication and improve maintainability
Duplicate Logic
Where src/pages/Platforms/AdminMarketPage.tsx:556-728
Issue / Evidence Repeated state and toggle logic
Suggested Fix extract reuseable hook or utility to reduce duplication and improve maintainability
Inline Styles And Jsx Clutter
Where src/modules/horse/pages/Race/AdminRacepage.tsx:1126-1135
Issue / Evidence Inline styles and JSX clutter
Suggested Fix extract checkbox into separate components with styles to improve readability
Inline Styles And Jsx Clutter
Where src/pages/Platforms/AdminMarketPage.tsx:1312-1321
Issue / Evidence Inline styles and JSX clutter
Suggested Fix extract checkbox into separate components with styles to improve readability
Vague And Lacks Description
Where commit message
Issue / Evidence vague and lacks description
Suggested Fix improve commit message to clearly describe what the change does, benefits provided, and scope to enhance project history clarity
Code Change Preview · src/modules/horse/pages/Race/AdminRacepage.tsx ?
Removed / Before Commit
- diff --git a/src/modules/horse/pages/Race/AdminRacepage.tsx b/src/modules/horse/pages/Race/AdminRacepage.tsx
- index 5c02dbc..00f162b 100644
- const [selectedIds,    setSelectedIds]    = useState<Set<string>>(new Set());
- const [globalStates,   setGlobalStates]   = useState<Record<string, GlobalState>>({});
- const [percentColumnMarketIds, setPercentColumnMarketIds] = useState<Set<string>>(new Set());
- 
- useEffect(() => {
- if (selectedRaceId) fetchOdds(selectedRaceId);
- });
- }, []);
- 
- const selectedMarkets = useMemo(() => {
- return markets.filter((market) => selectedIds.has(market.marketId));
- }, [markets, selectedIds]);
- const showDeadHeatToggle = isPhotoFancyMarket(market.marketType, market.marketName, market.fancy_type);
- const canTogglePercentColumns = isPlaceMarketType(market.marketType, market.marketName) && !isFancy;
- const showPercentColumns = canTogglePercentColumns && percentColumnMarketIds.has(market.marketId);
- // const statusSpacerColumnCount = (isWinner || isFancy || canTogglePercentColumns ) ? 6 : 0 ;
Added / After Commit
+ diff --git a/src/modules/horse/pages/Race/AdminRacepage.tsx b/src/modules/horse/pages/Race/AdminRacepage.tsx
+ index 5c02dbc..00f162b 100644
+ const [selectedIds,    setSelectedIds]    = useState<Set<string>>(new Set());
+ const [globalStates,   setGlobalStates]   = useState<Record<string, GlobalState>>({});
+ const [percentColumnMarketIds, setPercentColumnMarketIds] = useState<Set<string>>(new Set());
+   const [hideBackStaticVolMarketIds, setHideBackStaticVolMarketIds] = useState<Set<string>>(new Set());
+   const [hideLayStaticVolMarketIds,  setHideLayStaticVolMarketIds]  = useState<Set<string>>(new Set());
+ 
+ useEffect(() => {
+ if (selectedRaceId) fetchOdds(selectedRaceId);
+ });
+ }, []);
+ 
+   const toggleBackStaticVol = useCallback((marketId: string, value: boolean) => {
+     setHideBackStaticVolMarketIds(prev => {
+       const next = new Set(prev);
+       if (!value) next.add(marketId); // checkbox unchecked = hide
+       else next.delete(marketId);
Removed / Before Commit
- diff --git a/src/pages/Platforms/AdminMarketPage.tsx b/src/pages/Platforms/AdminMarketPage.tsx
- index dcd55ae..481c861 100644
- const [selectedIds,    setSelectedIds]    = useState<Set<string>>(new Set());
- const [globalStates,   setGlobalStates]   = useState<Record<string, GlobalState>>({});
- const [percentColumnMarketIds, setPercentColumnMarketIds] = useState<Set<string>>(new Set());
- const [confirmedWithdrawnRunnerKeys, setConfirmedWithdrawnRunnerKeys] = useState<Set<string>>(new Set());
- const assignedRacesLoadedRef = useRef(false);
- const permissionsKey = permissions.join(",");
- });
- }, []);
- 
- const selectedMarkets = useMemo(() => {
- return markets.filter((market) => selectedIds.has(market.marketId));
- }, [markets, selectedIds]);
- const showDeadHeatToggle = isPhotoFancyMarket(market.marketType, market.marketName, market.fancy_type);
- const canTogglePercentColumns = isPlaceMarketType(market.marketType, market.marketName) && !isFancy;
- const showPercentColumns = canTogglePercentColumns && percentColumnMarketIds.has(market.marketId);
- // const statusSpacerColumnCount = (isWinner || isFancy || canTogglePercentColumns) ? 6 : 0;
Added / After Commit
+ diff --git a/src/pages/Platforms/AdminMarketPage.tsx b/src/pages/Platforms/AdminMarketPage.tsx
+ index dcd55ae..481c861 100644
+ const [selectedIds,    setSelectedIds]    = useState<Set<string>>(new Set());
+ const [globalStates,   setGlobalStates]   = useState<Record<string, GlobalState>>({});
+ const [percentColumnMarketIds, setPercentColumnMarketIds] = useState<Set<string>>(new Set());
+   const [hideBackStaticVolMarketIds, setHideBackStaticVolMarketIds] = useState<Set<string>>(new Set());
+   const [hideLayStaticVolMarketIds,  setHideLayStaticVolMarketIds]  = useState<Set<string>>(new Set());
+ const [confirmedWithdrawnRunnerKeys, setConfirmedWithdrawnRunnerKeys] = useState<Set<string>>(new Set());
+ const assignedRacesLoadedRef = useRef(false);
+ const permissionsKey = permissions.join(",");
+ });
+ }, []);
+ 
+   const toggleBackStaticVol = useCallback((marketId: string, value: boolean) => {
+     setHideBackStaticVolMarketIds(prev => {
+       const next = new Set(prev);
+       if (!value) next.add(marketId); // checkbox unchecked = hide
+       else next.delete(marketId);