fix: properly render html responses (#11853)
* properly render html responses * My empty commit with a message * My empty commit with a message * Remove package, use custom function Co-authored-by: Adeoluwa Ayangade <adeoluwaayangade@Adeoluwas-MacBook-Pro.local>
This commit is contained in:
parent
a12ed0cc18
commit
2f862ac8db
|
|
@ -10,7 +10,7 @@ import LoadingOverlayScreen from "components/editorComponents/LoadingOverlayScre
|
||||||
import ReadOnlyEditor from "components/editorComponents/ReadOnlyEditor";
|
import ReadOnlyEditor from "components/editorComponents/ReadOnlyEditor";
|
||||||
import { getActionResponses } from "selectors/entitiesSelector";
|
import { getActionResponses } from "selectors/entitiesSelector";
|
||||||
import { Colors } from "constants/Colors";
|
import { Colors } from "constants/Colors";
|
||||||
import _ from "lodash";
|
import _, { isString } from "lodash";
|
||||||
import {
|
import {
|
||||||
CHECK_REQUEST_BODY,
|
CHECK_REQUEST_BODY,
|
||||||
createMessage,
|
createMessage,
|
||||||
|
|
@ -36,6 +36,7 @@ import Button, { Size } from "components/ads/Button";
|
||||||
import EntityBottomTabs from "./EntityBottomTabs";
|
import EntityBottomTabs from "./EntityBottomTabs";
|
||||||
import { DEBUGGER_TAB_KEYS } from "./Debugger/helpers";
|
import { DEBUGGER_TAB_KEYS } from "./Debugger/helpers";
|
||||||
import { setCurrentTab } from "actions/debuggerActions";
|
import { setCurrentTab } from "actions/debuggerActions";
|
||||||
|
import { isHtml } from "./utils";
|
||||||
|
|
||||||
type TextStyleProps = {
|
type TextStyleProps = {
|
||||||
accent: "primary" | "secondary" | "error";
|
accent: "primary" | "secondary" | "error";
|
||||||
|
|
@ -240,6 +241,7 @@ function ApiResponseView(props: Props) {
|
||||||
|
|
||||||
const messages = response?.messages;
|
const messages = response?.messages;
|
||||||
let responseHeaders;
|
let responseHeaders;
|
||||||
|
let responseBody;
|
||||||
|
|
||||||
// if no headers are present in the response, use the default body text.
|
// if no headers are present in the response, use the default body text.
|
||||||
if (response.headers) {
|
if (response.headers) {
|
||||||
|
|
@ -248,6 +250,15 @@ function ApiResponseView(props: Props) {
|
||||||
responseHeaders = {}; // if the response headers is empty show an empty object.
|
responseHeaders = {}; // if the response headers is empty show an empty object.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (response.body) {
|
||||||
|
// if the response is already a string and is of type html, do not stringify further but simply return the response string.
|
||||||
|
if (isString(response.body) && isHtml(response.body)) {
|
||||||
|
responseBody = response.body || "";
|
||||||
|
} else {
|
||||||
|
responseBody = JSON.stringify(response.body, null, 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const tabs = [
|
const tabs = [
|
||||||
{
|
{
|
||||||
key: "body",
|
key: "body",
|
||||||
|
|
@ -298,9 +309,7 @@ function ApiResponseView(props: Props) {
|
||||||
folding
|
folding
|
||||||
height={"100%"}
|
height={"100%"}
|
||||||
input={{
|
input={{
|
||||||
value: response.body
|
value: response.body ? (responseBody as string) : "",
|
||||||
? JSON.stringify(response.body, null, 2)
|
|
||||||
: "",
|
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
|
||||||
11
app/client/src/components/editorComponents/utils.ts
Normal file
11
app/client/src/components/editorComponents/utils.ts
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
export const isHtml = (str: string) => {
|
||||||
|
const fragment = document.createRange().createContextualFragment(str);
|
||||||
|
|
||||||
|
// remove all non text nodes from fragment
|
||||||
|
fragment
|
||||||
|
.querySelectorAll("*")
|
||||||
|
.forEach((el: any) => el.parentNode.removeChild(el));
|
||||||
|
|
||||||
|
// if there is textContent, then its not a pure HTML
|
||||||
|
return !(fragment.textContent || "").trim();
|
||||||
|
};
|
||||||
Loading…
Reference in New Issue
Block a user