diff --git a/src/app/(app)/stls/_components/stl-table.tsx b/src/app/(app)/stls/_components/stl-table.tsx index 9235e4d..fabc3ce 100644 --- a/src/app/(app)/stls/_components/stl-table.tsx +++ b/src/app/(app)/stls/_components/stl-table.tsx @@ -3,7 +3,7 @@ import { useState, useCallback, useTransition, useMemo, useRef } from "react"; import { useRouter, usePathname, useSearchParams } from "next/navigation"; import { toast } from "sonner"; -import { Search, Layers, Upload } from "lucide-react"; +import { Search, Layers, Upload, Send } from "lucide-react"; import { UploadDialog } from "./upload-dialog"; import { useDataTable } from "@/hooks/use-data-table"; import { @@ -49,6 +49,7 @@ import { createGroupAction, removeFromGroupAction, sendAllInGroupAction, + sendAllFromCreatorAction, updateGroupPreviewAction, mergeGroupsAction, } from "../actions"; @@ -85,6 +86,7 @@ export function StlTable({ const router = useRouter(); const pathname = usePathname(); const searchParams = useSearchParams(); + const activeCreator = searchParams.get("creator") ?? ""; const [searchValue, setSearchValue] = useState(searchParams.get("search") ?? ""); const [viewPkg, setViewPkg] = useState(null); @@ -277,6 +279,23 @@ export function StlTable({ [router] ); + const handleSendAllFromCreator = useCallback(() => { + if (!confirm(`Send all packages from "${activeCreator}" to your Telegram?`)) return; + startTransition(async () => { + const result = await sendAllFromCreatorAction(activeCreator); + if (result.success) { + const { queued, skipped } = result.data; + toast.success( + `Queued ${queued} package${queued === 1 ? "" : "s"} from ${activeCreator}` + + (skipped ? ` (${skipped} already queued)` : "") + ); + router.refresh(); + } else { + toast.error(result.error); + } + }); + }, [activeCreator, router]); + const handleRemoveFromGroup = useCallback( (packageId: string) => { startTransition(async () => { @@ -505,6 +524,17 @@ export function StlTable({ Upload Files + {activeCreator && ( + + )} {selectedPackages.size >= 2 && (