in frontend/src/routes/visual-query/components/visual-content/visual-editor.tsx [33:104]
export default function VisualEditor(props: VisualEditorProps) {
const { onResize } = props;
const { selectedDatabaseId, setSelectedDatabaseId, databases } = useContext(DatabasesContext);
const { runFetchData } = useContext(DataContext);
const { editorValue, setEditorValue } = useContext(EditorContext);
useMonacoEditor();
const runSqlQuery = () => {
if (selectedDatabaseId == null) {
message.error('请选择一个数据库');
return;
}
if (editorValue === '') {
message.error('请输入查询语句');
return;
}
runFetchData(fetchData({ database: selectedDatabaseId, query: editorValue })).catch(
() => message.error('查询失败'),
);
};
return (
<>
<Select
value={selectedDatabaseId || undefined}
style={{ width: 200, margin: '20px 0 0 20px' }}
placeholder="请选择一个数据库"
onChange={v => setSelectedDatabaseId(v)}
>
{databases?.map(database => (
<Option value={database.id} key={database.id}>
{database.name}
</Option>
))}
</Select>
<Resizable
style={{ border: '1px solid #ccc', margin: 20 }}
enable={RESIZEABLE_ENABLE}
defaultSize={{
width: '95%',
height: 150,
}}
minHeight={150}
onResize={onResize}
>
<Editor
height="100%"
defaultLanguage="sql"
theme={THEME_NAME}
options={{
minimap: {
enabled: false,
},
}}
value={editorValue}
onChange={v => setEditorValue(v || '')}
/>
</Resizable>
<Row justify="end">
<Col style={{ marginRight: '4%' }}>
<Button
type="primary"
disabled={selectedDatabaseId == null || editorValue === ''}
onClick={runSqlQuery}
>
运行
</Button>
</Col>
</Row>
</>
);
}