diff --git a/src/ComponentBroker.js b/src/ComponentBroker.js new file mode 100644 index 00000000..ea17d19b --- /dev/null +++ b/src/ComponentBroker.js @@ -0,0 +1,40 @@ +var components = {}; + +function load(name) { + var types = [ + 'atoms', + 'molecules', + 'organisms', + 'templates', + 'pages' + ]; + var ex = null; + for (var i = 0; i < types.length; ++i) { + try { + var module = require("./"+types[i]+"/"+name); + components[name] = module; + return module; + } catch (err) { + ex = err; + } + } + throw ex; +}; + +module.exports = { + get: function(name) { + if (components[name]) return components[name]; + + components[name] = load(name); + return components[name]; + }, + + set: function(name, module) { + components[name] = module; + } +}; + +require('./organisms/RoomList'); +require('./organisms/RoomView'); +require('./molecules/MatrixToolbar'); +require('./templates/Login'); diff --git a/src/pages/MatrixChat.js b/src/pages/MatrixChat.js index 5327031a..1e388b7d 100644 --- a/src/pages/MatrixChat.js +++ b/src/pages/MatrixChat.js @@ -1,11 +1,14 @@ var React = require('react'); +var ComponentBroker = require('../ComponentBroker'); -var RoomList = require('../organisms/RoomList'); -var RoomView = require('../organisms/RoomView'); -var MatrixToolbar = require('../molecules/MatrixToolbar'); +var RoomList = ComponentBroker.get('RoomList'); +var RoomView = ComponentBroker.get('RoomView'); +var MatrixToolbar = ComponentBroker.get('MatrixToolbar'); +var Login = ComponentBroker.get('Login'); + +// should be atomised var Loader = require("react-loader"); -var Login = require('../templates/Login'); var mxCliPeg = require("../MatrixClientPeg");