pipe sdkLanguage

This commit is contained in:
Simon Knott 2024-10-25 16:38:00 +02:00
parent 3dbf4b3d7a
commit a66e4c0e5f
No known key found for this signature in database
GPG key ID: 8CEDC00028084AEC
4 changed files with 14 additions and 11 deletions

View file

@ -20,14 +20,16 @@ import './networkResourceDetails.css';
import { TabbedPane } from '@web/components/tabbedPane'; import { TabbedPane } from '@web/components/tabbedPane';
import { CodeMirrorWrapper } from '@web/components/codeMirrorWrapper'; import { CodeMirrorWrapper } from '@web/components/codeMirrorWrapper';
import { ToolbarButton } from '@web/components/toolbarButton'; import { ToolbarButton } from '@web/components/toolbarButton';
import { fetchRequestPostData, generateCurlCommand, generateFetchCall } from '../third_party/devtools'; import { generateCurlCommand, generateFetchCall } from '../third_party/devtools';
import { CopyToClipboardTextButton } from './copyToClipboard'; import { CopyToClipboardTextButton } from './copyToClipboard';
import { generatePlaywrightRequestCall } from '@isomorphic/codegen'; import { generatePlaywrightRequestCall } from '@isomorphic/codegen';
import type { Language } from '@isomorphic/locatorGenerators';
export const NetworkResourceDetails: React.FunctionComponent<{ export const NetworkResourceDetails: React.FunctionComponent<{
resource: ResourceSnapshot; resource: ResourceSnapshot;
onClose: () => void; onClose: () => void;
}> = ({ resource, onClose }) => { sdkLanguage?: Language;
}> = ({ resource, onClose, sdkLanguage }) => {
const [selectedTab, setSelectedTab] = React.useState('request'); const [selectedTab, setSelectedTab] = React.useState('request');
return <TabbedPane return <TabbedPane
@ -37,7 +39,7 @@ export const NetworkResourceDetails: React.FunctionComponent<{
{ {
id: 'request', id: 'request',
title: 'Request', title: 'Request',
render: () => <RequestTab resource={resource}/>, render: () => <RequestTab resource={resource} sdkLanguage={sdkLanguage} />,
}, },
{ {
id: 'response', id: 'response',
@ -56,11 +58,10 @@ export const NetworkResourceDetails: React.FunctionComponent<{
const RequestTab: React.FunctionComponent<{ const RequestTab: React.FunctionComponent<{
resource: ResourceSnapshot; resource: ResourceSnapshot;
}> = ({ resource }) => { sdkLanguage?: Language;
}> = ({ resource, sdkLanguage }) => {
const [requestBody, setRequestBody] = React.useState<{ text: string, mimeType?: string } | null>(null); const [requestBody, setRequestBody] = React.useState<{ text: string, mimeType?: string } | null>(null);
const isJavascript = true; // TODO
React.useEffect(() => { React.useEffect(() => {
const readResources = async () => { const readResources = async () => {
if (resource.request.postData) { if (resource.request.postData) {
@ -99,7 +100,7 @@ const RequestTab: React.FunctionComponent<{
<div className='network-request-details-copy'> <div className='network-request-details-copy'>
<CopyToClipboardTextButton description='Copy as cURL' value={() => generateCurlCommand(resource)} /> <CopyToClipboardTextButton description='Copy as cURL' value={() => generateCurlCommand(resource)} />
<CopyToClipboardTextButton description='Copy as Fetch' value={() => generateFetchCall(resource)} /> <CopyToClipboardTextButton description='Copy as Fetch' value={() => generateFetchCall(resource)} />
{isJavascript && <CopyToClipboardTextButton description='Copy as Playwright' value={async () => generatePlaywrightRequestCall(resource.request, requestBody?.text)} />} {sdkLanguage === 'javascript' && <CopyToClipboardTextButton description='Copy as Playwright' value={async () => generatePlaywrightRequestCall(resource.request, requestBody?.text)} />}
</div> </div>
{requestBody && <div className='network-request-details-header'>Request Body</div>} {requestBody && <div className='network-request-details-header'>Request Body</div>}

View file

@ -26,6 +26,7 @@ import { GridView, type RenderedGridCell } from '@web/components/gridView';
import { SplitView } from '@web/components/splitView'; import { SplitView } from '@web/components/splitView';
import type { ContextEntry } from '../types/entries'; import type { ContextEntry } from '../types/entries';
import { NetworkFilters, defaultFilterState, type FilterState, type ResourceType } from './networkFilters'; import { NetworkFilters, defaultFilterState, type FilterState, type ResourceType } from './networkFilters';
import type { Language } from '@isomorphic/locatorGenerators';
type NetworkTabModel = { type NetworkTabModel = {
resources: Entry[], resources: Entry[],
@ -66,7 +67,8 @@ export const NetworkTab: React.FunctionComponent<{
boundaries: Boundaries, boundaries: Boundaries,
networkModel: NetworkTabModel, networkModel: NetworkTabModel,
onEntryHovered?: (entry: Entry | undefined) => void, onEntryHovered?: (entry: Entry | undefined) => void,
}> = ({ boundaries, networkModel, onEntryHovered }) => { sdkLanguage?: Language,
}> = ({ boundaries, networkModel, onEntryHovered, sdkLanguage }) => {
const [sorting, setSorting] = React.useState<Sorting | undefined>(undefined); const [sorting, setSorting] = React.useState<Sorting | undefined>(undefined);
const [selectedEntry, setSelectedEntry] = React.useState<RenderedEntry | undefined>(undefined); const [selectedEntry, setSelectedEntry] = React.useState<RenderedEntry | undefined>(undefined);
const [filterState, setFilterState] = React.useState(defaultFilterState); const [filterState, setFilterState] = React.useState(defaultFilterState);
@ -115,7 +117,7 @@ export const NetworkTab: React.FunctionComponent<{
sidebarIsFirst={true} sidebarIsFirst={true}
orientation='horizontal' orientation='horizontal'
settingName='networkResourceDetails' settingName='networkResourceDetails'
main={<NetworkResourceDetails resource={selectedEntry.resource} onClose={() => setSelectedEntry(undefined)} />} main={<NetworkResourceDetails resource={selectedEntry.resource} onClose={() => setSelectedEntry(undefined)} sdkLanguage={sdkLanguage} />}
sidebar={grid} sidebar={grid}
/>} />}
</>; </>;

View file

@ -238,7 +238,7 @@ const PropertiesView: React.FunctionComponent<{
id: 'network', id: 'network',
title: 'Network', title: 'Network',
count: networkModel.resources.length, count: networkModel.resources.length,
render: () => <NetworkTab boundaries={boundaries} networkModel={networkModel} /> render: () => <NetworkTab boundaries={boundaries} networkModel={networkModel} sdkLanguage={sdkLanguage} />
}; };
const tabs: TabbedPaneTabModel[] = [ const tabs: TabbedPaneTabModel[] = [

View file

@ -225,7 +225,7 @@ export const Workbench: React.FunctionComponent<{
id: 'network', id: 'network',
title: 'Network', title: 'Network',
count: networkModel.resources.length, count: networkModel.resources.length,
render: () => <NetworkTab boundaries={boundaries} networkModel={networkModel} onEntryHovered={setHighlightedEntry}/> render: () => <NetworkTab boundaries={boundaries} networkModel={networkModel} onEntryHovered={setHighlightedEntry} sdkLanguage={model?.sdkLanguage} />
}; };
const attachmentsTab: TabbedPaneTabModel = { const attachmentsTab: TabbedPaneTabModel = {
id: 'attachments', id: 'attachments',