From a2c794a77edea9307896e83e2e08bdbbb16fbd4f Mon Sep 17 00:00:00 2001 From: waleed Date: Mon, 19 Jan 2026 15:45:30 -0800 Subject: [PATCH] added ability to edit parameter and workflow descriptions --- apps/sim/app/api/v1/workflows/[id]/route.ts | 50 +--- .../deploy-modal/components/api/api.tsx | 33 --- .../general/components/api-info-modal.tsx | 262 ++++++++++++++++++ .../components/deploy-modal/deploy-modal.tsx | 21 +- apps/sim/lib/workflows/input-format.ts | 7 +- 5 files changed, 289 insertions(+), 84 deletions(-) create mode 100644 apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/deploy/components/deploy-modal/components/general/components/api-info-modal.tsx diff --git a/apps/sim/app/api/v1/workflows/[id]/route.ts b/apps/sim/app/api/v1/workflows/[id]/route.ts index 8d6c39cee..c836e936b 100644 --- a/apps/sim/app/api/v1/workflows/[id]/route.ts +++ b/apps/sim/app/api/v1/workflows/[id]/route.ts @@ -3,7 +3,7 @@ import { permissions, workflow, workflowBlocks } from '@sim/db/schema' import { createLogger } from '@sim/logger' import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' -import { isValidStartBlockType } from '@/lib/workflows/triggers/start-block-types' +import { extractInputFieldsFromBlocks } from '@/lib/workflows/input-format' import { createApiResponse, getUserLimits } from '@/app/api/v1/logs/meta' import { checkRateLimit, createRateLimitResponse } from '@/app/api/v1/middleware' @@ -11,46 +11,6 @@ const logger = createLogger('V1WorkflowDetailsAPI') export const revalidate = 0 -interface InputField { - name: string - type: string - description?: string -} - -/** - * Extracts input fields from workflow blocks. - * Finds the starter/trigger block and extracts its inputFormat configuration. - */ -function extractInputFields(blocks: Array<{ type: string; subBlocks: unknown }>): InputField[] { - const starterBlock = blocks.find((block) => isValidStartBlockType(block.type)) - - if (!starterBlock) { - return [] - } - - const subBlocks = starterBlock.subBlocks as Record | undefined - const inputFormat = subBlocks?.inputFormat?.value - - if (!Array.isArray(inputFormat)) { - return [] - } - - return inputFormat - .filter( - (field: unknown): field is { name: string; type?: string; description?: string } => - typeof field === 'object' && - field !== null && - 'name' in field && - typeof (field as { name: unknown }).name === 'string' && - (field as { name: string }).name.trim() !== '' - ) - .map((field) => ({ - name: field.name, - type: field.type || 'string', - ...(field.description && { description: field.description }), - })) -} - export async function GET(request: NextRequest, { params }: { params: Promise<{ id: string }> }) { const requestId = crypto.randomUUID().slice(0, 8) @@ -98,15 +58,19 @@ export async function GET(request: NextRequest, { params }: { params: Promise<{ return NextResponse.json({ error: 'Workflow not found' }, { status: 404 }) } - const blocks = await db + const blockRows = await db .select({ + id: workflowBlocks.id, type: workflowBlocks.type, subBlocks: workflowBlocks.subBlocks, }) .from(workflowBlocks) .where(eq(workflowBlocks.workflowId, id)) - const inputs = extractInputFields(blocks) + const blocksRecord = Object.fromEntries( + blockRows.map((block) => [block.id, { type: block.type, subBlocks: block.subBlocks }]) + ) + const inputs = extractInputFieldsFromBlocks(blocksRecord) const response = { id: workflowData.id, diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/deploy/components/deploy-modal/components/api/api.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/deploy/components/deploy-modal/components/api/api.tsx index 97ddbbd77..eff1cff3a 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/deploy/components/deploy-modal/components/api/api.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/deploy/components/deploy-modal/components/api/api.tsx @@ -452,39 +452,6 @@ console.log(limits);` )} - {/*
-
- - - - - - - {copied.endpoint ? 'Copied' : 'Copy'} - - -
- -
*/} -