Files
prowler/ui/components/shared/task-polling-watcher.tsx
2026-07-22 12:58:12 +01:00

35 lines
1.3 KiB
TypeScript

"use client";
import {
CROSS_PROVIDER_PDF_TASK_KIND,
crossProviderPdfHandler,
} from "@/app/(prowler)/compliance/_lib/cross-provider-pdf";
import { jiraDispatchTaskHandler } from "@/components/findings/jira-dispatch-task-handler";
import { useMountEffect } from "@/hooks/use-mount-effect";
import {
registerTaskKindHandler,
resumePendingTasks,
} from "@/store/task-watcher/store";
import { JIRA_DISPATCH_TASK_KIND } from "@/types/integrations";
// Kind registrations happen at module scope, before any task can settle in
// this tab. Adding a new watched task kind (integration tests, scan exports,
// …) is one line here plus a handler next to the feature that owns it.
registerTaskKindHandler(CROSS_PROVIDER_PDF_TASK_KIND, crossProviderPdfHandler);
registerTaskKindHandler(JIRA_DISPATCH_TASK_KIND, jiraDispatchTaskHandler);
/**
* Mounted once in the app layout (next to `Toaster`): resumes polling any
* backend task persisted as pending by `@/store/task-watcher`, so completion
* toasts survive a hard reload. In-session tracking needs no component at
* all — `trackAndPollTask` runs its loop at module scope from the
* dispatching click handler.
*/
export const TaskPollingWatcher = () => {
useMountEffect(() => {
resumePendingTasks();
});
return null;
};