Fix duplicate screenshots in batch analysis gallery

- Make screenshot galleries mutually exclusive
- Single analysis: show result.screenshots only
- Multi-timeframe/batch: show organized screenshots directly
- Use result.screenshots for batch_comparative instead of nested structure
- Prevents duplicate display of same screenshots in UI
This commit is contained in:
mindesbunister
2025-07-17 14:34:08 +02:00
parent 8688151239
commit a6d12e9cb0

View File

@@ -1461,8 +1461,8 @@ export default function AIAnalysisPanel({ onAnalysisComplete }: AIAnalysisPanelP
</div>
)}
{/* Screenshot Gallery */}
{result && result.screenshots && (
{/* Screenshot Gallery - Single Analysis Only */}
{result && result.screenshots && !(result.type === 'multi_timeframe' || result.type === 'batch_comparative') && (
<ScreenshotGallery
screenshots={result.screenshots}
symbol={symbol}
@@ -1474,45 +1474,53 @@ export default function AIAnalysisPanel({ onAnalysisComplete }: AIAnalysisPanelP
)}
{/* Multi-timeframe Screenshot Gallery */}
{result && (result.type === 'multi_timeframe' || result.type === 'batch_comparative') && result.results && (
{result && (result.type === 'multi_timeframe' || result.type === 'batch_comparative') && (
<ScreenshotGallery
screenshots={result.results
.filter((r: any) => r.success && r.result.screenshots)
.sort((a: any, b: any) => {
// Sort by timeframe order: 5m, 15m, 30m, 1h, 2h, 4h, 1D
const timeframeOrder: {[key: string]: number} = {
'5': 1, '5m': 1,
'15': 2, '15m': 2,
'30': 3, '30m': 3,
'60': 4, '1h': 4,
'120': 5, '2h': 5,
'240': 6, '4h': 6,
'D': 7, '1D': 7
}
const orderA = timeframeOrder[a.timeframe] || timeframeOrder[a.timeframeLabel] || 999
const orderB = timeframeOrder[b.timeframe] || timeframeOrder[b.timeframeLabel] || 999
return orderA - orderB
})
.flatMap((r: any) => r.result.screenshots)}
screenshots={
result.type === 'batch_comparative' && result.screenshots
? result.screenshots // Use direct screenshots array for batch analysis
: result.results // Use nested structure for legacy multi-timeframe
?.filter((r: any) => r.success && r.result.screenshots)
?.sort((a: any, b: any) => {
// Sort by timeframe order: 5m, 15m, 30m, 1h, 2h, 4h, 1D
const timeframeOrder: {[key: string]: number} = {
'5': 1, '5m': 1,
'15': 2, '15m': 2,
'30': 3, '30m': 3,
'60': 4, '1h': 4,
'120': 5, '2h': 5,
'240': 6, '4h': 6,
'D': 7, '1D': 7
}
const orderA = timeframeOrder[a.timeframe] || timeframeOrder[a.timeframeLabel] || 999
const orderB = timeframeOrder[b.timeframe] || timeframeOrder[b.timeframeLabel] || 999
return orderA - orderB
})
?.flatMap((r: any) => r.result.screenshots) || []
}
symbol={symbol}
timeframes={result.results
.filter((r: any) => r.success)
.sort((a: any, b: any) => {
// Sort by timeframe order: 5m, 15m, 30m, 1h, 2h, 4h, 1D
const timeframeOrder: {[key: string]: number} = {
'5': 1, '5m': 1,
'15': 2, '15m': 2,
'30': 3, '30m': 3,
'60': 4, '1h': 4,
'120': 5, '2h': 5,
'240': 6, '4h': 6,
'D': 7, '1D': 7
}
const orderA = timeframeOrder[a.timeframe] || timeframeOrder[a.timeframeLabel] || 999
const orderB = timeframeOrder[b.timeframe] || timeframeOrder[b.timeframeLabel] || 999
return orderA - orderB
})
.map((r: any) => r.timeframeLabel)}
timeframes={
result.type === 'batch_comparative' && result.timeframes
? result.timeframes // Use direct timeframes array for batch analysis
: result.results // Use nested structure for legacy multi-timeframe
?.filter((r: any) => r.success)
?.sort((a: any, b: any) => {
// Sort by timeframe order: 5m, 15m, 30m, 1h, 2h, 4h, 1D
const timeframeOrder: {[key: string]: number} = {
'5': 1, '5m': 1,
'15': 2, '15m': 2,
'30': 3, '30m': 3,
'60': 4, '1h': 4,
'120': 5, '2h': 5,
'240': 6, '4h': 6,
'D': 7, '1D': 7
}
const orderA = timeframeOrder[a.timeframe] || timeframeOrder[a.timeframeLabel] || 999
const orderB = timeframeOrder[b.timeframe] || timeframeOrder[b.timeframeLabel] || 999
return orderA - orderB
})
?.map((r: any) => r.timeframeLabel) || []
}
enlargedImage={enlargedScreenshot}
onImageClick={handleScreenshotClick}
onClose={() => setEnlargedScreenshot(null)}