Commit f56d412e authored by tom's avatar tom

highlight selected file

parent 64b562bf
...@@ -98,7 +98,7 @@ const CodeEditor = ({ data }: Props) => { ...@@ -98,7 +98,7 @@ const CodeEditor = ({ data }: Props) => {
onMount={ handleEditorDidMount } onMount={ handleEditorDidMount }
/> />
</Box> </Box>
<CodeEditorSideBar data={ data } onFileSelect={ handleSelectFile } monaco={ instance }/> <CodeEditorSideBar data={ data } onFileSelect={ handleSelectFile } monaco={ instance } selectedFile={ data[index].file_path }/>
</Flex> </Flex>
); );
}; };
......
...@@ -10,9 +10,10 @@ import composeFileTree from './utils/composeFileTree'; ...@@ -10,9 +10,10 @@ import composeFileTree from './utils/composeFileTree';
interface Props { interface Props {
data: Array<File>; data: Array<File>;
onFileSelect: (index: number) => void; onFileSelect: (index: number) => void;
selectedFile: string;
} }
const CodeEditorFileExplorer = ({ data, onFileSelect }: Props) => { const CodeEditorFileExplorer = ({ data, onFileSelect, selectedFile }: Props) => {
const [ key, setKey ] = React.useState(0); const [ key, setKey ] = React.useState(0);
const tree = React.useMemo(() => { const tree = React.useMemo(() => {
return composeFileTree(data); return composeFileTree(data);
...@@ -34,7 +35,7 @@ const CodeEditorFileExplorer = ({ data, onFileSelect }: Props) => { ...@@ -34,7 +35,7 @@ const CodeEditorFileExplorer = ({ data, onFileSelect }: Props) => {
return ( return (
<Box> <Box>
<CoderEditorCollapseButton onClick={ handleCollapseButtonClick } label="Collapse folders"/> <CoderEditorCollapseButton onClick={ handleCollapseButtonClick } label="Collapse folders"/>
<CodeEditorFileTree key={ key } tree={ tree } onItemClick={ handleFileClick } isCollapsed={ key > 0 }/> <CodeEditorFileTree key={ key } tree={ tree } onItemClick={ handleFileClick } isCollapsed={ key > 0 } selectedFile={ selectedFile }/>
</Box> </Box>
); );
}; };
......
...@@ -15,9 +15,10 @@ interface Props { ...@@ -15,9 +15,10 @@ interface Props {
level?: number; level?: number;
isCollapsed?: boolean; isCollapsed?: boolean;
onItemClick: (event: React.MouseEvent) => void; onItemClick: (event: React.MouseEvent) => void;
selectedFile: string;
} }
const CodeEditorFileTree = ({ tree, level = 0, onItemClick, isCollapsed }: Props) => { const CodeEditorFileTree = ({ tree, level = 0, onItemClick, isCollapsed, selectedFile }: Props) => {
const itemProps: ChakraProps = { const itemProps: ChakraProps = {
borderWidth: '0px', borderWidth: '0px',
cursor: 'pointer', cursor: 'pointer',
...@@ -55,7 +56,13 @@ const CodeEditorFileTree = ({ tree, level = 0, onItemClick, isCollapsed }: Props ...@@ -55,7 +56,13 @@ const CodeEditorFileTree = ({ tree, level = 0, onItemClick, isCollapsed }: Props
{ leafName } { leafName }
</AccordionButton> </AccordionButton>
<AccordionPanel p="0"> <AccordionPanel p="0">
<CodeEditorFileTree tree={ leaf.children } level={ level + 1 } onItemClick={ onItemClick } isCollapsed={ isCollapsed }/> <CodeEditorFileTree
tree={ leaf.children }
level={ level + 1 }
onItemClick={ onItemClick }
isCollapsed={ isCollapsed }
selectedFile={ selectedFile }
/>
</AccordionPanel> </AccordionPanel>
</> </>
) } ) }
...@@ -77,8 +84,9 @@ const CodeEditorFileTree = ({ tree, level = 0, onItemClick, isCollapsed }: Props ...@@ -77,8 +84,9 @@ const CodeEditorFileTree = ({ tree, level = 0, onItemClick, isCollapsed }: Props
alignItems="center" alignItems="center"
overflow="hidden" overflow="hidden"
_hover={{ _hover={{
bgColor: rowHoverBgColor, bgColor: selectedFile === leaf.file_path ? colors.selection.bgColorSelected : rowHoverBgColor,
}} }}
bgColor={ selectedFile === leaf.file_path ? colors.selection.bgColorSelected : 'none' }
> >
<Icon as={ icon } boxSize="16px" mr="4px"/> <Icon as={ icon } boxSize="16px" mr="4px"/>
{ leafName } { leafName }
......
...@@ -13,9 +13,10 @@ interface Props { ...@@ -13,9 +13,10 @@ interface Props {
monaco: Monaco | undefined; monaco: Monaco | undefined;
data: Array<File>; data: Array<File>;
onFileSelect: (index: number, lineNumber?: number) => void; onFileSelect: (index: number, lineNumber?: number) => void;
selectedFile: string;
} }
const CodeEditorSideBar = ({ onFileSelect, data, monaco }: Props) => { const CodeEditorSideBar = ({ onFileSelect, data, monaco, selectedFile }: Props) => {
const [ isStuck, setIsStuck ] = React.useState(false); const [ isStuck, setIsStuck ] = React.useState(false);
...@@ -59,7 +60,7 @@ const CodeEditorSideBar = ({ onFileSelect, data, monaco }: Props) => { ...@@ -59,7 +60,7 @@ const CodeEditorSideBar = ({ onFileSelect, data, monaco }: Props) => {
<TabPanels> <TabPanels>
<TabPanel p={ 0 }> <TabPanel p={ 0 }>
<CodeEditorFileExplorer data={ data } onFileSelect={ onFileSelect }/> <CodeEditorFileExplorer data={ data } onFileSelect={ onFileSelect } selectedFile={ selectedFile }/>
</TabPanel> </TabPanel>
<TabPanel p={ 0 }> <TabPanel p={ 0 }>
<CodeEditorSearch data={ data } onFileSelect={ onFileSelect } monaco={ monaco } isInputStuck={ isStuck }/> <CodeEditorSearch data={ data } onFileSelect={ onFileSelect } monaco={ monaco } isInputStuck={ isStuck }/>
......
...@@ -50,7 +50,7 @@ const CodeEditorTab = ({ isActive, path, onClick, onClose, isCloseDisabled, tabs ...@@ -50,7 +50,7 @@ const CodeEditorTab = ({ isActive, path, onClick, onClose, isCloseDisabled, tabs
borderBottomColor={ isActive ? 'transparent' : borderColorInactive } borderBottomColor={ isActive ? 'transparent' : borderColorInactive }
color={ isActive ? color : colorInactive } color={ isActive ? color : colorInactive }
alignItems="center" alignItems="center"
fontWeight={ 500 } fontWeight={ 400 }
cursor="pointer" cursor="pointer"
onClick={ handleClick } onClick={ handleClick }
_hover={{ _hover={{
......
...@@ -9,5 +9,8 @@ export default function useColors() { ...@@ -9,5 +9,8 @@ export default function useColors() {
bgColorHover: useColorModeValue('rgba(184, 184, 184, 0.31)', 'rgba(90, 93, 94, 0.31)'), bgColorHover: useColorModeValue('rgba(184, 184, 184, 0.31)', 'rgba(90, 93, 94, 0.31)'),
color: '#616161', color: '#616161',
}, },
selection: {
bgColorSelected: useColorModeValue('#e4e6f1', '#37373d'),
},
}; };
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment