in packages/x-flow/src/components/NodeLogPanel/components/CodePanel.tsx [15:90]
export default memo((props: any) => {
const { codeData, onFullScreenChange, isShowFullScreen = true } = props;
const [isCopy, setIsCopy] = useState(false);
const isRenderTitle = isString(codeData?.title);
const [isFullScreen, setIsFullScreen] = useState(false);
const copyCode = () => {
navigator.clipboard
.writeText(codeData?.code)
.then(() => {
setIsCopy(true);
setTimeout(() => {
setIsCopy(false);
}, 1000);
})
.catch(err => {
console.error('Failed to copy: ', err);
});
};
return (
<div
className={classNames('log-code-panel', {
['log-code-panel-full']: isFullScreen,
})}
>
<div className="log-code-title">
{isRenderTitle ? (
<TextEllipsis
text={codeData?.title}
className="log-code-title-text"
/>
) : (
<>{codeData?.title}</>
)}
<div>
{isCopy ? (
<CheckOutlined className="log-code-copy" />
) : (
<CopyOutlined className="log-code-copy" onClick={copyCode} />
)}
{isFullScreen
? isShowFullScreen && (
<ShrinkOutlined
onClick={() => {
setIsFullScreen(false);
onFullScreenChange && onFullScreenChange(false);
}}
className="log-code-copy"
/>
)
: isShowFullScreen && (
<ArrowsAltOutlined
onClick={() => {
setIsFullScreen(true);
onFullScreenChange && onFullScreenChange(true);
}}
className="log-code-copy"
/>
)}
</div>
</div>
<CodeMirror
value={codeData?.code}
className="log-code-editor"
extensions={[json(), EditorView.lineWrapping]}
minHeight="172px"
maxHeight="58vh"
width="100%"
theme="none"
readOnly={true}
editable={false}
/>
</div>
);
});