From d34af73754c80268c6f2eee5a6445d85f298ca40 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Fri, 18 Oct 2024 14:38:34 +0200 Subject: [PATCH] add button to reveal attachments --- packages/trace-viewer/src/ui/actionList.tsx | 11 ++++++++--- packages/trace-viewer/src/ui/workbench.tsx | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/trace-viewer/src/ui/actionList.tsx b/packages/trace-viewer/src/ui/actionList.tsx index f375ab0baa..0751c25cf4 100644 --- a/packages/trace-viewer/src/ui/actionList.tsx +++ b/packages/trace-viewer/src/ui/actionList.tsx @@ -14,7 +14,7 @@ limitations under the License. */ -import type { ActionTraceEvent } from '@trace/trace'; +import type { ActionTraceEvent, AfterActionTraceEventAttachment } from '@trace/trace'; import { msToString } from '@web/uiUtils'; import * as React from 'react'; import './actionList.css'; @@ -25,6 +25,7 @@ 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 { ToolbarButton } from '@web/components/toolbarButton'; export interface ActionListProps { actions: ActionTraceEventInContext[], @@ -35,6 +36,7 @@ export interface ActionListProps { onSelected?: (action: ActionTraceEventInContext) => void, onHighlighted?: (action: ActionTraceEventInContext | undefined) => void, revealConsole?: () => void, + revealAttachment?: (attachments: AfterActionTraceEventAttachment[]) => void, isLive?: boolean, } @@ -49,6 +51,7 @@ export const ActionList: React.FC = ({ onSelected, onHighlighted, revealConsole, + revealAttachment, isLive, }) => { const [treeState, setTreeState] = React.useState({ expandedItems: new Map() }); @@ -72,7 +75,7 @@ export const ActionList: React.FC = ({ onAccepted={item => setSelectedTime({ minimum: item.action!.startTime, maximum: item.action!.endTime })} isError={item => !!item.action?.error?.message} isVisible={item => !selectedTime || (item.action!.startTime <= selectedTime.maximum && item.action!.endTime >= selectedTime.minimum)} - render={item => renderAction(item.action!, { sdkLanguage, revealConsole, isLive, showDuration: true, showBadges: true })} + render={item => renderAction(item.action!, { sdkLanguage, revealConsole, revealAttachment, isLive, showDuration: true, showBadges: true })} /> ; }; @@ -82,11 +85,12 @@ export const renderAction = ( options: { sdkLanguage?: Language, revealConsole?: () => void, + revealAttachment?: (attachments: AfterActionTraceEventAttachment[]) => void, isLive?: boolean, showDuration?: boolean, showBadges?: boolean, }) => { - const { sdkLanguage, revealConsole, isLive, showDuration, showBadges } = options; + const { sdkLanguage, revealConsole, revealAttachment, isLive, showDuration, showBadges } = options; const { errors, warnings } = modelUtil.stats(action); const locator = action.params.selector ? asLocator(sdkLanguage || 'javascript', action.params.selector) : undefined; @@ -103,6 +107,7 @@ export const renderAction = ( {locator &&
{locator}
} {action.method === 'goto' && action.params.url &&
{action.params.url}
} {action.class === 'APIRequestContext' && action.params.url &&
{excludeOrigin(action.params.url)}
} + {!!action.attachments?.length && revealAttachment?.(action.attachments!)} style={{ verticalAlign: 'middle', display: 'inline' }} />} {(showDuration || showBadges) &&
} {showDuration &&
{time || }
} diff --git a/packages/trace-viewer/src/ui/workbench.tsx b/packages/trace-viewer/src/ui/workbench.tsx index f5471ca81c..02cf486728 100644 --- a/packages/trace-viewer/src/ui/workbench.tsx +++ b/packages/trace-viewer/src/ui/workbench.tsx @@ -300,6 +300,7 @@ export const Workbench: React.FunctionComponent<{ onSelected={onActionSelected} onHighlighted={setHighlightedAction} revealConsole={() => selectPropertiesTab('console')} + revealAttachment={() => selectPropertiesTab('attachments')} isLive={isLive} />