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:
@@ -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)}
|
||||||
|
|||||||
Reference in New Issue
Block a user