diff --git a/packages/client/src/pages/PortalSettings/categories/developer-tools/Webhooks/WebhookEventDetails/sub-components/MessagesDetails.js b/packages/client/src/pages/PortalSettings/categories/developer-tools/Webhooks/WebhookEventDetails/sub-components/MessagesDetails.js
index cd2046a3ef..981435163d 100644
--- a/packages/client/src/pages/PortalSettings/categories/developer-tools/Webhooks/WebhookEventDetails/sub-components/MessagesDetails.js
+++ b/packages/client/src/pages/PortalSettings/categories/developer-tools/Webhooks/WebhookEventDetails/sub-components/MessagesDetails.js
@@ -13,23 +13,25 @@ const SubmenuWrapper = styled.div`
`;
export const MessagesDetails = ({ webhookDetails }) => {
+ const menuData = [
+ {
+ id: "webhookRequest",
+ name: "Request",
+ content: ,
+ },
+ ];
+
+ webhookDetails.status >= 200 &&
+ webhookDetails.status < 500 &&
+ menuData.push({
+ id: "webhookResponse",
+ name: "Response",
+ content: ,
+ });
+
return (
- ,
- },
- {
- id: "webhookResponse",
- name: "Response",
- content: ,
- },
- ]}
- startSelect={0}
- />
+
);
};
diff --git a/packages/client/src/pages/PortalSettings/categories/developer-tools/Webhooks/WebhookEventDetails/sub-components/RequestDetails.js b/packages/client/src/pages/PortalSettings/categories/developer-tools/Webhooks/WebhookEventDetails/sub-components/RequestDetails.js
index 80ca74019a..80009748a7 100644
--- a/packages/client/src/pages/PortalSettings/categories/developer-tools/Webhooks/WebhookEventDetails/sub-components/RequestDetails.js
+++ b/packages/client/src/pages/PortalSettings/categories/developer-tools/Webhooks/WebhookEventDetails/sub-components/RequestDetails.js
@@ -2,23 +2,51 @@ import React from "react";
import styled from "styled-components";
import { Text, Textarea } from "@docspace/components";
+import DangerIcon from "PUBLIC_DIR/images/danger.toast.react.svg?url";
+
const DetailsWrapper = styled.div`
width: 100%;
`;
+const ErrorMessageTooltip = styled.div`
+ box-sizing: border-box;
+
+ width: 100%;
+ max-width: 1200px;
+ padding: 8px 12px;
+ background: #f7cdbe;
+
+ box-shadow: 0px 5px 20px rgba(4, 15, 27, 0.07);
+ border-radius: 6px;
+ display: flex;
+ align-items: center;
+
+ margin-bottom: 16px;
+`;
export const RequestDetails = ({ webhookDetails }) => {
return (
+ {webhookDetails.status === 0 && (
+
+
+ We couldn’t deliver this payload: failed to connect to host
+
+ )}
Request post header
-
+ {webhookDetails.requestHeaders === "" ? (
+
+ ) : (
+
+ )}
+
Request post body
diff --git a/packages/client/src/pages/PortalSettings/categories/developer-tools/Webhooks/WebhookEventDetails/sub-components/ResponseDetails.js b/packages/client/src/pages/PortalSettings/categories/developer-tools/Webhooks/WebhookEventDetails/sub-components/ResponseDetails.js
index 45105abd39..4bf856f47b 100644
--- a/packages/client/src/pages/PortalSettings/categories/developer-tools/Webhooks/WebhookEventDetails/sub-components/ResponseDetails.js
+++ b/packages/client/src/pages/PortalSettings/categories/developer-tools/Webhooks/WebhookEventDetails/sub-components/ResponseDetails.js
@@ -1,41 +1,71 @@
import React from "react";
-import styled from "styled-components";
-import { Text, Textarea } from "@docspace/components";
+import styled, { css } from "styled-components";
+import { Text, Textarea, Button } from "@docspace/components";
-import DangerIcon from "PUBLIC_DIR/images/danger.toast.react.svg?url";
+import json_beautifier from "csvjson-json_beautifier";
const DetailsWrapper = styled.div`
width: 100%;
+
+ .textareaBody {
+ height: 50vh !important;
+ }
`;
-const ErrorMessageTooltip = styled.div`
- width: 100%;
- padding: 8px 12px;
- background: #f7cdbe;
+const LargePayloadStub = styled.div`
+ box-sizing: border-box;
- box-shadow: 0px 5px 20px rgba(4, 15, 27, 0.07);
- border-radius: 6px;
display: flex;
+ justify-content: space-between;
align-items: center;
+
+ width: 100%;
+ max-width: 1200px;
+ padding: 12px 10px;
+ margin-top: 4px;
+
+ background: #f8f9f9;
+ border: 1px solid #eceef1;
+ border-radius: 3px;
+
+ ${window.innerWidth <= 440 &&
+ css`
+ justify-content: flex-start;
+ flex-wrap: wrap;
+ row-gap: 16px;
+ `}
`;
+function isJSON(jsonString) {
+ try {
+ const parsedJson = JSON.parse(jsonString);
+ return parsedJson && typeof parsedJson === "object";
+ } catch (e) {}
+
+ return false;
+}
+
export const ResponseDetails = ({ webhookDetails }) => {
- if (
- !(
- webhookDetails.hasOwnProperty("responseHeaders") ||
- webhookDetails.hasOwnProperty("responsePayload")
- )
- ) {
- return (
-
-
- The SSL connection could not be established, see inner exception.
-
- );
- }
-
const responsePayload = webhookDetails.responsePayload?.trim();
+ const beautifiedJSON = isJSON(responsePayload)
+ ? json_beautifier(JSON.parse(responsePayload), {
+ inlineShortArrays: true,
+ })
+ : responsePayload;
+
+ const numberOfLines = isJSON(responsePayload)
+ ? beautifiedJSON.split("\n").length
+ : responsePayload.split("\n").length;
+
+ const openRawPayload = () => {
+ const rawPayload = window.open("");
+ isJSON(responsePayload)
+ ? rawPayload.document.write(beautifiedJSON.replace(/(?:\r\n|\r|\n)/g, "
"))
+ : rawPayload.document.write(responsePayload);
+ rawPayload.focus();
+ };
+
return (
@@ -51,10 +81,24 @@ export const ResponseDetails = ({ webhookDetails }) => {
Response post body
- {responsePayload === "" ? (
+ {responsePayload.length > 4000 || numberOfLines > 100 ? (
+
+
+ Payload is too large to display.
+
+
+
+ ) : responsePayload === "" ? (
- ) : (
+ ) : isJSON(responsePayload) ? (
+ ) : (
+
)}
);