"use client"; import { useState } from "react"; import { checkAvailabilityAction } from "../[slug]/availabilityActions"; type Status = | { kind: "idle" } | { kind: "running"; jobId?: string } | { kind: "done"; jobId: string } | { kind: "error"; message: string }; export function ChannelAvailabilityButton({ slug, disabled, }: { slug: string; disabled?: boolean; }) { const [status, setStatus] = useState({ kind: "idle" }); async function handleClick() { setStatus({ kind: "running" }); try { // No queueKey override → server picks platformQueueKey(channel) by // default, matching the channel-detail page's availability buttons and // sharing the rate-limit budget with Sync. const result = await checkAvailabilityAction(slug, "resume"); if (!result.ok) { setStatus({ kind: "error", message: result.error }); return; } setStatus({ kind: "running", jobId: result.jobId }); const reader = result.stream.getReader(); while (true) { const { done } = await reader.read(); if (done) break; } setStatus({ kind: "done", jobId: result.jobId }); } catch (e) { setStatus({ kind: "error", message: (e as Error).message }); } } const running = status.kind === "running"; return (
{status.kind === "error" && ( {status.message} )} {status.kind === "running" && status.jobId && ( job {status.jobId} )} {status.kind === "done" && ( done (job {status.jobId}) )}
); }