SPB Git forge

spb/fetcha

Public
11commits 1branches 0releases
1.5 MBsize
maindefault branch
16 days agolast push
TypeScript 97.5% SQL 1.4% Python 0.8%
1.1 KB · 34 lines tsx
Raw Blame History
1"use client";2import * as React from "react";3import { useRouter } from "next/navigation";4import { Ban } from "lucide-react";5import { cancelCrawl } from "@/actions/crawls";6import { Button } from "@/components/ui/button";78export function CancelCrawlButton({ id, size = "sm" }: { id: string; size?: "xs" | "sm" }) {9  const router = useRouter();10  const [pending, startTransition] = React.useTransition();11  const [error, setError] = React.useState<string | null>(null);12  return (13    <span className="inline-flex items-center gap-2">14      {error ? <span className="text-[11.5px] text-danger">{error}</span> : null}15      <Button16        variant="outline"17        size={size}18        loading={pending}19        onClick={() =>20          startTransition(async () => {21            setError(null);22            const res = await cancelCrawl(id);23            if (!res.ok) setError(res.error.message);24            else router.refresh();25          })26        }27        aria-label={`Cancel crawl ${id}`}28      >29        {!pending ? <Ban className="size-3.5" /> : null} Cancel30      </Button>31    </span>32  );33}34