From f2fb70025f6edb46cbca2d8ed2345c28974102a2 Mon Sep 17 00:00:00 2001 From: Thomas Camlong Date: Mon, 29 Dec 2025 11:08:01 +0100 Subject: [PATCH] feat(hooks): add useBulkTriggerWorkflow hook Add React Query mutation hook for bulk workflow triggering: - Shows success toast with count of triggered workflows - Shows warning toast if some workflows failed - Includes link to view workflows on GitHub --- web/src/hooks/use-submissions.ts | 49 +++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/web/src/hooks/use-submissions.ts b/web/src/hooks/use-submissions.ts index 20bb6c65..7b947814 100644 --- a/web/src/hooks/use-submissions.ts +++ b/web/src/hooks/use-submissions.ts @@ -1,6 +1,6 @@ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query" import { toast } from "sonner" -import { triggerAddIconWorkflow } from "@/app/actions/github" +import { triggerAddIconWorkflow, triggerBulkAddIconWorkflow } from "@/app/actions/github" import { revalidateAllSubmissions } from "@/app/actions/submissions" import { getAllIcons } from "@/lib/api" import { pb, type Submission } from "@/lib/pb" @@ -213,3 +213,50 @@ export function useTriggerWorkflow() { }, }) } + +// Trigger GitHub workflow for multiple submissions (bulk action) +export function useBulkTriggerWorkflow() { + return useMutation({ + mutationFn: async ({ submissionIds, dryRun = false }: { submissionIds: string[]; dryRun?: boolean }) => { + const authToken = pb.authStore.token + if (!authToken) { + throw new Error("Not authenticated") + } + + const result = await triggerBulkAddIconWorkflow(authToken, submissionIds, dryRun) + return result + }, + onSuccess: (data) => { + const successCount = data.results.filter((r) => r.success).length + const failCount = data.results.filter((r) => !r.success).length + + if (failCount === 0) { + toast.success(`Triggered ${successCount} workflow(s)`, { + description: "All icon workflows have been queued. They will run sequentially.", + action: data.workflowUrl + ? { + label: "View on GitHub", + onClick: () => window.open(data.workflowUrl, "_blank"), + } + : undefined, + }) + } else { + toast.warning(`Triggered ${successCount} of ${data.results.length} workflows`, { + description: `${failCount} workflow(s) failed to trigger`, + action: data.workflowUrl + ? { + label: "View on GitHub", + onClick: () => window.open(data.workflowUrl, "_blank"), + } + : undefined, + }) + } + }, + onError: (error: Error) => { + console.error("Error triggering bulk workflows:", error) + toast.error("Failed to trigger workflows", { + description: error.message || "An error occurred", + }) + }, + }) +}