Skip to content
This repository has been archived by the owner on Nov 22, 2024. It is now read-only.

Commit

Permalink
Properly make use of status events provided by DevTools server
Browse files Browse the repository at this point in the history
Summary: Uses the new statuses emitted by DevTools in facebook/react#22848 to better handle the connection state when connecting to DevTools from Flipper.

Reviewed By: bvaughn

Differential Revision: D32891240

fbshipit-source-id: 142d9996e05b5113e6dca28074c461d5a5acd38f
  • Loading branch information
Juan Tejada authored and facebook-github-bot committed Dec 7, 2021
1 parent 297697c commit e75238c
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 3 deletions.
30 changes: 28 additions & 2 deletions desktop/plugins/public/reactdevtools/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -233,9 +233,35 @@ export function devicePlugin(client: DevicePluginClient) {
);
startResult = devToolsInstance.module
.setContentDOMNode(devToolsNode)
.setStatusListener((status: string) => {
.setStatusListener((message: string, status: string) => {
// TODO: since devToolsInstance is an instance, we are probably leaking memory here
setStatus(ConnectionStatus.Initializing, status);
if (typeof status === 'undefined') {
// Preserves old behavior in case DevTools doesn't provide status,
// which may happen if loading an older version of DevTools.
setStatus(ConnectionStatus.Initializing, message);
return;
}

switch (status) {
case 'server-connected': {
setStatus(ConnectionStatus.Initializing, message);
break;
}
case 'devtools-connected': {
if (pollHandle) {
clearTimeout(pollHandle);
}
setStatus(ConnectionStatus.Connected, message);
break;
}
case 'error': {
if (pollHandle) {
clearTimeout(pollHandle);
}
setStatus(ConnectionStatus.Error, message);
break;
}
}
})
.startServer(DEV_TOOLS_PORT, 'localhost', undefined, {
surface: 'flipper',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ type LoggerOptions = {
surface?: string;
};

type StatusTypes = 'server-connected' | 'devtools-connected' | 'error';
type StatusListener = (message: string, status: StatusTypes) => void;

declare module 'react-devtools-core/standalone' {
interface DevTools {
setContentDOMNode(node: HTMLElement): this;
Expand All @@ -25,7 +28,7 @@ declare module 'react-devtools-core/standalone' {
httpsOptions?: ServerOptions,
loggerOptions?: LoggerOptions,
): {close: () => void};
setStatusListener(listener: (message: string) => void): this;
setStatusListener(listener: StatusListener): this;
}
const DevTools: DevTools;
export default DevTools;
Expand Down

0 comments on commit e75238c

Please sign in to comment.