Skip to content

Commit 6b50c79

Browse files
quanruclaude
andauthored
fix(report): allow displaying both error and elements simultaneously (#1321)
Previously, when elements existed, errors were not displayed due to an if-else structure. This fix separates error handling from element rendering, allowing both to be shown together when they coexist. Changes: - Extract error content preparation into separate logic - Combine error and elements rendering when both exist - Display error above elements list for better visibility 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude <noreply@anthropic.com>
1 parent 7a8e048 commit 6b50c79

1 file changed

Lines changed: 49 additions & 33 deletions

File tree

  • apps/report/src/components/detail-side

‎apps/report/src/components/detail-side/index.tsx‎

Lines changed: 49 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -335,8 +335,48 @@ const DetailSide = (): JSX.Element => {
335335

336336
let outputDataContent = null;
337337
const plans = (task as ExecutionTaskPlanning)?.output?.actions;
338+
339+
// Prepare error content separately (can coexist with elements)
340+
let errorContent: JSX.Element | null = null;
341+
if (task?.error || task?.errorMessage) {
342+
let errorText = '';
343+
344+
// prefer errorMessage
345+
if (task.errorMessage) {
346+
errorText = task.errorMessage;
347+
} else if (task.error) {
348+
// if no errorMessage, try to show error object
349+
if (typeof task.error === 'string') {
350+
errorText = task.error;
351+
} else if (typeof task.error === 'object' && task.error.message) {
352+
errorText = task.error.message;
353+
} else {
354+
errorText = JSON.stringify(task.error, null, 2) || 'Unknown error';
355+
}
356+
}
357+
358+
// add stack info (if exists and not duplicate)
359+
if (task.errorStack && !errorText.includes(task.errorStack)) {
360+
errorText += `\n\nStack:\n${task.errorStack}`;
361+
}
362+
363+
errorContent = (
364+
<Card
365+
liteMode={true}
366+
title="Error"
367+
onMouseEnter={noop}
368+
onMouseLeave={noop}
369+
content={
370+
<pre className="description-content" style={{ color: '#F00' }}>
371+
{errorText}
372+
</pre>
373+
}
374+
/>
375+
);
376+
}
377+
338378
if (elements?.length) {
339-
outputDataContent = elements.map((element, idx) => {
379+
const elementsContent = elements.map((element, idx) => {
340380
const ifHighlight = false; // highlightElements.includes(element);
341381
const highlightColor = ifHighlight
342382
? highlightColorForType('element')
@@ -363,41 +403,17 @@ const DetailSide = (): JSX.Element => {
363403
/>
364404
);
365405
});
366-
} else if (task?.error || task?.errorMessage) {
367-
let errorContent = '';
368-
369-
// prefer errorMessage
370-
if (task.errorMessage) {
371-
errorContent = task.errorMessage;
372-
} else if (task.error) {
373-
// if no errorMessage, try to show error object
374-
if (typeof task.error === 'string') {
375-
errorContent = task.error;
376-
} else if (typeof task.error === 'object' && task.error.message) {
377-
errorContent = task.error.message;
378-
} else {
379-
errorContent = JSON.stringify(task.error, null, 2) || 'Unknown error';
380-
}
381-
}
382-
383-
// add stack info (if exists and not duplicate)
384-
if (task.errorStack && !errorContent.includes(task.errorStack)) {
385-
errorContent += `\n\nStack:\n${task.errorStack}`;
386-
}
387406

407+
// Combine elements with error if both exist
388408
outputDataContent = (
389-
<Card
390-
liteMode={true}
391-
title="Error"
392-
onMouseEnter={noop}
393-
onMouseLeave={noop}
394-
content={
395-
<pre className="description-content" style={{ color: '#F00' }}>
396-
{errorContent}
397-
</pre>
398-
}
399-
/>
409+
<>
410+
{errorContent}
411+
{elementsContent}
412+
</>
400413
);
414+
} else if (errorContent) {
415+
// Only error, no elements
416+
outputDataContent = errorContent;
401417
} else if (task?.type === 'Insight' && task.subType === 'Assert') {
402418
const assertTask = task as ExecutionTaskInsightAssertion;
403419
const thought = assertTask.thought;

0 commit comments

Comments
 (0)