24 lines
981 B
TypeScript
24 lines
981 B
TypeScript
export const DESKTOP_REFRESH_CURRENT_VIEW_EVENT = "ctms:desktop-refresh-current-view";
|
|
|
|
export interface DesktopRefreshEventDetail {
|
|
handled: boolean;
|
|
}
|
|
|
|
export const dispatchDesktopRefreshCurrentView = (): boolean => {
|
|
if (typeof window === "undefined") return false;
|
|
const detail: DesktopRefreshEventDetail = { handled: false };
|
|
window.dispatchEvent(new CustomEvent<DesktopRefreshEventDetail>(DESKTOP_REFRESH_CURRENT_VIEW_EVENT, { detail }));
|
|
return detail.handled;
|
|
};
|
|
|
|
export const onDesktopRefreshCurrentView = (handler: () => void | Promise<void>): (() => void) => {
|
|
if (typeof window === "undefined") return () => {};
|
|
const listener = (event: Event) => {
|
|
const detail = (event as CustomEvent<DesktopRefreshEventDetail>).detail;
|
|
if (detail) detail.handled = true;
|
|
void handler();
|
|
};
|
|
window.addEventListener(DESKTOP_REFRESH_CURRENT_VIEW_EVENT, listener);
|
|
return () => window.removeEventListener(DESKTOP_REFRESH_CURRENT_VIEW_EVENT, listener);
|
|
};
|