From 158347bf90be2110af2c3356d60ca09bcbe2cc4e Mon Sep 17 00:00:00 2001 From: amhsirak Date: Mon, 27 Oct 2025 17:58:28 +0530 Subject: [PATCH] feat: group actions by type --- src/components/robot/pages/RobotEditPage.tsx | 107 +++++++++++++------ 1 file changed, 73 insertions(+), 34 deletions(-) diff --git a/src/components/robot/pages/RobotEditPage.tsx b/src/components/robot/pages/RobotEditPage.tsx index e85b81fb..7d3cee74 100644 --- a/src/components/robot/pages/RobotEditPage.tsx +++ b/src/components/robot/pages/RobotEditPage.tsx @@ -536,48 +536,87 @@ export const RobotEditPage = ({ handleStart }: RobotSettingsProps) => { }; const renderActionNameFields = () => { - if (!robot || !robot.recording || !robot.recording.workflow) return null; + if (!robot || !robot.recording || !robot.recording.workflow) return null; - const editableActions = new Set(['screenshot', 'scrapeList', 'scrapeSchema']); - const inputs: JSX.Element[] = []; + const editableActions = new Set(['screenshot', 'scrapeList', 'scrapeSchema']); + const textInputs: JSX.Element[] = []; + const screenshotInputs: JSX.Element[] = []; + const listInputs: JSX.Element[] = []; - robot.recording.workflow.forEach((pair, pairIndex) => { - if (!pair.what) return; + robot.recording.workflow.forEach((pair, pairIndex) => { + if (!pair.what) return; - pair.what.forEach((action, actionIndex) => { - // Only show editable name inputs for meaningful action types - if (!editableActions.has(String(action.action))) return; + pair.what.forEach((action, actionIndex) => { + if (!editableActions.has(String(action.action))) return; - // derive current name from possible fields - const currentName = - action.name || - (action.args && action.args[0] && typeof action.args[0] === 'object' && action.args[0].__name) || - ''; + const currentName = + action.name || + (action.args && action.args[0] && typeof action.args[0] === 'object' && action.args[0].__name) || + ''; - inputs.push( - handleActionNameChange(pairIndex, actionIndex, e.target.value)} - style={{ marginBottom: '12px' }} - fullWidth - /> - ); - }); + const textField = ( + handleActionNameChange(pairIndex, actionIndex, e.target.value)} + style={{ marginBottom: '12px' }} + fullWidth + /> + ); + + switch (action.action) { + case 'scrapeSchema': + textInputs.push(textField); + break; + case 'screenshot': + screenshotInputs.push(textField); + break; + case 'scrapeList': + listInputs.push(textField); + break; + } }); + }); - if (inputs.length === 0) return null; + const hasAnyInputs = textInputs.length > 0 || screenshotInputs.length > 0 || listInputs.length > 0; + if (!hasAnyInputs) return null; - return ( - <> - - {t('Actions')} - - {inputs} - - ); - }; + return ( + <> + + {t('Actions')} + + + {textInputs.length > 0 && ( + <> + + Texts + + {textInputs} + + )} + + {screenshotInputs.length > 0 && ( + <> + 0 ? '16px' : '0' }}> + Screenshots + + {screenshotInputs} + + )} + + {listInputs.length > 0 && ( + <> + 0 || screenshotInputs.length > 0) ? '16px' : '0' }}> + Lists + + {listInputs} + + )} + + ); +}; const renderCredentialFields = ( selectors: string[],