Files
sass-mohfarawati/lib/toast.tsx
T
2026-03-11 21:09:45 +01:00

68 lines
1.5 KiB
TypeScript

"use client";
import {
toast as hotToast,
type ToastOptions,
type ToastPosition,
} from "react-hot-toast";
import { resolveLocale } from "@/lib/locale";
type ToastVariant = "default" | "success" | "error" | "loading";
type ToastMessage = string;
function getCurrentLocale() {
if (typeof window === "undefined") {
return "de" as const;
}
const pathname = window.location.pathname;
const maybeLocale = pathname.split("/")[1] || "de";
return resolveLocale(maybeLocale);
}
function getToastPosition(isArabic: boolean): ToastPosition {
return isArabic ? "top-right" : "top-left";
}
function getToastOptions(): ToastOptions {
const locale = getCurrentLocale();
const isArabic = locale === "ar";
return {
duration: 1800,
position: getToastPosition(isArabic),
};
}
function showToast(message: ToastMessage, variant: ToastVariant = "default") {
const options = getToastOptions();
if (variant === "success") {
return hotToast.success(message, options);
}
if (variant === "error") {
return hotToast.error(message, options);
}
if (variant === "loading") {
return hotToast.loading(message, options);
}
return hotToast(message, options);
}
export const toast = Object.assign(
(message: ToastMessage) => showToast(message, "default"),
{
success: (message: ToastMessage) => showToast(message, "success"),
error: (message: ToastMessage) => showToast(message, "error"),
loading: (message: ToastMessage) => showToast(message, "loading"),
dismiss: hotToast.dismiss,
remove: hotToast.remove,
},
);