From 99692c37da6fb6a45f18336f4cb2fc65884546ef Mon Sep 17 00:00:00 2001 From: vergiLgood1 Date: Sun, 30 Mar 2025 22:41:47 +0700 Subject: [PATCH] Change alert dialog to dialog --- .../_components/ban-user-dialog.tsx | 112 +++++++++-------- .../user-management/_components/sheet.tsx | 11 -- .../_components/users-table.tsx | 91 +++++++------- .../_handlers/use-create-user-column.tsx | 115 ++++++++---------- .../app/_components/confirm-dialog.tsx | 74 +++++++++++ 5 files changed, 233 insertions(+), 170 deletions(-) create mode 100644 sigap-website/app/_components/confirm-dialog.tsx 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" />