diff --git a/sigap-website/app/(pages)/(admin)/dashboard/user-management/_components/ban-user-dialog.tsx b/sigap-website/app/(pages)/(admin)/dashboard/user-management/_components/ban-user-dialog.tsx index 4615049..52fe8c1 100644 --- a/sigap-website/app/(pages)/(admin)/dashboard/user-management/_components/ban-user-dialog.tsx +++ b/sigap-website/app/(pages)/(admin)/dashboard/user-management/_components/ban-user-dialog.tsx @@ -1,29 +1,26 @@ -import { useState } from "react" +import { useState, useEffect } from "react" import { Loader2, ShieldAlert } from 'lucide-react' import { - AlertDialog, - AlertDialogAction, - AlertDialogCancel, - AlertDialogContent, - AlertDialogDescription, - AlertDialogFooter, - AlertDialogHeader, - AlertDialogTitle, -} from "@/app/_components/ui/alert-dialog" + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, +} from "@/app/_components/ui/dialog" import { Button } from "@/app/_components/ui/button" - +import { RadioGroup, RadioGroupItem } from "@/app/_components/ui/radio-group" import { Label } from "@/app/_components/ui/label" import { Input } from "@/app/_components/ui/input" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/app/_components/ui/select" -import { RadioGroup, RadioGroupItem } from "@/app/_components/ui/radio-group" import { ValidBanDuration } from "@/app/_lib/types/ban-duration" +import { toast } from "sonner" interface BanUserDialogProps { open: boolean onOpenChange: (open: boolean) => void onConfirm: (duration: ValidBanDuration) => void isPending?: boolean - userId: string } type BanDurationType = "preset" | "custom" @@ -33,35 +30,44 @@ export function BanUserDialog({ onOpenChange, onConfirm, isPending = false, - userId, }: BanUserDialogProps) { const [durationType, setDurationType] = useState("preset") const [presetDuration, setPresetDuration] = useState("24h") const [customValue, setCustomValue] = useState("1") const [customUnit, setCustomUnit] = useState("days") + useEffect(() => { + if (!open) { + // Reset form when dialog closes + setDurationType("preset") + setPresetDuration("24h") + setCustomValue("1") + setCustomUnit("days") + } + }, [open]) + const handleConfirm = () => { - let duration = "" + let duration = "24h" if (durationType === "preset") { duration = presetDuration } else { - // Convert to hours for consistency + const value = parseInt(customValue) + if (isNaN(value) || value < 1) return toast.error("Invalid duration") + switch (customUnit) { case "hours": - duration = `${customValue}h` + duration = `${value}h` break case "days": - duration = `${parseInt(customValue) * 24}h` + duration = `${value * 24}h` break case "weeks": - duration = `${parseInt(customValue) * 24 * 7}h` + duration = `${value * 24 * 7}h` break case "months": - duration = `${parseInt(customValue) * 24 * 30}h` // Approximation + duration = `${value * 24 * 30}h` break - default: - duration = `${customValue}h` } } @@ -69,29 +75,29 @@ export function BanUserDialog({ } return ( - - - - Ban User - + + + + Ban User + This will prevent the user from accessing the system until the ban expires. - - + + -
+
setDurationType(value as BanDurationType)} + onValueChange={(v) => setDurationType(v as BanDurationType)} className="space-y-4" >
- +
- + setCustomValue(e.target.value)} - disabled={durationType !== "custom"} + disabled={durationType !== "custom" || isPending} className="w-20" />