From a3847ce1c90a8fee6cbc612d86d84d045498ec1d Mon Sep 17 00:00:00 2001 From: Rokt33r Date: Tue, 8 Sep 2015 15:28:36 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=AA=E3=82=A2=E3=83=AB=E3=82=BF=E3=82=A4?= =?UTF-8?q?=E3=83=A0(SocketIO)=E5=AE=9F=E8=A3=85=20/=20Markdown=20style?= =?UTF-8?q?=E6=94=B9=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browser/main/Components/AddMemberModal.jsx | 3 - browser/main/Components/CodeDeleteModal.jsx | 2 +- browser/main/Components/CodeForm.jsx | 22 +++---- browser/main/Components/HomeNavigator.jsx | 17 +++-- browser/main/Components/LogoutModal.jsx | 4 ++ browser/main/Components/NoteDeleteModal.jsx | 2 +- browser/main/Components/NoteForm.jsx | 22 +++---- browser/main/Components/PlanetArticleList.jsx | 2 - browser/main/Components/PlanetCreateModal.jsx | 2 +- browser/main/Components/PlanetHeader.jsx | 2 +- .../main/Components/PlanetSettingModal.jsx | 14 ++-- browser/main/Components/TeamCreateModal.jsx | 2 + browser/main/Components/TeamSettingsModal.jsx | 29 +++------ browser/main/Containers/LoginContainer.jsx | 2 + browser/main/Containers/MainContainer.jsx | 11 ++-- browser/main/Containers/PlanetContainer.jsx | 10 +-- browser/main/Containers/SignupContainer.jsx | 2 + browser/main/Containers/UserContainer.jsx | 6 +- browser/main/Services/socket.js | 64 +++++++++++++++++++ browser/main/Stores/PlanetStore.js | 34 ++++++---- browser/main/Stores/UserStore.js | 21 ++---- browser/styles/mixins/marked.styl | 8 ++- config.js | 3 +- package.json | 2 +- 24 files changed, 176 insertions(+), 110 deletions(-) create mode 100644 browser/main/Services/socket.js diff --git a/browser/main/Components/AddMemberModal.jsx b/browser/main/Components/AddMemberModal.jsx index ae6c254e..f79ce647 100644 --- a/browser/main/Components/AddMemberModal.jsx +++ b/browser/main/Components/AddMemberModal.jsx @@ -7,8 +7,6 @@ var Hq = require('../Services/Hq') var KeyCaster = require('../Mixins/KeyCaster') -var UserStore = require('../Stores/UserStore') - var getOptions = function (input, callback) { Hq.searchUser(input) .then(function (res) { @@ -58,7 +56,6 @@ module.exports = React.createClass({ }) .then(function (res) { console.log(res.body) - UserStore.Actions.addMember(res.body) this.props.close() }.bind(this)) .catch(function (err) { diff --git a/browser/main/Components/CodeDeleteModal.jsx b/browser/main/Components/CodeDeleteModal.jsx index b7dbc147..e6ef467e 100644 --- a/browser/main/Components/CodeDeleteModal.jsx +++ b/browser/main/Components/CodeDeleteModal.jsx @@ -25,7 +25,7 @@ module.exports = React.createClass({ }, submit: function () { var planet = this.props.planet - Hq.destroyCode(planet.userName, planet.name, this.props.code.localId) + Hq.destroyCode(planet.Owner.name, planet.name, this.props.code.localId) .then(function (res) { PlanetStore.Actions.destroyCode(res.body) this.props.close() diff --git a/browser/main/Components/CodeForm.jsx b/browser/main/Components/CodeForm.jsx index 47f1a75b..c172a2cb 100644 --- a/browser/main/Components/CodeForm.jsx +++ b/browser/main/Components/CodeForm.jsx @@ -15,14 +15,14 @@ var getOptions = function (input, callback) { Hq.searchTag(input) .then(function (res) { callback(null, { - options: res.body.map(function (tag) { - return { - label: tag.name, - value: tag.name - } - }), - complete: false - }) + options: res.body.map(function (tag) { + return { + label: tag.name, + value: tag.name + } + }), + complete: false + }) }) .catch(function (err) { console.log(err) @@ -88,18 +88,18 @@ module.exports = React.createClass({ return tag.value }) if (this.props.code == null) { - Hq.createCode(planet.userName, planet.name, this.state.code) + Hq.createCode(planet.Owner.name, planet.name, this.state.code) .then(function (res) { var code = res.body PlanetStore.Actions.updateCode(code) this.props.close() - this.props.transitionTo('codes', {userName: planet.userName, planetName: planet.name, localId: code.localId}) + this.props.transitionTo('codes', {userName: planet.Owner.name, planetName: planet.name, localId: code.localId}) }.bind(this)) .catch(function (err) { console.error(err) }) } else { - Hq.updateCode(planet.userName, planet.name, this.props.code.localId, this.state.code) + Hq.updateCode(planet.Owner.name, planet.name, this.props.code.localId, this.state.code) .then(function (res) { var code = res.body PlanetStore.Actions.updateCode(code) diff --git a/browser/main/Components/HomeNavigator.jsx b/browser/main/Components/HomeNavigator.jsx index 16aca012..d969fed5 100644 --- a/browser/main/Components/HomeNavigator.jsx +++ b/browser/main/Components/HomeNavigator.jsx @@ -94,15 +94,18 @@ module.exports = React.createClass({ var params = this.getParams() if (this.state.currentUser == null) { - return ( -
-
- ) + return null } - var planets = (this.state.currentUser.Planets.concat(this.state.currentUser.Teams.reduce(function (planets, team) { - return team.Planets == null ? planets : planets.concat(team.Planets) - }, []))).map(function (planet, index) { + var planets = this.state.currentUser.Planets.map(function (planet) { + planet.userName = this.state.currentUser.name + return planet + }.bind(this)).concat(this.state.currentUser.Teams.reduce(function (_planets, team) { + return _planets.concat(team.Planets == null ? [] : team.Planets.map(function (planet) { + planet.userName = team.name + return planet + })) + }, [])).map(function (planet, index) { return (
  • diff --git a/browser/main/Components/LogoutModal.jsx b/browser/main/Components/LogoutModal.jsx index 0ce9ca87..b87ccbfd 100644 --- a/browser/main/Components/LogoutModal.jsx +++ b/browser/main/Components/LogoutModal.jsx @@ -2,6 +2,8 @@ var React = require('react') +var socket = require('../Services/socket') + var KeyCaster = require('../Mixins/KeyCaster') module.exports = React.createClass({ @@ -23,6 +25,8 @@ module.exports = React.createClass({ logout: function () { localStorage.removeItem('currentUser') localStorage.removeItem('token') + socket.reconnect() + this.props.transitionTo('login') this.props.close() }, diff --git a/browser/main/Components/NoteDeleteModal.jsx b/browser/main/Components/NoteDeleteModal.jsx index 4d6702c7..379b2925 100644 --- a/browser/main/Components/NoteDeleteModal.jsx +++ b/browser/main/Components/NoteDeleteModal.jsx @@ -25,7 +25,7 @@ module.exports = React.createClass({ }, submit: function () { var planet = this.props.planet - Hq.destroyNote(planet.userName, planet.name, this.props.note.localId) + Hq.destroyNote(planet.Owner.name, planet.name, this.props.note.localId) .then(function (res) { PlanetStore.Actions.destroyNote(res.body) this.props.close() diff --git a/browser/main/Components/NoteForm.jsx b/browser/main/Components/NoteForm.jsx index a3246492..73693ab5 100644 --- a/browser/main/Components/NoteForm.jsx +++ b/browser/main/Components/NoteForm.jsx @@ -16,14 +16,14 @@ var getOptions = function (input, callback) { Hq.searchTag(input) .then(function (res) { callback(null, { - options: res.body.map(function (tag) { - return { - label: tag.name, - value: tag.name - } - }), - complete: false - }) + options: res.body.map(function (tag) { + return { + label: tag.name, + value: tag.name + } + }), + complete: false + }) }) .catch(function (err) { console.log(err) @@ -89,18 +89,18 @@ module.exports = React.createClass({ }) if (this.props.note == null) { - Hq.createNote(planet.userName, planet.name, this.state.note) + Hq.createNote(planet.Owner.name, planet.name, this.state.note) .then(function (res) { var note = res.body PlanetStore.Actions.updateNote(note) this.props.close() - this.props.transitionTo('notes', {userName: planet.userName, planetName: planet.name, localId: note.localId}) + this.props.transitionTo('notes', {userName: planet.Owner.name, planetName: planet.name, localId: note.localId}) }.bind(this)) .catch(function (err) { console.error(err) }) } else { - Hq.updateNote(planet.userName, planet.name, this.props.note.localId, this.state.note) + Hq.updateNote(planet.Owner.name, planet.name, this.props.note.localId, this.state.note) .then(function (res) { var note = res.body PlanetStore.Actions.updateNote(note) diff --git a/browser/main/Components/PlanetArticleList.jsx b/browser/main/Components/PlanetArticleList.jsx index 76e79afb..8449b968 100644 --- a/browser/main/Components/PlanetArticleList.jsx +++ b/browser/main/Components/PlanetArticleList.jsx @@ -18,7 +18,6 @@ module.exports = React.createClass({ return function (e) { var params = this.getParams() - document.getElementById('articleEditButton').focus() this.transitionTo('codes', { userName: params.userName, planetName: params.planetName, @@ -31,7 +30,6 @@ module.exports = React.createClass({ return function (e) { var params = this.getParams() - document.getElementById('articleEditButton').focus() this.transitionTo('notes', { userName: params.userName, planetName: params.planetName, diff --git a/browser/main/Components/PlanetCreateModal.jsx b/browser/main/Components/PlanetCreateModal.jsx index 3775ba58..622fa589 100644 --- a/browser/main/Components/PlanetCreateModal.jsx +++ b/browser/main/Components/PlanetCreateModal.jsx @@ -51,7 +51,7 @@ module.exports = React.createClass({ PlanetStore.Actions.update(planet) if (this.props.transitionTo != null) { - this.props.transitionTo('planetHome', {userName: planet.userName, planetName: planet.name}) + this.props.transitionTo('planetHome', {userName: planet.Owner.name, planetName: planet.name}) } this.props.close() diff --git a/browser/main/Components/PlanetHeader.jsx b/browser/main/Components/PlanetHeader.jsx index f5880407..d9628bea 100644 --- a/browser/main/Components/PlanetHeader.jsx +++ b/browser/main/Components/PlanetHeader.jsx @@ -46,7 +46,7 @@ module.exports = React.createClass({ }, render: function () { var currentPlanetName = this.props.currentPlanet.name - var currentUserName = this.props.currentPlanet.userName + var currentUserName = this.props.currentPlanet.Owner.name return (
    diff --git a/browser/main/Components/PlanetSettingModal.jsx b/browser/main/Components/PlanetSettingModal.jsx index 1c44e7af..24f4dfa8 100644 --- a/browser/main/Components/PlanetSettingModal.jsx +++ b/browser/main/Components/PlanetSettingModal.jsx @@ -14,7 +14,9 @@ module.exports = React.createClass({ planet: React.PropTypes.shape({ name: React.PropTypes.string, public: React.PropTypes.bool, - userName: React.PropTypes.string + Owner: React.PropTypes.shape({ + name: React.PropTypes.string + }) }) }, getInitialState: function () { @@ -59,7 +61,7 @@ module.exports = React.createClass({ var planet = this.props.planet this.setState({profileFormStatus: 'sending', profileFormError: null}, function () { - Hq.updatePlanet(planet.userName, planet.name, this.state.planet) + Hq.updatePlanet(planet.Owner.name, planet.name, this.state.planet) .then(function (res) { var planet = res.body console.log(planet) @@ -103,7 +105,7 @@ module.exports = React.createClass({ var planet = this.props.planet this.setState({deleteSubmitStatus: 'sending'}, function () { - Hq.destroyPlanet(planet.userName, planet.name) + Hq.destroyPlanet(planet.Owner.name, planet.name) .then(function (res) { var planet = res.body @@ -166,12 +168,12 @@ module.exports = React.createClass({ ) }, renderPlanetDeleteTab: function () { - var disabled = !this.state.deleteConfirmation.match(new RegExp('^' + this.props.planet.userName + '/' + this.props.planet.name + '$')) + var disabled = !this.state.deleteConfirmation.match(new RegExp('^' + this.props.planet.Owner.name + '/' + this.props.planet.name + '$')) return (
    -

    Are you sure to destroy '{this.props.planet.userName + '/' + this.props.planet.name}'?

    -

    If you are sure, write '{this.props.planet.userName + '/' + this.props.planet.name}' to input below and click '{this.state.randomDeleteText}' button.

    +

    Are you sure to destroy '{this.props.planet.Owner.name + '/' + this.props.planet.name}'?

    +

    If you are sure, write '{this.props.planet.Owner.name + '/' + this.props.planet.name}' to input below and click '{this.state.randomDeleteText}' button.

    diff --git a/browser/main/Components/TeamCreateModal.jsx b/browser/main/Components/TeamCreateModal.jsx index 97b55fdb..d4b99857 100644 --- a/browser/main/Components/TeamCreateModal.jsx +++ b/browser/main/Components/TeamCreateModal.jsx @@ -3,6 +3,7 @@ var React = require('react/addons') var Hq = require('../Services/Hq') +var socket = require('../Services/socket') var LinkedState = require('../Mixins/LinkedState') var KeyCaster = require('../Mixins/KeyCaster') @@ -48,6 +49,7 @@ module.exports = React.createClass({ currentUser.Teams.push(team) localStorage.setItem('currentUser', JSON.stringify(currentUser)) + socket.reconnect(currentUser) UserStore.Actions.update(currentUser) if (this.props.transitionTo != null) { diff --git a/browser/main/Components/TeamSettingsModal.jsx b/browser/main/Components/TeamSettingsModal.jsx index b11f3d12..0261e749 100644 --- a/browser/main/Components/TeamSettingsModal.jsx +++ b/browser/main/Components/TeamSettingsModal.jsx @@ -43,12 +43,9 @@ module.exports = React.createClass({ close: React.PropTypes.func }, getInitialState: function () { - var team = this.props.team return { currentTab: 'teamInfo', - team: { - profileName: team.profileName - }, + team: this.props.team, userSubmitStatus: null, member: { name: '', @@ -65,17 +62,10 @@ module.exports = React.createClass({ } }, onUserChange: function (res) { - var member switch (res.status) { - case 'memberAdded': - member = res.data - if (member.TeamMember.TeamId === this.props.team.id) { - this.forceUpdate() - } - break - case 'memberRemoved': - member = res.data - if (member.TeamMember.TeamId === this.props.team.id) { + case 'userUpdated': + var user = res.data + if (user.id === this.props.team.id) { this.forceUpdate() } break @@ -116,8 +106,7 @@ module.exports = React.createClass({ role: this.state.member.role }) .then(function (res) { - UserStore.Actions.addMember(res.body) - this.setState({updatingMember: false}) + this.setState({updatingMember: false, team: res.body}) }.bind(this)) .catch(function (err) { console.error(err) @@ -135,8 +124,7 @@ module.exports = React.createClass({ role: role }) .then(function (res) { - UserStore.Actions.addMember(res.body) - this.setState({updatingMember: false}) + this.setState({updatingMember: false, team: res.body}) }.bind(this)) .catch(function (err) { console.error(err) @@ -153,8 +141,7 @@ module.exports = React.createClass({ userName: memberName }) .then(function (res) { - UserStore.Actions.removeMember(res.body) - this.setState({updatingMember: false}) + this.setState({updatingMember: false, team: res.body}) }.bind(this)) .catch(function (err) { console.error(err) @@ -212,7 +199,7 @@ module.exports = React.createClass({ renderMembersTab: function () { var currentUser = JSON.parse(localStorage.getItem('currentUser')) - var members = this.props.team.Members.map(function (member) { + var members = this.state.team.Members.map(function (member) { var isCurrentUser = currentUser.id === member.id return ( diff --git a/browser/main/Containers/LoginContainer.jsx b/browser/main/Containers/LoginContainer.jsx index b2cde41f..a1c01a1e 100644 --- a/browser/main/Containers/LoginContainer.jsx +++ b/browser/main/Containers/LoginContainer.jsx @@ -6,6 +6,7 @@ var Link = ReactRouter.Link var AuthFilter = require('../Mixins/AuthFilter') var LinkedState = require('../Mixins/LinkedState') var Hq = require('../Services/Hq') +var socket = require('../Services/socket') module.exports = React.createClass({ mixins: [LinkedState, ReactRouter.Navigation, AuthFilter.OnlyGuest], @@ -47,6 +48,7 @@ module.exports = React.createClass({ .then(function (res) { localStorage.setItem('token', res.body.token) localStorage.setItem('currentUser', JSON.stringify(res.body.user)) + socket.reconnect() this.transitionTo('userHome', {userName: res.body.user.name}) }.bind(this)) diff --git a/browser/main/Containers/MainContainer.jsx b/browser/main/Containers/MainContainer.jsx index 58efb015..544c8173 100644 --- a/browser/main/Containers/MainContainer.jsx +++ b/browser/main/Containers/MainContainer.jsx @@ -9,6 +9,7 @@ var Navigation = ReactRouter.Navigation var State = ReactRouter.State var Hq = require('../Services/Hq') +var socket = require('../Services/socket') var Modal = require('../Mixins/Modal') @@ -17,7 +18,7 @@ var UserStore = require('../Stores/UserStore') var ContactModal = require('../Components/ContactModal') function fetchPlanet (userName, planetName) { - Hq.fetchPlanet(userName, planetName) + return Hq.fetchPlanet(userName, planetName) .then(function (res) { var planet = res.body @@ -29,8 +30,9 @@ function fetchPlanet (userName, planetName) { note.type = 'note' }) - console.log('planet-' + planet.id + ' fetched!') localStorage.setItem('planet-' + planet.id, JSON.stringify(planet)) + + return planet }) .catch(function (err) { console.error(err) @@ -61,15 +63,14 @@ module.exports = React.createClass({ Hq.getUser() .then(function (res) { var user = res.body - localStorage.setItem('currentUser', JSON.stringify(user)) UserStore.Actions.update(user) user.Planets.forEach(function (planet) { - fetchPlanet(planet.userName, planet.name) + fetchPlanet(user.name, planet.name) }) user.Teams.forEach(function (team) { team.Planets.forEach(function (planet) { - fetchPlanet(planet.userName, planet.name) + fetchPlanet(team.name, planet.name) }) }) }) diff --git a/browser/main/Containers/PlanetContainer.jsx b/browser/main/Containers/PlanetContainer.jsx index 3e9bc095..8abc9a73 100644 --- a/browser/main/Containers/PlanetContainer.jsx +++ b/browser/main/Containers/PlanetContainer.jsx @@ -41,10 +41,10 @@ module.exports = React.createClass({ var planet = this.state.planet switch (article.type) { case 'code': - this.transitionTo('codes', {userName: planet.userName, planetName: planet.name, localId: article.localId}) + this.transitionTo('codes', {userName: planet.Owner.name, planetName: planet.name, localId: article.localId}) break case 'note': - this.transitionTo('notes', {userName: planet.userName, planetName: planet.name, localId: article.localId}) + this.transitionTo('notes', {userName: planet.Owner.name, planetName: planet.name, localId: article.localId}) break } } @@ -55,7 +55,7 @@ module.exports = React.createClass({ return } - if (nextProps.params.userName !== this.state.planet.userName || nextProps.params.planetName !== this.state.planet.name) { + if (nextProps.params.userName !== this.state.planet.Owner.name || nextProps.params.planetName !== this.state.planet.name) { this.setState({ planet: null }, function () { @@ -96,14 +96,14 @@ module.exports = React.createClass({ if (this.state.planet.name === planet.name) { this.setState({planet: planet}) } else { - this.transitionTo('planetHome', {userName: planet.userName, planetName: planet.name}) + this.transitionTo('planetHome', {userName: planet.Owner.name, planetName: planet.name}) } } break case 'destroyed': planet = res.data if (this.state.planet.id === planet.id) { - this.transitionTo('userHome', {userName: this.state.planet.userName}) + this.transitionTo('userHome', {userName: this.state.planet.Owner.name}) } break case 'codeUpdated': diff --git a/browser/main/Containers/SignupContainer.jsx b/browser/main/Containers/SignupContainer.jsx index fc6f5dd2..114dbc27 100644 --- a/browser/main/Containers/SignupContainer.jsx +++ b/browser/main/Containers/SignupContainer.jsx @@ -8,6 +8,7 @@ var AuthFilter = require('../Mixins/AuthFilter') var LinkedState = require('../Mixins/LinkedState') var ExternalLink = require('../Mixins/ExternalLink') var Hq = require('../Services/Hq') +var socket = require('../Services/socket') module.exports = React.createClass({ mixins: [LinkedState, ReactRouter.Navigation, AuthFilter.OnlyGuest, ExternalLink], @@ -33,6 +34,7 @@ module.exports = React.createClass({ .then(function (res) { localStorage.setItem('token', res.body.token) localStorage.setItem('currentUser', JSON.stringify(res.body.user)) + socket.reconnect() this.transitionTo('userHome', {userName: res.body.user.name}) }.bind(this)) diff --git a/browser/main/Containers/UserContainer.jsx b/browser/main/Containers/UserContainer.jsx index d8064041..c0ef398b 100644 --- a/browser/main/Containers/UserContainer.jsx +++ b/browser/main/Containers/UserContainer.jsx @@ -230,7 +230,7 @@ module.exports = React.createClass({ var userPlanets = user.Planets.map(function (planet) { return (
  • - {planet.userName}/{planet.name} + {user.name}/{planet.name}  {!planet.public ? () : null}
  • ) @@ -288,7 +288,7 @@ module.exports = React.createClass({ var userPlanets = user.Planets.map(function (planet) { return (
  • - {planet.userName}/{planet.name} + {user.name}/{planet.name}  {!planet.public ? () : null}
  • ) @@ -311,7 +311,7 @@ module.exports = React.createClass({ var planets = (team.Planets == null ? [] : team.Planets).map(function (planet) { return (
  • - {planet.userName}/{planet.name} + {team.name}/{planet.name}  {!planet.public ? () : null}
  • ) diff --git a/browser/main/Services/socket.js b/browser/main/Services/socket.js new file mode 100644 index 00000000..39d65f0d --- /dev/null +++ b/browser/main/Services/socket.js @@ -0,0 +1,64 @@ +/* global localStorage */ + +var config = require('../../../config') +var UserStore = require('../Stores/UserStore') +var PlanetStore = require('../Stores/PlanetStore') + +var io = require('socket.io-client')(config.apiUrl) + +io.on('connected', function (data) { + console.log('connected by WS') + reconnect() +}) + +io.on('userUpdated', function (data) { + console.log('userUpdated') + UserStore.Actions.update(data) +}) + +// Planet +io.on('planetUpdated', function (data) { + console.log('planetUpdated') + PlanetStore.Actions.update(data) +}) + +io.on('planetDestroyed', function (data) { + console.log('planetDestroyed') + PlanetStore.Actions.destroy(data) +}) + +// Article +io.on('codeUpdated', function (data) { + console.log('codeUpdated') + PlanetStore.Actions.updateCode(data) +}) +io.on('codeDestroyed', function (data) { + console.log('codeDestroyed') + PlanetStore.Actions.destroyCode(data) +}) +io.on('noteUpdated', function (data) { + console.log('noteUpdated') + PlanetStore.Actions.updateNote(data) +}) +io.on('noteDestroyed', function (data) { + console.log('noteDestroyed') + PlanetStore.Actions.destroyNote(data) +}) + +var reconnect = function (currentUser) { + if (currentUser == null) currentUser = JSON.parse(localStorage.getItem('currentUser')) + if (currentUser != null) { + var rooms = ['user:' + currentUser.id].concat(currentUser.Teams.map(function (team) { + return 'user:' + team.id + })) + + io.emit('room:sync', {rooms: rooms}) + } else { + io.emit('room:sync', {rooms: []}) + } +} + +module.exports = { + io: io, + reconnect: reconnect +} diff --git a/browser/main/Stores/PlanetStore.js b/browser/main/Stores/PlanetStore.js index a1232b6f..6b33cdcf 100644 --- a/browser/main/Stores/PlanetStore.js +++ b/browser/main/Stores/PlanetStore.js @@ -19,39 +19,51 @@ module.exports = Reflux.createStore({ mixins: [Helper], listenables: [actions], Actions: actions, + /* + Planet must be updated like below + Planet + Codes + Tags + User + Notes + Tags + User + Owner + */ onUpdate: function (planet) { // Copy the planet object var aPlanet = Object.assign({}, planet) delete aPlanet.Codes delete aPlanet.Notes + delete aPlanet.Owner // Check if the planet should be updated to currentUser var currentUser = JSON.parse(localStorage.getItem('currentUser')) - var ownedByCurrentUser = currentUser.id === aPlanet.OwnerId + var currentUserMustBeUpdated = false + var ownedByCurrentUser = currentUser.id === aPlanet.OwnerId if (ownedByCurrentUser) { currentUser.Planets = this.updateItemToTargetArray(aPlanet, currentUser.Planets) - } - - if (!ownedByCurrentUser) { + currentUserMustBeUpdated = true + } else { var team = null - currentUser.Teams.some(function (_team) { + if (currentUser.Teams.some(function (_team) { if (_team.id === aPlanet.OwnerId) { team = _team return true } - return - }) - - if (team) { + return false + })) { team.Planets = this.updateItemToTargetArray(aPlanet, team.Planets) + currentUserMustBeUpdated = true } } // Update currentUser - localStorage.setItem('currentUser', JSON.stringify(currentUser)) - UserStore.Actions.update(currentUser) + if (currentUserMustBeUpdated) { + UserStore.Actions.update(currentUser) + } planet.Codes.forEach(function (code) { code.type = 'code' diff --git a/browser/main/Stores/UserStore.js b/browser/main/Stores/UserStore.js index de8a74e5..0fd92fdd 100644 --- a/browser/main/Stores/UserStore.js +++ b/browser/main/Stores/UserStore.js @@ -4,18 +4,19 @@ var Reflux = require('reflux') var actions = Reflux.createActions([ 'update', - 'destroy', - 'addMember', - 'removeMember' + 'destroy' ]) module.exports = Reflux.createStore({ listenables: [actions], onUpdate: function (user) { - var currentUser = JSON.parse(localStorage.getItem('currentUser')) + if (this.socket == null) this.socket = require('../Services/socket') + var currentUser = JSON.parse(localStorage.getItem('currentUser')) if (currentUser.id === user.id) { localStorage.setItem('currentUser', JSON.stringify(user)) + + this.socket.reconnect(user) } if (user.userType === 'team') { @@ -53,17 +54,5 @@ module.exports = Reflux.createStore({ data: user }) }, - onAddMember: function (member) { - this.trigger({ - status: 'memberAdded', - data: member - }) - }, - onRemoveMember: function (member) { - this.trigger({ - status: 'memberRemoved', - data: member - }) - }, Actions: actions }) diff --git a/browser/styles/mixins/marked.styl b/browser/styles/mixins/marked.styl index ac4a13af..acc4e7f0 100644 --- a/browser/styles/mixins/marked.styl +++ b/browser/styles/mixins/marked.styl @@ -6,7 +6,7 @@ marked() h1 font-size 2em border-bottom solid 2px borderColor - margin 0.67 auto + margin 0.67em auto h2 font-size 1.5em margin 0.83em auto @@ -27,7 +27,7 @@ marked() line-height 1.8em p line-height 1.8em - margin-bottom 15px + margin-bottom 25px img max-width 100% strong @@ -43,6 +43,7 @@ marked() ul list-style-type disc padding-left 35px + margin-bottom 25px li display list-item margin 15px 0 @@ -53,6 +54,7 @@ marked() ol list-style-type decimal padding-left 35px + margin-bottom 25px li display list-item margin 15px 0 @@ -70,7 +72,7 @@ marked() border solid 1px borderColor border-radius 5px overflow-x auto - margin-bottom 15px + margin-bottom 25px background-color #F6F6F6 &>code padding 0 diff --git a/config.js b/config.js index 1a29ee52..0ce393d9 100644 --- a/config.js +++ b/config.js @@ -1,4 +1,5 @@ module.exports = { - apiUrl: 'https://api.b00st.io/' + // apiUrl: 'https://api.b00st.io/' + apiUrl: 'https://api2.b00st.io/' // apiUrl: 'http://localhost:8000/' } diff --git a/package.json b/package.json index 4ff615c1..636d1111 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "boost", - "version": "0.2.10", + "version": "0.3.0", "description": "Boost App", "main": "main.js", "scripts": {