From 42be5336146a0d7a3d2c448107e3025e2c553928 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= <s@saghul.net>
Date: Mon, 21 May 2018 22:06:55 +0200
Subject: [PATCH] Reorganize source code

---
 .babelrc                                      |  5 ---
 .gitignore                                    |  3 +-
 app/features/app/components/App.js            | 32 ++++++++++++++++++
 app/features/app/components/index.js          |  1 +
 app/features/app/index.js                     |  1 +
 .../conference/components/Conference.js       | 33 +++++++++----------
 app/features/conference/components/index.js   |  1 +
 app/features/conference/index.js              |  1 +
 app/features/config/index.js                  | 12 +++++++
 {templates => app}/index.html                 |  1 -
 app/index.js                                  |  9 +++++
 config.js                                     |  6 ----
 webpack.config.js                             | 14 ++++++--
 13 files changed, 85 insertions(+), 34 deletions(-)
 delete mode 100644 .babelrc
 create mode 100644 app/features/app/components/App.js
 create mode 100644 app/features/app/components/index.js
 create mode 100644 app/features/app/index.js
 rename windows/jitsi-meet/src/index.js => app/features/conference/components/Conference.js (68%)
 create mode 100644 app/features/conference/components/index.js
 create mode 100644 app/features/conference/index.js
 create mode 100644 app/features/config/index.js
 rename {templates => app}/index.html (82%)
 create mode 100644 app/index.js
 delete mode 100644 config.js

diff --git a/.babelrc b/.babelrc
deleted file mode 100644
index 91ad003..0000000
--- a/.babelrc
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-	"presets": [
-		"react"
-	]
-}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 698d5d9..6efebe2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,7 @@
 .sync-config.cson
 .electron-gyp
 .npmrc
+.idea
 
 .DS_Store
 
@@ -14,4 +15,4 @@ npm-debug.log
 
 Jitsi Meet*
 
-build/
\ No newline at end of file
+build/
diff --git a/app/features/app/components/App.js b/app/features/app/components/App.js
new file mode 100644
index 0000000..2afd502
--- /dev/null
+++ b/app/features/app/components/App.js
@@ -0,0 +1,32 @@
+import React, { Component } from 'react';
+
+import { Conference } from '../../conference';
+import config from '../../config';
+
+/**
+ * Main component encapsulating the entire application.
+ */
+export default class App extends Component {
+    /**
+     * Initializes a new {@code App} instance.
+     *
+     * @inheritdoc
+     */
+    constructor() {
+        super();
+
+        document.title = config.appName;
+    }
+
+    /**
+     * Implements React's {@link Component#render()}.
+     *
+     * @inheritdoc
+     * @returns {ReactElement}
+     */
+    render() {
+        return (
+            <Conference />
+        );
+    }
+}
diff --git a/app/features/app/components/index.js b/app/features/app/components/index.js
new file mode 100644
index 0000000..c866729
--- /dev/null
+++ b/app/features/app/components/index.js
@@ -0,0 +1 @@
+export { default as App } from './App';
diff --git a/app/features/app/index.js b/app/features/app/index.js
new file mode 100644
index 0000000..07635cb
--- /dev/null
+++ b/app/features/app/index.js
@@ -0,0 +1 @@
+export * from './components';
diff --git a/windows/jitsi-meet/src/index.js b/app/features/conference/components/Conference.js
similarity index 68%
rename from windows/jitsi-meet/src/index.js
rename to app/features/conference/components/Conference.js
index b7d7e36..e77ece9 100644
--- a/windows/jitsi-meet/src/index.js
+++ b/app/features/conference/components/Conference.js
@@ -1,5 +1,4 @@
-import React from 'react';
-import { render } from 'react-dom';
+import { Component } from 'react';
 
 import {
     RemoteControl,
@@ -8,43 +7,43 @@ import {
     setupWiFiStats
 } from 'jitsi-meet-electron-utils';
 
-import { jitsiMeetDomain } from '../../../config.js';
+import config from '../../config';
 
 /**
  * Jitsi Meet Window Component
  */
-class JitsiMeetWindow extends React.Component {
-
-    /**
-     * Render function of component
-     * @return {ScriptElement}
-     */
-    render() {
-        return null;
-    }
-
+export default class Conference extends Component {
     /**
      * Attach the script
      */
     componentDidMount() {
-
         const script = document.createElement('script');
 
         script.async = true;
         script.onload = this._onScriptLoad;
         script.onerror = console.error;
-        script.src = `https://${jitsiMeetDomain}/external_api.js`;
+        script.src = `https://${config.defaultDomain}/external_api.js`;
 
         document.head.appendChild(script);
     }
 
+
+    /**
+     * Render function of component.
+     *
+     * @return {ReactElement}
+     */
+    render() {
+        return null;
+    }
+
     /**
      * When the script is loaded attach utils from jitsi-meet-electron-utils
      */
     _onScriptLoad() {
         const JitsiMeetExternalAPI = window.JitsiMeetExternalAPI;
 
-        const api = new JitsiMeetExternalAPI(jitsiMeetDomain);
+        const api = new JitsiMeetExternalAPI(config.defaultDomain);
         const iframe = api.getIFrame();
 
         setupScreenSharingForWindow(iframe);
@@ -53,5 +52,3 @@ class JitsiMeetWindow extends React.Component {
         setupWiFiStats(iframe);
     }
 }
-
-render(<JitsiMeetWindow />, document.getElementById('app'));
diff --git a/app/features/conference/components/index.js b/app/features/conference/components/index.js
new file mode 100644
index 0000000..7ee56f5
--- /dev/null
+++ b/app/features/conference/components/index.js
@@ -0,0 +1 @@
+export { default as Conference } from './Conference';
diff --git a/app/features/conference/index.js b/app/features/conference/index.js
new file mode 100644
index 0000000..07635cb
--- /dev/null
+++ b/app/features/conference/index.js
@@ -0,0 +1 @@
+export * from './components';
diff --git a/app/features/config/index.js b/app/features/config/index.js
new file mode 100644
index 0000000..22d3806
--- /dev/null
+++ b/app/features/config/index.js
@@ -0,0 +1,12 @@
+
+export default {
+    /**
+     * Application name.
+     */
+    appName: 'Jitsi Meet',
+
+    /**
+     * The domain of the Jitsi Meet deployment that will be used.
+     */
+    defaultDomain: 'meet.jit.si'
+};
diff --git a/templates/index.html b/app/index.html
similarity index 82%
rename from templates/index.html
rename to app/index.html
index 48f1288..befc6f9 100644
--- a/templates/index.html
+++ b/app/index.html
@@ -1,7 +1,6 @@
 <!DOCTYPE html>
 <html>
 <head>
-    <title><%= htmlWebpackPlugin.options.title %></title>
     <style>
         body, html {
             margin: 0;
diff --git a/app/index.js b/app/index.js
new file mode 100644
index 0000000..968cd0f
--- /dev/null
+++ b/app/index.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { render } from 'react-dom';
+
+import { App } from './features/app';
+
+/**
+ * Render the main / root application.
+ */
+render(<App />, document.getElementById('app'));
diff --git a/config.js b/config.js
deleted file mode 100644
index 73d54c3..0000000
--- a/config.js
+++ /dev/null
@@ -1,6 +0,0 @@
-module.exports = {
-    /**
-     * The domain of the Jitsi Meet deployment that will be used.
-     */
-    jitsiMeetDomain: 'meet.jit.si'
-};
diff --git a/webpack.config.js b/webpack.config.js
index 4d6ac55..1d2bea9 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -15,6 +15,15 @@ const commonConfig = {
             {
                 exclude: /(node_modules)/,
                 loader: 'babel-loader',
+                options: {
+                    presets: [
+                        [
+                            require.resolve('babel-preset-env'),
+                            { modules: false }
+                        ],
+                        require.resolve('babel-preset-react')
+                    ]
+                },
                 test: /\.js$/
             },
             {
@@ -41,11 +50,10 @@ module.exports = [
     commonConfig),
     Object.assign({
         target: 'electron-renderer',
-        entry: { renderer: './windows/jitsi-meet/src/index.js' },
+        entry: { renderer: './app/index.js' },
         plugins: [
             new HtmlWebpackPlugin({
-                title: 'Jitsi Meet',
-                template: path.resolve('./templates/index.html')
+                template: './app/index.html'
             })
         ]
     },
-- 
GitLab