Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | /**
* @packageDocumentation
*
* Sonner toast provider and `useToast()` hook for displaying ephemeral
* notifications (success, error, info) across the app.
*/
import { createContext, useCallback, useContext, type ReactNode } from "react";
import { Toaster, toast } from "sonner";
interface ToastOptions {
title: string;
description?: string;
}
interface ToastContextValue {
showError: (options: ToastOptions) => void;
}
const ToastContext = createContext<ToastContextValue>({
showError: () => {},
});
export function useToast() {
return useContext(ToastContext);
}
export function ToastProvider({ children }: { children: ReactNode }) {
const showError = useCallback((options: ToastOptions) => {
toast.error(options.title, { description: options.description });
}, []);
return (
<ToastContext.Provider value={{ showError }}>
{children}
<Toaster richColors position="top-right" />
</ToastContext.Provider>
);
}
|