Commit 6d7c31af authored by 熊洋洋's avatar 熊洋洋

feat:improve code

parent b967781b
...@@ -268,7 +268,7 @@ export function AIWrapper({ ...@@ -268,7 +268,7 @@ export function AIWrapper({
height={56} height={56}
className="overflow-hidden shadow-md simple-mode shadow-cyan-500/30" className="overflow-hidden shadow-md simple-mode shadow-cyan-500/30"
autoFocus autoFocus
onPressEnter={() => handleButtonClick()} onPressEnter={() => !SendButton && handleButtonClick()}
value={inputValue} value={inputValue}
onChange={value => { onChange={value => {
const el = input.current?.dom; const el = input.current?.dom;
......
...@@ -209,6 +209,9 @@ i18n.use(LanguageDetector) ...@@ -209,6 +209,9 @@ i18n.use(LanguageDetector)
'please enter query name': '请输入查询名称', 'please enter query name': '请输入查询名称',
name: '名称', name: '名称',
}, },
chatView: {
'component display': '组件显示',
},
}, },
}, },
fallbackLng: 'en', fallbackLng: 'en',
......
import { Button, Card, Spin } from '@arco-design/web-react'; import { Button, Card, Spin } from '@arco-design/web-react';
import { IconCode, IconEye, IconSend } from '@arco-design/web-react/icon'; import { IconCode, IconEye, IconRefresh, IconSend, IconSwap } from '@arco-design/web-react/icon';
import React, { ReactElement, memo, useCallback, useRef, useState } from 'react'; import React, { ReactElement, memo, useCallback, useMemo, useRef, useState } from 'react';
import { LiveEditor, LiveError, LivePreview, LiveProvider } from 'react-live-runner'; import {
LiveEditor,
LiveError,
LivePreview,
LiveProvider,
useLiveContext,
} from 'react-live-runner';
import * as styledComponents from 'styled-components'; import * as styledComponents from 'styled-components';
import * as echarts from 'echarts'; import * as echarts from 'echarts';
import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom';
...@@ -11,6 +17,13 @@ import useSWRMutation from 'swr/mutation'; ...@@ -11,6 +17,13 @@ import useSWRMutation from 'swr/mutation';
import getView from '@/client/api/getView'; import getView from '@/client/api/getView';
import { nanoid } from 'nanoid'; import { nanoid } from 'nanoid';
import { get } from 'lodash'; import { get } from 'lodash';
import { useTranslation } from 'react-i18next';
function Error() {
const { error } = useLiveContext();
console.log(error, 'error');
return <code>{error}</code>;
}
export function ChatView({ export function ChatView({
defaultNode, defaultNode,
...@@ -21,8 +34,8 @@ export function ChatView({ ...@@ -21,8 +34,8 @@ export function ChatView({
}) { }) {
const [showCode, setShowCode] = useState(true); const [showCode, setShowCode] = useState(true);
const reqRef = useRef(nanoid()); const reqRef = useRef(nanoid());
const [showTable, setShowTable] = useState(false);
const { trigger, data, isMutating } = useSWRMutation(reqRef.current, (_, { arg: { need } }) => { const { trigger, data, isMutating } = useSWRMutation(reqRef.current, (_, { arg: { need } }) => {
console.log(need);
return getView.getViewComponent({ return getView.getViewComponent({
props, props,
need, need,
...@@ -34,39 +47,86 @@ export function ChatView({ ...@@ -34,39 +47,86 @@ export function ChatView({
return ( return (
<Button <Button
shape="circle" shape="circle"
icon={<IconSend />} icon={data ? <IconRefresh /> : <IconSend />}
size="mini" size="mini"
type="primary" type="primary"
loading={isMutating} loading={isMutating}
onClick={async () => { onClick={async () => {
await trigger({ need: inputRef.current.dom.value }); await trigger({ need: inputRef.current.dom.value });
// inputRef.current.dom.value = ''; setShowTable(false);
}} }}
/> />
); );
}, },
[isMutating, trigger] [isMutating, trigger, setShowTable]
); );
const example = get(data, 'data.code'); const example = get(data, 'data.code');
console.log(example, 'isMutating'); const { t } = useTranslation('chatView');
const Live = useMemo(() => {
let node;
try {
node = !showCode ? (
<LiveEditor className="overflow-auto min-h-[350px]" />
) : (
<LivePreview />
);
} catch (err) {
node = <LiveEditor className="overflow-auto min-h-[350px]" />;
}
return (
<LiveProvider
code={example}
scope={{
data: props,
import: {
react: React,
'react-dom': ReactDOM,
'styled-components': styledComponents,
'echarts-for-react': ReactECharts,
echarts: {
default: echarts,
echarts: echarts,
...echarts,
},
},
}}
>
{node}
<Error />
</LiveProvider>
);
}, [example, props, showCode]);
return ( return (
<div> <div>
<AI <div className="flex justify-between items-center mb-[20px]">
simpleMode="input" <AI
startView={3} simpleMode="input"
inputProps={{ startView={3}
style: { width: 400 }, inputProps={{
height: 36, style: { width: 400 },
className: 'overflow-hidden simple-mode-border mb-[20px]', height: 36,
prefix: <span className="text-[var(--pc)]">组件显示</span>, className: 'overflow-hidden simple-mode-border',
autoFocus: false, prefix: <span className="text-[var(--pc)]">{t('component display')}</span>,
}} autoFocus: false,
SendButton={SendButton} }}
/> SendButton={SendButton}
messageList={[]}
setMessageList={function (value: any[]) {
return false;
}}
/>
{data && (
<Button shape="circle" onClick={() => setShowTable(!showTable)}>
<IconSwap />
</Button>
)}
</div>
<Spin loading={isMutating} block className="my-[20px]"> <Spin loading={isMutating} block className="my-[20px]">
{example ? ( {example && !showTable ? (
<div> <div>
<div className="text-[20px] absolute text-orange-200 z-[99] right-[20px]"> <div className="text-[20px] absolute text-orange-200 z-[99] right-[20px]">
{showCode ? ( {showCode ? (
...@@ -75,32 +135,7 @@ export function ChatView({ ...@@ -75,32 +135,7 @@ export function ChatView({
<IconEye onClick={() => setShowCode(true)} /> <IconEye onClick={() => setShowCode(true)} />
)} )}
</div> </div>
<div className="overflow-hidden"> <div className="overflow-hidden">{Live}</div>
<LiveProvider
code={example}
scope={{
data: props,
import: {
react: React,
'react-dom': ReactDOM,
'styled-components': styledComponents,
'echarts-for-react': ReactECharts,
echarts: {
default: echarts,
echarts: echarts,
...echarts,
},
},
}}
>
{!showCode ? (
<LiveEditor className="overflow-auto min-h-[350px]" />
) : (
<LivePreview />
)}
<LiveError />
</LiveProvider>
</div>
</div> </div>
) : ( ) : (
defaultNode || null defaultNode || null
......
...@@ -368,7 +368,7 @@ const MessageItemHOC = ({ setShowQueriesList, activeDb, currentModels, activeMod ...@@ -368,7 +368,7 @@ const MessageItemHOC = ({ setShowQueriesList, activeDb, currentModels, activeMod
}) })
)} )}
{size(sql) ? ( {size(sql) ? (
[ <>
<FormItem key="1"> <FormItem key="1">
<Button <Button
type="primary" type="primary"
...@@ -456,11 +456,11 @@ const MessageItemHOC = ({ setShowQueriesList, activeDb, currentModels, activeMod ...@@ -456,11 +456,11 @@ const MessageItemHOC = ({ setShowQueriesList, activeDb, currentModels, activeMod
{t('run')} {t('run')}
</Button> </Button>
{contextHolder} {contextHolder}
</FormItem>, </FormItem>
<div className="w-full" key="preViewData"> <div className="w-full" key="preViewData">
<DataTable data={preViewData} /> <DataTable data={preViewData} />
</div>, </div>
] </>
) : ( ) : (
<Empty <Empty
description={t('Error in query')} description={t('Error in query')}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment