1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
import { action, observable } from "mobx";
import * as React from "react";
interface DividerProps {
index: number
xMargin: number
setColumnStartXCoords: (movementX: number, colIndex: number) => void
}
export default class Divider extends React.Component<DividerProps>{
@observable private isHoverActive = false;
@observable private isResizingActive = false;
@action
private registerResizing = (e: React.PointerEvent<HTMLDivElement>) => {
e.stopPropagation();
e.preventDefault();
window.removeEventListener("pointermove", this.onPointerMove);
window.removeEventListener("pointerup", this.onPointerUp);
window.addEventListener("pointermove", this.onPointerMove);
window.addEventListener("pointerup", this.onPointerUp);
this.isResizingActive = true;
}
@action
private onPointerUp = () => {
this.isResizingActive = false;
this.isHoverActive = false;
window.removeEventListener("pointermove", this.onPointerMove);
window.removeEventListener("pointerup", this.onPointerUp);
}
@action
onPointerMove = ({ movementX }: PointerEvent) => {
this.props.setColumnStartXCoords(movementX, this.props.index)
}
render() {
return (
<div className="columnResizer"
style={{
display: "flex",
alignItems: "center",
cursor: "col-resize"
}}
onPointerEnter={action(() => this.isHoverActive = true)}
onPointerLeave={action(() => !this.isResizingActive && (this.isHoverActive = false))}
>
<div className="columnResizer-handler" onPointerDown={e => this.registerResizing(e)}
style={{
height: "95%",
width: 12,
borderRight: "4px solid #282828",
borderLeft: "4px solid #282828",
margin: "0px 10px"
}}
/>
</div>
)
}
}
|