From f681274e5da49c36e9176b5dbca131c74881543b Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 3 Sep 2025 22:06:58 -0700 Subject: [PATCH] enable/disable --- models/project/workflows.go | 10 ++++++++++ routers/web/projects/workflows.go | 14 +++++++++---- .../components/projects/ProjectWorkflow.vue | 3 ++- .../js/components/projects/WorkflowStore.ts | 20 +++++++++++++++++-- 4 files changed, 40 insertions(+), 7 deletions(-) diff --git a/models/project/workflows.go b/models/project/workflows.go index dd9d77f233..f7d717286f 100644 --- a/models/project/workflows.go +++ b/models/project/workflows.go @@ -229,3 +229,13 @@ func DeleteWorkflow(ctx context.Context, id int64) error { _, err := db.GetEngine(ctx).ID(id).Delete(&Workflow{}) return err } + +func EnableWorkflow(ctx context.Context, id int64) error { + _, err := db.GetEngine(ctx).ID(id).Cols("enabled").Update(&Workflow{Enabled: true}) + return err +} + +func DisableWorkflow(ctx context.Context, id int64) error { + _, err := db.GetEngine(ctx).ID(id).Cols("enabled").Update(&Workflow{Enabled: false}) + return err +} diff --git a/routers/web/projects/workflows.go b/routers/web/projects/workflows.go index db78a9d6c3..fc47c64c4f 100644 --- a/routers/web/projects/workflows.go +++ b/routers/web/projects/workflows.go @@ -488,10 +488,16 @@ func WorkflowsStatus(ctx *context.Context) { enabledStr := ctx.Req.FormValue("enabled") enabled := enabledStr == "true" - wf.Enabled = enabled - if err := project_model.UpdateWorkflow(ctx, wf); err != nil { - ctx.ServerError("UpdateWorkflow", err) - return + if enabled { + if err := project_model.EnableWorkflow(ctx, workflowID); err != nil { + ctx.ServerError("EnableWorkflow", err) + return + } + } else { + if err := project_model.DisableWorkflow(ctx, workflowID); err != nil { + ctx.ServerError("DisableWorkflow", err) + return + } } ctx.JSON(http.StatusOK, map[string]any{ diff --git a/web_src/js/components/projects/ProjectWorkflow.vue b/web_src/js/components/projects/ProjectWorkflow.vue index 58fe11b24c..a8f76b5fa9 100644 --- a/web_src/js/components/projects/ProjectWorkflow.vue +++ b/web_src/js/components/projects/ProjectWorkflow.vue @@ -214,7 +214,8 @@ const createNewWorkflow = (baseEventType, capabilities, displayName) => { actions: [], filter_summary: '', base_event_type: baseEventType, - enabled: true, + workflow_event: baseEventType, + enabled: true, // Ensure new workflows are enabled by default }; store.selectedWorkflow = newWorkflow; diff --git a/web_src/js/components/projects/WorkflowStore.ts b/web_src/js/components/projects/WorkflowStore.ts index 20c37fba0d..1c9b6a793b 100644 --- a/web_src/js/components/projects/WorkflowStore.ts +++ b/web_src/js/components/projects/WorkflowStore.ts @@ -200,7 +200,9 @@ export function createWorkflowStore(props: { projectLink: string, eventID: strin const formData = new FormData(); formData.append('enabled', store.selectedWorkflow.enabled.toString()); - const response = await POST(`${props.projectLink}/workflows/${store.selectedWorkflow.event_id}/status`, { + // Use workflow ID for status update + const workflowId = store.selectedWorkflow.id; + const response = await POST(`${props.projectLink}/workflows/${workflowId}/status`, { data: formData, }); @@ -208,6 +210,8 @@ export function createWorkflowStore(props: { projectLink: string, eventID: strin const errorText = await response.text(); console.error('Failed to update workflow status:', errorText); alert(`Failed to update workflow status: ${response.status} ${response.statusText}`); + // Revert the status change on error + store.selectedWorkflow.enabled = !store.selectedWorkflow.enabled; return; } @@ -218,9 +222,16 @@ export function createWorkflowStore(props: { projectLink: string, eventID: strin if (existingIndex >= 0) { store.workflowEvents[existingIndex].enabled = store.selectedWorkflow.enabled; } + console.log(`Workflow status updated to: ${store.selectedWorkflow.enabled ? 'enabled' : 'disabled'}`); + } else { + // Revert the status change on failure + store.selectedWorkflow.enabled = !store.selectedWorkflow.enabled; + alert('Failed to update workflow status'); } } catch (error) { console.error('Error updating workflow status:', error); + // Revert the status change on error + store.selectedWorkflow.enabled = !store.selectedWorkflow.enabled; alert(`Error updating workflow status: ${error.message}`); } }, @@ -229,7 +240,9 @@ export function createWorkflowStore(props: { projectLink: string, eventID: strin if (!store.selectedWorkflow || store.selectedWorkflow.id === 0) return; try { - const response = await POST(`${props.projectLink}/workflows/${store.selectedWorkflow.event_id}/delete`, { + // Use workflow ID for deletion + const workflowId = store.selectedWorkflow.id; + const response = await POST(`${props.projectLink}/workflows/${workflowId}/delete`, { data: new FormData(), }); @@ -247,6 +260,9 @@ export function createWorkflowStore(props: { projectLink: string, eventID: strin if (existingIndex >= 0) { store.workflowEvents.splice(existingIndex, 1); } + console.log('Workflow deleted successfully'); + } else { + alert('Failed to delete workflow'); } } catch (error) { console.error('Error deleting workflow:', error);