Files
flipper/desktop/plugins/public/ui-debugger/utils/tracker.tsx
Sash Zats 1c3720fd5c Add ui-debugger modes
Summary:
## This diff: Add debugger mode infrastructure

We want to enable infrastructure allowing adding modes in the future without branching client and plugin code

This infra allows for the client to send a message informing flipper about the supported modes (following diffs)

Currently broadcasting mode change event over to the client

Reviewed By: lblasa

Differential Revision: D49385860

fbshipit-source-id: 2db6f65064d1ff7e1f57b2da93c3ed195400fb7f
2023-09-20 11:37:12 -07:00

95 lines
2.1 KiB
TypeScript

/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/
import {getFlipperLib} from 'flipper-plugin';
import {FrameworkEventType, Tag} from '../ClientTypes';
import {TraversalMode, SelectionSource} from '../DesktopTypes';
const UI_DEBUGGER_IDENTIFIER = 'ui-debugger';
type NodeEventPayload = {
name: string;
tags: Tag[];
source?: SelectionSource;
};
type TrackerEvents = {
'more-options-opened': {};
'context-menu-opened': {};
'play-pause-toggled': {
paused: boolean;
};
'framework-event-monitored': {
eventType: FrameworkEventType;
monitored: boolean;
};
'framework-event-table-row-selected': {
eventType: FrameworkEventType;
};
'framework-event-table-opened': {};
'framework-event-timeline-filters-adjusted': {};
'framework-event-timeline-event-selected': {
eventType: FrameworkEventType;
};
'search-term-updated': {
searchTerm: string;
};
'node-selected': NodeEventPayload;
'node-focused': NodeEventPayload;
'context-menu-name-copied': {
name: string;
};
'context-menu-copied': {
name: string;
key: string;
value: string;
};
'big-grep-searched': {
searchTerm: string;
tags: Tag[];
};
'ide-opened': {
ide: string;
name: string;
tags: Tag[];
};
'target-mode-switched': {
on: boolean;
};
'target-mode-adjusted': {};
'context-menu-expand-recursive': {};
'context-menu-collapse-recursive': {};
'context-menu-collapse-non-ancestors': {};
'traversal-mode-updated': {mode: TraversalMode};
};
export interface Tracker {
track<Event extends keyof TrackerEvents>(
event: Event,
payload: TrackerEvents[Event],
): void;
}
class UIDebuggerTracker implements Tracker {
track<Event extends keyof TrackerEvents>(
event: Event,
payload: TrackerEvents[Event],
): void {
getFlipperLib().logger.track(
'usage',
event,
payload,
UI_DEBUGGER_IDENTIFIER,
);
}
}
export const tracker: Tracker = new UIDebuggerTracker();