1
0
mirror of https://github.com/BoostIo/Boostnote synced 2025-12-13 01:36:22 +00:00

on making usernavigator

This commit is contained in:
Rokt33r
2015-10-12 22:29:24 +09:00
parent a9e12e4384
commit 972a3746a1
8 changed files with 123 additions and 31 deletions

View File

@@ -1,12 +1,61 @@
import React, { PropTypes } from 'react'
class ArticleNavigator extends React.Component {
export default class ArticleNavigator extends React.Component {
render () {
let { user } = this.props
if (user == null) return (<div className='ArticleNavigator'/>)
console.log(user)
let folders = user.Folders.map(folder => {
return (
<button key={'folder-' + folder.id}><i className='fa fa-fw fa-square'/> {folder.name}</button>
)
})
let members = Array.isArray(user.Members) ? user.Members.map(member => {
return (
<div>{member.profileName}</div>
)
}) : null
return (
<div className='ArticleNavigator'>
<div className='userInfo'>
<div className='userProfileName'>{user.profileName}</div>
<div className='userName'>{user.name}</div>
<i className='fa fa-fw fa-chevron-down'/>
</div>
<div className='controlSection'>
<button className='newPostBtn'>New Post</button>
</div>
<div className='folders'>
<div className='foldersHeader'>
<div className='folderTitle'>Folders</div>
<button className='addFolderBtn'><i className='fa fa-fw fa-plus'/></button>
</div>
<div className='folderList'>
<button>All folders</button>
{folders}
</div>
</div>
{user.userType === 'team' ? (
<div className='members'>
<div className='header'>
<div className='title'></div>
</div>
<div className='memberList'>
{members}
</div>
</div>
) : null}
</div>
)
}
}
export default ArticleNavigator
ArticleNavigator.propTypes = {
user: PropTypes.object
}

View File

@@ -11,7 +11,7 @@ export default class UserNavigator extends Component {
// for dev
componentDidMount () {
openModal(CreateNewTeam)
// openModal(CreateNewTeam)
}
renderUserList () {

View File

@@ -1,8 +1,16 @@
export const PARAMS_CHANGE = 'PARAMS_CHANGE'
export const USER_UPDATE = 'USER_UPDATE'
export function updateUser (user) {
return {
type: 'USER_UPDATE',
type: USER_UPDATE,
data: user
}
}
export function switchParams (params) {
return {
type: PARAMS_CHANGE,
data: params
}
}

View File

@@ -1,22 +1,38 @@
import React, { PropTypes} from 'react'
import { connect } from 'react-redux'
// import actionss....
import { switchParams } from './actions'
import UserNavigator from './Components/UserNavigator'
import ArticleNavigator from './Components/ArticleNavigator'
import ArticleTopBar from './Components/ArticleTopBar'
import ArticleList from './Components/ArticleList'
import ArticleDetail from './Components/ArticleDetail'
import { findWhere } from 'lodash'
// var AuthFilter = require('../Mixins/AuthFilter')
// var KeyCaster = require('../Mixins/KeyCaster')
class HomeContainer extends React.Component {
componentDidMount () {
const { dispatch, params } = this.props
console.log(params)
dispatch(switchParams(params))
}
componentWillReceiveProps (nextProps) {
const { dispatch } = this.props
if (nextProps.params.userId !== this.props.params.userId) {
let params = nextProps.params
dispatch(switchParams(params))
}
}
render () {
const { users } = this.props
const { users, user } = this.props
return (
<div className='HomeContainer'>
<UserNavigator users={users} />
<ArticleNavigator/>
<ArticleNavigator user={user}/>
<ArticleTopBar/>
<ArticleList/>
<ArticleDetail/>
@@ -30,14 +46,21 @@ function remap (state) {
let teams = Array.isArray(currentUser.Teams) ? currentUser.Teams : []
let users = [currentUser, ...teams]
let user = findWhere(users, {id: parseInt(state.params.userId, 10)})
return {
users
users,
user
}
}
HomeContainer.propTypes = {
users: PropTypes.array
users: PropTypes.array,
user: PropTypes.object,
params: PropTypes.shape({
userId: PropTypes.string
}),
dispatch: PropTypes.func
}
export default connect(remap, {})(HomeContainer)
export default connect(remap)(HomeContainer)

View File

@@ -1,7 +1,8 @@
import { combineReducers } from 'redux'
import { USER_UPDATE } from './actions'
import { PARAMS_CHANGE, USER_UPDATE } from './actions'
const initialCurrentUser = JSON.parse(localStorage.getItem('currentUser'))
const initialParams = {}
function currentUser (state, action) {
switch (action.type) {
@@ -10,10 +11,22 @@ function currentUser (state, action) {
localStorage.setItem('currentUser', JSON.stringify(user))
return user
default:
return initialCurrentUser
if (state == null) return initialCurrentUser
return state
}
}
function params (state, action) {
switch (action.type) {
case PARAMS_CHANGE:
return action.data
default:
if (state == null) return initialParams
return state
}
}
export default combineReducers({
currentUser
currentUser,
params
})

View File

@@ -27,22 +27,22 @@ let routes = (
)
// with Dev
// import { compose } from 'redux'
// // Redux DevTools store enhancers
// import { devTools, persistState } from 'redux-devtools'
// // React components for Redux DevTools
// import { DevTools, DebugPanel, LogMonitor } from 'redux-devtools/lib/react'
import { compose } from 'redux'
// Redux DevTools store enhancers
import { devTools, persistState } from 'redux-devtools'
// React components for Redux DevTools
import { DevTools, DebugPanel, LogMonitor } from 'redux-devtools/lib/react'
// let finalCreateStore = compose(devTools(), persistState(window.location.href.match(/[?&]debug_session=([^&]+)\b/)))(createStore)
// let store = finalCreateStore(reducer)
// let devEl = (
// <DebugPanel top right bottom>
// <DevTools store={store} monitor={LogMonitor} />
// </DebugPanel>
// )
let finalCreateStore = compose(devTools(), persistState(window.location.href.match(/[?&]debug_session=([^&]+)\b/)))(createStore)
let store = finalCreateStore(reducer)
let devEl = (
<DebugPanel left right bottom>
<DevTools store={store} monitor={LogMonitor} />
</DebugPanel>
)
// On production
let store = createStore(reducer)
// let store = createStore(reducer)
let el = document.getElementById('content')
@@ -51,6 +51,7 @@ React.render((
<Provider store={store}>
{() => <Router>{routes}</Router>}
</Provider>
{devEl}
</div>
), el, function () {
let loadingCover = document.getElementById('loadingCover')

View File

@@ -35,7 +35,6 @@
},
"homepage": "https://github.com/Rokt33r/codexen-app#readme",
"dependencies": {
"babel-core": "^5.8.25",
"devicon": "^2.0.0",
"font-awesome": "^4.3.0",
"fs-jetpack": "^0.7.0",
@@ -52,8 +51,7 @@
"reflux": "^0.2.8",
"socket.io-client": "^1.3.6",
"superagent": "^1.2.0",
"superagent-promise": "^1.0.3",
"titlebar": "^1.3.0"
"superagent-promise": "^1.0.3"
},
"devDependencies": {
"babel-loader": "^5.3.2",

View File

@@ -25,8 +25,8 @@ module.exports = {
]
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin()
new webpack.HotModuleReplacementPlugin()
// new webpack.NoErrorsPlugin()
],
externals: [
'socket.io-client',