|
|
|
@@ -23,7 +23,14 @@ const OutputPanel: FC<OutputPanelProps> = ({ |
|
|
|
height, |
|
|
|
}) => { |
|
|
|
const isTextOutput = useMemo(() => { |
|
|
|
return outputs && Object.keys(outputs).length === 1 && typeof outputs[Object.keys(outputs)[0]] === 'string' |
|
|
|
if (!outputs || typeof outputs !== 'object') |
|
|
|
return false |
|
|
|
const keys = Object.keys(outputs) |
|
|
|
const value = outputs[keys[0]] |
|
|
|
return keys.length === 1 && ( |
|
|
|
typeof value === 'string' |
|
|
|
|| (Array.isArray(value) && value.every(item => typeof item === 'string')) |
|
|
|
) |
|
|
|
}, [outputs]) |
|
|
|
|
|
|
|
const fileList = useMemo(() => { |
|
|
|
@@ -65,7 +72,13 @@ const OutputPanel: FC<OutputPanelProps> = ({ |
|
|
|
)} |
|
|
|
{isTextOutput && ( |
|
|
|
<div className='px-4 py-2'> |
|
|
|
<Markdown content={outputs[Object.keys(outputs)[0]] || ''} /> |
|
|
|
<Markdown |
|
|
|
content={ |
|
|
|
Array.isArray(outputs[Object.keys(outputs)[0]]) |
|
|
|
? outputs[Object.keys(outputs)[0]].join('\n') |
|
|
|
: (outputs[Object.keys(outputs)[0]] || '') |
|
|
|
} |
|
|
|
/> |
|
|
|
</div> |
|
|
|
)} |
|
|
|
{fileList.length > 0 && ( |
|
|
|
@@ -78,14 +91,14 @@ const OutputPanel: FC<OutputPanelProps> = ({ |
|
|
|
/> |
|
|
|
</div> |
|
|
|
)} |
|
|
|
{outputs && Object.keys(outputs).length > 1 && height! > 0 && ( |
|
|
|
{!isTextOutput && outputs && Object.keys(outputs).length > 0 && height! > 0 && ( |
|
|
|
<div className='flex flex-col gap-2'> |
|
|
|
<CodeEditor |
|
|
|
showFileList |
|
|
|
readOnly |
|
|
|
title={<div></div>} |
|
|
|
title={<div tabIndex={0}>Output</div>} |
|
|
|
language={CodeLanguage.json} |
|
|
|
value={outputs} |
|
|
|
value={JSON.stringify(outputs, null, 2)} |
|
|
|
isJSONStringifyBeauty |
|
|
|
height={height ? (height - 16) / 2 : undefined} |
|
|
|
/> |