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