From d20d363e26b6040ea6de0ceb7d432e2c0a01a7d4 Mon Sep 17 00:00:00 2001 From: SamA1430 Date: Fri, 1 Aug 2025 15:51:38 -0400 Subject: [PATCH 1/4] Add yaml export button and functionality --- chainforge/react-server/src/App.tsx | 23 ++ .../react-server/src/backend/jsonToYml.ts | 197 ++++++++++++++++++ 2 files changed, 220 insertions(+) create mode 100644 chainforge/react-server/src/backend/jsonToYml.ts diff --git a/chainforge/react-server/src/App.tsx b/chainforge/react-server/src/App.tsx index ffb2dbde0..96d2fd7cb 100644 --- a/chainforge/react-server/src/App.tsx +++ b/chainforge/react-server/src/App.tsx @@ -117,6 +117,7 @@ import NestedMenu, { NestedMenuItemProps } from "./NestedMenu"; import RequestClarificationModal, { RequestClarificationModalProps, } from "./RequestClarificationModal"; +import { jsontoYml } from "./backend/jsonToYml"; const IS_ACCEPTED_BROWSER = (isChrome || @@ -667,6 +668,17 @@ const App = () => { URL.revokeObjectURL(downloadLink.href); }; + const exportYml = useCallback( + async (flowData?: unknown) => { + if (!rfInstance && !flowData) return; + // We first get the data of the flow, if we haven't already + const flow = flowData ?? rfInstance?.toObject(); + if (!flow) return; + await jsontoYml(JSON.stringify(flow), flowFileName); + }, + [rfInstance, flowFileName], + ); + // Export flow to JSON const exportFlow = useCallback( ( @@ -1573,6 +1585,17 @@ const App = () => { > Export +