Skip to content

Commit bf1bfc1

Browse files
feat(panel): Resizable side panel
Resolves: flyteorg/flyte#5102 Signed-off-by: Chi-Sheng Liu <chishengliu@chishengliu.com>
1 parent eb7fe2b commit bf1bfc1

File tree

2 files changed

+32
-4
lines changed

2 files changed

+32
-4
lines changed

packages/oss-console/src/components/common/DetailsPanel.tsx

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,24 @@ import Paper from '@mui/material/Paper';
44
import { useTheme } from '@mui/material/styles';
55
import styled from '@mui/system/styled';
66
import { detailsPanelId } from '@clients/common/constants';
7-
import { detailsPanelWidth } from './constants';
7+
import classnames from 'classnames';
8+
import { defaultDetailsPanelWidth } from './constants';
89

910
const StyledPaper = styled(Paper)(({ theme }) => ({
1011
display: 'flex',
1112
flex: '1 1 100%',
1213
maxHeight: '100%',
1314
paddingBottom: theme.spacing(2),
1415
pointerEvents: 'initial',
15-
width: detailsPanelWidth,
16+
'& .dragger': {
17+
width: '3px',
18+
cursor: 'ew-resize',
19+
position: 'absolute',
20+
top: 0,
21+
left: 0,
22+
bottom: 0,
23+
zIndex: 100,
24+
},
1625
}));
1726

1827
interface DetailsPanelProps {
@@ -29,6 +38,24 @@ export const DetailsPanel: React.FC<PropsWithChildren<DetailsPanelProps>> = ({
2938
open = false,
3039
}) => {
3140
const theme = useTheme();
41+
42+
const [panelWidth, setPanelWidth] = React.useState(defaultDetailsPanelWidth);
43+
44+
const handleMouseDown = (e: React.MouseEvent) => {
45+
document.addEventListener('mouseup', handleMouseUp, true);
46+
document.addEventListener('mousemove', handleMouseMove, true);
47+
};
48+
49+
const handleMouseUp = (e: React.MouseEvent) => {
50+
document.removeEventListener('mouseup', handleMouseUp, true);
51+
document.removeEventListener('mousemove', handleMouseMove, true);
52+
};
53+
54+
const handleMouseMove = React.useCallback((e: React.MouseEvent) => {
55+
const newWidth = document.body.offsetWidth - e.clientX;
56+
setPanelWidth(newWidth);
57+
}, []);
58+
3259
return (
3360
<Drawer
3461
anchor="right"
@@ -50,7 +77,8 @@ export const DetailsPanel: React.FC<PropsWithChildren<DetailsPanelProps>> = ({
5077
open={open}
5178
key="detailsPanel"
5279
>
53-
<StyledPaper id={detailsPanelId} square>
80+
<StyledPaper id={detailsPanelId} square sx={{ width: panelWidth }}>
81+
<div onMouseDown={(e) => handleMouseDown(e)} className={classnames('dragger')} />
5482
{children}
5583
</StyledPaper>
5684
</Drawer>

packages/oss-console/src/components/common/constants.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { env } from '@clients/common/environment';
22
import { InterpreterOptions } from 'xstate';
33

4-
export const detailsPanelWidth = 432;
4+
export const defaultDetailsPanelWidth = 432;
55

66
export const labels = {
77
moreOptionsButton: 'Display more options',

0 commit comments

Comments
 (0)