| import { useState } from 'react'; |
| import { useRecoilValue } from 'recoil'; |
| import { useProgress, useLocalize } from '~/hooks'; |
| import ProgressText from './ProgressText'; |
| import MarkdownLite from './MarkdownLite'; |
| import store from '~/store'; |
|
|
| export default function CodeAnalyze({ |
| initialProgress = 0.1, |
| code, |
| outputs = [], |
| }: { |
| initialProgress: number; |
| code: string; |
| outputs: Record<string, unknown>[]; |
| }) { |
| const localize = useLocalize(); |
| const progress = useProgress(initialProgress); |
| const showAnalysisCode = useRecoilValue(store.showCode); |
| const [showCode, setShowCode] = useState(showAnalysisCode); |
|
|
| const logs = outputs.reduce((acc, output) => { |
| if (output['logs']) { |
| return acc + output['logs'] + '\n'; |
| } |
| return acc; |
| }, ''); |
|
|
| return ( |
| <> |
| <div className="my-2.5 flex items-center gap-2.5"> |
| <ProgressText |
| progress={progress} |
| onClick={() => setShowCode((prev) => !prev)} |
| inProgressText={localize('com_ui_analyzing')} |
| finishedText={localize('com_ui_analyzing_finished')} |
| hasInput={!!code.length} |
| isExpanded={showCode} |
| /> |
| </div> |
| {showCode && ( |
| <div className="code-analyze-block mb-3 mt-0.5 overflow-hidden rounded-xl bg-black"> |
| <MarkdownLite content={code ? `\`\`\`python\n${code}\n\`\`\`` : ''} /> |
| {logs && ( |
| <div className="bg-gray-700 p-4 text-xs"> |
| <div className="mb-1 text-gray-400">{localize('com_ui_result')}</div> |
| <div |
| className="prose flex flex-col-reverse text-white" |
| style={{ |
| color: 'white', |
| }} |
| > |
| <pre className="shrink-0">{logs}</pre> |
| </div> |
| </div> |
| )} |
| </div> |
| )} |
| </> |
| ); |
| } |
|
|