"use client";
import * as React from "react";
import { gateLabelForStatus } from "@tasks/shared/convoy-lifecycle";
import type { ConvoyStatus } from "@tasks/shared/convoy-lifecycle";
import { Loader2 } from "lucide-react";
import { cn } from "@/lib/utils";
import { api } from "@/lib/trpc";
type ConvoyCard = {
id: string;
title: string;
status: ConvoyStatus;
content: { convoySlug: string; classification: string; successMetric: string } | null;
};
export function ConvoyKanban({
workspaceSlug,
selectedId,
onSelect,
}: {
workspaceSlug: string;
selectedId: string | null;
onSelect: (id: string) => void;
}) {
const kanbanQuery = api.convoys.kanban.useQuery(
{ workspace: workspaceSlug },
{ enabled: Boolean(workspaceSlug) },
);
if (kanbanQuery.isLoading) {
return (
Loading kanban…
);
}
const columns = kanbanQuery.data?.columns ?? [];
return (
{columns.map((column) => (
{column.label}
{column.convoys.length}
{column.convoys.map((convoy) => (
-
))}
))}
);
}
export function GateInbox({
workspaceSlug,
selectedId,
onSelect,
}: {
workspaceSlug: string;
selectedId: string | null;
onSelect: (id: string) => void;
}) {
const kanbanQuery = api.convoys.kanban.useQuery(
{ workspace: workspaceSlug },
{ enabled: Boolean(workspaceSlug) },
);
const inbox = kanbanQuery.data?.gateInbox ?? [];
return (
Needs you
Gate 1, 2, and 3 approvals
{inbox.length === 0 ? (
No pending gates.
) : (
{inbox.map((convoy: ConvoyCard) => (
-
))}
)}
);
}