diff --git a/packages/webapp/src/pages/Integration/EndpointReference.tsx b/packages/webapp/src/pages/Integration/EndpointReference.tsx index de7db1c8d6..cd3e7486e3 100644 --- a/packages/webapp/src/pages/Integration/EndpointReference.tsx +++ b/packages/webapp/src/pages/Integration/EndpointReference.tsx @@ -1,5 +1,6 @@ import { useState, useEffect } from 'react'; -import { AdjustmentsHorizontalIcon, ChevronDownIcon, ChevronUpIcon } from '@heroicons/react/24/outline'; +import { Loading, Tooltip, useModal, Modal } from '@geist-ui/core'; +import { PlayCircleIcon, AdjustmentsHorizontalIcon, ChevronDownIcon, ChevronUpIcon } from '@heroicons/react/24/outline'; import { Prism } from '@mantine/prism'; import Button from '../../components/ui/button/Button'; import CopyButton from '../../components/ui/button/CopyButton'; @@ -35,8 +36,13 @@ export default function EndpointReference(props: EndpointReferenceProps) { const [language, setLanguage] = useState(Language.Node); const [syncSnippet, setSyncSnippet] = useState(''); const [jsonResponseSnippet, setJsonResponseSnippet] = useState(''); + const [flowResponse, setFlowResponse] = useState(); + const [flowReturnLoading, setFlowReturnLoading] = useState(false); + const [jsonString, setJsonString] = useState(''); + const { setVisible, bindings } = useModal(); const connectionId = ''; + const connectionIds = integration.connections.map((connection) => connection.connection_id); const baseUrl = useStore((state) => state.baseUrl); @@ -68,8 +74,116 @@ export default function EndpointReference(props: EndpointReferenceProps) { setSubTab(SubTabs.Flow); }; + const handleJsonChange = (event: React.ChangeEvent) => { + setJsonString(event.target.value); + }; + + const handleRun = async (e: React.FormEvent) => { + e.preventDefault(); + const selectedConnectionId = (e.target as HTMLFormElement).connection.value; + + setFlowReturnLoading(true); + if (activeFlow?.type === 'sync') { + const response = await fetch(`${baseUrl}/records?model=${activeFlow?.models[0].name}`, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + 'Connection-Id': selectedConnectionId, + 'Provider-Config-Key': integration.unique_key, + Authorization: `Bearer ${account.secret_key}` + } + }); + const data = await response.json(); + setFlowResponse(data); + } else { + if (jsonString) { + try { + JSON.parse(jsonString); + } catch { + setFlowResponse({ error: 'Invalid JSON' }); + setFlowReturnLoading(false); + return; + } + } + const input = jsonString ? JSON.parse(jsonString) : {}; + const response = await fetch(`${baseUrl}/action/trigger`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Connection-Id': selectedConnectionId, + 'Provider-Config-Key': integration.unique_key, + Authorization: `Bearer ${account.secret_key}` + }, + body: JSON.stringify({ action_name: activeFlow?.name, input }) + }); + const data = await response.json(); + setFlowResponse(data); + } + setFlowReturnLoading(false); + }; + return (
+ +
+
+ + <> +
+
+ + {activeFlow?.input && Object.keys(activeFlow?.input).length > 0 && ( +