Skip to content

Commit 5daa9f5

Browse files
committed
PEER-234: Streamline Editor Code
Signed-off-by: SeeuSim <[email protected]>
1 parent ef80e3a commit 5daa9f5

File tree

3 files changed

+15
-14
lines changed

3 files changed

+15
-14
lines changed

frontend/src/components/blocks/interview/editor.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import { getTheme, type IEditorTheme, languages, themeOptions } from '@/lib/editor/extensions';
21
import { useWindowSize } from '@uidotdev/usehooks';
32
import type { LanguageName } from '@uiw/codemirror-extensions-langs';
43
import CodeMirror from '@uiw/react-codemirror';
5-
import { useState } from 'react';
4+
import { useMemo, useState } from 'react';
65

76
import { Label } from '@/components/ui/label';
87
import {
@@ -12,6 +11,7 @@ import {
1211
SelectTrigger,
1312
SelectValue,
1413
} from '@/components/ui/select';
14+
import { getTheme, type IEditorTheme, languages, themeOptions } from '@/lib/editor/extensions';
1515
import { useCollab } from '@/lib/hooks/use-collab';
1616

1717
const EXTENSION_HEIGHT = 250;
@@ -23,9 +23,12 @@ type EditorProps = {
2323

2424
export const Editor = ({ room }: EditorProps) => {
2525
const { height } = useWindowSize();
26-
const [code, setCode] = useState('');
2726
const [theme, setTheme] = useState<IEditorTheme>('darcula');
28-
const { editorRef, extensions, language, setLanguage } = useCollab(room);
27+
const { editorRef, extensions, language, setLanguage, code, setCode } = useCollab(room);
28+
const themePreset = useMemo(() => {
29+
return getTheme(theme);
30+
}, [theme]);
31+
2932
return (
3033
<div className='flex flex-col gap-4 p-4'>
3134
<div className='flex gap-4'>
@@ -71,7 +74,7 @@ export const Editor = ({ room }: EditorProps) => {
7174
onChange={(value, _viewUpdate) => {
7275
setCode(value);
7376
}}
74-
theme={getTheme(theme)}
77+
theme={themePreset}
7578
lang={language}
7679
basicSetup={{
7780
tabSize: language === 'python' ? 4 : 2,

frontend/src/lib/editor/extensions.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ export const themeOptions = [
4242
'duotone',
4343
'eclipse',
4444
'github',
45+
'githubDark',
4546
'gruvbox',
4647
'gruvboxDark',
4748
'kimbie',

frontend/src/lib/hooks/use-collab.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { EditorState, Extension, type ReactCodeMirrorRef } from '@uiw/react-codemirror';
1+
import { Extension, type ReactCodeMirrorRef } from '@uiw/react-codemirror';
22
import { useEffect, useMemo, useRef, useState } from 'react';
33
import { yCollab } from 'y-codemirror.next';
44
import * as Y from 'yjs';
@@ -26,8 +26,9 @@ const getRandomColor = () => {
2626

2727
// TODO: Test if collab logic works
2828
export const useCollab = (roomId: string) => {
29+
const [code, setCode] = useState('');
2930
const editorRef = useRef<ReactCodeMirrorRef>(null);
30-
const [extensions, setExtensions] = useState<Array<Extension>>([baseExtensions]);
31+
const [extensions, setExtensions] = useState<Array<Extension>>(baseExtensions);
3132
const [language, setLanguage] = useState<LanguageName>('python');
3233
const langExtension = useMemo(() => {
3334
return getLanguage(language);
@@ -46,10 +47,6 @@ export const useCollab = (roomId: string) => {
4647
);
4748
return;
4849
}
49-
if (!provider.socket.connected) {
50-
console.log('Failed to connect');
51-
return;
52-
}
5350
const ytext = doc.getText('codemirror');
5451
const undoManager = new Y.UndoManager(ytext);
5552
const awareness = provider.awareness;
@@ -60,9 +57,7 @@ export const useCollab = (roomId: string) => {
6057
colorLight: light,
6158
});
6259
const collabExt = yCollab(ytext, awareness, { undoManager });
63-
editorRef.current.state = EditorState.create({
64-
doc: ytext.toJSON(),
65-
});
60+
setCode(ytext.toString());
6661
setExtensions([...extensions, collabExt]);
6762
return () => {
6863
doc.destroy();
@@ -75,5 +70,7 @@ export const useCollab = (roomId: string) => {
7570
extensions: [...extensions, langExtension],
7671
language,
7772
setLanguage,
73+
code,
74+
setCode,
7875
};
7976
};

0 commit comments

Comments
 (0)