Files
SenMeshNet/application/state/windowInputFocus.ts
zhaolei 2f9f8da48e
Some checks failed
AI automation / Route event (push) Has been cancelled
AI automation / Hand reopened issue to maintainers (push) Has been cancelled
AI automation / Clean source issue state (push) Has been cancelled
AI automation / Reconcile handoffs (push) Has been cancelled
AI automation / Classify issue (push) Has been cancelled
AI automation / Claude Code smoke (push) Has been cancelled
AI automation / Review issue follow-up (push) Has been cancelled
AI automation / Publish issue follow-up (push) Has been cancelled
AI automation / Implement with Claude Code (push) Has been cancelled
AI automation / Publish implement PR (push) Has been cancelled
AI automation / Continue queued issue comments (push) Has been cancelled
AI automation / Codex review loop (push) Has been cancelled
AI automation / Publish Codex fix (push) Has been cancelled
AI automation / Clear Codex dispatch marker (push) Has been cancelled
AI automation / Own PR re-request Codex (push) Has been cancelled
AI automation / External PR re-request Codex (push) Has been cancelled
AI automation / Poll Codex reaction / retry (push) Has been cancelled
Initial commit: NetMesh smart ops platform with 3D topology, inspection reports, RCA and AI ops assistant
2026-10-15 13:53:04 +08:00

58 lines
1.4 KiB
TypeScript

import { netcattyBridge } from "../../infrastructure/services/netcattyBridge";
export const requestWindowInputFocus = (): void => {
try {
const result = netcattyBridge.get()?.windowFocus?.();
void result?.catch?.(() => undefined);
} catch {
// Browser preview or a disposed Electron bridge.
}
};
export type ScheduledWindowInputFocus = {
cancel: () => void;
};
export const scheduleWindowInputFocus = (): ScheduledWindowInputFocus => {
let cancelled = false;
let frameId: number | undefined;
let timeoutId: ReturnType<typeof setTimeout> | undefined;
const cancel = () => {
cancelled = true;
if (frameId !== undefined && typeof cancelAnimationFrame === "function") {
cancelAnimationFrame(frameId);
frameId = undefined;
}
if (timeoutId !== undefined) {
clearTimeout(timeoutId);
timeoutId = undefined;
}
};
const runIfVisible = () => {
if (cancelled || document.visibilityState !== "visible") return;
requestWindowInputFocus();
};
const scheduleFrame: (callback: FrameRequestCallback) => number =
typeof requestAnimationFrame === "function"
? requestAnimationFrame
: (callback) => {
callback(0);
return 0;
};
frameId = scheduleFrame(() => {
frameId = undefined;
runIfVisible();
if (cancelled) return;
timeoutId = setTimeout(() => {
timeoutId = undefined;
runIfVisible();
}, 50);
});
return { cancel };
};