From 484dfe6726e342febb5df240ed05fd7ce7793162 Mon Sep 17 00:00:00 2001 From: Rokt33r Date: Wed, 19 Aug 2015 00:54:38 +0900 Subject: [PATCH] on Refactor... #3 --- browser/main/Components/AboutModal.jsx | 32 ++ browser/main/Components/EditProfileModal.jsx | 2 +- browser/main/Components/HomeNavigator.jsx | 10 +- browser/main/Components/PlanetHeader.jsx | 18 +- .../main/Components/PlanetSettingModal.jsx | 173 ++++++--- browser/main/Components/PreferencesModal.jsx | 240 ------------- browser/main/Containers/PlanetContainer.jsx | 19 +- browser/main/Containers/SignupContainer.jsx | 9 +- browser/main/Mixins/ExternalLink.js | 8 + browser/main/Services/Hq.js | 15 + browser/main/Stores/PlanetStore.js | 37 ++ browser/styles/shared/modal.styl | 327 +++++++----------- main.js | 1 + 13 files changed, 369 insertions(+), 522 deletions(-) create mode 100644 browser/main/Components/AboutModal.jsx delete mode 100644 browser/main/Components/PreferencesModal.jsx create mode 100644 browser/main/Mixins/ExternalLink.js diff --git a/browser/main/Components/AboutModal.jsx b/browser/main/Components/AboutModal.jsx new file mode 100644 index 00000000..e54c5109 --- /dev/null +++ b/browser/main/Components/AboutModal.jsx @@ -0,0 +1,32 @@ +var remote = require('remote') +var version = remote.getGlobal('version') + +var React = require('react/addons') + +var ExternalLink = require('../Mixins/ExternalLink') + +module.exports = React.createClass({ + mixins: [ExternalLink], + propTypes: { + close: React.PropTypes.func + }, + render: function () { + return ( +
+
+ +
Boost {version == null ? 'DEV version' : 'v' + version}
+
+ +
+
External links
+ +
+
+ ) + } +}) diff --git a/browser/main/Components/EditProfileModal.jsx b/browser/main/Components/EditProfileModal.jsx index 07ec15a4..15cf04cb 100644 --- a/browser/main/Components/EditProfileModal.jsx +++ b/browser/main/Components/EditProfileModal.jsx @@ -95,7 +95,7 @@ module.exports = React.createClass({ } return ( -
+
Edit profile
diff --git a/browser/main/Components/HomeNavigator.jsx b/browser/main/Components/HomeNavigator.jsx index fe975f83..718c79a8 100644 --- a/browser/main/Components/HomeNavigator.jsx +++ b/browser/main/Components/HomeNavigator.jsx @@ -11,7 +11,7 @@ var Modal = require('../Mixins/Modal') var UserStore = require('../Stores/UserStore') -var PreferencesModal = require('./PreferencesModal') +var AboutModal = require('./AboutModal') var PlanetCreateModal = require('./PlanetCreateModal') var TeamCreateModal = require('./TeamCreateModal') var ProfileImage = require('./ProfileImage') @@ -36,8 +36,8 @@ module.exports = React.createClass({ openTeamCreateModal: function () { this.openModal(TeamCreateModal, {user: this.state.currentUser, transitionTo: this.transitionTo}) }, - openPreferencesModal: function () { - this.openModal(PreferencesModal, {currentUser: this.state.currentUser}) + openAboutModal: function () { + this.openModal(AboutModal) }, openPlanetCreateModal: function () { this.openModal(PlanetCreateModal, {transitionTo: this.transitionTo}) @@ -80,7 +80,7 @@ module.exports = React.createClass({ } var planets = (this.state.currentUser.Planets.concat(this.state.currentUser.Teams.reduce(function (planets, team) { - return planets.concat(team.Planets) + return team.Planets == null ? planets : planets.concat(team.Planets) }, []))).map(function (planet, index) { return (
  • @@ -146,7 +146,7 @@ module.exports = React.createClass({
    • - +
    • diff --git a/browser/main/Components/PlanetHeader.jsx b/browser/main/Components/PlanetHeader.jsx index 7b642bc9..57753493 100644 --- a/browser/main/Components/PlanetHeader.jsx +++ b/browser/main/Components/PlanetHeader.jsx @@ -1,10 +1,13 @@ -var shell = require('shell') - var React = require('react/addons') var ReactRouter = require('react-router') +var Modal = require('../Mixins/Modal') +var ExternalLink = require('../Mixins/ExternalLink') + +var PlanetSettingModal = require('./PlanetSettingModal') + module.exports = React.createClass({ - mixins: [ReactRouter.State], + mixins: [ReactRouter.State, Modal, ExternalLink], propTypes: { search: React.PropTypes.string, fetchPlanet: React.PropTypes.func, @@ -19,9 +22,8 @@ module.exports = React.createClass({ componentDidMount: function () { React.findDOMNode(this.refs.search).focus() }, - handleLogoClick: function (e) { - shell.openExternal('http://b00st.io') - e.preventDefault() + openPlanetSettingModal: function () { + this.openModal(PlanetSettingModal, {planet: this.props.currentPlanet}) }, refresh: function () { this.props.fetchPlanet() @@ -35,7 +37,7 @@ module.exports = React.createClass({
      {currentUserName}
      {currentPlanetName} -
      @@ -45,7 +47,7 @@ module.exports = React.createClass({
  • - +
    diff --git a/browser/main/Components/PlanetSettingModal.jsx b/browser/main/Components/PlanetSettingModal.jsx index 09b8e4b2..eb9f525e 100644 --- a/browser/main/Components/PlanetSettingModal.jsx +++ b/browser/main/Components/PlanetSettingModal.jsx @@ -1,83 +1,154 @@ var React = require('react/addons') -var Catalyst = require('../Mixins/Catalyst') +var Hq = require('../Services/Hq') -var ProfileImage = require('./ProfileImage') +var LinkedState = require('../Mixins/LinkedState') + +var PlanetStore = require('../Stores/PlanetStore') module.exports = React.createClass({ - mixins: [Catalyst.LinkedStateMixin], + mixins: [LinkedState], propTypes: { close: React.PropTypes.func, - currentPlanet: React.PropTypes.object + planet: React.PropTypes.shape({ + name: React.PropTypes.string, + public: React.PropTypes.bool, + userName: React.PropTypes.string + }) }, getInitialState: function () { + var deleteTextCandidates = [ + 'Confirm', + 'Exterminatus', + 'Avada Kedavra' + ] + var random = Math.round(Math.random() * 10) % 10 + var randomDeleteText = random > 1 ? deleteTextCandidates[0] : random === 1 ? deleteTextCandidates[1] : deleteTextCandidates[2] + return { - currentTab: 'planetProfile', - planetName: this.props.currentPlanet.name, - isDeletePlanetChecked: false, - userName: '' + currentTab: 'profile', + planet: { + name: this.props.planet.name, + public: this.props.planet.public + }, + randomDeleteText: randomDeleteText, + deleteConfirmation: '' } }, activePlanetProfile: function () { - this.setState({currentTab: 'planetProfile'}) + this.setState({currentTab: 'profile'}) }, - saveProfile: function () { - var currentPlanet = this.props.currentPlanet - PlanetActions.changeName(currentPlanet.userName, currentPlanet.name, this.state.planetName) + activePlanetDelete: function () { + this.setState({currentTab: 'delete'}) }, - handleChange: function (value) { - this.setState({userName: value}) + handlePublicChange: function (value) { + return function () { + this.state.planet.public = value + this.setState({planet: this.state.planet}) + }.bind(this) }, - doubleCheckDeletePlanet: function () { - if (this.state.isDeletePlanetChecked) { - PlanetActions.deletePlanet(this.props.currentPlanet.userName, this.props.currentPlanet.name) - return - } - this.setState({isDeletePlanetChecked: true}) - React.findDOMNode(this.refs.deleteCancelButton).focus() + handleSavePlanetProfile: function (e) { + var planet = this.props.planet + + this.setState({profileSubmitStatus: 'sending'}, function () { + Hq.updatePlanet(planet.userName, planet.name, this.state.planet) + .then(function (res) { + var planet = res.body + + this.setState({profileSubmitStatus: 'done'}) + + PlanetStore.Actions.update(planet) + }.bind(this)) + .catch(function (err) { + this.setState({profileSubmitStatus: 'error'}) + console.error(err) + }.bind(this)) + }) }, - cancelDeletePlanet: function () { - this.setState({isDeletePlanetChecked: false}) - }, - interceptClick: function (e) { - e.stopPropagation() + handleDeletePlanetClick: function () { + var planet = this.props.planet + + this.setState({deleteSubmitStatus: 'sending'}, function () { + Hq.destroyPlanet(planet.userName, planet.name) + .then(function (res) { + var planet = res.body + + PlanetStore.Actions.destroy(planet) + this.setState({deleteSubmitStatus: 'done'}, function () { + this.props.close() + }) + }.bind(this)) + .catch(function (err) { + this.setState({deleteSubmitStatus: 'error'}) + console.error(err) + }.bind(this)) + }) + }, render: function () { var content - content = ( -
    -
    - - - -
    - -
    -
    -
    -
    Are you sure to delete this planet?
    - -
    - -
    -
    -
    - ) + content = this.state.currentTab === 'profile' ? this.renderPlanetProfileTab() : this.renderPlanetDeleteTab() return ( -
    -
    -

    Planet setting

    -