mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Make resizing fully-functional
Signed-off-by: Alex Culliere <alozhkin@mirantis.com>
This commit is contained in:
parent
42f68b5db3
commit
6ee416b381
@ -27,15 +27,26 @@ export interface TableCellProps extends React.DOMAttributes<HTMLDivElement> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type ResizeHandlerState = {
|
type ResizeHandlerState = {
|
||||||
mousePosX: number,
|
mousePosX?: number,
|
||||||
currentColumn?: HTMLDivElement;
|
|
||||||
nextColumn?: HTMLDivElement;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export class TableCell extends React.Component<TableCellProps> {
|
/**
|
||||||
|
* Ergonomic rate for throttling mouse events
|
||||||
|
* when resizing, in miliseconds.
|
||||||
|
* Represents optimal balance between user-facing latency
|
||||||
|
* and rendering performance
|
||||||
|
*/
|
||||||
|
const ERGONOMIC_THROTTLE_RATE = 10;
|
||||||
|
|
||||||
|
export class TableCell extends React.Component<TableCellProps, ResizeHandlerState> {
|
||||||
private resizeHandlerState?: ResizeHandlerState;
|
private resizeHandlerState?: ResizeHandlerState;
|
||||||
private cellContainer: React.RefObject<HTMLDivElement> = React.createRef();
|
private cellContainer: React.RefObject<HTMLDivElement> = React.createRef();
|
||||||
|
|
||||||
|
constructor(props: TableCellProps) {
|
||||||
|
super(props);
|
||||||
|
this.state = {};
|
||||||
|
}
|
||||||
|
|
||||||
@autobind()
|
@autobind()
|
||||||
onClick(evt: React.MouseEvent<HTMLDivElement>) {
|
onClick(evt: React.MouseEvent<HTMLDivElement>) {
|
||||||
if (this.props.onClick) {
|
if (this.props.onClick) {
|
||||||
@ -91,7 +102,7 @@ export class TableCell extends React.Component<TableCellProps> {
|
|||||||
document.removeEventListener("mouseup", this.mouseUpHandler.bind(this));
|
document.removeEventListener("mouseup", this.mouseUpHandler.bind(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
mouseMoveHandler(event: MouseEvent) {
|
mouseMoveHandler = throttle((event: MouseEvent) => {
|
||||||
if (!this.resizeHandlerState) {
|
if (!this.resizeHandlerState) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -100,7 +111,8 @@ export class TableCell extends React.Component<TableCellProps> {
|
|||||||
const currentWidth = this.cellContainer.current.offsetWidth;
|
const currentWidth = this.cellContainer.current.offsetWidth;
|
||||||
|
|
||||||
this.props?._onResize(currentWidth + diffPosX);
|
this.props?._onResize(currentWidth + diffPosX);
|
||||||
}
|
this.resizeHandlerState.mousePosX = event.pageX;
|
||||||
|
}, ERGONOMIC_THROTTLE_RATE);
|
||||||
|
|
||||||
mouseUpHandler() {
|
mouseUpHandler() {
|
||||||
this.removeMouseEventListeners();
|
this.removeMouseEventListeners();
|
||||||
@ -116,14 +128,14 @@ export class TableCell extends React.Component<TableCellProps> {
|
|||||||
});
|
});
|
||||||
const content = displayBooleans(displayBoolean, title || children);
|
const content = displayBooleans(displayBoolean, title || children);
|
||||||
const cellStyle: React.CSSProperties = size !== undefined ?
|
const cellStyle: React.CSSProperties = size !== undefined ?
|
||||||
{ flexBasis: `${size}px` } :
|
{ minWidth: `${size}px` } :
|
||||||
{};
|
{};
|
||||||
const resizeHandlers: React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement> = {
|
const resizeHandlers: React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement> = {
|
||||||
onMouseDown: event => {
|
onMouseDown: event => {
|
||||||
this.addMouseEventListeners();
|
|
||||||
this.resizeHandlerState = {
|
this.resizeHandlerState = {
|
||||||
mousePosX: event.pageX
|
mousePosX: event.pageX
|
||||||
};
|
};
|
||||||
|
this.addMouseEventListeners();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user