import { SourceCode } from '@theme'; import { BasicStory } from 'components/form-materials/components/sql-editor-with-variables'; # SQLEditorWithVariables SQLEditorWithVariables 是一个增强版的 SQL 编辑器,支持在 SQL 中插入变量引用。它基于 SQLCodeEditor 构建,集成了变量选择器和变量标签注入功能,使用户能够在 SQL 字符串中使用 `{{variable}}` 语法引用变量。 ## 案例演示 ### 基本使用 ```tsx pure title="form-meta.tsx" import { SQLEditorWithVariables } from '@flowgram.ai/form-materials'; const formMeta = { render: () => ( <> name="sql_editor_with_variables" defaultValue="SELECT * FROM users WHERE user_id = {{start_0.str}}" > {({ field }) => ( field.onChange(value)} /> )} ), } ``` ### 带变量的 SQL 示例 ```sql SELECT id, name, email FROM users WHERE id = {{start_0.user_id}} AND email LIKE '%{{start_0.domain}}' LIMIT 10; ``` ### 变量插入 在编辑器中输入 `@`, `{` 字符可以触发变量选择器。 输入 `@`, `{` 后会显示可用的变量列表,选择变量后会自动插入为 `{{variable.name}}` 格式。 ## API 参考 ### SQLEditorWithVariables Props | 属性名 | 类型 | 默认值 | 描述 | |--------|------|--------|------| | `value` | `string` | - | SQL 字符串内容 | | `onChange` | `(value: string) => void` | - | 内容变化时的回调函数 | | `theme` | `'dark' \| 'light'` | `'light'` | 编辑器主题 | | `placeholder` | `string` | - | 占位符文本 | | `activeLinePlaceholder` | `string` | `'按 @ 选择变量'` | 当前行的占位提示 | | `readonly` | `boolean` | `false` | 是否为只读模式 | | `options` | `Options` | - | CodeMirror 配置选项 | ### 变量语法 在 SQL 字符串中使用双花括号语法引用变量: ```sql SELECT * FROM orders WHERE user_id = {{variable.path}} ``` 支持的变量格式: - `{{start_0.name}}` - 简单变量 - `{{start_0.address.city}}` - 嵌套属性 ## 源码导读 使用 CLI 命令可以复制源代码到本地: ```bash npx @flowgram.ai/cli@latest materials components/sql-editor-with-variables ``` ### 目录结构讲解 ``` sql-editor-with-variables/ ├── index.tsx # 懒加载导出文件 ├── editor.tsx # 主组件实现 └── README.md # 组件说明文档 ``` ### 核心实现说明 #### 变量选择器集成 集成 `EditorVariableTree` 和 `EditorVariableTagInject` 扩展: ```typescript ``` #### 触发字符 默认使用 `@` 作为变量选择的触发字符。若需要自定义触发字符,可使用底层 `SQLCodeEditor` 进行扩展: ```typescript import { SQLCodeEditor } from '@flowgram.ai/form-materials'; ``` ### 使用到的 flowgram API #### @flowgram.ai/coze-editor - `SQLCodeEditor`: SQL 代码编辑器 - `EditorVariableTree`: 变量树选择器 - `EditorVariableTagInject`: 变量标签注入器 #### @flowgram.ai/i18n - `I18n`: 国际化支持 #### coze-editor-extensions 物料 - `EditorVariableTree`: 变量树选择触发 - `EditorVariableTagInject`: 变量标签展示 ### 整体流程 ```mermaid graph TD A[SQLEditorWithVariables 组件] --> B[渲染 SQLCodeEditor] B --> C[加载 SQL 语法高亮] B --> D[集成变量扩展] D --> E[EditorVariableTree] D --> F[EditorVariableTagInject] E --> G[监听 @ 触发] F --> H[处理变量标签] G --> I[显示变量列表] I --> J[选择并插入变量] H --> L[渲染变量标签样式] J --> M[更新编辑器内容] ```