diff --git a/package.json b/package.json index 5cf011ec..3d7725b7 100644 --- a/package.json +++ b/package.json @@ -82,6 +82,8 @@ "@types/auto-launch": "^5.0.0", "@types/lodash.omit": "^4.5.4", "@types/node": "10.11.4", + "@types/react": "16.4.18", + "@types/react-dom": "16.0.9", "babel-cli": "6.26.0", "babel-eslint": "7.2.3", "babel-plugin-transform-async-to-generator": "6.24.1", diff --git a/src/browser/main.ts b/src/browser/main.ts index e32a31d2..29483f97 100644 --- a/src/browser/main.ts +++ b/src/browser/main.ts @@ -8,7 +8,6 @@ import { autoLaunchInstance } from './auto-launch-controller'; import setChromeFlags from './chrome-flags'; import { config } from './config-handler'; import { windowHandler } from './window-handler'; -import { createComponentWindow } from './window-utils'; const allowMultiInstance: string | boolean = getCommandLineArgs(process.argv, '--multiInstance', true) || isDevEnv; const singleInstanceLock: boolean = allowMultiInstance ? true : app.requestSingleInstanceLock(); @@ -38,8 +37,6 @@ async function main() { await autoLaunchInstance.handleAutoLaunch(); } - createComponentWindow('about-app'); - /** * Sets chrome flags from global config */ diff --git a/src/browser/window-handler.ts b/src/browser/window-handler.ts index 18d2db8e..518d68b0 100644 --- a/src/browser/window-handler.ts +++ b/src/browser/window-handler.ts @@ -4,6 +4,9 @@ import * as url from 'url'; import { getCommandLineArgs } from '../common/utils'; import { config, IConfig } from './config-handler'; +import { createComponentWindow } from './window-utils'; + +const { buildNumber, clientVersion, version } = require('../../package.json');// tslint:disable-line:no-var-requires export class WindowHandler { @@ -63,13 +66,16 @@ export class WindowHandler { private readonly windowOpts: Electron.BrowserWindowConstructorOptions; private readonly globalConfig: IConfig; + // Window reference private mainWindow: Electron.BrowserWindow | null; private loadingWindow: Electron.BrowserWindow | null; + private aboutAppWindow: Electron.BrowserWindow | null; constructor(opts?: Electron.BrowserViewConstructorOptions) { this.windowOpts = { ... WindowHandler.getMainWindowOpts(), ...opts }; this.mainWindow = null; this.loadingWindow = null; + this.aboutAppWindow = null; this.globalConfig = config.getGlobalConfigFields([ 'url', 'crashReporter' ]); try { @@ -94,6 +100,7 @@ export class WindowHandler { this.loadingWindow = null; } if (this.mainWindow) this.mainWindow.show(); + this.createAboutAppWindow(); }); return this.mainWindow; } @@ -116,6 +123,18 @@ export class WindowHandler { this.loadingWindow.setMenu(null as any); this.loadingWindow.once('closed', () => this.loadingWindow = null); } + + /** + * creates a about app window + */ + public createAboutAppWindow() { + this.aboutAppWindow = createComponentWindow('about-app'); + this.aboutAppWindow.webContents.once('did-finish-load', () => { + if (this.aboutAppWindow) { + this.aboutAppWindow.webContents.send('data', { buildNumber, clientVersion, version }); + } + }); + } } const windowHandler = new WindowHandler(); diff --git a/src/browser/window-utils.ts b/src/browser/window-utils.ts index f0fff501..984f2a0d 100644 --- a/src/browser/window-utils.ts +++ b/src/browser/window-utils.ts @@ -1,4 +1,5 @@ import { BrowserWindow } from 'electron'; +import * as path from 'path'; import * as url from 'url'; import { windowHandler } from './window-handler'; @@ -23,6 +24,9 @@ export function createComponentWindow( show: false, width: 300, ...opts, + webPreferences: { + preload: path.join(__dirname, '../renderer/preload-component'), + }, }; const browserWindow = new BrowserWindow(options); diff --git a/src/renderer/about-app.tsx b/src/renderer/about-app.tsx index 60cdb19c..c090dcdd 100644 --- a/src/renderer/about-app.tsx +++ b/src/renderer/about-app.tsx @@ -1,23 +1,40 @@ +import { ipcRenderer, remote } from 'electron'; import * as React from 'react'; +interface IState { + appName: string | undefined; + copyWrite: string | undefined; + clientVersion: string | undefined; + buildNumber: string | undefined; + version: string | undefined; +} + /** * Window that display app version and copyright info */ -export default class AboutBox extends React.Component { +export default class AboutBox extends React.Component<{}, IState> { - private readonly eventHandlers = { - onSubmit: () => this.handleSubmit(), - }; - - constructor() { - super(); + constructor(props) { + super(props); + this.state = { + appName: remote.app.getName() || 'Symphony', + buildNumber: '', + clientVersion: '', + copyWrite: `Copyright \xA9 ${new Date().getFullYear()} Symphony`, + version: '', + }; } /** - * test + * comp */ - public handleSubmit(): void { - console.log('test'); + public componentWillMount() { + ipcRenderer.on('data', (_EVENT: Electron.Event, args: IState) => { + this.setState({ + copyWrite: `Copyright \xA9 ${new Date().getFullYear()} ${this.state.appName}`, + version: `Version ${args.clientVersion}-${args.version} (${args.buildNumber})`, + }); + }); } /** @@ -27,9 +44,9 @@ export default class AboutBox extends React.Component { return (
- Symphony
-
-
+ {this.state.appName}
+ {this.state.version}
+ {this.state.copyWrite}