ipc react-electron

This commit is contained in:
cv
2021-06-03 23:47:02 +02:00
parent 9b7dfc7e65
commit e37837723e
3 changed files with 73 additions and 19 deletions
+24 -4
View File
@@ -7,6 +7,7 @@ import MinIconBtn from './buttons/MinIconBtn';
import QuitIconBtn from './buttons/QuitIconBtn';
import style from './MenuBar.module.css';
import HelpIconBtn from './buttons/HelpIconBtn';
const { ipcRenderer } = window.require('electron');
export default function MenuBar(props) {
const { onOpen, onClose } = props;
@@ -15,13 +16,32 @@ export default function MenuBar(props) {
downloadEvents();
};
const handleIPC = (action) => {
switch (action) {
case 'min':
ipcRenderer.send('set-window', 'to-tray');
break;
case 'max':
ipcRenderer.send('set-window', 'to-max');
break;
case 'shutdown':
ipcRenderer.send('shutdown', 'now');
break;
case 'help':
ipcRenderer.send('send-to-link', 'help');
break;
default:
break;
}
};
return (
<>
<QuitIconBtn size='md' />
<MaxIconBtn size='md' />
<MinIconBtn size='md' />
<QuitIconBtn size='md' clickhandler={() => handleIPC('shutdown')} />
<MaxIconBtn size='md' clickhandler={() => handleIPC('max')} />
<MinIconBtn size='md' clickhandler={() => handleIPC('min')} />
<div className={style.gap} />
<HelpIconBtn size='md' disabled />
<HelpIconBtn size='md' clickhandler={() => handleIPC('help')} />
<SettingsIconBtn size='md' disabled />
<InfoIconBtn size='md' clickhandler={onOpen} />
<DownloadIconBtn size='md' clickhandler={handleDownload} />
+1 -10
View File
@@ -1,10 +1 @@
window.addEventListener('DOMContentLoaded', () => {
const replaceText = (selector, text) => {
const element = document.getElementById(selector);
if (element) element.innerText = text;
};
for (const type of ['chrome', 'node', 'electron']) {
replaceText(`${type}-version`, process.versions[type]);
}
});
window.require = require;
+48 -5
View File
@@ -5,11 +5,14 @@ const {
globalShortcut,
Tray,
dialog,
ipcMain,
shell,
} = require('electron');
const path = require('path');
const { electron } = require('process');
const { Notification } = require('electron');
var env = process.env.NODE_ENV || 'prod';
const env = process.env.NODE_ENV || 'prod';
(async () => {
const { nodeapp } = import(
@@ -33,8 +36,6 @@ if (!lock) {
return;
}
const { Notification } = require('electron');
function showNotification(text) {
new Notification({
title: 'ontime',
@@ -75,14 +76,19 @@ function createWindow() {
preload: path.join(__dirname, './electron/preload.js'),
// TODO: what are recommended alternatives to node integration?
nodeIntegration: true,
// enableRemoteModule: true,
contextIsolation: false,
},
});
win.setMenu(null);
// Load page served by node
win.loadURL('http://localhost:4001/editor').then(() => {
const reactApp =
env == 'prod'
? 'http://localhost:4001/editor'
: 'http://localhost:3000/editor';
win.loadURL(reactApp).then(() => {
win.webContents.setBackgroundThrottling(false);
});
@@ -173,3 +179,40 @@ app
app.once('will-quit', () => {
globalShortcut.unregisterAll();
});
// Get messages from react
// Test message
ipcMain.on('test-message', (event, arg) => {
showNotification('testing 1-2', arg);
});
// Terminate
ipcMain.on('shutdown', (event, arg) => {
console.log('Got IPC shutdown');
win.destroy();
app.quit();
});
// Window manipulation
ipcMain.on('set-window', (event, arg) => {
console.log('Got IPC set-window', arg);
if (arg === 'to-max') {
// window full
win.setContentSize(1920, 1080);
win.setPosition(0, 0);
} else if (arg === 'to-tray') {
// window to tray
win.close();
}
});
// Open links external
ipcMain.on('send-to-link', (event, arg) => {
console.log('Got IPC send-to-link', arg);
// send to help URL
if (arg === 'help') {
shell.openExternal('http://blank');
}
});