diff --git a/client/coral-admin/src/actions/community.js b/client/coral-admin/src/actions/community.js index 06c8ab0f6..7a4112f8b 100644 --- a/client/coral-admin/src/actions/community.js +++ b/client/coral-admin/src/actions/community.js @@ -5,7 +5,8 @@ import { FETCH_COMMENTERS_SUCCESS, FETCH_COMMENTERS_FAILURE, SORT_UPDATE, - COMMENTERS_NEW_PAGE + COMMENTERS_NEW_PAGE, + SET_ROLE } from '../constants/community'; import {base, getInit, handleResp} from '../helpers/response'; @@ -40,3 +41,9 @@ export const newPage = () => ({ type: COMMENTERS_NEW_PAGE }); +export const setRole = (id, role) => dispatch => { + return fetch(`${base}/user/${id}/role`, getInit('POST', {role})) + .then(() => { + return dispatch({type: SET_ROLE, id, role}); + }); +}; diff --git a/client/coral-admin/src/components/Comment.js b/client/coral-admin/src/components/Comment.js index e5a753f80..c115bcf61 100644 --- a/client/coral-admin/src/components/Comment.js +++ b/client/coral-admin/src/components/Comment.js @@ -3,8 +3,8 @@ import React from 'react'; import {Button, Icon} from 'react-mdl'; import timeago from 'timeago.js'; import styles from './CommentList.css'; -import I18n from 'coral-framework/modules/i18n/i18n'; -import translations from '../translations'; +import I18n from 'coral-framework/i18n/i18n'; +import translations from '../translations.json'; // Render a single comment for the list export default props => ( diff --git a/client/coral-admin/src/components/Header.js b/client/coral-admin/src/components/Header.js index 1a89da513..b2bee0a44 100644 --- a/client/coral-admin/src/components/Header.js +++ b/client/coral-admin/src/components/Header.js @@ -2,22 +2,26 @@ import React from 'react'; import {Layout, Navigation, Drawer, Header} from 'react-mdl'; import {Link} from 'react-router'; import styles from './Header.css'; +import I18n from 'coral-framework/i18n/i18n'; +import translations from '../translations.json'; // App header. If we add a navbar it should be here export default (props) => (
- Moderate - Configure + {lang.t('configure.moderate')} + {lang.t('Configure')}
- Moderate - Configure + {lang.t('configure.moderate')} + {lang.t('configure.Configure')} {props.children}
); + +const lang = new I18n(translations); diff --git a/client/coral-admin/src/components/ModerationKeysModal.js b/client/coral-admin/src/components/ModerationKeysModal.js index b1282e5d6..d350c74e0 100644 --- a/client/coral-admin/src/components/ModerationKeysModal.js +++ b/client/coral-admin/src/components/ModerationKeysModal.js @@ -1,5 +1,5 @@ -import I18n from 'coral-framework/modules/i18n/i18n'; -import translations from '../translations'; +import I18n from 'coral-framework/i18n/i18n'; +import translations from '../translations.json'; import React from 'react'; import Modal from 'components/Modal'; import styles from './ModerationKeysModal.css'; diff --git a/client/coral-admin/src/components/ui/Drawer.js b/client/coral-admin/src/components/ui/Drawer.js index 9ea727911..12bf7c1d2 100644 --- a/client/coral-admin/src/components/ui/Drawer.js +++ b/client/coral-admin/src/components/ui/Drawer.js @@ -2,13 +2,17 @@ import React from 'react'; import {Navigation, Drawer} from 'react-mdl'; import {Link} from 'react-router'; import styles from './Header.css'; +import I18n from 'coral-framework/i18n/i18n'; +import translations from '../../translations.json'; export default () => ( - Moderate - Community - Configure + {lang.t('configure.moderate')} + {lang.t('configure.community')} + {lang.t('configure.configure')} ); + +const lang = new I18n(translations); diff --git a/client/coral-admin/src/components/ui/Header.js b/client/coral-admin/src/components/ui/Header.js index 86e622672..d85a91744 100644 --- a/client/coral-admin/src/components/ui/Header.js +++ b/client/coral-admin/src/components/ui/Header.js @@ -2,16 +2,20 @@ import React from 'react'; import {Navigation, Header} from 'react-mdl'; import {Link} from 'react-router'; import styles from './Header.css'; +import I18n from 'coral-framework/i18n/i18n'; +import translations from '../../translations.json'; export default () => (
- Moderate - Community - Configure + {lang.t('configure.moderate')} + {lang.t('configure.community')} + {lang.t('configure.configure')} {`v${process.env.VERSION}`}
); + +const lang = new I18n(translations); diff --git a/client/coral-admin/src/constants/community.js b/client/coral-admin/src/constants/community.js index e628a14d6..2ea77ea77 100644 --- a/client/coral-admin/src/constants/community.js +++ b/client/coral-admin/src/constants/community.js @@ -3,3 +3,4 @@ export const FETCH_COMMENTERS_SUCCESS = 'FETCH_COMMENTERS_SUCCESS'; export const FETCH_COMMENTERS_FAILURE = 'FETCH_COMMENTERS_FAILURE'; export const SORT_UPDATE = 'SORT_UPDATE'; export const COMMENTERS_NEW_PAGE = 'COMMENTERS_NEW_PAGE'; +export const SET_ROLE = 'SET_ROLE'; diff --git a/client/coral-admin/src/containers/Community/Community.js b/client/coral-admin/src/containers/Community/Community.js index 5c1bb2e19..fdb542811 100644 --- a/client/coral-admin/src/containers/Community/Community.js +++ b/client/coral-admin/src/containers/Community/Community.js @@ -1,6 +1,6 @@ import React from 'react'; -import I18n from 'coral-framework/modules/i18n/i18n'; -import translations from '../../translations'; +import I18n from 'coral-framework/i18n/i18n'; +import translations from '../../translations.json'; import {Grid, Cell} from 'react-mdl'; import styles from './Community.css'; @@ -19,6 +19,10 @@ const tableHeaders = [ { title: lang.t('community.account_creation_date'), field: 'created_at' + }, + { + title: lang.t('community.newsroom_role'), + field: 'role' } ]; diff --git a/client/coral-admin/src/containers/Community/Table.js b/client/coral-admin/src/containers/Community/Table.js index a15a88723..97848bc9a 100644 --- a/client/coral-admin/src/containers/Community/Table.js +++ b/client/coral-admin/src/containers/Community/Table.js @@ -1,34 +1,66 @@ -import React from 'react'; +import React, {Component} from 'react'; +import {connect} from 'react-redux'; +import {SelectField, Option} from 'react-mdl-selectfield'; import styles from './Community.css'; +import I18n from 'coral-framework/i18n/i18n'; +import translations from '../../translations'; +import {setRole} from '../../actions/community'; -const Table = ({headers, data, onHeaderClickHandler}) => ( - - - - {headers.map((header, i) =>( - - ))} - - - - {data.map((row, i)=> ( - - - - - ))} - -
onHeaderClickHandler({field: header.field})}> - {header.title} -
- {row.displayName} - {row.profiles.map(({id}) => id)} - - {row.created_at} -
-); +const lang = new I18n(translations); -export default Table; +class Table extends Component { + + constructor (props) { + super(props); + this.onRoleChange = this.onRoleChange.bind(this); + } + + onRoleChange (id, role) { + this.props.dispatch(setRole(id, role)); + } + + render () { + const {headers, commenters, onHeaderClickHandler} = this.props; + + return ( + + + + {headers.map((header, i) =>( + + ))} + + + + {commenters.map((row, i)=> ( + + + + + + ))} + +
onHeaderClickHandler({field: header.field})}> + {header.title} +
+ {row.displayName} + {row.profiles.map(({id}) => id)} + + {row.created_at} + + this.onRoleChange(row.id, role)}> + + + + +
+ ); + } +} + +export default connect(state => ({commenters: state.community.get('commenters')}))(Table); diff --git a/client/coral-admin/src/containers/Configure.css b/client/coral-admin/src/containers/Configure.css index 98cb0e254..8d1fc49a2 100644 --- a/client/coral-admin/src/containers/Configure.css +++ b/client/coral-admin/src/containers/Configure.css @@ -23,6 +23,21 @@ cursor: pointer; } +.configSettingInfoBox { + border: 1px solid #ccc; + border-radius: 4px; + margin-bottom: 10px; + cursor: pointer; + width: auto; + height: auto; + text-align: left; +} + +.configSettingInfoBox p { + font-size: 12px; + bottom: 0; +} + .configSettingEmbed { border: 1px solid #ccc; border-radius: 4px; @@ -53,3 +68,7 @@ font-size: 14px; letter-spacing: 0.03em; } + +.hidden { + display: none; +} diff --git a/client/coral-admin/src/containers/Configure.js b/client/coral-admin/src/containers/Configure.js index 952e2acd1..7d057eacc 100644 --- a/client/coral-admin/src/containers/Configure.js +++ b/client/coral-admin/src/containers/Configure.js @@ -7,14 +7,14 @@ import { ListItem, ListItemContent, ListItemAction, - //Textfield, + Textfield, Checkbox, Button, Icon } from 'react-mdl'; import styles from './Configure.css'; -import I18n from 'coral-framework/modules/i18n/i18n'; -import translations from '../translations'; +import I18n from 'coral-framework/i18n/i18n'; +import translations from '../translations.json'; class Configure extends React.Component { constructor (props) { @@ -24,6 +24,8 @@ class Configure extends React.Component { this.copyToClipBoard = this.copyToClipBoard.bind(this); this.updateModeration = this.updateModeration.bind(this); + this.updateInfoBoxEnable = this.updateInfoBoxEnable.bind(this); + this.updateInfoBoxContent = this.updateInfoBoxContent.bind(this); this.saveSettings = this.saveSettings.bind(this); } @@ -36,6 +38,16 @@ class Configure extends React.Component { this.props.dispatch(updateSettings({moderation})); } + updateInfoBoxEnable () { + const infoBoxEnable = !this.props.settings.infoBoxEnable; + this.props.dispatch(updateSettings({infoBoxEnable})); + } + + updateInfoBoxContent (event) { + const infoBoxContent = event.target.value; + this.props.dispatch(updateSettings({infoBoxContent})); + } + saveSettings () { this.props.dispatch(saveSettingsToServer()); } @@ -48,22 +60,30 @@ class Configure extends React.Component { onClick={this.updateModeration} checked={this.props.settings.moderation === 'pre'} /> - Enable pre-moderation + {lang.t('configure.enable-pre-moderation')} - {/* - - - Include Comment Stream Description for Readers + + + + + + {lang.t('configure.include-comment-stream')} +

+ {lang.t('configure.include-comment-stream-desc')} +

+
- - - Limit Comment Length - + + + + - */} ; } @@ -84,7 +104,7 @@ class Configure extends React.Component { return -

Copy and paste code below into your CMS to embed your comment box in your articles

+

{lang.t('configure.copy-and-paste')}