From 5899268b227ce7d14d7cd96068e2298b5cd28b4d Mon Sep 17 00:00:00 2001 From: Kata Date: Sun, 10 Dec 2017 04:26:28 -0600 Subject: [PATCH] finish most of redux retrofit --- Server/api/auth.js | 5 +++++ UI/src/App.js | 5 +++++ UI/src/actions/index.js | 25 +++++++++++++++++++++++++ UI/src/components/servers/ServerCard.js | 14 +++++++++----- UI/src/components/servers/UserCard.js | 10 ++++++---- UI/src/components/servers/index.js | 18 ++++++++++-------- UI/src/reducers/user.js | 4 ++++ 7 files changed, 64 insertions(+), 17 deletions(-) diff --git a/Server/api/auth.js b/Server/api/auth.js index 26eeee3..e03e8ef 100644 --- a/Server/api/auth.js +++ b/Server/api/auth.js @@ -33,6 +33,11 @@ module.exports = (R, $) => { }) R.get('/api/auth/user', async ctx => { + if (ctx.session.accessToken === undefined) { + ctx.body = { err: 'not_logged_in' } + ctx.status = 401 + } + const user = await $.discord.getUser(ctx.session.accessToken) ctx.session.userId = user.id ctx.session.avatarHash = user.avatar diff --git a/UI/src/App.js b/UI/src/App.js index 2dfe872..1938f0e 100644 --- a/UI/src/App.js +++ b/UI/src/App.js @@ -6,12 +6,17 @@ import configureStore from './store/configureStore' import Wrapper from './components/wrapper' import AppRouter from './router' +import { userInit } from './actions' const store = configureStore() window.__APP_STORE__ = store class App extends Component { + componentWillMount () { + store.dispatch(userInit) + } + render () { return ( diff --git a/UI/src/actions/index.js b/UI/src/actions/index.js index e69de29..50d0f73 100644 --- a/UI/src/actions/index.js +++ b/UI/src/actions/index.js @@ -0,0 +1,25 @@ +import superagent from 'superagent' + +export const fetchServers = async dispatch => { + const rsp = await superagent.get('/api/servers') + + dispatch({ + type: Symbol.for('update servers'), + data: rsp.body + }) +} + +export const userInit = async dispatch => { + try { + const rsp = await superagent.get('/api/auth/user') + + dispatch({ + type: Symbol.for('set user'), + data: rsp.body + }) + + dispatch(fetchServers) + } catch(e) { + console.log(e) + } +} \ No newline at end of file diff --git a/UI/src/components/servers/ServerCard.js b/UI/src/components/servers/ServerCard.js index 4f3ccc2..b561201 100644 --- a/UI/src/components/servers/ServerCard.js +++ b/UI/src/components/servers/ServerCard.js @@ -5,10 +5,14 @@ import './ServerCard.sass' class ServerCard extends Component { render () { - const { server: { server, id, gm, perms }, user } = this.props + const { server, user } = this.props let icon = '' + + const s = server.get('server') + const gm = server.get('gm') + const perms = server.get('perms') if (perms.canManageRoles) { icon = 🔰 } @@ -17,13 +21,13 @@ class ServerCard extends Component { icon = 🔰⭐️ } - return + return
- {server.name} + {s.name}
- {server.name}
- { gm.nickname || user.username } { icon } + {s.name}
+ { gm.nickname || user.get('username') } { icon }
} diff --git a/UI/src/components/servers/UserCard.js b/UI/src/components/servers/UserCard.js index 652a7af..ceab11d 100644 --- a/UI/src/components/servers/UserCard.js +++ b/UI/src/components/servers/UserCard.js @@ -10,11 +10,13 @@ class UserCard extends Component { get avatar () { const { user } = this.props - if (user.avatar === '' || user.avatar == null) { + const avatar = user.get('avatar') + + if (avatar === '' || avatar == null) { return `https://cdn.discordapp.com/embed/avatars/${Math.ceil(Math.random() * 9999) % 4}.png` } - return `https://cdn.discordapp.com/avatars/${user.id}/${user.avatar}.png` + return `https://cdn.discordapp.com/avatars/${user.get('id')}/${avatar}.png` } render () { @@ -24,10 +26,10 @@ class UserCard extends Component { return
- {user.username} + {user.get('username')}
- {user.username}#{user.discriminator} + {user.get('username')}#{user.get('discriminator')}
    diff --git a/UI/src/components/servers/index.js b/UI/src/components/servers/index.js index 8a12352..02485d4 100644 --- a/UI/src/components/servers/index.js +++ b/UI/src/components/servers/index.js @@ -1,6 +1,6 @@ import React, { Component } from 'react' import { Route } from 'react-router-dom' -import Radium from 'radium' +import { connect } from 'react-redux' import superagent from 'superagent' import './index.sass' @@ -9,16 +9,18 @@ import RolePicker from '../role-picker' // import mockData from './mockData' -class Servers extends Component { - async componentWillMount () { - const rsp = await superagent.get(`/api/servers`) - - this.setState({ servers: rsp.body }) +const mapState = ({ servers, user }) => { + return { + servers, + user } +} +@connect(mapState) +class Servers extends Component { render () { return
    - +
    @@ -27,4 +29,4 @@ class Servers extends Component { } } -export default Radium(Servers) +export default Servers diff --git a/UI/src/reducers/user.js b/UI/src/reducers/user.js index 1503553..09c28a8 100644 --- a/UI/src/reducers/user.js +++ b/UI/src/reducers/user.js @@ -9,6 +9,10 @@ const initialState = Map({ export default (state = initialState, { type, data }) => { switch (type) { + + case Symbol.for('set user'): + return Map(data) + default: return state }