handle error when device disconected
Summary: Log views were being generated, this seems like a reasonable solution. Reviewed By: zats Differential Revision: D49547368 fbshipit-source-id: 575dd81a7c9b9a831d1dfb46088c2f5e1d731f22
This commit is contained in:
committed by
Facebook GitHub Bot
parent
f2e402e6e9
commit
10d5a2933a
@@ -19,6 +19,10 @@ export type Events = {
|
|||||||
setTraversalMode: SetTraversalModeEvent;
|
setTraversalMode: SetTraversalModeEvent;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type Methods = {
|
||||||
|
onTraversalModeChange(params: {mode: TraversalMode}): Promise<void>;
|
||||||
|
};
|
||||||
|
|
||||||
export type SetTraversalModeEvent = {
|
export type SetTraversalModeEvent = {
|
||||||
mode: TraversalMode;
|
mode: TraversalMode;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ export type UIState = {
|
|||||||
filterMainThreadMonitoring: Atom<boolean>;
|
filterMainThreadMonitoring: Atom<boolean>;
|
||||||
|
|
||||||
supportedTraversalModes: Atom<TraversalMode[]>;
|
supportedTraversalModes: Atom<TraversalMode[]>;
|
||||||
currentTraversalMode: Atom<TraversalMode>;
|
traversalMode: Atom<TraversalMode>;
|
||||||
};
|
};
|
||||||
|
|
||||||
//enumerates the keys of input type and casts each to ReadOnlyAtom, this is so we only expose read only atoms to the UI
|
//enumerates the keys of input type and casts each to ReadOnlyAtom, this is so we only expose read only atoms to the UI
|
||||||
@@ -113,7 +113,7 @@ export type UIActions = {
|
|||||||
onCollapseAllNonAncestors: (nodeId: Id) => void;
|
onCollapseAllNonAncestors: (nodeId: Id) => void;
|
||||||
onCollapseAllRecursively: (nodeId: Id) => void;
|
onCollapseAllRecursively: (nodeId: Id) => void;
|
||||||
ensureAncestorsExpanded: (nodeId: Id) => void;
|
ensureAncestorsExpanded: (nodeId: Id) => void;
|
||||||
setCurrentTraversalMode: (mode: TraversalMode) => void;
|
onSetTraversalMode: (mode: TraversalMode) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type SelectionSource =
|
export type SelectionSource =
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ export const TreeControls: React.FC = () => {
|
|||||||
|
|
||||||
const frameworkEventMetadata = useValue(instance.frameworkEventMetadata);
|
const frameworkEventMetadata = useValue(instance.frameworkEventMetadata);
|
||||||
|
|
||||||
const currentTraversalMode = useValue(instance.uiState.currentTraversalMode);
|
const currentTraversalMode = useValue(instance.uiState.traversalMode);
|
||||||
const supportedTraversalModes = useValue(
|
const supportedTraversalModes = useValue(
|
||||||
instance.uiState.supportedTraversalModes,
|
instance.uiState.supportedTraversalModes,
|
||||||
);
|
);
|
||||||
@@ -65,6 +65,8 @@ export const TreeControls: React.FC = () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const isConnected = useValue(instance.uiState.isConnected);
|
||||||
|
|
||||||
const menus = supportedTraversalModes.map((mode) => ({
|
const menus = supportedTraversalModes.map((mode) => ({
|
||||||
key: mode,
|
key: mode,
|
||||||
label: labelForMode(mode),
|
label: labelForMode(mode),
|
||||||
@@ -74,18 +76,18 @@ export const TreeControls: React.FC = () => {
|
|||||||
<Layout.Horizontal gap="medium" pad="medium">
|
<Layout.Horizontal gap="medium" pad="medium">
|
||||||
{supportedTraversalModes.length > 1 ? (
|
{supportedTraversalModes.length > 1 ? (
|
||||||
<Dropdown
|
<Dropdown
|
||||||
|
disabled={!isConnected}
|
||||||
menu={{
|
menu={{
|
||||||
selectable: true,
|
selectable: true,
|
||||||
selectedKeys: [currentTraversalMode],
|
selectedKeys: [currentTraversalMode],
|
||||||
items: menus,
|
items: menus,
|
||||||
onSelect: async (event) => {
|
onSelect: async (event) => {
|
||||||
const mode = event.selectedKeys[0] as TraversalMode;
|
const mode = event.selectedKeys[0] as TraversalMode;
|
||||||
instance.uiActions.setCurrentTraversalMode(mode); // update UI
|
instance.uiActions.onSetTraversalMode(mode); // update UI
|
||||||
await instance.onTraversalModeChange(mode); // update mobile client
|
|
||||||
},
|
},
|
||||||
}}>
|
}}>
|
||||||
<Tooltip title="Debugger Mode">
|
<Tooltip title={isConnected ? 'Debugger Mode' : 'App disconnected'}>
|
||||||
<Button shape="circle">
|
<Button disabled={!isConnected} shape="circle">
|
||||||
<AppstoreOutlined />
|
<AppstoreOutlined />
|
||||||
</Button>
|
</Button>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ export const Visualization2D: React.FC<
|
|||||||
const hoveredNodes = useValue(instance.uiState.hoveredNodes);
|
const hoveredNodes = useValue(instance.uiState.hoveredNodes);
|
||||||
const hoveredNodeId = head(hoveredNodes);
|
const hoveredNodeId = head(hoveredNodes);
|
||||||
const wireFrameMode = useValue(instance.uiState.wireFrameMode);
|
const wireFrameMode = useValue(instance.uiState.wireFrameMode);
|
||||||
const traversalMode = useValue(instance.uiState.currentTraversalMode);
|
const traversalMode = useValue(instance.uiState.traversalMode);
|
||||||
|
|
||||||
const [targetMode, setTargetMode] = useState<TargetModeState>({
|
const [targetMode, setTargetMode] = useState<TargetModeState>({
|
||||||
state: 'disabled',
|
state: 'disabled',
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import {
|
|||||||
SnapshotInfo,
|
SnapshotInfo,
|
||||||
ClientNode,
|
ClientNode,
|
||||||
FrameworkEventMetadata,
|
FrameworkEventMetadata,
|
||||||
|
Methods,
|
||||||
} from './ClientTypes';
|
} from './ClientTypes';
|
||||||
import {
|
import {
|
||||||
UIState,
|
UIState,
|
||||||
@@ -40,14 +41,6 @@ import {uiActions} from './plugin/uiActions';
|
|||||||
import {first} from 'lodash';
|
import {first} from 'lodash';
|
||||||
import {getNode} from './utils/map';
|
import {getNode} from './utils/map';
|
||||||
|
|
||||||
type TraversalModeChangeEvent = {
|
|
||||||
mode: TraversalMode;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type Methods = {
|
|
||||||
onTraversalModeChange(params: TraversalModeChangeEvent): Promise<void>;
|
|
||||||
};
|
|
||||||
|
|
||||||
export function plugin(client: PluginClient<Events, Methods>) {
|
export function plugin(client: PluginClient<Events, Methods>) {
|
||||||
const rootId = createState<Id | undefined>(undefined);
|
const rootId = createState<Id | undefined>(undefined);
|
||||||
const metadata = createState<Map<MetadataId, Metadata>>(new Map());
|
const metadata = createState<Map<MetadataId, Metadata>>(new Map());
|
||||||
@@ -82,6 +75,7 @@ export function plugin(client: PluginClient<Events, Methods>) {
|
|||||||
nodesAtom,
|
nodesAtom,
|
||||||
snapshot,
|
snapshot,
|
||||||
mutableLiveClientData,
|
mutableLiveClientData,
|
||||||
|
client,
|
||||||
);
|
);
|
||||||
|
|
||||||
const perfEvents = createDataSource<PerformanceStatsEvent, 'txId'>([], {
|
const perfEvents = createDataSource<PerformanceStatsEvent, 'txId'>([], {
|
||||||
@@ -107,7 +101,7 @@ export function plugin(client: PluginClient<Events, Methods>) {
|
|||||||
event.currentTraversalMode &&
|
event.currentTraversalMode &&
|
||||||
uiState.supportedTraversalModes.get().includes(event.currentTraversalMode)
|
uiState.supportedTraversalModes.get().includes(event.currentTraversalMode)
|
||||||
) {
|
) {
|
||||||
uiState.currentTraversalMode.set(event.currentTraversalMode);
|
uiState.traversalMode.set(event.currentTraversalMode);
|
||||||
console.log(
|
console.log(
|
||||||
`[ui-debugger] Unsupported debugger mode ${event.currentTraversalMode}.`,
|
`[ui-debugger] Unsupported debugger mode ${event.currentTraversalMode}.`,
|
||||||
);
|
);
|
||||||
@@ -285,9 +279,6 @@ export function plugin(client: PluginClient<Events, Methods>) {
|
|||||||
});
|
});
|
||||||
client.onMessage('frameScan', processFrame);
|
client.onMessage('frameScan', processFrame);
|
||||||
|
|
||||||
const onTraversalModeChange = async (mode: TraversalMode) =>
|
|
||||||
client.send('onTraversalModeChange', {mode});
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
rootId,
|
rootId,
|
||||||
uiState: uiState as ReadOnlyUIState,
|
uiState: uiState as ReadOnlyUIState,
|
||||||
@@ -300,7 +291,6 @@ export function plugin(client: PluginClient<Events, Methods>) {
|
|||||||
metadata,
|
metadata,
|
||||||
perfEvents,
|
perfEvents,
|
||||||
os: client.device.os,
|
os: client.device.os,
|
||||||
onTraversalModeChange,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -343,6 +333,6 @@ function createUIState(): UIState {
|
|||||||
|
|
||||||
// view-hierarchy is the default state so we start with it until we fetch supported modes from the client
|
// view-hierarchy is the default state so we start with it until we fetch supported modes from the client
|
||||||
supportedTraversalModes: createState<TraversalMode[]>(['view-hierarchy']),
|
supportedTraversalModes: createState<TraversalMode[]>(['view-hierarchy']),
|
||||||
currentTraversalMode: createState<TraversalMode>('view-hierarchy'),
|
traversalMode: createState<TraversalMode>('view-hierarchy'),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,9 +7,16 @@
|
|||||||
* @format
|
* @format
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {Atom} from 'flipper-plugin';
|
import {Atom, PluginClient} from 'flipper-plugin';
|
||||||
import {debounce} from 'lodash';
|
import {debounce} from 'lodash';
|
||||||
import {ClientNode, FrameworkEventType, Id, SnapshotInfo} from '../ClientTypes';
|
import {
|
||||||
|
ClientNode,
|
||||||
|
Events,
|
||||||
|
FrameworkEventType,
|
||||||
|
Id,
|
||||||
|
Methods,
|
||||||
|
SnapshotInfo,
|
||||||
|
} from '../ClientTypes';
|
||||||
import {
|
import {
|
||||||
TraversalMode,
|
TraversalMode,
|
||||||
LiveClientState,
|
LiveClientState,
|
||||||
@@ -27,6 +34,7 @@ export function uiActions(
|
|||||||
nodes: Atom<Map<Id, ClientNode>>,
|
nodes: Atom<Map<Id, ClientNode>>,
|
||||||
snapshot: Atom<SnapshotInfo | null>,
|
snapshot: Atom<SnapshotInfo | null>,
|
||||||
liveClientData: LiveClientState,
|
liveClientData: LiveClientState,
|
||||||
|
client: PluginClient<Events, Methods>,
|
||||||
): UIActions {
|
): UIActions {
|
||||||
const onExpandNode = (node: Id) => {
|
const onExpandNode = (node: Id) => {
|
||||||
uiState.expandedNodes.update((draft) => {
|
uiState.expandedNodes.update((draft) => {
|
||||||
@@ -190,9 +198,17 @@ export function uiActions(
|
|||||||
searchTermUpdatedDebounced(searchTerm);
|
searchTermUpdatedDebounced(searchTerm);
|
||||||
};
|
};
|
||||||
|
|
||||||
const setCurrentTraversalMode = (mode: TraversalMode) => {
|
const onSetTraversalMode = (newMode: TraversalMode) => {
|
||||||
tracker.track('traversal-mode-updated', {mode});
|
tracker.track('traversal-mode-updated', {mode: newMode});
|
||||||
uiState.currentTraversalMode.set(mode);
|
const currentMode = uiState.traversalMode.get();
|
||||||
|
uiState.traversalMode.set(newMode);
|
||||||
|
|
||||||
|
try {
|
||||||
|
client.send('onTraversalModeChange', {mode: newMode});
|
||||||
|
} catch (err) {
|
||||||
|
console.warn('[ui-debugger] Unable to set traversal mode', err);
|
||||||
|
uiState.traversalMode.set(currentMode);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -213,6 +229,6 @@ export function uiActions(
|
|||||||
onExpandAllRecursively,
|
onExpandAllRecursively,
|
||||||
onCollapseAllRecursively,
|
onCollapseAllRecursively,
|
||||||
ensureAncestorsExpanded,
|
ensureAncestorsExpanded,
|
||||||
setCurrentTraversalMode,
|
onSetTraversalMode,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user