-
-
-
- {t('Workflows verwalten, ausführen und bearbeiten')}
-
-
-
-
- {(['all', 'active', 'inactive'] as const).map((f) => (
-
- ))}
-
-
-
-
-
-
-
-
-
- data={workflows}
- columns={columns}
- loading={loading}
- pagination={true}
- pageSize={25}
- searchable={true}
- filterable={true}
- sortable={true}
- selectable={true}
- apiEndpoint={`/api/workflows/${instanceId}/workflows`}
- actionButtons={[
- {
- type: 'edit',
- title: t('bearbeiten'),
- onAction: handleEdit,
- },
- {
- type: 'delete',
- title: t('löschen'),
- },
- ]}
- customActions={[
- {
- id: 'rename',
- icon: ,
- title: t('umbenennen'),
- onClick: (row) => handleRename(row),
- },
- {
- id: 'activate',
- icon: ,
- title: t('aktivieren'),
- onClick: (row) => handleToggleActive(row),
- loading: (row) => togglingId === row.id,
- visible: (row) => row.active === false,
- },
- {
- id: 'deactivate',
- icon: ,
- title: t('deaktivieren'),
- onClick: (row) => handleToggleActive(row),
- loading: (row) => togglingId === row.id,
- visible: (row) => row.active !== false,
- },
- {
- id: 'execute',
- icon: ,
- title: t('ausführen'),
- onClick: (row) => handleExecute(row),
- loading: (row) => executingId === row.id,
- visible: (row) => hasManualTrigger(row),
- },
- {
- id: 'export',
- icon: ,
- title: t('Als Datei exportieren'),
- onClick: (row) => handleExport(row),
- },
- ]}
- onDelete={(row) => handleDelete(row.id)}
- hookData={hookData}
- emptyMessage={t('Keine Workflows gefunden. Erstelle einen.')}
- />
-
-
-
- );
-};
diff --git a/src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx b/src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx
index 9299209..1788959 100644
--- a/src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx
+++ b/src/pages/views/graphicalEditor/GraphicalEditorWorkflowsTasksPage.tsx
@@ -76,7 +76,7 @@ function hasManualOrFormInvocation(wf: Automation2Workflow): boolean {
}
/**
- * Primary entry for execute — matches GraphicalEditorWorkflowsPage.handleExecute
+ * Primary entry for execute — POST /api/workflows/{instanceId}/execute with collected inputs.
* (manual first, then form or api).
*/
function getPrimaryEntryPoint(wf: Automation2Workflow) {
diff --git a/src/pages/views/workspace/WorkspaceKeepAlive.tsx b/src/pages/views/workspace/WorkspaceKeepAlive.tsx
deleted file mode 100644
index 7cb7575..0000000
--- a/src/pages/views/workspace/WorkspaceKeepAlive.tsx
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * WorkspaceKeepAlive
- *
- * Renders the WorkspacePage permanently at the MainLayout level so it
- * survives route changes. Visibility is toggled via CSS `display`
- * instead of mount / unmount, preserving messages, SSE connections,
- * files, and all other workspace state.
- *
- * Persistence is scoped per `(mandateId, instanceId)` — switching to a
- * different mandate or instance via the navigator unmounts the previous
- * page and mounts a fresh one (otherwise stale state from tenant A
- * leaks into tenant B).
- */
-
-import React, { useRef } from 'react';
-import { useLocation } from 'react-router-dom';
-import { WorkspacePage } from './WorkspacePage';
-
-const _WORKSPACE_ROUTE_RE = /\/mandates\/([^/]+)\/workspace\/([^/]+)/;
-
-interface WorkspaceKeepAliveProps {
- isVisible: boolean;
-}
-
-export const WorkspaceKeepAlive: React.FC