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,48 +47,36 @@ export function ChatView({ ...@@ -34,48 +47,36 @@ 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');
return ( const Live = useMemo(() => {
<div> let node;
<AI try {
simpleMode="input" node = !showCode ? (
startView={3} <LiveEditor className="overflow-auto min-h-[350px]" />
inputProps={{
style: { width: 400 },
height: 36,
className: 'overflow-hidden simple-mode-border mb-[20px]',
prefix: <span className="text-[var(--pc)]">组件显示</span>,
autoFocus: false,
}}
SendButton={SendButton}
/>
<Spin loading={isMutating} block className="my-[20px]">
{example ? (
<div>
<div className="text-[20px] absolute text-orange-200 z-[99] right-[20px]">
{showCode ? (
<IconCode onClick={() => setShowCode(false)} />
) : ( ) : (
<IconEye onClick={() => setShowCode(true)} /> <LivePreview />
)} );
</div> } catch (err) {
<div className="overflow-hidden"> node = <LiveEditor className="overflow-auto min-h-[350px]" />;
}
return (
<LiveProvider <LiveProvider
code={example} code={example}
scope={{ scope={{
...@@ -93,14 +94,48 @@ export function ChatView({ ...@@ -93,14 +94,48 @@ export function ChatView({
}, },
}} }}
> >
{!showCode ? ( {node}
<LiveEditor className="overflow-auto min-h-[350px]" /> <Error />
</LiveProvider>
);
}, [example, props, showCode]);
return (
<div>
<div className="flex justify-between items-center mb-[20px]">
<AI
simpleMode="input"
startView={3}
inputProps={{
style: { width: 400 },
height: 36,
className: 'overflow-hidden simple-mode-border',
prefix: <span className="text-[var(--pc)]">{t('component display')}</span>,
autoFocus: false,
}}
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]">
{example && !showTable ? (
<div>
<div className="text-[20px] absolute text-orange-200 z-[99] right-[20px]">
{showCode ? (
<IconCode onClick={() => setShowCode(false)} />
) : ( ) : (
<LivePreview /> <IconEye onClick={() => setShowCode(true)} />
)} )}
<LiveError />
</LiveProvider>
</div> </div>
<div className="overflow-hidden">{Live}</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