Skip to content

Commit d0f539b

Browse files
committed
refactor(Dashboard): Split editor panes
1 parent 825b75e commit d0f539b

File tree

7 files changed

+622
-39
lines changed

7 files changed

+622
-39
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { CSSProperties, LegacyRef, PureComponent, ReactNode } from 'react';
2+
3+
interface PaneProps {
4+
className: string;
5+
children: ReactNode;
6+
size?: string | number;
7+
split?: 'vertical' | 'horizontal';
8+
style?: CSSProperties;
9+
eleRef: LegacyRef<HTMLDivElement>;
10+
}
11+
12+
export class Pane extends PureComponent<PaneProps> {
13+
render() {
14+
const {
15+
children,
16+
className,
17+
split,
18+
style: styleProps,
19+
size,
20+
eleRef,
21+
} = this.props;
22+
23+
const classes = ['Pane', split, className];
24+
25+
let style: CSSProperties = {
26+
flex: 1,
27+
position: 'relative',
28+
outline: 'none',
29+
};
30+
31+
if (size !== undefined) {
32+
if (split === 'vertical') {
33+
style.width = size;
34+
} else {
35+
style.height = size;
36+
style.display = 'flex';
37+
}
38+
style.flex = 'none';
39+
}
40+
41+
style = Object.assign({}, style, styleProps || {});
42+
43+
return (
44+
<div ref={eleRef} className={classes.join(' ')} style={style}>
45+
{children}
46+
</div>
47+
);
48+
}
49+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import { Component, CSSProperties, MouseEvent, TouchEvent } from 'react';
2+
3+
export const RESIZER_DEFAULT_CLASSNAME = 'Resizer';
4+
5+
interface ResizerProps {
6+
className: string;
7+
onClick?: (e: MouseEvent<HTMLSpanElement>) => void;
8+
onDoubleClick?: (e: MouseEvent<HTMLSpanElement>) => void;
9+
onMouseDown: (e: MouseEvent<HTMLSpanElement>) => void;
10+
onTouchStart: (e: TouchEvent<HTMLSpanElement>) => void;
11+
onTouchEnd: (e: TouchEvent<HTMLSpanElement>) => void;
12+
split?: 'vertical' | 'horizontal';
13+
style?: CSSProperties;
14+
resizerClassName?: string;
15+
}
16+
17+
export class Resizer extends Component<ResizerProps> {
18+
static defaultProps = {
19+
resizerClassName: RESIZER_DEFAULT_CLASSNAME,
20+
};
21+
22+
render() {
23+
const {
24+
className,
25+
onClick,
26+
onDoubleClick,
27+
onMouseDown,
28+
onTouchEnd,
29+
onTouchStart,
30+
resizerClassName,
31+
split,
32+
style,
33+
} = this.props;
34+
const classes = [resizerClassName, split, className];
35+
36+
return (
37+
<span
38+
role="presentation"
39+
className={classes.join(' ')}
40+
style={style}
41+
onMouseDown={event => onMouseDown(event)}
42+
onTouchStart={event => {
43+
event.preventDefault();
44+
onTouchStart(event);
45+
}}
46+
onTouchEnd={event => {
47+
event.preventDefault();
48+
onTouchEnd(event);
49+
}}
50+
onClick={event => {
51+
if (onClick) {
52+
event.preventDefault();
53+
onClick(event);
54+
}
55+
}}
56+
onDoubleClick={event => {
57+
if (onDoubleClick) {
58+
event.preventDefault();
59+
onDoubleClick(event);
60+
}
61+
}}
62+
/>
63+
);
64+
}
65+
}

0 commit comments

Comments
 (0)