1
1
import { ReactElement , useEffect , useRef } from 'react'
2
2
import { createLanguageClientManager , LanguageServerConfig , StatusChangeEvent } from '@codingame/monaco-languageclient-wrapper'
3
+ import { LanguageClientManager } from '@codingame/monaco-languageclient-wrapper/dist/languageClient'
3
4
4
5
export interface LanguageClientProps {
5
6
languageServerConfig : LanguageServerConfig
6
7
languageServerUrl : string
7
8
getSecurityToken : ( ) => Promise < string >
8
9
libraryUrls ?: string [ ]
9
10
onError ?: ( error : Error ) => void
10
- onDidChangeStatus ?: ( status : StatusChangeEvent ) => void
11
+ onDidChangeStatus ?: ( status : StatusChangeEvent ) => void ,
12
+ configuration ?: any
11
13
}
12
14
15
+ const defaultLibraryUrls : string [ ] = [ ]
16
+
13
17
function LanguageClient ( {
14
18
languageServerConfig,
15
19
languageServerUrl,
16
20
getSecurityToken,
17
- libraryUrls,
21
+ libraryUrls = defaultLibraryUrls ,
18
22
onError,
19
- onDidChangeStatus
23
+ onDidChangeStatus,
24
+ configuration
20
25
} : LanguageClientProps ) : ReactElement | null {
21
26
const onErrorRef = useRef < ( error : Error ) => void > ( )
22
27
const onDidChangeStatusRef = useRef < ( status : StatusChangeEvent ) => void > ( )
28
+ const languageClientRef = useRef < LanguageClientManager > ( )
23
29
useEffect ( ( ) => {
24
30
console . info ( `Starting language server for language ${ languageServerConfig . language } ` )
25
- const languageClient = createLanguageClientManager ( languageServerUrl , getSecurityToken , languageServerConfig , libraryUrls ?? [ ] )
31
+ const languageClient = createLanguageClientManager ( languageServerUrl , getSecurityToken , languageServerConfig , libraryUrls )
32
+ languageClientRef . current = languageClient
26
33
const errorDisposable = languageClient . onError ( ( error ) => {
27
34
if ( onErrorRef . current != null ) {
28
35
onErrorRef . current ( error )
@@ -48,6 +55,12 @@ function LanguageClient ({
48
55
}
49
56
} , [ getSecurityToken , languageServerConfig , languageServerUrl , libraryUrls ] )
50
57
58
+ useEffect ( ( ) => {
59
+ if ( configuration != null ) {
60
+ languageClientRef . current ! . updateConfiguration ( configuration )
61
+ }
62
+ } , [ configuration ] )
63
+
51
64
useEffect ( ( ) => {
52
65
onErrorRef . current = onError
53
66
} , [ onError ] )
@@ -59,8 +72,4 @@ function LanguageClient ({
59
72
return null
60
73
}
61
74
62
- LanguageClient . defaultProps = {
63
- libraryUrls : [ ]
64
- }
65
-
66
75
export default LanguageClient
0 commit comments