Skip to content

Commit 0bf7b56

Browse files
author
Ives van Hoorne
committed
Make DevTools work with touch
1 parent 6d704d0 commit 0bf7b56

File tree

1 file changed

+38
-4
lines changed
  • src/app/components/sandbox/Preview/DevTools

1 file changed

+38
-4
lines changed

src/app/components/sandbox/Preview/DevTools/index.js

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,15 @@ function unFocus(document, window) {
9999
}
100100
}
101101

102+
function normalizeTouchEvent(event: TouchEvent): MouseEvent {
103+
// $FlowIssue
104+
return {
105+
...event,
106+
clientX: event.touches[0].clientX,
107+
clientY: event.touches[0].clientY,
108+
};
109+
}
110+
102111
const PANES = { [console.title]: console };
103112

104113
export default class DevTools extends React.PureComponent<Props, State> {
@@ -126,6 +135,8 @@ export default class DevTools extends React.PureComponent<Props, State> {
126135
componentDidMount() {
127136
document.addEventListener('mouseup', this.handleMouseUp, false);
128137
document.addEventListener('mousemove', this.handleMouseMove, false);
138+
document.addEventListener('touchend', this.handleTouchEnd, false);
139+
document.addEventListener('touchmove', this.handleTouchMove, false);
129140

130141
if (this.props.shouldExpandDevTools) {
131142
this.openDevTools();
@@ -135,6 +146,8 @@ export default class DevTools extends React.PureComponent<Props, State> {
135146
componentWillUnmount() {
136147
document.removeEventListener('mouseup', this.handleMouseUp, false);
137148
document.removeEventListener('mousemove', this.handleMouseMove, false);
149+
document.removeEventListener('touchend', this.handleTouchEnd, false);
150+
document.removeEventListener('touchmove', this.handleTouchMove, false);
138151
}
139152

140153
setHidden = (hidden: boolean) => {
@@ -178,7 +191,13 @@ export default class DevTools extends React.PureComponent<Props, State> {
178191
});
179192
};
180193

181-
handleMouseDown = (event: MouseEvent) => {
194+
handleTouchStart = (event: TouchEvent) => {
195+
if (event.touches && event.touches.length) {
196+
this.handleMouseDown(normalizeTouchEvent(event));
197+
}
198+
};
199+
200+
handleMouseDown = (event: Event & { clientX: number, clientY: number }) => {
182201
if (!this.state.mouseDown) {
183202
unFocus(document, window);
184203
this.setState({
@@ -190,7 +209,13 @@ export default class DevTools extends React.PureComponent<Props, State> {
190209
}
191210
};
192211

193-
handleMouseUp = (e: MouseEvent) => {
212+
handleTouchEnd = (event: TouchEvent) => {
213+
if (event.touches && event.touches.length) {
214+
this.handleMouseUp(normalizeTouchEvent(event));
215+
}
216+
};
217+
218+
handleMouseUp = (e: Event & { clientX: number, clientY: number }) => {
194219
if (this.state.mouseDown) {
195220
this.setState({ mouseDown: false });
196221
this.props.setDragging(false);
@@ -213,7 +238,13 @@ export default class DevTools extends React.PureComponent<Props, State> {
213238
}
214239
};
215240

216-
handleMouseMove = (event: MouseEvent) => {
241+
handleTouchMove = (event: TouchEvent) => {
242+
if (event.touches && event.touches.length) {
243+
this.handleMouseMove(normalizeTouchEvent(event));
244+
}
245+
};
246+
247+
handleMouseMove = (event: Event & { clientX: number, clientY: number }) => {
217248
if (this.state.mouseDown) {
218249
const newHeight =
219250
this.state.startHeight - (event.clientY - this.state.startY);
@@ -283,7 +314,10 @@ export default class DevTools extends React.PureComponent<Props, State> {
283314
display: 'flex',
284315
}}
285316
>
286-
<Header onMouseDown={this.handleMouseDown}>
317+
<Header
318+
onTouchStart={this.handleTouchStart}
319+
onMouseDown={this.handleMouseDown}
320+
>
287321
{Object.keys(PANES).map(title => (
288322
<Tab key={title}>
289323
{title}

0 commit comments

Comments
 (0)