refactor(client): centralize error feedback with toast events
- emit API/network failures through a shared toast event bridge - remove per-page inline error notifications to avoid duplicate error UI - dedupe repeated toast messages to keep feedback readable
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
export const API_ERROR_TOAST_EVENT = 'liqa:api-error-toast';
|
||||
|
||||
export interface ApiErrorToastDetail {
|
||||
message: string;
|
||||
}
|
||||
|
||||
export function emitApiErrorToast(message: string): void {
|
||||
if (typeof window === 'undefined') return;
|
||||
window.dispatchEvent(
|
||||
new CustomEvent<ApiErrorToastDetail>(API_ERROR_TOAST_EVENT, {
|
||||
detail: { message },
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
export function subscribeApiErrorToasts(
|
||||
handler: (message: string) => void,
|
||||
): () => void {
|
||||
if (typeof window === 'undefined') return () => {};
|
||||
const listener = (event: Event) => {
|
||||
const custom = event as CustomEvent<ApiErrorToastDetail>;
|
||||
const message = custom.detail?.message;
|
||||
if (message) handler(message);
|
||||
};
|
||||
window.addEventListener(API_ERROR_TOAST_EVENT, listener as EventListener);
|
||||
return () => {
|
||||
window.removeEventListener(API_ERROR_TOAST_EVENT, listener as EventListener);
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user