Showing AI reviews for website
Project AI Score ?
71%
Quality Avg ?
72%
Security Avg ?
74%
Reviews ?
123

Review Result ?

solutionbowl/website · 8bb4fedc
The commit introduces conditional rendering updates for photo fancy markets involving dead_heat logic, filtering out 'Dead Heat' runners appropriately. Type definitions and UI components handle the new deadHeat flag and market active status, improving market display logic. The implementation appears consistent and well-scoped but lacks comments and testing evidence. The commit message is brief and vague.
Quality ?
85%
Security ?
80%
Business Value ?
75%
Maintainability ?
85%
Issues & Suggested Fixes ?
1AI detects the issue
2Shows file, line, or evidence
3Suggests the fix to apply
Issue
Where commit message
Issue / Evidence issue
Suggested Fix improve commit message to describe purpose and impact of changes for better tracking
Inconsistent Optional Chaining And Propert...
Where src/components/racing/BettingPanel.tsx:582
Issue / Evidence inconsistent optional chaining and property casing (fancy_type vs fancyType)
Suggested Fix standardize property access to reduce bugs
Filtering String Constants Like 'Dead Heat...
Where src/components/racing/BettingPanel.tsx:588
Issue / Evidence filtering string constants like 'dead heat'
Suggested Fix extract to a constant to avoid typos and facilitate reuse
Duplicate Logic
Where src/components/racing/HorseRow.tsx:104
Issue / Evidence complex boolean expressions repeated for isDeadHeatRow and market type detection
Suggested Fix add comments explaining conditions for maintainability
Explicit Style Strings
Where src/components/racing/HorseRow.tsx:414
Issue / Evidence explicit style strings
Suggested Fix consider extracting style classes into constants or CSS modules for clarity and consistency
Property Casing And Checks For Fancy Type...
Where src/components/racing/MarketCard.tsx:397
Issue / Evidence property casing and checks for fancy_type and fancyType
Suggested Fix unify these checks to avoid mismatch bugs
Check For Is Active Flag
Where src/pages/HorseRacingDetails.tsx:103
Issue / Evidence check for is_active flag
Suggested Fix add explicit comment or unit test to confirm behavior under different market active states
Optional Is Active And Dead Heat Props Add...
Where src/types/raceMarkets.ts:44
Issue / Evidence optional is_active and dead_heat props added to types
Suggested Fix ensure code consuming these handles undefined appropriately and add type documentation
Code Change Preview · src/components/racing/BettingPanel.tsx ?
Removed / Before Commit
- diff --git a/src/components/racing/BettingPanel.tsx b/src/components/racing/BettingPanel.tsx
- index 72436f1..d5a38cb 100644
- </div>
- 
- {filteredRunners && filteredRunners.length > 0 ? (
-               filteredRunners.map((runner, index) => {
-                 const runnerId = getRunnerId(runner, index)
-                 const blockBetKey = getBlockBetKey(
-                   runnerId,
-                   activeMarket
-                 )
- 
-                 return (
-                   <HorseRow
-                     key={
-                       runner.runner?.runnerId ||
-                       runner.runnerId ||
-                       index
Added / After Commit
+ diff --git a/src/components/racing/BettingPanel.tsx b/src/components/racing/BettingPanel.tsx
+ index 72436f1..d5a38cb 100644
+ </div>
+ 
+ {filteredRunners && filteredRunners.length > 0 ? (
+               (() => {
+                 const isPhotoFancyMarket =
+                   (selectedMarket?.fancy_type || selectedMarket?.fancyType)?.trim().toLowerCase() === 'photo' ||
+                   selectedMarket?.marketType?.trim().toUpperCase() === 'PHOTO OF'
+                 const deadHeatActive = isPhotoFancyMarket && selectedMarket?.dead_heat === true
+ 
+                 // If dead_heat is false, filter out the runner whose name is "Dead Heat"
+                 const visibleRunners = isPhotoFancyMarket && !deadHeatActive
+                   ? filteredRunners.filter(r => (r.runner?.name || r.name || '').trim().toLowerCase() !== 'dead heat')
+                   : filteredRunners
+ 
+                 return visibleRunners.map((runner, index) => {
+                   const runnerId = getRunnerId(runner, index)
Removed / Before Commit
- diff --git a/src/components/racing/HorseRow.tsx b/src/components/racing/HorseRow.tsx
- index 54d199d..d74b091 100644
- blockBetStake?: string
- onBlockBetToggle?: () => void
- onBlockBetStakeChange?: (value: string) => void
- }
- 
- const BACK_ODDS_BUTTON_CLASS = "bg-[#4a90c4] hover:bg-[#3d7aa8]"
- blockBetChecked = false,
- blockBetStake = "",
- onBlockBetToggle,
-   onBlockBetStakeChange
- }: HorseRowProps) => {
- 
- const { isAuthenticated } = useAuth()
- const isFancyMarket =
- !isPhotoFancyMarket && (marketNameLower.includes('fancy') || normalizedMarketType === 'FANCY')
- const isWinStyleMarket = isWinnerMarket || isFancyMarket || isPhotoMarket
Added / After Commit
+ diff --git a/src/components/racing/HorseRow.tsx b/src/components/racing/HorseRow.tsx
+ index 54d199d..d74b091 100644
+ blockBetStake?: string
+ onBlockBetToggle?: () => void
+ onBlockBetStakeChange?: (value: string) => void
+   /** When true, renders this row as a Dead Heat entry — hides horse number, gate, jockey, trainer */
+   isDeadHeatRow?: boolean
+ }
+ 
+ const BACK_ODDS_BUTTON_CLASS = "bg-[#4a90c4] hover:bg-[#3d7aa8]"
+ blockBetChecked = false,
+ blockBetStake = "",
+ onBlockBetToggle,
+   onBlockBetStakeChange,
+   isDeadHeatRow = false,
+ }: HorseRowProps) => {
+ 
+ const { isAuthenticated } = useAuth()
Removed / Before Commit
- diff --git a/src/components/racing/MarketCard.tsx b/src/components/racing/MarketCard.tsx
- index c95c068..c41e7d2 100644
- </div>
- 
- {market.odds.length > 0 ? (
-                 market.odds.map((runner, index) => {
-                   const runnerId = getRunnerId(runner, index)
-                   const blockBetKey = getBlockBetKey(runnerId, market.marketId)
- 
-                   return (
-                     <HorseRow
-                       key={runner.runner?.runnerId || runner.runnerId || index}
-                       runner={runner}
-                       index={index}
-                       raceId={raceId}
-                       marketId={market.marketId}
-                       raceType={raceType}
-                       marketType={market.marketType}
Added / After Commit
+ diff --git a/src/components/racing/MarketCard.tsx b/src/components/racing/MarketCard.tsx
+ index c95c068..c41e7d2 100644
+ </div>
+ 
+ {market.odds.length > 0 ? (
+                 (() => {
+                   const isPhotoFancyMarket =
+                     (market.fancy_type || market.fancyType)?.trim().toLowerCase() === 'photo' ||
+                     market.marketType?.trim().toUpperCase() === 'PHOTO OF'
+                   const deadHeatActive = isPhotoFancyMarket && market.dead_heat === true
+ 
+                   // If dead_heat is false, filter out the runner whose name is "Dead Heat"
+                   const visibleOdds = isPhotoFancyMarket && !deadHeatActive
+                     ? market.odds.filter(r => (r.runner?.name || r.name || '').trim().toLowerCase() !== 'dead heat')
+                     : market.odds
+ 
+                   return visibleOdds.map((runner, index) => {
+                     const runnerId = getRunnerId(runner, index)
Removed / Before Commit
- diff --git a/src/pages/HorseRacingDetails.tsx b/src/pages/HorseRacingDetails.tsx
- index 1a7a731..dc80810 100644
- return marketsData.filter(market => {
- const marketNameLower = (market.marketName || "").toLowerCase()
- 
- if (isMarketSettled(market.settle)) {
- return false
- }
Added / After Commit
+ diff --git a/src/pages/HorseRacingDetails.tsx b/src/pages/HorseRacingDetails.tsx
+ index 1a7a731..dc80810 100644
+ return marketsData.filter(market => {
+ const marketNameLower = (market.marketName || "").toLowerCase()
+ 
+     // Hide market if is_active is explicitly false
+     if (market.is_active === false) {
+       return false
+     }
+ 
+ if (isMarketSettled(market.settle)) {
+ return false
+ }
Removed / Before Commit
- diff --git a/src/types/raceMarkets.ts b/src/types/raceMarkets.ts
- index a22b63f..09c5a39 100644
- odds: RunnerOdds[],
- marketOddsType: string
- settle?: boolean | string
- }
Added / After Commit
+ diff --git a/src/types/raceMarkets.ts b/src/types/raceMarkets.ts
+ index a22b63f..09c5a39 100644
+ odds: RunnerOdds[],
+ marketOddsType: string
+ settle?: boolean | string
+   is_active?: boolean
+   dead_heat?: boolean
+ }