summaryrefslogtreecommitdiffstats
path: root/web/react/stores/team_store.jsx
blob: c494cb5b545c11fa74ef43a243419a1bcd403d52 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
// See License.txt for license information.

var AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
var EventEmitter = require('events').EventEmitter;
var assign = require('object-assign');

var Constants = require('../utils/constants.jsx');
var ActionTypes = Constants.ActionTypes;
var BrowserStore = require('../stores/browser_store.jsx');

var CHANGE_EVENT = 'change';

var TeamStore = assign({}, EventEmitter.prototype, {
  emitChange: function() {
    this.emit(CHANGE_EVENT);
  },
  addChangeListener: function(callback) {
    this.on(CHANGE_EVENT, callback);
  },
  removeChangeListener: function(callback) {
    this.removeListener(CHANGE_EVENT, callback);
  },
  get: function(id) {
    var c = this._getTeams();
    return c[id];
  },
  getByName: function(name) {
    var current = null;
    var t = this._getTeams();

    for (id in t) {
        if (t[id].name == name) {
            return t[id];
        }
    }

    return null;
  },
  getAll: function() {
    return this._getTeams();
  },
  setCurrentId: function(id) {
    if (id == null)
      BrowserStore.removeItem("current_team_id");
    else
      BrowserStore.setItem("current_team_id", id);
  },
  getCurrentId: function() {
    return BrowserStore.getItem("current_team_id");
  },
  getCurrent: function() {
    var currentId = TeamStore.getCurrentId();

    if (currentId != null)
      return this.get(currentId);
    else
      return null;
  },
  storeTeam: function(team) {
    var teams = this._getTeams();
    teams[team.id] = team;
    this._storeTeams(teams);
  },
  _storeTeams: function(teams) {
    BrowserStore.setItem("user_teams", JSON.stringify(teams));
  },
  _getTeams: function() {
    var teams = {};

    try {
        teams = JSON.parse(BrowserStore.getItem("user_teams"));
    }
    catch (err) {
    }

	if (teams == null) {
		teams = {};
	}

    return teams;
  }
});

TeamStore.dispatchToken = AppDispatcher.register(function(payload) {
  var action = payload.action;

  switch(action.type) {

    case ActionTypes.CLICK_TEAM:
      TeamStore.setCurrentId(action.id);
      TeamStore.emitChange();
      break;

    case ActionTypes.RECIEVED_TEAM:
      TeamStore.storeTeam(action.team);
      TeamStore.emitChange();
      break;

    default:
  }
});

module.exports = TeamStore;