데스크톱 앱 리프레시 기능 추가

This commit is contained in:
Macbook
2026-06-22 16:47:20 +09:00
parent 1180cd53f0
commit 5871eb2465
17 changed files with 165 additions and 5 deletions
+35
View File
@@ -0,0 +1,35 @@
import { useEffect, useRef } from 'react';
import type { MenuPage } from '../components/TopMenuBar';
export const PAGE_REFRESH_EVENT = 'gc_page_refresh';
export type PageRefreshDetail = {
page: MenuPage;
ts: number;
};
export function dispatchPageRefresh(page: MenuPage): void {
window.dispatchEvent(new CustomEvent<PageRefreshDetail>(PAGE_REFRESH_EVENT, {
detail: { page, ts: Date.now() },
}));
}
/** 현재 메뉴(또는 지정 목록)에서 새로고침 이벤트 수신 */
export function usePageRefresh(
page: MenuPage | readonly MenuPage[],
onRefresh: () => void | Promise<void>,
): void {
const handlerRef = useRef(onRefresh);
handlerRef.current = onRefresh;
useEffect(() => {
const pages = Array.isArray(page) ? page : [page];
const listener = (e: Event) => {
const detail = (e as CustomEvent<PageRefreshDetail>).detail;
if (!detail || !pages.includes(detail.page)) return;
void handlerRef.current();
};
window.addEventListener(PAGE_REFRESH_EVENT, listener);
return () => window.removeEventListener(PAGE_REFRESH_EVENT, listener);
}, [page]);
}