/electron-main.ts Secret
Created
August 25, 2024 19:50
electron-react-app-boilerplate
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { app, BrowserWindow, ipcMain } from "electron"; | |
import { createRequire } from "node:module"; | |
import { fileURLToPath } from "node:url"; | |
import path from "node:path"; | |
// eslint-disable-next-line @typescript-eslint/no-unused-vars | |
const __dirname = path.dirname(fileURLToPath(import.meta.url)); | |
const require = createRequire(import.meta.url); | |
const { _electron } = require("playwright"); | |
// The built directory structure | |
// | |
// ├─┬─┬ dist | |
// │ │ └── index.html | |
// │ │ | |
// │ ├─┬ dist-electron | |
// │ │ ├── main.js | |
// │ │ └── preload.mjs | |
// │ | |
const openPlaywright = async () => { | |
console.log(); | |
try { | |
const electronApp = await _electron.launch({ | |
executablePath: app.getPath("exe"), | |
}); | |
const window = await electronApp.firstWindow(); | |
await window.goto("https://tes.tidesquare.com/login"); | |
} catch (error) { | |
console.log(error); | |
win?.webContents.send("fail", { | |
place: "submit-form", | |
}); | |
} | |
}; | |
process.env.APP_ROOT = path.join(__dirname, ".."); | |
// 🚧 Use ['ENV_NAME'] avoid vite:define plugin - Vite@2.x | |
export const VITE_DEV_SERVER_URL = process.env["VITE_DEV_SERVER_URL"]; | |
export const MAIN_DIST = path.join(process.env.APP_ROOT, "dist-electron"); | |
export const RENDERER_DIST = path.join(process.env.APP_ROOT, "dist"); | |
process.env.VITE_PUBLIC = VITE_DEV_SERVER_URL ? path.join(process.env.APP_ROOT, "public") : RENDERER_DIST; | |
let win: BrowserWindow | null; | |
function createWindow() { | |
win = new BrowserWindow({ | |
icon: path.join(process.env.VITE_PUBLIC, "electron-vite.svg"), | |
webPreferences: { | |
preload: path.join(__dirname, "preload.mjs"), | |
}, | |
}); | |
// Test active push message to Renderer-process. | |
win.webContents.on("did-finish-load", () => { | |
win?.webContents.send("main-process-message", new Date().toLocaleString()); | |
}); | |
if (VITE_DEV_SERVER_URL) { | |
win.loadURL(VITE_DEV_SERVER_URL); | |
} else { | |
// win.loadFile('dist/index.html') | |
win.loadFile(path.join(RENDERER_DIST, "index.html")); | |
} | |
} | |
// Quit when all windows are closed, except on macOS. There, it's common | |
// for applications and their menu bar to stay active until the user quits | |
// explicitly with Cmd + Q. | |
ipcMain.on("click", async () => { | |
await openPlaywright(); | |
}); | |
app.on("window-all-closed", () => { | |
if (process.platform !== "darwin") { | |
app.quit(); | |
win = null; | |
} | |
}); | |
app.on("activate", () => { | |
// On OS X it's common to re-create a window in the app when the | |
// dock icon is clicked and there are no other windows open. | |
if (BrowserWindow.getAllWindows().length === 0) { | |
createWindow(); | |
} | |
}); | |
app.whenReady().then(createWindow); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment