95 lines
2.8 KiB
TypeScript
95 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";
|
|
import {PageAgentLogin} from "./agentLogin";
|
|
|
|
const Pages = {
|
|
user: PageUser,
|
|
guide: PageGuide,
|
|
setup: PageSetup,
|
|
payment: PagePayment,
|
|
feedback: PageFeedback,
|
|
monitor: PageMonitor,
|
|
log: PageLog,
|
|
agentLogin: PageAgentLogin,
|
|
};
|
|
|
|
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];
|
|
},
|
|
};
|