1+ import React from 'react' ;
2+
13import NiceModal from '@ebay/nice-modal-react' ;
2- import { useMonacoGhost } from '@ydb-platform/monaco-ghost' ;
4+ import { createMonacoGhostInstance } from '@ydb-platform/monaco-ghost' ;
35import throttle from 'lodash/throttle' ;
46import type Monaco from 'monaco-editor' ;
57
@@ -11,7 +13,7 @@ import {
1113 selectUserInput ,
1214} from '../../../../store/reducers/query/query' ;
1315import type { QueryAction } from '../../../../types/store/query' ;
14- import { LAST_USED_QUERY_ACTION_KEY } from '../../../../utils/constants' ;
16+ import { ENABLE_CODE_ASSISTANT , LAST_USED_QUERY_ACTION_KEY } from '../../../../utils/constants' ;
1517import {
1618 useEventHandler ,
1719 useSetting ,
@@ -23,9 +25,8 @@ import {useUpdateErrorsHighlighting} from '../../../../utils/monaco/highlightErr
2325import { QUERY_ACTIONS } from '../../../../utils/query' ;
2426import { SAVE_QUERY_DIALOG } from '../SaveQuery/SaveQuery' ;
2527import i18n from '../i18n' ;
26- import { useSavedQueries } from '../utils/useSavedQueries' ;
2728
28- import { useCodeAssist , useEditorOptions } from './helpers' ;
29+ import { useCodeAssistHelpers , useEditorOptions } from './helpers' ;
2930import { getKeyBindings } from './keybindings' ;
3031
3132const CONTEXT_MENU_GROUP_ID = 'navigation' ;
@@ -45,8 +46,11 @@ export function YqlEditor({
4546} : YqlEditorProps ) {
4647 const input = useTypedSelector ( selectUserInput ) ;
4748 const dispatch = useTypedDispatch ( ) ;
49+ const [ monacoGhostInstance , setMonacoGhostInstance ] =
50+ React . useState < ReturnType < typeof createMonacoGhostInstance > > ( ) ;
4851 const historyQueries = useTypedSelector ( selectQueriesHistory ) ;
49- const savedQueries = useSavedQueries ( ) ;
52+ const [ isCodeAssistEnabled ] = useSetting ( ENABLE_CODE_ASSISTANT ) ;
53+
5054 const editorOptions = useEditorOptions ( ) ;
5155 const updateErrorsHighlighting = useUpdateErrorsHighlighting ( ) ;
5256
@@ -71,20 +75,18 @@ export function YqlEditor({
7175 window . ydbEditor = undefined ;
7276 } ;
7377
74- const codeAssist = useCodeAssist ( ) ;
75- const { registerMonacoGhost} = useMonacoGhost ( {
76- api : {
77- getCodeAssistSuggestions : codeAssist . getCodeAssistSuggestions ,
78- } ,
79- eventHandlers : {
80- onCompletionAccept : codeAssist . onCompletionAccept ,
81- onCompletionDecline : codeAssist . onCompletionDecline ,
82- onCompletionIgnore : codeAssist . onCompletionIgnore ,
83- } ,
84- config : {
85- language : YQL_LANGUAGE_ID ,
86- } ,
87- } ) ;
78+ const { monacoGhostConfig, prepareUserQueriesCache} = useCodeAssistHelpers ( ) ;
79+
80+ React . useEffect ( ( ) => {
81+ if ( monacoGhostInstance && isCodeAssistEnabled ) {
82+ monacoGhostInstance . register ( monacoGhostConfig ) ;
83+ prepareUserQueriesCache ( ) ;
84+ }
85+
86+ return ( ) => {
87+ monacoGhostInstance ?. unregister ( ) ;
88+ } ;
89+ } , [ isCodeAssistEnabled , monacoGhostConfig , monacoGhostInstance , prepareUserQueriesCache ] ) ;
8890
8991 const editorDidMount = ( editor : Monaco . editor . IStandaloneCodeEditor , monaco : typeof Monaco ) => {
9092 window . ydbEditor = editor ;
@@ -100,18 +102,9 @@ export function YqlEditor({
100102 } ) ;
101103
102104 if ( window . api . codeAssist ) {
103- registerMonacoGhost ( editor ) ;
104- codeAssist . prepareUserQueriesCache ( [
105- ...historyQueries . map ( ( query , index ) => ( {
106- name : `query${ index } .yql` ,
107- text : query . queryText ,
108- } ) ) ,
109- ...savedQueries . map ( ( query ) => ( {
110- name : query . name ,
111- text : query . body ,
112- } ) ) ,
113- ] ) ;
105+ setMonacoGhostInstance ( createMonacoGhostInstance ( editor ) ) ;
114106 }
107+
115108 initResizeHandler ( editor ) ;
116109 initUserPrompt ( editor , getLastQueryText ) ;
117110 editor . focus ( ) ;
0 commit comments