diff --git a/packages/bruno-app/src/components/Devtools/Console/RequestDetailsPanel/StyledWrapper.js b/packages/bruno-app/src/components/Devtools/Console/RequestDetailsPanel/StyledWrapper.js index b03b1bd3e..5d66cf493 100644 --- a/packages/bruno-app/src/components/Devtools/Console/RequestDetailsPanel/StyledWrapper.js +++ b/packages/bruno-app/src/components/Devtools/Console/RequestDetailsPanel/StyledWrapper.js @@ -168,7 +168,7 @@ const StyledWrapper = styled.div` position: sticky; top: 0; z-index: 10; - + td { padding: 8px 12px; font-weight: 500; @@ -256,10 +256,8 @@ const StyledWrapper = styled.div` } .response-body-container { - border: 1px solid ${(props) => props.theme.console.border}; border-radius: 4px; overflow: hidden; - background: ${(props) => props.theme.console.headerBg}; height: 400px; display: flex; flex-direction: column; @@ -267,13 +265,11 @@ const StyledWrapper = styled.div` .w-full.h-full.relative.flex { height: 100% !important; width: 100% !important; - background: ${(props) => props.theme.console.headerBg} !important; display: flex !important; flex-direction: column !important; } div[role="tablist"] { - background: ${(props) => props.theme.console.dropdownHeaderBg}; padding: 8px 12px; border-bottom: 1px solid ${(props) => props.theme.console.border}; display: flex !important; @@ -282,28 +278,17 @@ const StyledWrapper = styled.div` align-items: center !important; min-height: 40px !important; flex-shrink: 0 !important; - + > div { color: ${(props) => props.theme.console.buttonColor}; font-size: ${(props) => props.theme.font.size.sm} !important; - padding: 6px 12px !important; - border-radius: 4px; - transition: all 0.2s ease; cursor: pointer; - border: 1px solid ${(props) => props.theme.console.border}; - background: ${(props) => props.theme.console.contentBg}; white-space: nowrap !important; min-width: auto !important; height: auto !important; line-height: 1.2 !important; font-weight: 500 !important; - &:hover { - background: ${(props) => props.theme.console.buttonHoverBg}; - color: ${(props) => props.theme.console.buttonHoverColor}; - border-color: ${(props) => props.theme.console.buttonHoverBg}; - } - &.active { background: ${(props) => props.theme.console.checkboxColor}; color: white; diff --git a/packages/bruno-app/src/components/Devtools/Console/RequestDetailsPanel/index.js b/packages/bruno-app/src/components/Devtools/Console/RequestDetailsPanel/index.js index f6f45569c..077c319dc 100644 --- a/packages/bruno-app/src/components/Devtools/Console/RequestDetailsPanel/index.js +++ b/packages/bruno-app/src/components/Devtools/Console/RequestDetailsPanel/index.js @@ -7,7 +7,7 @@ import { IconNetwork } from '@tabler/icons'; import { clearSelectedRequest } from 'providers/ReduxStore/slices/logs'; -import QueryResult from 'components/ResponsePane/QueryResult'; +import QueryResponse from 'components/ResponsePane/QueryResponse/index'; import Network from 'components/ResponsePane/Timeline/TimelineItem/Network'; import StyledWrapper from './StyledWrapper'; import { uuid } from 'utils/common/index'; @@ -116,7 +116,7 @@ const ResponseTab = ({ response, request, collection }) => {
+ {displayContent}
+
+ );
+});
+
+export default HtmlPreview;
diff --git a/packages/bruno-app/src/components/ResponsePane/QueryResult/QueryResultPreview/JsonPreview.js b/packages/bruno-app/src/components/ResponsePane/QueryResult/QueryResultPreview/JsonPreview.js
new file mode 100644
index 000000000..2d24abcb0
--- /dev/null
+++ b/packages/bruno-app/src/components/ResponsePane/QueryResult/QueryResultPreview/JsonPreview.js
@@ -0,0 +1,63 @@
+import React from 'react';
+import ReactJson from 'react-json-view';
+import ErrorAlert from 'ui/ErrorAlert/index';
+
+const JsonPreview = ({ data, displayedTheme }) => {
+ // Helper function to validate and parse JSON data
+ const validateJsonData = (data) => {
+ // If data is already an object or array, use it directly
+ if (typeof data === 'object' && data !== null) {
+ return { data, error: null };
+ }
+
+ // If data is a string, try to parse it
+ if (typeof data === 'string') {
+ try {
+ const parsed = JSON.parse(data);
+ return { data: parsed, error: null };
+ } catch (e) {
+ return { data: null, error: `Invalid JSON format: ${e.message}` };
+ }
+ }
+
+ // For other types, return error
+ return { data: null, error: 'Invalid input. Expected a JSON object, array, or valid JSON string.' };
+ };
+
+ // Validate and parse JSON data
+ const jsonData = validateJsonData(data);
+
+ // Show error if parsing failed
+ if (jsonData.error) {
+ return