diff --git a/packages/trace-viewer/src/ui/actionList.tsx b/packages/trace-viewer/src/ui/actionList.tsx index e5866ba310..b205ec4205 100644 --- a/packages/trace-viewer/src/ui/actionList.tsx +++ b/packages/trace-viewer/src/ui/actionList.tsx @@ -25,13 +25,13 @@ import type { TreeState } from '@web/components/treeView'; import { TreeView } from '@web/components/treeView'; import type { ActionTraceEventInContext, ActionTreeItem } from './modelUtil'; import type { Boundaries } from '../geometry'; +import { WorkbenchContext } from './workbenchContext'; export interface ActionListProps { actions: ActionTraceEventInContext[], selectedAction: ActionTraceEventInContext | undefined, selectedTime: Boundaries | undefined, setSelectedTime: (time: Boundaries | undefined) => void, - sdkLanguage: Language | undefined; onSelected: (action: ActionTraceEventInContext) => void, onHighlighted: (action: ActionTraceEventInContext | undefined) => void, revealConsole: () => void, @@ -45,12 +45,12 @@ export const ActionList: React.FC = ({ selectedAction, selectedTime, setSelectedTime, - sdkLanguage, onSelected, onHighlighted, revealConsole, isLive, }) => { + const { sdkLanguage } = React.useContext(WorkbenchContext); const [treeState, setTreeState] = React.useState({ expandedItems: new Map() }); const { rootItem, itemMap } = React.useMemo(() => modelUtil.buildActionTree(actions), [actions]); diff --git a/packages/trace-viewer/src/ui/callTab.tsx b/packages/trace-viewer/src/ui/callTab.tsx index b7cd7a8581..dc54670940 100644 --- a/packages/trace-viewer/src/ui/callTab.tsx +++ b/packages/trace-viewer/src/ui/callTab.tsx @@ -24,11 +24,12 @@ import { asLocator } from '@isomorphic/locatorGenerators'; import type { Language } from '@isomorphic/locatorGenerators'; import { PlaceholderPanel } from './placeholderPanel'; import type { ActionTraceEventInContext } from './modelUtil'; +import { WorkbenchContext } from './workbenchContext'; export const CallTab: React.FunctionComponent<{ action: ActionTraceEventInContext | undefined, - sdkLanguage: Language | undefined, -}> = ({ action, sdkLanguage }) => { +}> = ({ action }) => { + const { sdkLanguage } = React.useContext(WorkbenchContext); if (!action) return ; const params = { ...action.params }; diff --git a/packages/trace-viewer/src/ui/errorsTab.tsx b/packages/trace-viewer/src/ui/errorsTab.tsx index 71b6059c29..1bb2c0e605 100644 --- a/packages/trace-viewer/src/ui/errorsTab.tsx +++ b/packages/trace-viewer/src/ui/errorsTab.tsx @@ -19,8 +19,8 @@ import * as React from 'react'; import type * as modelUtil from './modelUtil'; import { PlaceholderPanel } from './placeholderPanel'; import { renderAction } from './actionList'; -import type { Language } from '@isomorphic/locatorGenerators'; import type { StackFrame } from '@protocol/channels'; +import { WorkbenchContext } from './workbenchContext'; type ErrorDescription = { action?: modelUtil.ActionTraceEventInContext; @@ -44,9 +44,9 @@ export function useErrorsTabModel(model: modelUtil.MultiTraceModel | undefined): export const ErrorsTab: React.FunctionComponent<{ errorsModel: ErrorsTabModel, - sdkLanguage: Language, revealInSource: (error: ErrorDescription) => void, -}> = ({ errorsModel, sdkLanguage, revealInSource }) => { +}> = ({ errorsModel, revealInSource }) => { + const { sdkLanguage } = React.useContext(WorkbenchContext); if (!errorsModel.errors.size) return ; diff --git a/packages/trace-viewer/src/ui/inspectorTab.tsx b/packages/trace-viewer/src/ui/inspectorTab.tsx index 7b3a90b709..8110c168c5 100644 --- a/packages/trace-viewer/src/ui/inspectorTab.tsx +++ b/packages/trace-viewer/src/ui/inspectorTab.tsx @@ -15,18 +15,18 @@ */ import { CodeMirrorWrapper } from '@web/components/codeMirrorWrapper'; -import type { Language } from '@web/components/codeMirrorWrapper'; import { ToolbarButton } from '@web/components/toolbarButton'; import { copy } from '@web/uiUtils'; import * as React from 'react'; import './sourceTab.css'; +import { WorkbenchContext } from './workbenchContext'; export const InspectorTab: React.FunctionComponent<{ - sdkLanguage: Language, setIsInspecting: (isInspecting: boolean) => void, highlightedLocator: string, setHighlightedLocator: (locator: string) => void, -}> = ({ sdkLanguage, setIsInspecting, highlightedLocator, setHighlightedLocator }) => { +}> = ({ setIsInspecting, highlightedLocator, setHighlightedLocator }) => { + const { sdkLanguage } = React.useContext(WorkbenchContext); return
Locator
diff --git a/packages/trace-viewer/src/ui/snapshotTab.tsx b/packages/trace-viewer/src/ui/snapshotTab.tsx index 4bc2abc9eb..77484414a9 100644 --- a/packages/trace-viewer/src/ui/snapshotTab.tsx +++ b/packages/trace-viewer/src/ui/snapshotTab.tsx @@ -29,17 +29,18 @@ import type { Language } from '@isomorphic/locatorGenerators'; import { locatorOrSelectorAsSelector } from '@isomorphic/locatorParser'; import { TabbedPaneTab } from '@web/components/tabbedPane'; import { BrowserFrame } from './browserFrame'; +import { WorkbenchContext } from './workbenchContext'; export const SnapshotTab: React.FunctionComponent<{ action: ActionTraceEvent | undefined, - sdkLanguage: Language, testIdAttributeName: string, isInspecting: boolean, setIsInspecting: (isInspecting: boolean) => void, highlightedLocator: string, setHighlightedLocator: (locator: string) => void, openPage?: (url: string, target?: string) => Window | any, -}> = ({ action, sdkLanguage, testIdAttributeName, isInspecting, setIsInspecting, highlightedLocator, setHighlightedLocator, openPage }) => { +}> = ({ action, testIdAttributeName, isInspecting, setIsInspecting, highlightedLocator, setHighlightedLocator, openPage }) => { + const { sdkLanguage } = React.useContext(WorkbenchContext); const [measure, ref] = useMeasure(); const [snapshotTab, setSnapshotTab] = React.useState<'action'|'before'|'after'>('action'); @@ -166,7 +167,6 @@ export const SnapshotTab: React.FunctionComponent<{ > void, iteration: number, -}> = ({ iframe, isInspecting, sdkLanguage, testIdAttributeName, highlightedLocator, setHighlightedLocator, iteration }) => { +}> = ({ iframe, isInspecting, testIdAttributeName, highlightedLocator, setHighlightedLocator, iteration }) => { + const { sdkLanguage } = React.useContext(WorkbenchContext); React.useEffect(() => { const recorders: { recorder: Recorder, frameSelector: string }[] = []; const isUnderTest = new URLSearchParams(window.location.search).get('isUnderTest') === 'true'; diff --git a/packages/trace-viewer/src/ui/timeline.tsx b/packages/trace-viewer/src/ui/timeline.tsx index 67f4e3b071..e3d59e4cd7 100644 --- a/packages/trace-viewer/src/ui/timeline.tsx +++ b/packages/trace-viewer/src/ui/timeline.tsx @@ -22,8 +22,8 @@ import { FilmStrip } from './filmStrip'; import type { FilmStripPreviewPoint } from './filmStrip'; import type { ActionTraceEventInContext, MultiTraceModel } from './modelUtil'; import './timeline.css'; -import type { Language } from '@isomorphic/locatorGenerators'; import type { Entry } from '@trace/har'; +import { WorkbenchContext } from './workbenchContext'; type TimelineBar = { action?: ActionTraceEventInContext; @@ -44,8 +44,8 @@ export const Timeline: React.FunctionComponent<{ onSelected: (action: ActionTraceEventInContext) => void, selectedTime: Boundaries | undefined, setSelectedTime: (time: Boundaries | undefined) => void, - sdkLanguage: Language, -}> = ({ model, boundaries, onSelected, highlightedAction, highlightedEntry, selectedTime, setSelectedTime, sdkLanguage }) => { +}> = ({ model, boundaries, onSelected, highlightedAction, highlightedEntry, selectedTime, setSelectedTime }) => { + const { sdkLanguage } = React.useContext(WorkbenchContext); const [measure, ref] = useMeasure(); const [dragWindow, setDragWindow] = React.useState<{ startX: number, endX: number, pivot?: number, type: 'resize' | 'move' } | undefined>(); const [previewPoint, setPreviewPoint] = React.useState(); diff --git a/packages/trace-viewer/src/ui/workbench.tsx b/packages/trace-viewer/src/ui/workbench.tsx index afc003c674..e46ca5eda0 100644 --- a/packages/trace-viewer/src/ui/workbench.tsx +++ b/packages/trace-viewer/src/ui/workbench.tsx @@ -120,13 +120,10 @@ export const Workbench: React.FunctionComponent<{ return model?.actions.map(a => a.attachments || []).flat() || []; }, [model]); - const sdkLanguage = model?.sdkLanguage || 'javascript'; - const inspectorTab: TabbedPaneTabModel = { id: 'inspector', title: 'Locator', render: () => , @@ -134,7 +131,7 @@ export const Workbench: React.FunctionComponent<{ const callTab: TabbedPaneTabModel = { id: 'call', title: 'Call', - render: () => + render: () => }; const logTab: TabbedPaneTabModel = { id: 'log', @@ -145,7 +142,7 @@ export const Workbench: React.FunctionComponent<{ id: 'errors', title: 'Errors', errorCount: errorsModel.errors.size, - render: () => { + render: () => { if (error.action) setSelectedAction(error.action); else @@ -222,7 +219,6 @@ export const Workbench: React.FunctionComponent<{ highlightedAction={highlightedAction} highlightedEntry={highlightedEntry} onSelected={onActionSelected} - sdkLanguage={sdkLanguage} selectedTime={selectedTime} setSelectedTime={setSelectedTime} /> @@ -230,7 +226,6 @@ export const Workbench: React.FunctionComponent<{ {time ? msToString(time) : ''}
} (null as any); diff --git a/packages/trace-viewer/src/ui/workbenchLoader.tsx b/packages/trace-viewer/src/ui/workbenchLoader.tsx index 0260df0d7a..2c04da9539 100644 --- a/packages/trace-viewer/src/ui/workbenchLoader.tsx +++ b/packages/trace-viewer/src/ui/workbenchLoader.tsx @@ -22,6 +22,7 @@ import './workbenchLoader.css'; import { toggleTheme } from '@web/theme'; import { Workbench } from './workbench'; import { TestServerConnection } from '@testIsomorphic/testServerConnection'; +import { WorkbenchContext } from './workbenchContext'; export const WorkbenchLoader: React.FunctionComponent<{ }> = () => { @@ -165,7 +166,9 @@ export const WorkbenchLoader: React.FunctionComponent<{
- + + + {fileForLocalModeError &&
Trace Viewer uses Service Workers to show traces. To view trace: