diff --git a/client/coral-embed-stream/src/CommentStream.js b/client/coral-embed-stream/src/CommentStream.js index 7ec042ea1..b53832ce5 100644 --- a/client/coral-embed-stream/src/CommentStream.js +++ b/client/coral-embed-stream/src/CommentStream.js @@ -91,7 +91,7 @@ class CommentStream extends Component { const rootItem = this.props.items.assets && this.props.items.assets[rootItemId]; const {actions, users, comments} = this.props.items; const {status, moderation, closedMessage} = this.props.config; - const {loggedIn, user, showSignInDialog, signInOffset} = this.props.auth; + const {loggedIn, isAdmin, user, showSignInDialog, signInOffset} = this.props.auth; const {activeTab} = this.state; const banned = (this.props.userData.status === 'banned'); @@ -105,7 +105,7 @@ class CommentStream extends Component { Settings - Configure Stream + Configure Stream {loggedIn && } diff --git a/client/coral-framework/actions/auth.js b/client/coral-framework/actions/auth.js index d027dcd9e..c5390607c 100644 --- a/client/coral-framework/actions/auth.js +++ b/client/coral-framework/actions/auth.js @@ -20,15 +20,16 @@ export const cleanState = () => ({type: actions.CLEAN_STATE}); // Sign In Actions const signInRequest = () => ({type: actions.FETCH_SIGNIN_REQUEST}); -const signInSuccess = user => ({type: actions.FETCH_SIGNIN_SUCCESS, user}); +const signInSuccess = (user, isAdmin) => ({type: actions.FETCH_SIGNIN_SUCCESS, user, isAdmin}); const signInFailure = error => ({type: actions.FETCH_SIGNIN_FAILURE, error}); export const fetchSignIn = (formData) => dispatch => { dispatch(signInRequest()); coralApi('/auth/local', {method: 'POST', body: formData}) .then(({user}) => { + const isAdmin = !!user.roles.filter(i => i === 'admin').length; + dispatch(signInSuccess(user, isAdmin)); dispatch(hideSignInDialog()); - dispatch(signInSuccess(user)); dispatch(addItem(user, 'users')); }) .catch(() => dispatch(signInFailure(lang.t('error.emailPasswordError')))); @@ -73,7 +74,7 @@ const signUpFailure = error => ({type: actions.FETCH_SIGNUP_FAILURE, error}); export const fetchSignUp = formData => dispatch => { dispatch(signUpRequest()); - coralApi('/user', {method: 'POST', body: formData}) + coralApi('/users', {method: 'POST', body: formData}) .then(({user}) => { dispatch(signUpSuccess(user)); setTimeout(() =>{ @@ -117,7 +118,7 @@ export const invalidForm = error => ({type: actions.INVALID_FORM, error}); // Check Login const checkLoginRequest = () => ({type: actions.CHECK_LOGIN_REQUEST}); -const checkLoginSuccess = user => ({type: actions.CHECK_LOGIN_SUCCESS, user}); +const checkLoginSuccess = (user, isAdmin) => ({type: actions.CHECK_LOGIN_SUCCESS, user, isAdmin}); const checkLoginFailure = error => ({type: actions.CHECK_LOGIN_FAILURE, error}); export const checkLogin = () => dispatch => { @@ -125,10 +126,11 @@ export const checkLogin = () => dispatch => { coralApi('/auth') .then(user => { if (!user) { - throw new Error('not logged in'); + throw new Error('Not logged in'); } - dispatch(checkLoginSuccess(user)); + const isAdmin = !!user.roles.filter(i => i === 'admin').length; + dispatch(checkLoginSuccess(user, isAdmin)); }) .catch(error => dispatch(checkLoginFailure(error))); }; diff --git a/client/coral-framework/reducers/auth.js b/client/coral-framework/reducers/auth.js index cf5b25921..d32956b84 100644 --- a/client/coral-framework/reducers/auth.js +++ b/client/coral-framework/reducers/auth.js @@ -4,6 +4,7 @@ import * as actions from '../constants/auth'; const initialState = Map({ isLoading: false, loggedIn: false, + isAdmin: false, user: null, showSignInDialog: false, view: 'SIGNIN', @@ -50,10 +51,12 @@ export default function auth (state = initialState, action) { case actions.CHECK_LOGIN_SUCCESS: return state .set('loggedIn', true) + .set('isAdmin', action.isAdmin) .set('user', purge(action.user)); case actions.FETCH_SIGNIN_SUCCESS: return state .set('loggedIn', true) + .set('isAdmin', action.isAdmin) .set('user', purge(action.user)); case actions.FETCH_SIGNIN_FAILURE: return state @@ -80,9 +83,7 @@ export default function auth (state = initialState, action) { .set('isLoading', false) .set('successSignUp', true); case actions.LOGOUT_SUCCESS: - return state - .set('loggedIn', false) - .set('user', null); + return initialState; case actions.INVALID_FORM: return state .set('error', action.error); diff --git a/client/coral-plugin-commentbox/CommentBox.js b/client/coral-plugin-commentbox/CommentBox.js index 0167d517f..501d2ecc9 100644 --- a/client/coral-plugin-commentbox/CommentBox.js +++ b/client/coral-plugin-commentbox/CommentBox.js @@ -45,8 +45,7 @@ class CommentBox extends Component { postItem(comment, 'comments') .then((postedComment) => { const commentId = postedComment.id; - const status = postedComment.status; - if (status[0] && status[0].type === 'rejected') { + if (postedComment.status === 'rejected') { addNotification('error', lang.t('comment-post-banned-word')); } else if (premod === 'pre') { addNotification('success', lang.t('comment-post-notif-premod')); diff --git a/client/coral-ui/components/TabBar.js b/client/coral-ui/components/TabBar.js index 1ab7f47a6..2a673f78c 100644 --- a/client/coral-ui/components/TabBar.js +++ b/client/coral-ui/components/TabBar.js @@ -18,14 +18,16 @@ export class TabBar extends React.Component { return (
    - {React.Children.map(children, (child, tabId) => - React.cloneElement(child, { - tabId, - active: tabId === activeTab, - onTabClick: this.handleClickTab, - cStyle - }) - )} + {React.Children.toArray(children) + .filter(child => !child.props.restricted) + .map((child, tabId) => + React.cloneElement(child, { + tabId, + active: tabId === activeTab, + onTabClick: this.handleClickTab, + cStyle + }) + )}
);