diff --git a/package.json b/package.json index 9aaaf23f2..2d5841607 100644 --- a/package.json +++ b/package.json @@ -38,5 +38,8 @@ }, "overrides": { "rollup": "3.2.5" + }, + "dependencies": { + "xml-formatter": "^3.3.2" } } diff --git a/packages/bruno-app/src/components/ResponsePane/QueryResult/index.js b/packages/bruno-app/src/components/ResponsePane/QueryResult/index.js index e6d6f94a8..6c289e0be 100644 --- a/packages/bruno-app/src/components/ResponsePane/QueryResult/index.js +++ b/packages/bruno-app/src/components/ResponsePane/QueryResult/index.js @@ -3,6 +3,7 @@ import CodeEditor from 'components/CodeEditor'; import { useTheme } from 'providers/Theme'; import { useDispatch } from 'react-redux'; import { sendRequest } from 'providers/ReduxStore/slices/collections/actions'; +import { getContentTypeHeader } from 'utils/common'; import StyledWrapper from './StyledWrapper'; @@ -16,7 +17,12 @@ const QueryResult = ({ item, collection, value, width, disableRunEventListener, } dispatch(sendRequest(item, collection.uid)); }; - + /*var responseType = getContentTypeHeader(item.response.headers); + let mode = 'application/json';//TODO: What to default??? json probbaly + if(responseType.includes("xml")){ + mode = "application/xml"; + }*/ + console.log('Mode:' + mode); return (
diff --git a/packages/bruno-app/src/components/ResponsePane/index.js b/packages/bruno-app/src/components/ResponsePane/index.js index 9d123dcfe..5fd53ce5d 100644 --- a/packages/bruno-app/src/components/ResponsePane/index.js +++ b/packages/bruno-app/src/components/ResponsePane/index.js @@ -1,8 +1,8 @@ import React from 'react'; import find from 'lodash/find'; import classnames from 'classnames'; -import { safeStringifyJSON } from 'utils/common'; import { useDispatch, useSelector } from 'react-redux'; +import { formatResponse } from 'utils/common'; import { updateResponsePaneTab } from 'providers/ReduxStore/slices/tabs'; import QueryResult from './QueryResult'; import Overlay from './Overlay'; @@ -41,9 +41,7 @@ const ResponsePane = ({ rightPaneWidth, item, collection }) => { item={item} collection={collection} width={rightPaneWidth} - value={ - response.data ? (isJson(response.headers) ? safeStringifyJSON(response.data, true) : response.data) : '' - } + value={response.data ? formatResponse(response) : ''} mode={getContentType(response.headers)} /> ); diff --git a/packages/bruno-app/src/utils/common/index.js b/packages/bruno-app/src/utils/common/index.js index 7db86d386..20e876364 100644 --- a/packages/bruno-app/src/utils/common/index.js +++ b/packages/bruno-app/src/utils/common/index.js @@ -1,4 +1,5 @@ import { customAlphabet } from 'nanoid'; +import xmlFormat from 'xml-formatter'; // a customized version of nanoid without using _ and - export const uuid = () => { @@ -50,6 +51,25 @@ export const safeStringifyJSON = (obj, indent = false) => { } }; +export const getContentTypeHeader = (headers) => { + let header = headers.find((element) => element[0] == 'content-type'); + if (header && header[1]) { + return header[1]; + } + return ''; +}; + +export const formatResponse = (response) => { + var type = getContentTypeHeader(response.headers); + if (type.includes('json')) { + return safeStringifyJSON(response.data); + } + if (type.includes('xml')) { + return xmlFormat(response.data, { collapseContent: true }); + } + return response.data; +}; + // Remove any characters that are not alphanumeric, spaces, hyphens, or underscores export const normalizeFileName = (name) => { if (!name) {