93 lines
2.8 KiB
TypeScript
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];
|
|
},
|
|
};
|