11import React , { Component } from 'react'
2- import dispatchCommand from 'commands/dispatchCommand'
2+ import editorState from '../MonacoEditor/state'
3+ import { observable } from 'mobx'
4+ import { observer } from 'mobx-react'
35
46const keys = `{}()<>[]"';\/=+-:,.?&|!_\`$%*#@^~`
7+ const state = observable ( {
8+ show : false
9+ } )
510
611class VirtualKey extends Component {
712 constructor ( props ) {
@@ -10,28 +15,67 @@ class VirtualKey extends Component {
1015 }
1116
1217 emitterEvent ( item ) {
13- dispatchCommand ( 'highlight_line' )
14- const keyboardEvent = new KeyboardEvent ( 'keypress' , { bubbles :true } )
15- Object . defineProperty ( keyboardEvent , 'charCode' ,
16- { get :( ) => this . charCodeVal }
17- )
18-
19- keyboardEvent . charCodeVal = item . charCodeAt ( )
20- // console.log(ke)
21- document . querySelector ( '.monaco-editor' ) . dispatchEvent ( keyboardEvent )
18+ const monacoEditor = editorState . activeMonacoEditor
19+ if ( ! monacoEditor ) return
20+
21+ if ( item === 'Tab' ) {
22+ item = '\t'
23+ }
24+
25+ if ( item === 'undo' ) {
26+ monacoEditor . trigger ( '' , 'undo' )
27+ return
28+ }
29+
30+ if ( item === 'redo' ) {
31+ monacoEditor . trigger ( '' , 'redo' )
32+ return
33+ }
34+
35+ monacoEditor . trigger ( '' , 'type' , { text : item } )
36+ // Insert pair symbols
37+ let nextSymbol = ''
38+ switch ( item ) {
39+ case '{' : nextSymbol = '}' ; break
40+ case '(' : nextSymbol = ')' ; break
41+ case '[' : nextSymbol = ']' ; break
42+ case '"' : nextSymbol = '"' ; break
43+ case `'` : nextSymbol = `'` ; break
44+ case '`' : nextSymbol = '`' ; break
45+ default : break
46+ }
47+
48+ monacoEditor . trigger ( '' , 'type' , { text : nextSymbol } )
49+ if ( nextSymbol ) {
50+ const position = monacoEditor . cursor . getPosition ( )
51+ monacoEditor . setPosition ( {
52+ lineNumber : position . lineNumber , column : position . column - 1
53+ } )
54+ }
2255 }
2356
2457 render ( ) {
25- return < div style = { { zIndex : '100' } } >
58+ return < div className = { 'virtual-container' }
59+ style = { { display : state . show ? 'flex' : 'none' } } >
2660 < ul className = "virtual-keymap" >
2761 { this . keymap . map (
2862 item => < li onClick = { ( ) => this . emitterEvent ( item ) } > { item } </ li >
2963 ) }
30- < li > < i className = "fa fa-undo" /> </ li >
31- < li > < i className = "fa fa-repeat" /> </ li >
3264 </ ul >
65+ < div className = "icons" >
66+ < div onClick = { ( ) => this . emitterEvent ( 'undo' ) } >
67+ < i className = "fa fa-undo" />
68+ </ div >
69+ < div onClick = { ( ) => this . emitterEvent ( 'redo' ) } >
70+ < i className = "fa fa-repeat" />
71+ </ div >
72+ < div onClick = { ( ) => state . show = false } >
73+ < i className = "fa fa-times" />
74+ </ div >
75+ </ div >
3376 </ div >
3477 }
3578}
3679
37- export default VirtualKey
80+ export default observer ( VirtualKey )
81+ export { state }
0 commit comments