diff --git a/packages/trace-viewer/src/ui/copyToClipboard.css b/packages/trace-viewer/src/ui/copyToClipboard.css new file mode 100644 index 0000000000000..08e6d26da1cfc --- /dev/null +++ b/packages/trace-viewer/src/ui/copyToClipboard.css @@ -0,0 +1,22 @@ +/* + Copyright (c) Microsoft Corporation. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +.copy-to-clipboard-text-button { + background-color: var(--vscode-editor-inactiveSelectionBackground); + border: none; + padding: 4px 12px; + cursor: pointer; +} \ No newline at end of file diff --git a/packages/trace-viewer/src/ui/copyToClipboard.tsx b/packages/trace-viewer/src/ui/copyToClipboard.tsx index 301be3dd03e56..1eb989d08e1df 100644 --- a/packages/trace-viewer/src/ui/copyToClipboard.tsx +++ b/packages/trace-viewer/src/ui/copyToClipboard.tsx @@ -16,6 +16,7 @@ import * as React from 'react'; import { ToolbarButton } from '@web/components/toolbarButton'; +import './copyToClipboard.css'; export const CopyToClipboard: React.FunctionComponent<{ value: string | (() => Promise), @@ -34,8 +35,22 @@ export const CopyToClipboard: React.FunctionComponent<{ }, () => { setIcon('close'); }); + }, () => { + setIcon('close'); }); }, [value]); return ; }; + +export const CopyToClipboardTextButton: React.FunctionComponent<{ + value: string | (() => Promise), + description: string, +}> = ({ value, description }) => { + const handleCopy = React.useCallback(async () => { + const valueToCopy = typeof value === 'function' ? await value() : value; + await navigator.clipboard.writeText(valueToCopy); + }, [value]); + + return {description}; +}; diff --git a/packages/trace-viewer/src/ui/networkResourceDetails.css b/packages/trace-viewer/src/ui/networkResourceDetails.css index ac1245f70de05..13582d40cfc7f 100644 --- a/packages/trace-viewer/src/ui/networkResourceDetails.css +++ b/packages/trace-viewer/src/ui/networkResourceDetails.css @@ -51,11 +51,8 @@ .network-request-details-copy { display: flex; - margin-left: 10px; -} - -.network-request-details-copy button { - border-radius: 4px + margin: 8px 10px; + gap: 8px; } .network-font-preview { diff --git a/packages/trace-viewer/src/ui/networkResourceDetails.tsx b/packages/trace-viewer/src/ui/networkResourceDetails.tsx index 1f9fcc45815b1..7fe5c7f732074 100644 --- a/packages/trace-viewer/src/ui/networkResourceDetails.tsx +++ b/packages/trace-viewer/src/ui/networkResourceDetails.tsx @@ -21,7 +21,7 @@ import { TabbedPane } from '@web/components/tabbedPane'; import { CodeMirrorWrapper } from '@web/components/codeMirrorWrapper'; import { ToolbarButton } from '@web/components/toolbarButton'; import { generateCurlCommand, generateFetchCall } from '../third_party/devtools'; -import { CopyToClipboard } from './copyToClipboard'; +import { CopyToClipboardTextButton } from './copyToClipboard'; export const NetworkResourceDetails: React.FunctionComponent<{ resource: ResourceSnapshot; @@ -92,13 +92,12 @@ const RequestTab: React.FunctionComponent<{ : null}
Request Headers
{resource.request.headers.map(pair => `${pair.name}: ${pair.value}`).join('\n')}
-
Copy Request
-
- As cURL: generateCurlCommand(resource)}/> -
+
- As Fetch: generateFetchCall(resource)}/> + generateCurlCommand(resource)} /> + generateFetchCall(resource)} />
+ {requestBody &&
Request Body
} {requestBody && } ;