import { useState } from "react"; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import { Label } from "@/components/ui/label"; import { toast } from "sonner"; import { useForm, formOptions } from "@tanstack/react-form"; import axios from "axios"; interface AddBlacklistDialogProps { onAdded?: () => void; // callback để refresh danh sách sau khi thêm } const formOpts = formOptions({ defaultValues: { appName: "", processName: "" }, }); export function AddBlacklistDialog({ onAdded }: AddBlacklistDialogProps) { const [isOpen, setIsOpen] = useState(false); const [isSubmitting, setIsSubmitting] = useState(false); const [isDone, setIsDone] = useState(false); const form = useForm({ ...formOpts, onSubmit: async ({ value }) => { if (!value.appName || !value.processName) { toast.error("Vui lòng nhập đầy đủ tên ứng dụng và tiến trình"); return; } try { setIsSubmitting(true); await axios.post("/api/appversions/add-blacklist", { appName: value.appName, processName: value.processName, }); toast.success("Đã thêm vào blacklist!"); setIsDone(true); if (onAdded) onAdded(); } catch (error) { console.error(error); toast.error("Không thể thêm vào blacklist"); } finally { setIsSubmitting(false); } }, }); const handleDialogClose = (open: boolean) => { if (isSubmitting) return; setIsOpen(open); if (!open) { setIsDone(false); form.reset(); } }; return ( Thêm ứng dụng vào danh sách cấm
{ e.preventDefault(); e.stopPropagation(); form.handleSubmit(); }} > {(field) => (
field.handleChange(e.target.value)} placeholder="Ví dụ: Google Chrome" disabled={isSubmitting || isDone} />
)}
{(field) => (
field.handleChange(e.target.value)} placeholder="chrome.exe" disabled={isSubmitting || isDone} />
)}
{!isDone ? ( <> ) : ( )}
); }