diff --git a/packages/serverless-workflow-diagram-editor/src/side-panel/Fields.tsx b/packages/serverless-workflow-diagram-editor/src/side-panel/Fields.tsx
index 62da659..c8163b4 100644
--- a/packages/serverless-workflow-diagram-editor/src/side-panel/Fields.tsx
+++ b/packages/serverless-workflow-diagram-editor/src/side-panel/Fields.tsx
@@ -50,12 +50,12 @@ export function StackedField({ label, value }: { label: string; value: string })
);
}
-export function JsonField({ json, summary = "{...}" }: { json: string; summary?: string }) {
+export function YamlField({ yaml, summary = "{...}" }: { yaml: string; summary?: string }) {
return (
-
-
- {summary}
- {json}
+
);
diff --git a/packages/serverless-workflow-diagram-editor/src/side-panel/NodeDetailsView.tsx b/packages/serverless-workflow-diagram-editor/src/side-panel/NodeDetailsView.tsx
index 455a500..2c1ce88 100644
--- a/packages/serverless-workflow-diagram-editor/src/side-panel/NodeDetailsView.tsx
+++ b/packages/serverless-workflow-diagram-editor/src/side-panel/NodeDetailsView.tsx
@@ -15,10 +15,11 @@
*/
import type * as RF from "@xyflow/react";
+import yaml from "js-yaml";
import { useI18n } from "@serverlessworkflow/i18n";
import { getTaskDetails, type DetailField } from "@/core/taskDetails";
import type { BaseNodeData } from "@/react-flow/nodes/Nodes";
-import { JsonField, PropertyField, SectionHeader } from "./Fields";
+import { YamlField, PropertyField, SectionHeader } from "./Fields";
type NodeDetailsViewProps = {
node: RF.Node;
@@ -68,7 +69,7 @@ export function NodeDetailsView({ node }: NodeDetailsViewProps) {
<>
-
+
>
)}
diff --git a/packages/serverless-workflow-diagram-editor/src/side-panel/SidePanel.css b/packages/serverless-workflow-diagram-editor/src/side-panel/SidePanel.css
index efe6005..d57621c 100644
--- a/packages/serverless-workflow-diagram-editor/src/side-panel/SidePanel.css
+++ b/packages/serverless-workflow-diagram-editor/src/side-panel/SidePanel.css
@@ -238,36 +238,36 @@
@apply dec:mt-4;
}
- /** collapsible JSON field */
- .dec-root .dec-sidebar-json-field {
+ /** collapsible YAML field */
+ .dec-root .dec-sidebar-yaml-field {
@apply dec:py-2 dec:px-1 dec:rounded-sm dec:border-b dec:border-gray-100 dec:transition-colors;
}
- .dec-root .dec-sidebar-json-field:hover {
+ .dec-root .dec-sidebar-yaml-field:hover {
@apply dec:bg-gray-100/60;
}
- .dec-root.dark .dec-sidebar-json-field {
+ .dec-root.dark .dec-sidebar-yaml-field {
@apply dec:border-gray-800;
}
- .dec-root.dark .dec-sidebar-json-field:hover {
+ .dec-root.dark .dec-sidebar-yaml-field:hover {
@apply dec:bg-gray-800/40;
}
- .dec-root .dec-sidebar-json-summary {
+ .dec-root .dec-sidebar-yaml-summary {
@apply dec:cursor-pointer dec:text-sm dec:font-semibold dec:text-gray-900 dec:select-none dec:rounded-sm;
}
- .dec-root.dark .dec-sidebar-json-summary {
+ .dec-root.dark .dec-sidebar-yaml-summary {
@apply dec:text-gray-100;
}
- .dec-root .dec-sidebar-json-pre {
+ .dec-root .dec-sidebar-yaml-pre {
@apply dec:mt-1 dec:max-h-64 dec:overflow-auto dec:rounded-md dec:bg-gray-100 dec:p-2 dec:text-xs dec:text-gray-800 dec:whitespace-pre-wrap dec:break-words;
}
- .dec-root.dark .dec-sidebar-json-pre {
+ .dec-root.dark .dec-sidebar-yaml-pre {
@apply dec:bg-gray-800 dec:text-gray-200;
}
}
diff --git a/packages/serverless-workflow-diagram-editor/tests/side-panel/NodeDetailsView.test.tsx b/packages/serverless-workflow-diagram-editor/tests/side-panel/NodeDetailsView.test.tsx
index 3ef73c8..72f6177 100644
--- a/packages/serverless-workflow-diagram-editor/tests/side-panel/NodeDetailsView.test.tsx
+++ b/packages/serverless-workflow-diagram-editor/tests/side-panel/NodeDetailsView.test.tsx
@@ -17,6 +17,7 @@
import { describe, it, expect } from "vitest";
import { screen } from "@testing-library/react";
import type * as RF from "@xyflow/react";
+import yaml from "js-yaml";
import { NodeDetailsView } from "../../src/side-panel/NodeDetailsView";
import type { BaseNodeData } from "../../src/react-flow/nodes/Nodes";
import { renderWithProviders } from "../test-utils/render-helpers";
@@ -72,17 +73,16 @@ describe("NodeDetailsView", () => {
expect(screen.getByText("{...}")).toBeInTheDocument();
});
- it("renders a collapsed Source section with full json task", () => {
+ it("renders a collapsed Source section with full yaml task", () => {
const task = { call: "http", with: { endpoint: "https://api.example.com" } };
const node = makeNode({ label: "getPets", task });
const { container } = renderWithProviders();
expect(screen.getByRole("heading", { name: "Source" })).toBeInTheDocument();
- expect(container.querySelector(".dec-sidebar-json-summary")?.textContent).toBe("View source");
- expect(container.querySelector(".dec-sidebar-json-pre")?.textContent).toBe(
- JSON.stringify(task, null, 2),
- );
+ expect(container.querySelector(".dec-sidebar-yaml-summary")?.textContent).toBe("View source");
+ expect(container.querySelector(".dec-sidebar-yaml-pre")?.textContent).toBe(
+ 'call: http\nwith:\n endpoint: https://api.example.com\n')
});
it("renders node details message when the task has no task", () => {