import { useEventListener } from '@fluentui/react-component-event-listener'; import { ProviderContextPrepared, Telemetry, Unstable_FluentContextProvider } from '@fluentui/react-bindings'; import * as React from 'react'; import * as ReactDOM from 'react-dom'; import * as styles from './styles'; import { TelemetryTable } from './TelemetryTable'; import { useTelemetryState } from './useTelemetryState'; import { TelemetryPerfFlags } from './TelemetryPerfFlags'; export type TelemetryPopoverProps = { mountNode?: HTMLElement; hotKeyHandler?: (e: KeyboardEvent) => boolean; }; function defaultHotKeyHandler(e: KeyboardEvent) { return e.altKey && e.shiftKey && e.code === 'KeyT'; } export const TelemetryPopover: React.FC = props => { const { children, hotKeyHandler = defaultHotKeyHandler, mountNode = document.body } = props; const telemetry = React.useMemo(() => new Telemetry(), []); const [state, dispatch] = useTelemetryState(); useEventListener({ listener: e => { if (state.visible) { return; } if (hotKeyHandler(e)) { dispatch({ type: 'SET_VISIBILITY', value: true }); } }, target: mountNode.ownerDocument || mountNode, type: 'keydown', }); const outgoingContext = React.useMemo>( () => ({ performance: state.performanceFlags, telemetry, }), [telemetry, state.performanceFlags], ); return ( <> {children} {state.visible && ReactDOM.createPortal(
{state.activeTab === 'telemetry' && ( dispatch({ type: 'SET_TABLE_COMPONENT_FILTER', value: filter })} onExpandChange={(name, show) => dispatch({ type: 'SET_TABLE_EXPAND', name, value: show })} onSortChange={value => dispatch({ type: 'SET_TABLE_SORT', value })} /> )} {state.activeTab === 'performance-flags' && ( dispatch({ type: 'SET_PERFORMANCE_FLAG', name, value })} /> )}
, mountNode, )} ); };