33import { useRef , useEffect , useState } from "react" ;
44import { useParams } from "next/navigation" ;
55import { Editor } from "@monaco-editor/react" ;
6- import { editor } from "monaco-editor" ;
6+ import type { editor } from "monaco-editor" ;
7+ import * as monaco from "monaco-editor" ;
78import * as Y from "yjs" ;
89import { WebsocketProvider } from "y-websocket" ;
910import { MonacoBinding } from "y-monaco" ;
@@ -48,6 +49,7 @@ export default function CodeEditorPanel({ readOnly = false }: CodeEditorPanelPro
4849 const { changeLanguage, updateLanguage } = useCollaborationActions ( ) ;
4950
5051 const [ editorInstance , setEditorInstance ] = useState < editor . IStandaloneCodeEditor | null > ( null ) ;
52+ const [ monacoInstance , setMonacoInstance ] = useState < typeof monaco | null > ( null ) ;
5153 const [ connectionStatus , setConnectionStatus ] = useState < ConnectionState > (
5254 ConnectionState . DISCONNECTED ,
5355 ) ;
@@ -101,12 +103,10 @@ export default function CodeEditorPanel({ readOnly = false }: CodeEditorPanelPro
101103 try {
102104 const message = JSON . parse ( event . data ) ;
103105 if ( message . type === "language-change-notification" ) {
104- console . log ( "Language changed to:" , message . data . language ) ;
105106 const programmingLanguage = message . data . language as ProgrammingLanguage ;
106107 updateLanguage ( programmingLanguage ) ;
107108 toast . info ( `Language changed to ${ programmingLanguageDisplayMap [ programmingLanguage ] } ` ) ;
108109 } else if ( message . type === "room-close-notification" ) {
109- console . log ( "Room closed at:" , message . data . closedAt ) ;
110110 toast . warn ( "The collaboration room has been closed" ) ;
111111 }
112112 } catch {
@@ -126,13 +126,13 @@ export default function CodeEditorPanel({ readOnly = false }: CodeEditorPanelPro
126126
127127 // Update Monaco language when room language changes
128128 useEffect ( ( ) => {
129- if ( editorInstance && monacoLanguage ) {
129+ if ( editorInstance && monacoLanguage && monacoInstance ) {
130130 const model = editorInstance . getModel ( ) ;
131131 if ( model ) {
132- editor . setModelLanguage ( model , monacoLanguage ) ;
132+ monacoInstance . editor . setModelLanguage ( model , monacoLanguage ) ;
133133 }
134134 }
135- } , [ editorInstance , monacoLanguage ] ) ;
135+ } , [ editorInstance , monacoLanguage , monacoInstance ] ) ;
136136
137137 // Handle language change from dropdown
138138 const handleLanguageChange = async ( language : ProgrammingLanguage ) => {
@@ -143,8 +143,12 @@ export default function CodeEditorPanel({ readOnly = false }: CodeEditorPanelPro
143143 } ;
144144
145145 // Handle editor mount
146- const handleEditorDidMount = ( editorRef : editor . IStandaloneCodeEditor ) => {
146+ const handleEditorDidMount = (
147+ editorRef : editor . IStandaloneCodeEditor ,
148+ monacoRef : typeof monaco ,
149+ ) => {
147150 setEditorInstance ( editorRef ) ;
151+ setMonacoInstance ( monacoRef ) ;
148152
149153 // Set document content for read-only mode
150154 if ( readOnly && documentContent ) {
0 commit comments