From 8cee7bad392f1342103ab58ea63cb644e4ae640a Mon Sep 17 00:00:00 2001 From: Shashank Shekhar <48152748+sha5git@users.noreply.github.com> Date: Tue, 2 Dec 2025 14:53:51 +0530 Subject: [PATCH] added copy button to copy response (#5409) Co-authored-by: Shashank Shekhar <48152748+sha5-git@users.noreply.github.com> --- .../ResponseCopy/StyledWrapper.js | 8 +++++ .../ResponsePane/ResponseCopy/index.js | 33 +++++++++++++++++++ .../src/components/ResponsePane/index.js | 4 +++ 3 files changed, 45 insertions(+) create mode 100644 packages/bruno-app/src/components/ResponsePane/ResponseCopy/StyledWrapper.js create mode 100644 packages/bruno-app/src/components/ResponsePane/ResponseCopy/index.js diff --git a/packages/bruno-app/src/components/ResponsePane/ResponseCopy/StyledWrapper.js b/packages/bruno-app/src/components/ResponsePane/ResponseCopy/StyledWrapper.js new file mode 100644 index 000000000..b2acb52b8 --- /dev/null +++ b/packages/bruno-app/src/components/ResponsePane/ResponseCopy/StyledWrapper.js @@ -0,0 +1,8 @@ +import styled from 'styled-components'; + +const StyledWrapper = styled.div` + font-size: 0.8125rem; + color: ${(props) => props.theme.requestTabPanel.responseStatus}; +`; + +export default StyledWrapper; \ No newline at end of file diff --git a/packages/bruno-app/src/components/ResponsePane/ResponseCopy/index.js b/packages/bruno-app/src/components/ResponsePane/ResponseCopy/index.js new file mode 100644 index 000000000..80763f131 --- /dev/null +++ b/packages/bruno-app/src/components/ResponsePane/ResponseCopy/index.js @@ -0,0 +1,33 @@ +import React from 'react'; +import StyledWrapper from './StyledWrapper'; +import toast from 'react-hot-toast'; +import { IconCopy } from '@tabler/icons'; + +const ResponseCopy = ({ item }) => { + const response = item.response || {}; + + const copyResponse = () => { + try { + const textToCopy = typeof response.data === 'string' + ? response.data + : JSON.stringify(response.data, null, 2); + + navigator.clipboard.writeText(textToCopy).then(() => { + toast.success('Response copied to clipboard'); + }).catch(() => { + toast.error('Failed to copy response'); + }); + } catch (error) { + toast.error('Failed to copy response'); + } + }; + + return ( + + + + ); +}; +export default ResponseCopy; \ No newline at end of file diff --git a/packages/bruno-app/src/components/ResponsePane/index.js b/packages/bruno-app/src/components/ResponsePane/index.js index b098570e2..859196182 100644 --- a/packages/bruno-app/src/components/ResponsePane/index.js +++ b/packages/bruno-app/src/components/ResponsePane/index.js @@ -18,6 +18,7 @@ import ScriptErrorIcon from './ScriptErrorIcon'; import StyledWrapper from './StyledWrapper'; import ResponseSave from 'src/components/ResponsePane/ResponseSave'; import ResponseClear from 'src/components/ResponsePane/ResponseClear'; +import ResponseCopy from 'src/components/ResponsePane/ResponseCopy'; import ResponseBookmark from 'src/components/ResponsePane/ResponseBookmark'; import SkippedRequest from './SkippedRequest'; import ClearTimeline from './ClearTimeline/index'; @@ -189,6 +190,9 @@ const ResponsePane = ({ item, collection }) => { <> + + + {item.response?.stream?.running