From 6df242c34fc7bde4cc6f9148edf338c5c288d3dc Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Wed, 14 Oct 2020 22:57:20 -0700 Subject: [PATCH] Added minimize to tray. --- electron/main.js | 53 +++++++++++++++++-- .../sider-menu/sider-menu.organism.jsx | 18 ++++++- src/ipc.types.js | 1 + src/redux/user/user.sagas.js | 8 ++- 4 files changed, 73 insertions(+), 7 deletions(-) diff --git a/electron/main.js b/electron/main.js index c74b575..f22192e 100644 --- a/electron/main.js +++ b/electron/main.js @@ -1,9 +1,8 @@ const path = require("path"); -const { app, BrowserWindow, ipcMain } = require("electron"); +const { app, BrowserWindow, Tray, Menu, ipcMain } = require("electron"); const isDev = require("electron-is-dev"); const settings = require("electron-settings"); -const ipcTypes = require("../src/ipc.types"); -const { StartWatcher } = require("./file-watcher/file-watcher"); +const { default: ipcTypes } = require("../src/ipc.types"); require("./ipc-main-handler"); @@ -23,13 +22,16 @@ if (require("electron-squirrel-startup")) { console.log(`${__dirname}/preload.js`); let mainWindow; +let tray = null; function createWindow() { makeSingleInstance(); // Create the browser window. + mainWindow = new BrowserWindow({ width: 800, height: 600, title: "ImEX RPS", + icon: path.join(__dirname, "../src/assets/logo192.png"), webPreferences: { nodeIntegration: false, enableRemoteModule: false, @@ -46,6 +48,23 @@ function createWindow() { : `file://${path.join(__dirname, "../build/index.html")}` ); + // mainWindow.on("close", function (event) { + // event.preventDefault(); + // mainWindow.hide(); + // tray = createTray(); + // }); + + mainWindow.on("minimize", function (event) { + event.preventDefault(); + mainWindow.hide(); + tray = createTray(); + }); + + ipcMain.on(ipcTypes.quit, (event, arg) => { + app.isQuiting = true; + app.quit(); + }); + // Open the DevTools. if (isDev) { mainWindow.webContents.openDevTools({ @@ -67,7 +86,7 @@ app.whenReady().then(() => { .then((name) => console.log(`Added Extension: ${name}`)) .catch((error) => console.log(`An error occurred: , ${error}`)); } - StartWatcher(); + // ipcMain.on(ipcTypes.default.webcontent, (event, ...obj) => { // console.log("event", event); // mainWindow.webContents.send(event, obj); @@ -106,3 +125,29 @@ function makeSingleInstance() { } }); } + +function createTray() { + let appIcon = new Tray(path.join(__dirname, "../src/assets/logo192.png")); + const contextMenu = Menu.buildFromTemplate([ + { + label: "Show", + click: function () { + mainWindow.show(); + }, + }, + { + label: "Exit", + click: function () { + app.isQuiting = true; + app.quit(); + }, + }, + ]); + + appIcon.on("double-click", function (event) { + mainWindow.show(); + }); + appIcon.setToolTip("ImEX RPS"); + appIcon.setContextMenu(contextMenu); + return appIcon; +} diff --git a/src/components/organisms/sider-menu/sider-menu.organism.jsx b/src/components/organisms/sider-menu/sider-menu.organism.jsx index ddade40..042545d 100644 --- a/src/components/organisms/sider-menu/sider-menu.organism.jsx +++ b/src/components/organisms/sider-menu/sider-menu.organism.jsx @@ -1,8 +1,14 @@ -import { PieChartOutlined, SettingFilled } from "@ant-design/icons"; +import { + PieChartOutlined, + SettingFilled, + CloseOutlined, +} from "@ant-design/icons"; import { Menu } from "antd"; import React from "react"; import { Link } from "react-router-dom"; +import ipcTypes from "../../../ipc.types"; import SiderSignOut from "../../molecules/sider-sign-out/sider-sign-out.molecule"; +const { ipcRenderer } = window; export default function SiderMenuOrganism() { return ( @@ -14,6 +20,16 @@ export default function SiderMenuOrganism() { Settings + + } + onClick={() => { + ipcRenderer.send(ipcTypes.default.quit); + }} + > + Quit + ); } diff --git a/src/ipc.types.js b/src/ipc.types.js index 4bad674..4fc5fd8 100644 --- a/src/ipc.types.js +++ b/src/ipc.types.js @@ -1,5 +1,6 @@ exports.default = { webcontent: "webcontent-send", + quit: "quit-app", test: { start: "test-start", }, diff --git a/src/redux/user/user.sagas.js b/src/redux/user/user.sagas.js index c93fa1c..35f88fa 100644 --- a/src/redux/user/user.sagas.js +++ b/src/redux/user/user.sagas.js @@ -7,9 +7,11 @@ import { import { QUERY_BODYSHOP } from "../../graphql/bodyshop.queries"; import client from "../../graphql/GraphQLClient"; import { UPSERT_USER } from "../../graphql/user.queries"; +import ipcTypes from "../../ipc.types"; import { sendPasswordResetFailure, sendPasswordResetSuccess, + setBodyshop, signInFailure, signInSuccess, signOutFailure, @@ -18,11 +20,11 @@ import { updateUserDetailsSuccess, validatePasswordResetFailure, validatePasswordResetSuccess, - setBodyshop } from "./user.actions"; - import UserActionTypes from "./user.types"; +const { ipcRenderer } = window; + export function* onEmailSignInStart() { yield takeLatest(UserActionTypes.EMAIL_SIGN_IN_START, signInWithEmail); } @@ -110,6 +112,8 @@ export function* signInSuccessSaga({ payload }) { const shop = yield client.query({ query: QUERY_BODYSHOP }); yield put(setBodyshop(shop.data.bodyshops[0])); + + ipcRenderer.send(ipcTypes.default.fileWatcher.toMain.start); // LogRocket.identify(payload.email); // if (!payload.email.includes("@imex.")) yield put(setInstanceId(payload.uid)); // yield logImEXEvent("redux_sign_in_success");