68 lines
1.8 KiB
TypeScript
68 lines
1.8 KiB
TypeScript
|
|
import { FormBuilder, FormField } from "@/components/forms/dynamic-submit-form";
|
||
|
|
import { type BlacklistFormData } from "@/types/black-list";
|
||
|
|
import { toast } from "sonner";
|
||
|
|
|
||
|
|
interface BlacklistFormProps {
|
||
|
|
onSubmit: (data: BlacklistFormData) => Promise<void>;
|
||
|
|
closeDialog: () => void;
|
||
|
|
initialData?: Partial<BlacklistFormData>;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function BlacklistForm({
|
||
|
|
onSubmit,
|
||
|
|
closeDialog,
|
||
|
|
initialData,
|
||
|
|
}: BlacklistFormProps) {
|
||
|
|
return (
|
||
|
|
<FormBuilder<BlacklistFormData>
|
||
|
|
defaultValues={{
|
||
|
|
appName: initialData?.appName || "",
|
||
|
|
processName: initialData?.processName || "",
|
||
|
|
}}
|
||
|
|
onSubmit={async (values: BlacklistFormData) => {
|
||
|
|
if (!values.appName.trim()) {
|
||
|
|
toast.error("Vui lòng nhập tên ứng dụng");
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
if (!values.processName.trim()) {
|
||
|
|
toast.error("Vui lòng nhập tên tiến trình");
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
try {
|
||
|
|
await onSubmit(values);
|
||
|
|
toast.success("Thêm phần mềm bị chặn thành công!");
|
||
|
|
closeDialog();
|
||
|
|
} catch (error) {
|
||
|
|
console.error("Error:", error);
|
||
|
|
toast.error("Có lỗi xảy ra!");
|
||
|
|
}
|
||
|
|
}}
|
||
|
|
submitLabel="Thêm"
|
||
|
|
cancelLabel="Hủy"
|
||
|
|
onCancel={closeDialog}
|
||
|
|
showCancel={true}
|
||
|
|
>
|
||
|
|
{(form: any) => (
|
||
|
|
<>
|
||
|
|
<FormField<BlacklistFormData, "appName">
|
||
|
|
form={form}
|
||
|
|
name="appName"
|
||
|
|
label="Tên ứng dụng"
|
||
|
|
placeholder="VD: Google Chrome"
|
||
|
|
required
|
||
|
|
/>
|
||
|
|
|
||
|
|
<FormField<BlacklistFormData, "processName">
|
||
|
|
form={form}
|
||
|
|
name="processName"
|
||
|
|
label="Tên tiến trình"
|
||
|
|
placeholder="VD: chrome.exe"
|
||
|
|
required
|
||
|
|
/>
|
||
|
|
</>
|
||
|
|
)}
|
||
|
|
</FormBuilder>
|
||
|
|
);
|
||
|
|
}
|