Files
TrueGrowth/vendor/aigcpanel/electron/page/index.ts
Jammy 52636c91ae
Some checks failed
CI / main (push) Has been cancelled
CI / release-e2e (push) Has been cancelled
Track bundled vendor runtime sources
2026-07-07 10:05:50 +08:00

93 lines
2.8 KiB
TypeScript

import { Events } from "../mapi/event/main";
import { AppEnv, AppRuntime } from "../mapi/env";
import { PageUser } from "./user";
import { BrowserWindow, shell } from "electron";
import { rendererLoadPath } from "../lib/env-main";
import { PageGuide } from "./guide";
import { PageSetup } from "./setup";
import { DevToolsManager } from "../lib/devtools";
import { PageFeedback } from "./feedback";
import { PagePayment } from "./payment";
import { PageMonitor } from "./monitor";
import { PageLog } from "./log";
const Pages = {
user: PageUser,
guide: PageGuide,
setup: PageSetup,
payment: PagePayment,
feedback: PageFeedback,
monitor: PageMonitor,
log: PageLog,
};
export const Page = {
ready(name: string) {
Events.send(name, "APP_READY", {
name,
AppEnv,
});
},
openWindow: (name: string, win: BrowserWindow, fileName: string) => {
win.webContents.on("will-navigate", (event) => {
event.preventDefault();
});
win.webContents.setWindowOpenHandler(() => {
return { action: "deny" };
});
win.webContents.setWindowOpenHandler(({ url }) => {
if (url.startsWith("https:") || url.startsWith("http:")) {
shell.openExternal(url).then();
}
return { action: "deny" };
});
win.on("close", () => {
delete AppRuntime.windows[name];
});
const promise = new Promise((resolve, reject) => {
win.webContents.on("did-finish-load", () => {
win.focus();
Page.ready(name);
DevToolsManager.autoShow(win);
resolve(undefined);
});
});
rendererLoadPath(win, fileName);
DevToolsManager.register(`Page.${name}`, win);
AppRuntime.windows[name] = win;
return promise;
},
open: async (
name: string,
option?: {
singleton?: boolean;
parent?: BrowserWindow;
[key: string]: any;
},
) => {
option = Object.assign(
{
singleton: true,
parent: null,
},
option,
);
if (!option.parent) {
option.parent = AppRuntime.mainWindow;
}
if (option.singleton && AppRuntime.windows[name]) {
AppRuntime.windows[name].show();
AppRuntime.windows[name].focus();
AppRuntime.windows[name].setParentWindow(option.parent);
return;
}
return Pages[name].open(option);
},
registerWindow(name: string, win: BrowserWindow) {
AppRuntime.windows[name] = win;
},
unregisterWindow(name: string) {
delete AppRuntime.windows[name];
},
};