mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
cleanup types and revert data for the onStart and onEnd events
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
44d9e732b1
commit
a25540b9ad
@ -4,7 +4,7 @@ import React, { Fragment } from "react";
|
|||||||
import { observer } from "mobx-react";
|
import { observer } from "mobx-react";
|
||||||
import { Trans } from "@lingui/macro";
|
import { Trans } from "@lingui/macro";
|
||||||
import { autobind, cssNames, prevDefault } from "../../utils";
|
import { autobind, cssNames, prevDefault } from "../../utils";
|
||||||
import { ResizingAnchor, ResizeEventData, ResizeDirection, ResizeSide } from "../resizing-anchor";
|
import { ResizingAnchor, ResizeDragEvent, ResizeDirection } from "../resizing-anchor";
|
||||||
import { Icon } from "../icon";
|
import { Icon } from "../icon";
|
||||||
import { Tabs } from "../tabs/tabs";
|
import { Tabs } from "../tabs/tabs";
|
||||||
import { MenuItem } from "../menu";
|
import { MenuItem } from "../menu";
|
||||||
@ -37,7 +37,7 @@ export class Dock extends React.Component<Props> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onResize = ({ movementY }: ResizeEventData) => {
|
onResize = ({ movementY }: ResizeDragEvent) => {
|
||||||
const { isOpen, close, height, setHeight, minHeight, defaultHeight } = dockStore;
|
const { isOpen, close, height, setHeight, minHeight, defaultHeight } = dockStore;
|
||||||
console.log(height, movementY)
|
console.log(height, movementY)
|
||||||
const newHeight = height + movementY;
|
const newHeight = height + movementY;
|
||||||
@ -51,7 +51,7 @@ export class Dock extends React.Component<Props> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onKeydown = (evt: React.KeyboardEvent<HTMLElement>) => {
|
onKeydown = (evt: React.KeyboardEvent<HTMLElement>) => {
|
||||||
const { close, closeTab, selectedTab, fullSize, toggleFillSize } = dockStore;
|
const { close, closeTab, selectedTab } = dockStore;
|
||||||
if (!selectedTab) return;
|
if (!selectedTab) return;
|
||||||
const { code, ctrlKey, shiftKey } = evt.nativeEvent;
|
const { code, ctrlKey, shiftKey } = evt.nativeEvent;
|
||||||
if (shiftKey && code === "Escape") {
|
if (shiftKey && code === "Escape") {
|
||||||
|
|||||||
@ -30,20 +30,37 @@ interface Props {
|
|||||||
direction: ResizeDirection;
|
direction: ResizeDirection;
|
||||||
disabled?: boolean;
|
disabled?: boolean;
|
||||||
placement?: ResizeSide;
|
placement?: ResizeSide;
|
||||||
onStart?: () => void;
|
onStart?: (data: ResizeStartEvent) => void;
|
||||||
onDrag?: (data: ResizeEventData) => void;
|
onDrag?: (data: ResizeDragEvent) => void;
|
||||||
onEnd?: () => void;
|
onEnd?: (data: ResizeEndEvent) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ResizeEventData {
|
interface InitialPosition {
|
||||||
initX: number;
|
initX: number;
|
||||||
initY: number;
|
initY: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface CurrentPosition {
|
||||||
pageX: number;
|
pageX: number;
|
||||||
pageY: number;
|
pageY: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface MovementData {
|
||||||
movementX: number;
|
movementX: number;
|
||||||
movementY: number;
|
movementY: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type ResizeStartEvent = InitialPosition
|
||||||
|
export type ResizeDragEvent = InitialPosition & CurrentPosition & MovementData
|
||||||
|
export type ResizeEndEvent = InitialPosition & CurrentPosition
|
||||||
|
|
||||||
|
function calculateMovement(from: CurrentPosition, to: CurrentPosition): MovementData {
|
||||||
|
return {
|
||||||
|
movementX: from.pageX - to.pageX,
|
||||||
|
movementY: from.pageY - to.pageY,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const defaultProps: Partial<Props> = {
|
const defaultProps: Partial<Props> = {
|
||||||
onStart: noop,
|
onStart: noop,
|
||||||
onDrag: noop,
|
onDrag: noop,
|
||||||
@ -53,27 +70,25 @@ const defaultProps: Partial<Props> = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class ResizingAnchor extends React.PureComponent<Props> {
|
export class ResizingAnchor extends React.PureComponent<Props> {
|
||||||
@observable startingPosition?: { initX: number, initY: number };
|
@observable startingPosition?: ResizeStartEvent
|
||||||
@observable lastEvent?: MouseEvent
|
@observable lastEvent?: MouseEvent
|
||||||
|
|
||||||
@computed get firstDragEvent() {
|
|
||||||
return this.lastEvent == null
|
|
||||||
}
|
|
||||||
|
|
||||||
static defaultProps = defaultProps
|
static defaultProps = defaultProps
|
||||||
static IS_RESIZING = "resizing"
|
static IS_RESIZING = "resizing"
|
||||||
|
|
||||||
constructor(props: Props) {
|
constructor(props: Props) {
|
||||||
super(props);
|
super(props)
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillUnmount() {
|
componentWillUnmount() {
|
||||||
document.removeEventListener("mousemove", this.onDrag);
|
document.removeEventListener("mousemove", this.onDrag)
|
||||||
document.removeEventListener("mouseup", this.onDragEnd);
|
document.removeEventListener("mouseup", this.onDragEnd)
|
||||||
}
|
}
|
||||||
|
|
||||||
@action
|
@action
|
||||||
onDragInit = ({ pageX, pageY, buttons }: React.MouseEvent<any>) => {
|
onDragInit = ({ pageX, pageY, buttons }: React.MouseEvent<any>) => {
|
||||||
|
const { onStart } = this.props
|
||||||
|
|
||||||
if (buttons !== 1) {
|
if (buttons !== 1) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -87,35 +102,29 @@ export class ResizingAnchor extends React.PureComponent<Props> {
|
|||||||
initY: pageY
|
initY: pageY
|
||||||
}
|
}
|
||||||
this.lastEvent = undefined
|
this.lastEvent = undefined
|
||||||
}
|
|
||||||
|
|
||||||
calculateMovement = (event: MouseEvent) => {
|
onStart(this.startingPosition)
|
||||||
return {
|
|
||||||
movementX: this.lastEvent.pageX - event.pageX,
|
|
||||||
movementY: this.lastEvent.pageY - event.pageY
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onDrag = _.throttle((event: MouseEvent) => {
|
onDrag = _.throttle((event: MouseEvent) => {
|
||||||
const { onDrag, onStart } = this.props
|
const { onDrag } = this.props
|
||||||
const { initX, initY } = this.startingPosition
|
const { initX, initY } = this.startingPosition
|
||||||
const { pageX, pageY } = event
|
const { pageX, pageY } = event
|
||||||
|
const { movementX, movementY } = calculateMovement(this.lastEvent ?? event, event)
|
||||||
|
|
||||||
if (this.firstDragEvent) onStart()
|
|
||||||
|
|
||||||
const { movementX, movementY } = this.firstDragEvent ? event : this.calculateMovement(event)
|
|
||||||
onDrag({ movementX, movementY, pageX, pageY, initY, initX })
|
onDrag({ movementX, movementY, pageX, pageY, initY, initX })
|
||||||
|
|
||||||
this.lastEvent = event
|
this.lastEvent = event
|
||||||
}, 100)
|
}, 100)
|
||||||
|
|
||||||
@action
|
@action
|
||||||
onDragEnd = (event: MouseEvent) => {
|
onDragEnd = (event: MouseEvent) => {
|
||||||
const { onEnd } = this.props;
|
const { onEnd } = this.props
|
||||||
|
const { initX, initY } = this.startingPosition
|
||||||
|
const { pageX, pageY } = event
|
||||||
|
|
||||||
onEnd()
|
onEnd(({ initX, initY, pageX, pageY }))
|
||||||
document.removeEventListener("mousemove", this.onDrag);
|
document.removeEventListener("mousemove", this.onDrag)
|
||||||
document.removeEventListener("mouseup", this.onDragEnd);
|
document.removeEventListener("mouseup", this.onDragEnd)
|
||||||
document.body.classList.remove(ResizingAnchor.IS_RESIZING)
|
document.body.classList.remove(ResizingAnchor.IS_RESIZING)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user