index.tsx 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /*
  2. * @Author: code4eat awesomedema@gmail.com
  3. * @Date: 2022-07-06 15:29:43
  4. * @LastEditors: code4eat awesomedema@gmail.com
  5. * @LastEditTime: 2022-07-08 10:25:02
  6. * @FilePath: /KC-MiddlePlatform/src/pages/platform/sqlediter/index.tsx
  7. * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  8. */
  9. import React, { useRef, useState } from 'react'
  10. import Editor, { useMonaco } from "@monaco-editor/react";
  11. function SQLEditer() {
  12. const editorRef = useRef(null);
  13. const monaco = useMonaco();
  14. const [suggestions, set_suggestions] = useState([]);
  15. const [currentText, set_currentText] = useState('');
  16. // const changeModelContent = (e:any) => {
  17. // console.log('内容改变', editorRef.current.getValue());
  18. // };
  19. const handleEditorDidMount = (editor: any, monaco: any) => {
  20. console.log({ editor, monaco })
  21. editorRef.current = editor;
  22. // editor.onDidChangeModelContent(changeModelContent);
  23. // this.editor = editor;
  24. // this.monaco = monaco;
  25. // 注册自定义语言
  26. // monaco.languages.register({ id: 'mylan' });
  27. // 为该语言注册一个语言提示器--联想
  28. monaco.languages.registerCompletionItemProvider('sql', {
  29. provideCompletionItems: () => {
  30. // this.suggestions 根据输入内容的不同发生变化
  31. return { suggestions: suggestions };
  32. },
  33. });
  34. }
  35. const onChangeHandle = (value: string | undefined, ev: any) => {
  36. // console.log({ value, ev });
  37. monaco.caretOffset = ev.changes[0].rangeOffset; //获取光标位置
  38. fetchSuggestions();
  39. }
  40. const fetchSuggestions = () => {
  41. let str = currentText.substr(0, monaco.caretOffset + 1);
  42. let reg = /薪资.$/;
  43. if (reg.test(str)) {
  44. const suggestions = [{
  45. label: '一月工资',
  46. insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
  47. kind: monaco.languages.CompletionItemKind.Function,
  48. insertText: '一月工资',
  49. detail: '一月工资',
  50. }];
  51. } else {
  52. const suggestions = [
  53. {
  54. label: 'sum',
  55. kind: monaco.languages.CompletionItemKind.Function,
  56. insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
  57. insertText: 'sum(${1:})',
  58. detail: '计算所有参数数值的和',
  59. }];
  60. }
  61. if(editorRef.current){
  62. console.log('editorRef.current',editorRef.current)
  63. // editorRef.current.trigger('提示', 'editor.action.triggerSuggest', {});
  64. }
  65. }
  66. return (
  67. <Editor
  68. height="60vh"
  69. defaultLanguage="sql"
  70. defaultValue="// some comment"
  71. onChange={onChangeHandle}
  72. onMount={handleEditorDidMount}
  73. />
  74. );
  75. }
  76. export default SQLEditer