aboutsummaryrefslogtreecommitdiffstats
path: root/web/src/js/stores
diff options
context:
space:
mode:
Diffstat (limited to 'web/src/js/stores')
-rw-r--r--web/src/js/stores/EventLogStore.es6.js42
-rw-r--r--web/src/js/stores/SettingsStore.es6.js42
-rw-r--r--web/src/js/stores/base.es6.js26
3 files changed, 110 insertions, 0 deletions
diff --git a/web/src/js/stores/EventLogStore.es6.js b/web/src/js/stores/EventLogStore.es6.js
new file mode 100644
index 00000000..caa9d77d
--- /dev/null
+++ b/web/src/js/stores/EventLogStore.es6.js
@@ -0,0 +1,42 @@
+class _EventLogStore extends EventEmitter {
+ constructor() {
+ /*jshint validthis: true */
+ super();
+ this.log = [];
+ }
+ getAll() {
+ return this.log;
+ }
+ handle(action) {
+ switch (action.actionType) {
+ case ActionTypes.LOG_ADD:
+ this.log.push(action.message);
+ this.emit("change");
+ break;
+ default:
+ return;
+ }
+ }
+}
+var EventLogStore = new _EventLogStore();
+AppDispatcher.register(EventLogStore.handle.bind(EventLogStore));
+
+
+var EventLogMixin = {
+ getInitialState(){
+ return {
+ log: EventLog.getAll()
+ };
+ },
+ componentDidMount(){
+ SettingsStore.addListener("change", this._onEventLogChange);
+ },
+ componentWillUnmount(){
+ SettingsStore.removeListener("change", this._onEventLogChange);
+ },
+ _onEventLogChange(){
+ this.setState({
+ log: EventLog.getAll()
+ });
+ }
+}; \ No newline at end of file
diff --git a/web/src/js/stores/SettingsStore.es6.js b/web/src/js/stores/SettingsStore.es6.js
new file mode 100644
index 00000000..7f3a6837
--- /dev/null
+++ b/web/src/js/stores/SettingsStore.es6.js
@@ -0,0 +1,42 @@
+class _SettingsStore extends EventEmitter {
+ constructor() {
+ /*jshint validthis: true */
+ super();
+ this.settings = { version: "0.12", showEventLog: true }; //FIXME: Need to get that from somewhere.
+ }
+ getSettings() {
+ return this.settings;
+ }
+ handle(action) {
+ switch (action.actionType) {
+ case ActionTypes.SETTINGS_UPDATE:
+ this.settings = action.settings;
+ this.emit("change");
+ break;
+ default:
+ return;
+ }
+ }
+}
+var SettingsStore = new _SettingsStore();
+AppDispatcher.register(SettingsStore.handle.bind(SettingsStore));
+
+
+var SettingsMixin = {
+ getInitialState(){
+ return {
+ settings: SettingsStore.getSettings()
+ };
+ },
+ componentDidMount(){
+ SettingsStore.addListener("change", this._onSettingsChange);
+ },
+ componentWillUnmount(){
+ SettingsStore.removeListener("change", this._onSettingsChange);
+ },
+ _onSettingsChange(){
+ this.setState({
+ settings: SettingsStore.getSettings()
+ });
+ }
+}; \ No newline at end of file
diff --git a/web/src/js/stores/base.es6.js b/web/src/js/stores/base.es6.js
new file mode 100644
index 00000000..9e9c69aa
--- /dev/null
+++ b/web/src/js/stores/base.es6.js
@@ -0,0 +1,26 @@
+class EventEmitter {
+ constructor() {
+ this.listeners = {};
+ }
+ emit(event) {
+ if (!(event in this.listeners)) {
+ return;
+ }
+ this.listeners[event].forEach(function(listener) {
+ listener(event, this);
+ }.bind(this));
+ }
+ addListener(event, f) {
+ this.listeners[event] = this.listeners[event] || [];
+ this.listeners[event].push(f);
+ }
+ removeListener(event, f) {
+ if (!(event in this.listeners)) {
+ return false;
+ }
+ var index = this.listeners[event].indexOf(f);
+ if (index >= 0) {
+ this.listeners[event].splice(index, 1);
+ }
+ }
+} \ No newline at end of file