prasi-lib/comps/ui/toast.tsx

48 lines
1.1 KiB
TypeScript
Executable File

import { ReactElement } from "react";
import { toast as sonner } from "sonner";
const timer = {
timeout: null as any,
done: false,
limit: 200,
};
export const toast = {
dismiss: () => {
if (!timer.timeout) {
sonner.dismiss();
} else {
clearTimeout(timer.timeout);
}
},
loading: (
el: ReactElement,
props?: { dismissible?: boolean; className?: string }
) => {
clearTimeout(timer.timeout);
timer.timeout = setTimeout(() => {
sonner.loading(el, props);
timer.timeout = null;
}, timer.limit);
},
success: (
el: ReactElement,
props?: { dismissible?: boolean; className?: string; duration?: number }
) => {
clearTimeout(timer.timeout);
timer.timeout = setTimeout(() => {
sonner.success(el, props);
timer.timeout = null;
}, timer.limit);
},
error: (
el: ReactElement,
props?: { dismissible?: boolean; className?: string }
) => {
clearTimeout(timer.timeout);
timer.timeout = setTimeout(() => {
sonner.error(el, props);
timer.timeout = null;
}, timer.limit);
},
};