aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/frontend/src/editor/EditorArea.tsx
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2022-09-08 02:51:52 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2022-09-08 15:37:49 +0200
commit6d1f78af96e4c0d1ad76c5791b93b0c2d83810e1 (patch)
treec005aca6da89629fac5d4001a475babd2fcd590c /subprojects/frontend/src/editor/EditorArea.tsx
parentfeat(frontend): check for updates periodically (diff)
downloadrefinery-6d1f78af96e4c0d1ad76c5791b93b0c2d83810e1.tar.gz
refinery-6d1f78af96e4c0d1ad76c5791b93b0c2d83810e1.tar.zst
refinery-6d1f78af96e4c0d1ad76c5791b93b0c2d83810e1.zip
feat(frontend): editor area scroll shadow styling
Diffstat (limited to 'subprojects/frontend/src/editor/EditorArea.tsx')
-rw-r--r--subprojects/frontend/src/editor/EditorArea.tsx31
1 files changed, 25 insertions, 6 deletions
diff --git a/subprojects/frontend/src/editor/EditorArea.tsx b/subprojects/frontend/src/editor/EditorArea.tsx
index 7c5ac5fb..174b1205 100644
--- a/subprojects/frontend/src/editor/EditorArea.tsx
+++ b/subprojects/frontend/src/editor/EditorArea.tsx
@@ -1,7 +1,9 @@
1import Box from '@mui/material/Box';
1import { useTheme } from '@mui/material/styles'; 2import { useTheme } from '@mui/material/styles';
2import { observer } from 'mobx-react-lite'; 3import { observer } from 'mobx-react-lite';
3import React, { useCallback, useEffect } from 'react'; 4import React, { useCallback, useEffect, useState } from 'react';
4 5
6import EditorAreaDecorations from './EditorAreaDecorations';
5import type EditorStore from './EditorStore'; 7import type EditorStore from './EditorStore';
6import EditorTheme from './EditorTheme'; 8import EditorTheme from './EditorTheme';
7 9
@@ -13,23 +15,40 @@ export default observer(function EditorArea({
13 const { 15 const {
14 palette: { mode: paletteMode }, 16 palette: { mode: paletteMode },
15 } = useTheme(); 17 } = useTheme();
18 const [parent, setParent] = useState<HTMLElement | undefined>();
19 const [scroller, setScroller] = useState<HTMLElement | undefined>();
16 20
17 useEffect( 21 useEffect(
18 () => editorStore.setDarkMode(paletteMode === 'dark'), 22 () => editorStore.setDarkMode(paletteMode === 'dark'),
19 [editorStore, paletteMode], 23 [editorStore, paletteMode],
20 ); 24 );
21 25
26 const parentRef = useCallback(
27 (value: HTMLElement | null) => setParent(value ?? undefined),
28 [],
29 );
30
22 const editorParentRef = useCallback( 31 const editorParentRef = useCallback(
23 (editorParent: HTMLDivElement | null) => { 32 (editorParent: HTMLDivElement | null) => {
24 editorStore.setEditorParent(editorParent ?? undefined); 33 editorStore.setEditorParent(editorParent ?? undefined);
34 setScroller(editorStore.view?.scrollDOM);
25 }, 35 },
26 [editorStore], 36 [editorStore, setScroller],
27 ); 37 );
28 38
29 return ( 39 return (
30 <EditorTheme 40 <Box
31 showLineNumbers={editorStore.showLineNumbers} 41 ref={parentRef}
32 ref={editorParentRef} 42 position="relative"
33 /> 43 flexGrow={1}
44 flexShrink={1}
45 overflow="auto"
46 >
47 <EditorTheme
48 showLineNumbers={editorStore.showLineNumbers}
49 ref={editorParentRef}
50 />
51 <EditorAreaDecorations parent={parent} scroller={scroller} />
52 </Box>
34 ); 53 );
35}); 54});