This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
"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,
|
||||
},
|
||||
);
|
||||
Reference in New Issue
Block a user