diff --git a/src/features/problems/components/judge-toast.tsx b/src/features/problems/components/judge-toast.tsx
new file mode 100644
index 0000000..2162c44
--- /dev/null
+++ b/src/features/problems/components/judge-toast.tsx
@@ -0,0 +1,95 @@
+import {
+ AlertTriangleIcon,
+ BanIcon,
+ CircleCheckIcon,
+ XIcon,
+} from "lucide-react";
+import { toast } from "sonner";
+import { cn } from "@/lib/utils";
+import { useTranslations } from "next-intl";
+import { Status } from "@/generated/client";
+import { Button } from "@/components/ui/button";
+
+interface JudgeToastProps {
+ t: number | string;
+ status: Status;
+}
+
+const getIconForStatus = (status: Status) => {
+ switch (status) {
+ case Status.PD:
+ case Status.QD:
+ case Status.CP:
+ case Status.CE:
+ case Status.RU:
+ case Status.TLE:
+ case Status.MLE:
+ case Status.RE:
+ case Status.WA:
+ return AlertTriangleIcon;
+ case Status.CS:
+ case Status.AC:
+ return CircleCheckIcon;
+ case Status.SE:
+ return BanIcon;
+ }
+};
+
+const getColorClassForStatus = (status: Status) => {
+ switch (status) {
+ case Status.PD:
+ case Status.QD:
+ return "text-gray-500";
+ case Status.CP:
+ case Status.CE:
+ return "text-yellow-500";
+ case Status.CS:
+ case Status.AC:
+ return "text-green-500";
+ case Status.RU:
+ case Status.TLE:
+ return "text-blue-500";
+ case Status.MLE:
+ return "text-purple-500";
+ case Status.RE:
+ return "text-orange-500";
+ case Status.WA:
+ case Status.SE:
+ return "text-red-500";
+ }
+};
+
+export const JudgeToast = ({ t, status }: JudgeToastProps) => {
+ const s = useTranslations("StatusMessage");
+ const Icon = getIconForStatus(status);
+ const colorClass = getColorClassForStatus(status);
+
+ return (
+
+
+
+
+
+
+ );
+};
diff --git a/src/hooks/show-status-toast.tsx b/src/hooks/show-status-toast.tsx
deleted file mode 100644
index a8f9cd8..0000000
--- a/src/hooks/show-status-toast.tsx
+++ /dev/null
@@ -1,75 +0,0 @@
-import {
- LucideIcon,
- XIcon,
-} from "lucide-react";
-import { toast } from "sonner";
-import { useTranslations } from "next-intl";
-import { Button } from "@/components/ui/button";
-import type { Status } from "@/generated/client";
-import { getStatusColorClass, statusMap } from "@/lib/status";
-
-const StatusToast = ({
- t,
- Icon,
- message,
- colorClass,
-}: {
- t: string | number;
- Icon: LucideIcon;
- message: string;
- colorClass: string;
-}) => {
- const s = useTranslations("StatusMessage");
-
- return (
-
-
-
-
-
-
- )
-};
-
-interface ShowStatusToastProps {
- status: Status;
-}
-
-export function showStatusToast({
- status,
-}: ShowStatusToastProps) {
- const { icon: Icon, message } = statusMap.get(status) || {
- icon: XIcon,
- message: "Unknown Error",
- };
- const colorClass = getStatusColorClass(status);
-
- toast.custom((t) => (
-
- ));
-}
diff --git a/src/lib/status.ts b/src/lib/status.ts
deleted file mode 100644
index 0e77142..0000000
--- a/src/lib/status.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import {
- AlertTriangleIcon,
- BanIcon,
- CircleCheckIcon,
-} from "lucide-react";
-import { LucideIcon } from "lucide-react";
-import { Status } from "@/generated/client";
-
-export const getStatusColorClass = (status: Status) => {
- const colorMap: Record = {
- PD: "text-gray-500",
- QD: "text-gray-500",
- CP: "text-yellow-500",
- CE: "text-yellow-500",
- CS: "text-green-500",
- RU: "text-blue-500",
- TLE: "text-blue-500",
- MLE: "text-purple-500",
- RE: "text-orange-500",
- AC: "text-green-500",
- WA: "text-red-500",
- SE: "text-red-500",
- };
- return colorMap[status] || "text-gray-500";
-};
-
-export const statusMap = new Map([
- ["PD", { icon: AlertTriangleIcon, message: "PD" }],
- ["QD", { icon: AlertTriangleIcon, message: "QD" }],
- ["CP", { icon: AlertTriangleIcon, message: "CP" }],
- ["CE", { icon: AlertTriangleIcon, message: "CE" }],
- ["CS", { icon: CircleCheckIcon, message: "CS" }],
- ["RU", { icon: AlertTriangleIcon, message: "RU" }],
- ["TLE", { icon: AlertTriangleIcon, message: "TLE" }],
- ["MLE", { icon: AlertTriangleIcon, message: "MLE" }],
- ["RE", { icon: AlertTriangleIcon, message: "RE" }],
- ["AC", { icon: CircleCheckIcon, message: "AC" }],
- ["WA", { icon: AlertTriangleIcon, message: "WA" }],
- ["SE", { icon: BanIcon, message: "SE" }],
-]);