diff --git a/packages/trace-viewer/src/ui/inspectorTab.tsx b/packages/trace-viewer/src/ui/inspectorTab.tsx index 3e096032df..7b3a90b709 100644 --- a/packages/trace-viewer/src/ui/inspectorTab.tsx +++ b/packages/trace-viewer/src/ui/inspectorTab.tsx @@ -27,13 +27,16 @@ export const InspectorTab: React.FunctionComponent<{ highlightedLocator: string, setHighlightedLocator: (locator: string) => void, }> = ({ sdkLanguage, setIsInspecting, highlightedLocator, setHighlightedLocator }) => { - return
- { - // Updating text needs to go first - react can squeeze a render between the state updates. - setHighlightedLocator(text); - setIsInspecting(false); - }}> -
+ return
+
Locator
+
+ { + // Updating text needs to go first - react can squeeze a render between the state updates. + setHighlightedLocator(text); + setIsInspecting(false); + }}> +
+
{ copy(highlightedLocator); }}> diff --git a/packages/trace-viewer/src/ui/workbench.tsx b/packages/trace-viewer/src/ui/workbench.tsx index c2bdb0f320..5e7639fcab 100644 --- a/packages/trace-viewer/src/ui/workbench.tsx +++ b/packages/trace-viewer/src/ui/workbench.tsx @@ -68,17 +68,23 @@ export const Workbench: React.FunctionComponent<{ setSelectedAction(failedAction); else if (model?.actions.length) setSelectedAction(model.actions[model.actions.length - 1]); - }, [model, selectedAction, setSelectedAction, setSelectedPropertiesTab, initialSelection]); + }, [model, selectedAction, setSelectedAction, initialSelection]); const onActionSelected = React.useCallback((action: ActionTraceEventInContext) => { setSelectedAction(action); onSelectionChanged?.(action); }, [setSelectedAction, onSelectionChanged]); + const selectPropertiesTab = React.useCallback((tab: string) => { + setSelectedPropertiesTab(tab); + if (tab !== 'inspector') + setIsInspecting(false); + }, []); + const locatorPicked = React.useCallback((locator: string) => { setHighlightedLocator(locator); - setSelectedPropertiesTab('inspector'); - }, []); + selectPropertiesTab('inspector'); + }, [selectPropertiesTab]); const sdkLanguage = model?.sdkLanguage || 'javascript'; @@ -171,11 +177,16 @@ export const Workbench: React.FunctionComponent<{ { + { + if (!isInspecting) + selectPropertiesTab('inspector'); setIsInspecting(!isInspecting); - }}> + }}> + + + ]} /> @@ -191,7 +202,7 @@ export const Workbench: React.FunctionComponent<{ selectedTime={selectedTime} onSelected={onActionSelected} onHighlighted={setHighlightedAction} - revealConsole={() => setSelectedPropertiesTab('console')} + revealConsole={() => selectPropertiesTab('console')} isLive={isLive} /> }, diff --git a/packages/web/src/components/codeMirrorWrapper.tsx b/packages/web/src/components/codeMirrorWrapper.tsx index c8c96b2fd5..ae42dd7ce8 100644 --- a/packages/web/src/components/codeMirrorWrapper.tsx +++ b/packages/web/src/components/codeMirrorWrapper.tsx @@ -36,6 +36,7 @@ export interface SourceProps { highlight?: SourceHighlight[]; revealLine?: number; lineNumbers?: boolean; + isFocused?: boolean; focusOnChange?: boolean; wrapLines?: boolean; onChange?: (text: string) => void; @@ -48,6 +49,7 @@ export const CodeMirrorWrapper: React.FC = ({ highlight, revealLine, lineNumbers, + isFocused, focusOnChange, wrapLines, onChange, @@ -94,10 +96,12 @@ export const CodeMirrorWrapper: React.FC = ({ lineWrapping: wrapLines, }); codemirrorRef.current = { cm }; + if (isFocused) + cm.focus(); setCodemirror(cm); return cm; })(); - }, [modulePromise, codemirror, codemirrorElement, language, lineNumbers, wrapLines, readOnly]); + }, [modulePromise, codemirror, codemirrorElement, language, lineNumbers, wrapLines, readOnly, isFocused]); React.useEffect(() => { if (codemirrorRef.current)