diff --git a/client/coral-admin/src/AppRouter.js b/client/coral-admin/src/AppRouter.js
index 989316dd9..3bde5f931 100644
--- a/client/coral-admin/src/AppRouter.js
+++ b/client/coral-admin/src/AppRouter.js
@@ -1,25 +1,20 @@
import React from 'react';
import {Router, Route, IndexRedirect, browserHistory} from 'react-router';
-import Stories from 'containers/Stories/Stories';
-import Configure from 'containers/Configure/Configure';
-import LayoutContainer from 'containers/LayoutContainer';
-import InstallContainer from 'containers/Install/InstallContainer';
+import Configure from 'routes/Configure';
+import Dashboard from 'routes/Dashboard';
+import Install from 'routes/Install';
+import Stories from 'routes/Stories';
+import {CommunityLayout, Community} from 'routes/Community';
+import {ModerationLayout, Moderation} from 'routes/Moderation';
-import CommunityLayout from 'containers/Community/CommunityLayout';
-import CommunityContainer from 'containers/Community/CommunityContainer';
-
-import ModerationLayout from 'containers/ModerationQueue/ModerationLayout';
-import ModerationContainer from 'containers/ModerationQueue/ModerationContainer';
-
-import Dashboard from 'containers/Dashboard/Dashboard';
+import Layout from 'containers/Layout';
const routes = (
-
-
+
+
-
@@ -27,11 +22,11 @@ const routes = (
{/* Community Routes */}
-
-
+
+
-
-
+
+
@@ -39,22 +34,22 @@ const routes = (
{/* Moderation Routes */}
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
diff --git a/client/coral-admin/src/actions/moderation.js b/client/coral-admin/src/actions/moderation.js
index c5e6fc620..268ab36b8 100644
--- a/client/coral-admin/src/actions/moderation.js
+++ b/client/coral-admin/src/actions/moderation.js
@@ -5,7 +5,7 @@ export const singleView = () => ({type: actions.SINGLE_VIEW});
// Ban User Dialog
export const showBanUserDialog = (user, commentId, commentStatus, showRejectedNote) => ({type: actions.SHOW_BANUSER_DIALOG, user, commentId, commentStatus, showRejectedNote});
-export const hideBanUserDialog = (showDialog) => ({type: actions.HIDE_BANUSER_DIALOG, showDialog});
+export const hideBanUserDialog = () => ({type: actions.HIDE_BANUSER_DIALOG});
// Suspend User Dialog
export const showSuspendUserDialog = (userId, username, commentId, commentStatus) =>
diff --git a/client/coral-admin/src/components/ActionButton.js b/client/coral-admin/src/components/ActionButton.js
index 3651ee939..ca2c15799 100644
--- a/client/coral-admin/src/components/ActionButton.js
+++ b/client/coral-admin/src/components/ActionButton.js
@@ -1,7 +1,7 @@
import React, {PropTypes} from 'react';
import styles from './ModerationList.css';
import {Button} from 'coral-ui';
-import {menuActionsMap} from '../containers/ModerationQueue/helpers/moderationQueueActionsMap';
+import {menuActionsMap} from '../routes/Moderation/helpers/moderationQueueActionsMap';
const ActionButton = ({type = '', active, ...props}) => {
const typeName = type.toLowerCase();
diff --git a/client/coral-admin/src/containers/Community/Table.js b/client/coral-admin/src/containers/Community/Table.js
deleted file mode 100644
index 5ee8e7f92..000000000
--- a/client/coral-admin/src/containers/Community/Table.js
+++ /dev/null
@@ -1,81 +0,0 @@
-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/modules/i18n/i18n';
-import translations from '../../translations';
-import {setRole, setCommenterStatus} from '../../actions/community';
-
-const lang = new I18n(translations);
-
-class Table extends Component {
-
- constructor (props) {
- super(props);
- this.onRoleChange = this.onRoleChange.bind(this);
- }
-
- onRoleChange (id, role) {
- this.props.dispatch(setRole(id, role));
- }
-
- onCommenterStatusChange (id, status) {
- this.props.dispatch(setCommenterStatus(id, status));
- }
-
- render () {
- const {headers, commenters, onHeaderClickHandler} = this.props;
-
- return (
-
-
-
- {headers.map((header, i) =>(
- | onHeaderClickHandler({field: header.field})}>
- {header.title}
- |
- ))}
-
-
-
- {commenters.map((row, i)=> (
-
- |
- {row.username}
- {row.profiles.map(({id}) => id)}
- |
-
- {row.created_at}
- |
-
- this.onCommenterStatusChange(row.id, status)}>
-
-
-
- |
-
- this.onRoleChange(row.id, role)}>
-
-
-
-
-
- |
-
- ))}
-
-
- );
- }
-}
-
-export default connect((state) => ({commenters: state.community.get('accounts')}))(Table);
diff --git a/client/coral-admin/src/containers/Dashboard/Dashboard.js b/client/coral-admin/src/containers/Dashboard/Dashboard.js
deleted file mode 100644
index e764bf596..000000000
--- a/client/coral-admin/src/containers/Dashboard/Dashboard.js
+++ /dev/null
@@ -1,48 +0,0 @@
-import React from 'react';
-import styles from './Dashboard.css';
-import {compose} from 'react-apollo';
-import {connect} from 'react-redux';
-import {getMetrics} from 'coral-admin/src/graphql/queries';
-import FlagWidget from './FlagWidget';
-import ActivityWidget from './ActivityWidget';
-import CountdownTimer from 'coral-admin/src/components/CountdownTimer';
-
-import {Spinner} from 'coral-ui';
-
-class Dashboard extends React.Component {
-
- reloadData = () => {
- this.props.data.refetch();
- }
-
- render () {
-
- if (this.props.data && this.props.data.loading) {
- return ;
- }
-
- const {data: {assetsByActivity, assetsByFlag}} = this.props;
-
- return (
-
- );
- }
-}
-
-const mapStateToProps = (state) => {
- return {
- settings: state.settings.toJS(),
- moderation: state.moderation.toJS()
- };
-};
-
-export default compose(
- connect(mapStateToProps),
- getMetrics
-)(Dashboard);
diff --git a/client/coral-admin/src/containers/Install/InstallContainer.js b/client/coral-admin/src/containers/Install/InstallContainer.js
deleted file mode 100644
index 67f266123..000000000
--- a/client/coral-admin/src/containers/Install/InstallContainer.js
+++ /dev/null
@@ -1,101 +0,0 @@
-import React, {Component} from 'react';
-import {connect} from 'react-redux';
-import styles from './style.css';
-import {Wizard, WizardNav} from 'coral-ui';
-import Layout from 'coral-admin/src/components/ui/Layout';
-
-import {
- goToStep,
- nextStep,
- submitUser,
- checkInstall,
- previousStep,
- finishInstall,
- submitSettings,
- updateUserFormData,
- updateSettingsFormData,
- updatePermittedDomains
-} from '../../actions/install';
-
-import InitialStep from './components/Steps/InitialStep';
-import AddOrganizationName from './components/Steps/AddOrganizationName';
-import CreateYourAccount from './components/Steps/CreateYourAccount';
-import PermittedDomainsStep from './components/Steps/PermittedDomainsStep';
-import FinalStep from './components/Steps/FinalStep';
-
-class InstallContainer extends Component {
- componentDidMount() {
- const {checkInstall} = this.props;
- checkInstall(() => {
- this.context.router.push('/admin');
- });
- }
-
- render() {
- const {install} = this.props;
-
- return (
-
-
- {
- !install.alreadyInstalled ? (
-
-
Welcome to the Coral Project
- { install.step !== 0 ?
: null }
-
-
-
-
-
-
-
-
- ) : (
-
Talk is already installed
- )
- }
-
-
- );
- }
-}
-
-InstallContainer.contextTypes = {
- router: React.PropTypes.object
-};
-
-const mapStateToProps = (state) => ({
- install: state.install.toJS()
-});
-
-const mapDispatchToProps = (dispatch) => ({
- nextStep: () => dispatch(nextStep()),
- goToStep: (step) => dispatch(goToStep(step)),
- previousStep: () => dispatch(previousStep()),
- finishInstall: () => dispatch(finishInstall()),
- checkInstall: (next) => dispatch(checkInstall(next)),
- handleDomainsChange: (value) => {
- dispatch(updatePermittedDomains(value));
- },
- handleSettingsChange: (e) => {
- const {name, value} = e.currentTarget;
- dispatch(updateSettingsFormData(name, value));
- },
- handleUserChange: (e) => {
- const {name, value} = e.currentTarget;
- dispatch(updateUserFormData(name, value));
- },
- handleSettingsSubmit: (e) => {
- e.preventDefault();
- dispatch(submitSettings());
- },
- handleUserSubmit: (e) => {
- e.preventDefault();
- dispatch(submitUser());
- }
-});
-
-export default connect(
- mapStateToProps,
- mapDispatchToProps
-)(InstallContainer);
diff --git a/client/coral-admin/src/containers/LayoutContainer.js b/client/coral-admin/src/containers/Layout.js
similarity index 100%
rename from client/coral-admin/src/containers/LayoutContainer.js
rename to client/coral-admin/src/containers/Layout.js
diff --git a/client/coral-admin/src/containers/Streams/Stories.js b/client/coral-admin/src/containers/Streams/Stories.js
deleted file mode 100644
index 7c7a65389..000000000
--- a/client/coral-admin/src/containers/Streams/Stories.js
+++ /dev/null
@@ -1,187 +0,0 @@
-import React, {Component} from 'react';
-import styles from './Stories.css';
-import {connect} from 'react-redux';
-import I18n from 'coral-framework/modules/i18n/i18n';
-import {fetchAssets, updateAssetState} from '../../actions/assets';
-import translations from '../../translations.json';
-import {Link} from 'react-router';
-
-import {Pager, Icon} from 'coral-ui';
-import {DataTable, TableHeader, RadioGroup, Radio} from 'react-mdl';
-import EmptyCard from 'coral-admin/src/components/EmptyCard';
-
-const limit = 25;
-
-class Stories extends Component {
-
- state = {
- search: '',
- sort: 'desc',
- filter: 'all',
- statusMenus: {},
- timer: null,
- page: 0
- }
-
- componentDidMount () {
- this.props.fetchAssets(0, limit, '', this.state.sortBy);
- }
-
- onSettingChange = (setting) => (e) => {
- let options = this.state;
- this.setState({[setting]: e.target.value});
- options[setting] = e.target.value;
- this.props.fetchAssets(0, limit, options.search, options.sort, options.filter);
- }
-
- onSearchChange = (e) => {
- const search = e.target.value;
- this.setState((prevState) => {
- prevState.search = search;
- clearTimeout(prevState.timer);
- const fetchAssets = this.props.fetchAssets;
- prevState.timer = setTimeout(() => {
- fetchAssets(0, limit, search, this.state.sort, this.state.filter);
- }, 350);
- return prevState;
- });
- }
-
- renderDate = (date) => {
- const d = new Date(date);
- return `${d.getMonth() + 1}/${d.getDate()}/${d.getFullYear()}`;
- }
-
- onStatusClick = (closeStream, id, statusMenuOpen) => () => {
- if (statusMenuOpen) {
- this.setState((prev) => {
- prev.statusMenus[id] = false;
- return prev;
- });
- this.props.updateAssetState(id, closeStream ? Date.now() : null)
- .then(() => {
- const {search, sort, filter, page} = this.state;
- this.props.fetchAssets(page, limit, search, sort, filter);
- });
- } else {
- this.setState((prev) => {
- prev.statusMenus[id] = true;
- return prev;
- });
- }
- }
-
- renderTitle = (title, {id}) => {title}
-
- renderStatus = (closedAt, {id}) => {
- const closed = closedAt && new Date(closedAt).getTime() < Date.now();
- const statusMenuOpen = this.state.statusMenus[id];
- return
-
- {!statusMenuOpen && }
- {closed ? lang.t('streams.closed') : lang.t('streams.open')}
-
- {
- statusMenuOpen &&
-
- {!closed ? lang.t('streams.closed') : lang.t('streams.open')}
-
- }
-
;
- }
-
- onPageClick = (page) => {
- this.setState({page});
- const {search, sort, filter} = this.state;
- this.props.fetchAssets((page - 1) * limit, limit, search, sort, filter);
- }
-
- render () {
- const {search, sort, filter} = this.state;
- const {assets} = this.props;
-
- const assetsIds = assets.ids.map((id) => assets.byId[id]);
-
- return (
-
-
-
-
-
-
-
{lang.t('streams.filter-streams')}
-
{lang.t('streams.stream-status')}
-
- {lang.t('streams.all')}
- {lang.t('streams.open')}
- {lang.t('streams.closed')}
-
-
{lang.t('streams.sort-by')}
-
- {lang.t('streams.newest')}
- {lang.t('streams.oldest')}
-
-
- {
- assetsIds.length
- ?
-
- {lang.t('streams.article')}
-
- {lang.t('streams.pubdate')}
-
-
- {lang.t('streams.status')}
-
-
-
-
- :
{lang.t('streams.empty_result')}
- }
-
- );
- }
-}
-
-const mapStateToProps = ({assets}) => {
- return {
- assets: assets.toJS()
- };
-};
-
-const mapDispatchToProps = (dispatch) => {
- return {
- fetchAssets: (...args) => {
- dispatch(fetchAssets.apply(this, args));
- },
- updateAssetState: (...args) => dispatch(updateAssetState.apply(this, args))
- };
-};
-
-export default connect(mapStateToProps, mapDispatchToProps)(Stories);
-
-const lang = new I18n(translations);
diff --git a/client/coral-admin/src/containers/Community/components/ActionButton.js b/client/coral-admin/src/routes/Community/components/ActionButton.js
similarity index 82%
rename from client/coral-admin/src/containers/Community/components/ActionButton.js
rename to client/coral-admin/src/routes/Community/components/ActionButton.js
index ad5346ac5..767c9fbd1 100644
--- a/client/coral-admin/src/containers/Community/components/ActionButton.js
+++ b/client/coral-admin/src/routes/Community/components/ActionButton.js
@@ -1,8 +1,8 @@
import React from 'react';
-import styles from '../Community.css';
+import styles from './Community.css';
import BanUserButton from './BanUserButton';
import {Button} from 'coral-ui';
-import {menuActionsMap} from '../../../containers/ModerationQueue/helpers/moderationQueueActionsMap';
+import {menuActionsMap} from '../../Moderation/helpers/moderationQueueActionsMap';
const ActionButton = ({type = '', user, ...props}) => {
if (type === 'BAN') {
diff --git a/client/coral-admin/src/containers/Community/components/BanUserButton.css b/client/coral-admin/src/routes/Community/components/BanUserButton.css
similarity index 100%
rename from client/coral-admin/src/containers/Community/components/BanUserButton.css
rename to client/coral-admin/src/routes/Community/components/BanUserButton.css
diff --git a/client/coral-admin/src/containers/Community/components/BanUserButton.js b/client/coral-admin/src/routes/Community/components/BanUserButton.js
similarity index 100%
rename from client/coral-admin/src/containers/Community/components/BanUserButton.js
rename to client/coral-admin/src/routes/Community/components/BanUserButton.js
diff --git a/client/coral-admin/src/containers/Community/components/BanUserDialog.css b/client/coral-admin/src/routes/Community/components/BanUserDialog.css
similarity index 100%
rename from client/coral-admin/src/containers/Community/components/BanUserDialog.css
rename to client/coral-admin/src/routes/Community/components/BanUserDialog.css
diff --git a/client/coral-admin/src/containers/Community/components/BanUserDialog.js b/client/coral-admin/src/routes/Community/components/BanUserDialog.js
similarity index 100%
rename from client/coral-admin/src/containers/Community/components/BanUserDialog.js
rename to client/coral-admin/src/routes/Community/components/BanUserDialog.js
diff --git a/client/coral-admin/src/containers/Community/Community.css b/client/coral-admin/src/routes/Community/components/Community.css
similarity index 100%
rename from client/coral-admin/src/containers/Community/Community.css
rename to client/coral-admin/src/routes/Community/components/Community.css
diff --git a/client/coral-admin/src/containers/Community/CommunityContainer.js b/client/coral-admin/src/routes/Community/components/Community.js
similarity index 57%
rename from client/coral-admin/src/containers/Community/CommunityContainer.js
rename to client/coral-admin/src/routes/Community/components/Community.js
index 7c0051477..8e25a8e41 100644
--- a/client/coral-admin/src/containers/Community/CommunityContainer.js
+++ b/client/coral-admin/src/routes/Community/components/Community.js
@@ -1,55 +1,26 @@
import React, {Component} from 'react';
-import {connect} from 'react-redux';
-import {compose} from 'react-apollo';
-
-import {modUserFlaggedQuery} from 'coral-admin/src/graphql/queries';
-import {banUser, setUserStatus, rejectUsername} from 'coral-admin/src/graphql/mutations';
-
-import {
- fetchAccounts,
- updateSorting,
- newPage,
- showBanUserDialog,
- hideBanUserDialog,
- showSuspendUserDialog,
- hideSuspendUserDialog
-} from '../../actions/community';
-
-import CommunityMenu from './components/CommunityMenu';
-import BanUserDialog from './components/BanUserDialog';
-import SuspendUserDialog from './components/SuspendUserDialog';
+import CommunityMenu from './CommunityMenu';
+import BanUserDialog from './BanUserDialog';
+import SuspendUserDialog from './SuspendUserDialog';
import People from './People';
import FlaggedAccounts from './FlaggedAccounts';
-class CommunityContainer extends Component {
+export default class Community extends Component {
- constructor(props) {
- super(props);
+ state = {
+ searchValue: '',
+ timer: null
+ };
- this.state = {
- searchValue: '',
- timer: null
- };
-
- this.onKeyDownHandler = this.onKeyDownHandler.bind(this);
- this.onSearchChange = this.onSearchChange.bind(this);
- this.onHeaderClickHandler = this.onHeaderClickHandler.bind(this);
- this.onNewPageHandler = this.onNewPageHandler.bind(this);
- }
-
- componentWillMount() {
- this.props.fetchAccounts({});
- }
-
- onKeyDownHandler(e) {
+ onKeyDownHandler = (e) => {
if (e.key === 'Enter') {
e.preventDefault();
this.search();
}
}
- onSearchChange(e) {
+ onSearchChange = (e) => {
const value = e.target.value;
this.setState((prevState) => {
prevState.searchValue = value;
@@ -62,6 +33,16 @@ class CommunityContainer extends Component {
});
}
+ onHeaderClickHandler = (sort) => {
+ this.props.updateSorting(sort);
+ this.search();
+ }
+
+ onNewPageHandler = (page) => {
+ this.props.newPage(page);
+ this.search({page});
+ }
+
search(query = {}) {
const {community} = this.props;
@@ -71,17 +52,6 @@ class CommunityContainer extends Component {
asc: community.ascPeople,
...query
});
-
- }
-
- onHeaderClickHandler(sort) {
- this.props.dispatch(updateSorting(sort));
- this.search();
- }
-
- onNewPageHandler(page) {
- this.props.dispatch(newPage(page));
- this.search({page});
}
getTabContent(searchValue, props) {
@@ -134,7 +104,6 @@ class CommunityContainer extends Component {
render() {
const {searchValue} = this.state;
-
const tab = this.getTabContent(searchValue, this.props);
return (
@@ -148,22 +117,3 @@ class CommunityContainer extends Component {
}
}
-const mapStateToProps = (state) => ({
- community: state.community.toJS()
-});
-
-const mapDispatchToProps = (dispatch) => ({
- fetchAccounts: (query) => dispatch(fetchAccounts(query)),
- showBanUserDialog: (user) => dispatch(showBanUserDialog(user)),
- hideBanUserDialog: () => dispatch(hideBanUserDialog(false)),
- showSuspendUserDialog: (user) => dispatch(showSuspendUserDialog(user)),
- hideSuspendUserDialog: () => dispatch(hideSuspendUserDialog())
-});
-
-export default compose(
- connect(mapStateToProps, mapDispatchToProps),
- modUserFlaggedQuery,
- banUser,
- setUserStatus,
- rejectUsername
-)(CommunityContainer);
diff --git a/client/coral-admin/src/containers/Community/CommunityLayout.js b/client/coral-admin/src/routes/Community/components/CommunityLayout.js
similarity index 100%
rename from client/coral-admin/src/containers/Community/CommunityLayout.js
rename to client/coral-admin/src/routes/Community/components/CommunityLayout.js
diff --git a/client/coral-admin/src/containers/Community/components/CommunityMenu.js b/client/coral-admin/src/routes/Community/components/CommunityMenu.js
similarity index 100%
rename from client/coral-admin/src/containers/Community/components/CommunityMenu.js
rename to client/coral-admin/src/routes/Community/components/CommunityMenu.js
diff --git a/client/coral-admin/src/containers/Community/FlaggedAccounts.js b/client/coral-admin/src/routes/Community/components/FlaggedAccounts.js
similarity index 97%
rename from client/coral-admin/src/containers/Community/FlaggedAccounts.js
rename to client/coral-admin/src/routes/Community/components/FlaggedAccounts.js
index 692cef70d..d55019caf 100644
--- a/client/coral-admin/src/containers/Community/FlaggedAccounts.js
+++ b/client/coral-admin/src/routes/Community/components/FlaggedAccounts.js
@@ -8,7 +8,7 @@ import styles from './Community.css';
import Loading from './Loading';
import EmptyCard from 'coral-admin/src/components/EmptyCard';
-import User from './components/User';
+import User from './User';
const FlaggedAccounts = ({...props}) => {
const {commenters, isFetching} = props;
diff --git a/client/coral-admin/src/containers/Community/Loading.js b/client/coral-admin/src/routes/Community/components/Loading.js
similarity index 100%
rename from client/coral-admin/src/containers/Community/Loading.js
rename to client/coral-admin/src/routes/Community/components/Loading.js
diff --git a/client/coral-admin/src/containers/Community/People.js b/client/coral-admin/src/routes/Community/components/People.js
similarity index 94%
rename from client/coral-admin/src/containers/Community/People.js
rename to client/coral-admin/src/routes/Community/components/People.js
index e375bac38..0e0c2b5c4 100644
--- a/client/coral-admin/src/containers/Community/People.js
+++ b/client/coral-admin/src/routes/Community/components/People.js
@@ -3,9 +3,9 @@ import I18n from 'coral-framework/modules/i18n/i18n';
import translations from 'coral-admin/src/translations.json';
import styles from './Community.css';
-import Table from './Table';
+import Table from '../containers/Table';
import {Pager, Icon} from 'coral-ui';
-import EmptyCard from '../../components/EmptyCard';
+import EmptyCard from '../../../components/EmptyCard';
const lang = new I18n(translations);
diff --git a/client/coral-admin/src/containers/Community/components/SuspendUserDialog.css b/client/coral-admin/src/routes/Community/components/SuspendUserDialog.css
similarity index 100%
rename from client/coral-admin/src/containers/Community/components/SuspendUserDialog.css
rename to client/coral-admin/src/routes/Community/components/SuspendUserDialog.css
diff --git a/client/coral-admin/src/containers/Community/components/SuspendUserDialog.js b/client/coral-admin/src/routes/Community/components/SuspendUserDialog.js
similarity index 100%
rename from client/coral-admin/src/containers/Community/components/SuspendUserDialog.js
rename to client/coral-admin/src/routes/Community/components/SuspendUserDialog.js
diff --git a/client/coral-admin/src/routes/Community/components/Table.js b/client/coral-admin/src/routes/Community/components/Table.js
new file mode 100644
index 000000000..d23c2a863
--- /dev/null
+++ b/client/coral-admin/src/routes/Community/components/Table.js
@@ -0,0 +1,57 @@
+import React from 'react';
+import {SelectField, Option} from 'react-mdl-selectfield';
+import styles from '../components/Community.css';
+import I18n from 'coral-framework/modules/i18n/i18n';
+import translations from '../../../translations';
+
+const lang = new I18n(translations);
+
+export default ({headers, commenters, onHeaderClickHandler, onRoleChange, onCommenterStatusChange}) => (
+
+
+
+ {headers.map((header, i) =>(
+ | onHeaderClickHandler({field: header.field})}>
+ {header.title}
+ |
+ ))}
+
+
+
+ {commenters.map((row, i)=> (
+
+ |
+ {row.username}
+ {row.profiles.map(({id}) => id)}
+ |
+
+ {row.created_at}
+ |
+
+ onCommenterStatusChange(row.id, status)}>
+
+
+
+ |
+
+ onRoleChange(row.id, role)}>
+
+
+
+
+
+ |
+
+ ))}
+
+
+);
diff --git a/client/coral-admin/src/containers/Community/components/User.js b/client/coral-admin/src/routes/Community/components/User.js
similarity index 98%
rename from client/coral-admin/src/containers/Community/components/User.js
rename to client/coral-admin/src/routes/Community/components/User.js
index af4b72c0b..da38c107c 100644
--- a/client/coral-admin/src/containers/Community/components/User.js
+++ b/client/coral-admin/src/routes/Community/components/User.js
@@ -1,5 +1,5 @@
import React from 'react';
-import styles from '../Community.css';
+import styles from './Community.css';
import ActionButton from './ActionButton';
diff --git a/client/coral-admin/src/containers/Community/components/styles.css b/client/coral-admin/src/routes/Community/components/styles.css
similarity index 100%
rename from client/coral-admin/src/containers/Community/components/styles.css
rename to client/coral-admin/src/routes/Community/components/styles.css
diff --git a/client/coral-admin/src/routes/Community/containers/Community.js b/client/coral-admin/src/routes/Community/containers/Community.js
new file mode 100644
index 000000000..9167e2cd1
--- /dev/null
+++ b/client/coral-admin/src/routes/Community/containers/Community.js
@@ -0,0 +1,55 @@
+import React, {Component} from 'react';
+import {connect} from 'react-redux';
+import {bindActionCreators} from 'redux';
+import {compose} from 'react-apollo';
+
+import {modUserFlaggedQuery} from 'coral-admin/src/graphql/queries';
+import {banUser, setUserStatus, rejectUsername} from 'coral-admin/src/graphql/mutations';
+
+import {
+ fetchAccounts,
+ updateSorting,
+ newPage,
+ showBanUserDialog,
+ hideBanUserDialog,
+ showSuspendUserDialog,
+ hideSuspendUserDialog
+} from '../../../actions/community';
+
+import Community from '../components/Community';
+
+class CommunityContainer extends Component {
+
+ componentWillMount() {
+ this.props.fetchAccounts({});
+ }
+
+ render() {
+ return (
+
+ );
+ }
+}
+
+const mapStateToProps = (state) => ({
+ community: state.community.toJS()
+});
+
+const mapDispatchToProps = (dispatch) =>
+ bindActionCreators({
+ fetchAccounts,
+ showBanUserDialog,
+ hideBanUserDialog,
+ showSuspendUserDialog,
+ hideSuspendUserDialog,
+ updateSorting,
+ newPage,
+ }, dispatch);
+
+export default compose(
+ connect(mapStateToProps, mapDispatchToProps),
+ modUserFlaggedQuery,
+ banUser,
+ setUserStatus,
+ rejectUsername
+)(CommunityContainer);
diff --git a/client/coral-admin/src/routes/Community/containers/Table.js b/client/coral-admin/src/routes/Community/containers/Table.js
new file mode 100644
index 000000000..499e0718a
--- /dev/null
+++ b/client/coral-admin/src/routes/Community/containers/Table.js
@@ -0,0 +1,37 @@
+import React, {Component} from 'react';
+import {connect} from 'react-redux';
+import {bindActionCreators} from 'redux';
+import {compose} from 'react-apollo';
+import {setRole, setCommenterStatus} from '../../../actions/community';
+import Table from '../components/Table';
+
+class TableContainer extends Component {
+
+ constructor (props) {
+ super(props);
+ }
+
+ render () {
+ return ;
+ }
+}
+
+const mapStateToProps = (state) => ({
+ commenters: state.community.get('accounts'),
+});
+
+const mapDispatchToProps = (dispatch) =>
+ bindActionCreators({
+ setCommenterStatus,
+ setRole,
+ }, dispatch);
+
+export default compose(
+ connect(mapStateToProps, mapDispatchToProps),
+)(TableContainer);
+
diff --git a/client/coral-admin/src/routes/Community/index.js b/client/coral-admin/src/routes/Community/index.js
new file mode 100644
index 000000000..528fe63cd
--- /dev/null
+++ b/client/coral-admin/src/routes/Community/index.js
@@ -0,0 +1,2 @@
+export {default as Community} from './containers/Community';
+export {default as CommunityLayout} from './components/CommunityLayout';
diff --git a/client/coral-admin/src/containers/Configure/Configure.css b/client/coral-admin/src/routes/Configure/components/Configure.css
similarity index 100%
rename from client/coral-admin/src/containers/Configure/Configure.css
rename to client/coral-admin/src/routes/Configure/components/Configure.css
diff --git a/client/coral-admin/src/containers/Configure/Configure.js b/client/coral-admin/src/routes/Configure/components/Configure.js
similarity index 83%
rename from client/coral-admin/src/containers/Configure/Configure.js
rename to client/coral-admin/src/routes/Configure/components/Configure.js
index d22a19997..17063d16d 100644
--- a/client/coral-admin/src/containers/Configure/Configure.js
+++ b/client/coral-admin/src/routes/Configure/components/Configure.js
@@ -1,12 +1,4 @@
import React, {Component} from 'react';
-import {connect} from 'react-redux';
-import {
- fetchSettings,
- updateSettings,
- saveSettingsToServer,
- updateWordlist,
- updateDomainlist
-} from '../../actions/settings';
import {Button, List, Item, Card, Spinner} from 'coral-ui';
import styles from './Configure.css';
@@ -17,45 +9,38 @@ import ModerationSettings from './ModerationSettings';
import TechSettings from './TechSettings';
import {can} from 'coral-framework/services/perms';
-class Configure extends Component {
- constructor (props) {
- super(props);
+const lang = new I18n(translations);
- this.state = {
- activeSection: 'stream',
- changed: false,
- errors: {}
- };
+export default class Configure extends Component {
- this.changeSection = this.changeSection.bind(this);
- }
-
- componentWillMount = () => {
- this.props.dispatch(fetchSettings());
- }
+ state = {
+ activeSection: 'stream',
+ changed: false,
+ errors: {}
+ };
saveSettings = () => {
- this.props.dispatch(saveSettingsToServer());
+ this.props.saveSettingsToServer();
this.setState({changed: false});
}
- changeSection(activeSection) {
+ changeSection = (activeSection) => {
this.setState({activeSection});
}
onChangeWordlist = (listName, list) => {
this.setState({changed: true});
- this.props.dispatch(updateWordlist(listName, list));
+ this.props.updateWordlist(listName, list);
}
onChangeDomainlist = (listName, list) => {
this.setState({changed: true});
- this.props.dispatch(updateDomainlist(listName, list));
+ this.props.updateDomainlist(listName, list);
}
onSettingUpdate = (setting) => {
this.setState({changed: true});
- this.props.dispatch(updateSettings(setting));
+ this.props.updateSettings(setting);
}
// Sets an arbitrary error string and a boolean state.
@@ -176,11 +161,3 @@ class Configure extends Component {
);
}
}
-
-const mapStateToProps = (state) => ({
- auth: state.auth.toJS(),
- settings: state.settings.toJS()
-});
-export default connect(mapStateToProps)(Configure);
-
-const lang = new I18n(translations);
diff --git a/client/coral-admin/src/containers/Configure/Domainlist.js b/client/coral-admin/src/routes/Configure/components/Domainlist.js
similarity index 94%
rename from client/coral-admin/src/containers/Configure/Domainlist.js
rename to client/coral-admin/src/routes/Configure/components/Domainlist.js
index 0ccc4158f..4cc6e78a0 100644
--- a/client/coral-admin/src/containers/Configure/Domainlist.js
+++ b/client/coral-admin/src/routes/Configure/components/Domainlist.js
@@ -4,7 +4,7 @@ import styles from './Configure.css';
import TagsInput from 'react-tagsinput';
import I18n from 'coral-framework/modules/i18n/i18n';
-import translations from '../../translations.json';
+import translations from '../../../translations.json';
const lang = new I18n(translations);
const Domainlist = ({domains, onChangeDomainlist}) => {
diff --git a/client/coral-admin/src/containers/Configure/EmbedLink.js b/client/coral-admin/src/routes/Configure/components/EmbedLink.js
similarity index 97%
rename from client/coral-admin/src/containers/Configure/EmbedLink.js
rename to client/coral-admin/src/routes/Configure/components/EmbedLink.js
index d61c64c11..4ad3d2ff8 100644
--- a/client/coral-admin/src/containers/Configure/EmbedLink.js
+++ b/client/coral-admin/src/routes/Configure/components/EmbedLink.js
@@ -1,9 +1,11 @@
import React, {Component} from 'react';
import I18n from 'coral-framework/modules/i18n/i18n';
-import translations from '../../translations.json';
+import translations from '../../../translations.json';
import styles from './Configure.css';
import {Button, Card} from 'coral-ui';
+const lang = new I18n(translations);
+
class EmbedLink extends Component {
constructor (props) {
@@ -64,5 +66,3 @@ class EmbedLink extends Component {
}
export default EmbedLink;
-
-const lang = new I18n(translations);
diff --git a/client/coral-admin/src/containers/Configure/ModerationSettings.js b/client/coral-admin/src/routes/Configure/components/ModerationSettings.js
similarity index 98%
rename from client/coral-admin/src/containers/Configure/ModerationSettings.js
rename to client/coral-admin/src/routes/Configure/components/ModerationSettings.js
index c7df573e8..d0c36f99d 100644
--- a/client/coral-admin/src/containers/Configure/ModerationSettings.js
+++ b/client/coral-admin/src/routes/Configure/components/ModerationSettings.js
@@ -4,7 +4,7 @@ import {Card} from 'coral-ui';
import {Checkbox} from 'react-mdl';
import Wordlist from './Wordlist';
import I18n from 'coral-framework/modules/i18n/i18n';
-import translations from '../../translations.json';
+import translations from '../../../translations.json';
const lang = new I18n(translations);
const updateModeration = (updateSettings, mod) => () => {
@@ -98,7 +98,7 @@ const ModerationSettings = ({settings, updateSettings, onChangeWordlist}) => {
{lang.t('configure.edit-comment-timeframe-text-post')}
-
+
);
};
diff --git a/client/coral-admin/src/containers/Configure/StreamSettings.js b/client/coral-admin/src/routes/Configure/components/StreamSettings.js
similarity index 99%
rename from client/coral-admin/src/containers/Configure/StreamSettings.js
rename to client/coral-admin/src/routes/Configure/components/StreamSettings.js
index 341c47ae9..3b674762e 100644
--- a/client/coral-admin/src/containers/Configure/StreamSettings.js
+++ b/client/coral-admin/src/routes/Configure/components/StreamSettings.js
@@ -1,7 +1,7 @@
import React from 'react';
import {SelectField, Option} from 'react-mdl-selectfield';
import I18n from 'coral-framework/modules/i18n/i18n';
-import translations from '../../translations.json';
+import translations from '../../../translations.json';
import styles from './Configure.css';
import {Checkbox, Textfield} from 'react-mdl';
import {Card, Icon, TextArea} from 'coral-ui';
diff --git a/client/coral-admin/src/containers/Configure/TechSettings.js b/client/coral-admin/src/routes/Configure/components/TechSettings.js
similarity index 96%
rename from client/coral-admin/src/containers/Configure/TechSettings.js
rename to client/coral-admin/src/routes/Configure/components/TechSettings.js
index 6fbc302a0..e9d0c22d2 100644
--- a/client/coral-admin/src/containers/Configure/TechSettings.js
+++ b/client/coral-admin/src/routes/Configure/components/TechSettings.js
@@ -4,7 +4,7 @@ import Domainlist from './Domainlist';
import EmbedLink from './EmbedLink';
import styles from './Configure.css';
import I18n from 'coral-framework/modules/i18n/i18n';
-import translations from '../../translations.json';
+import translations from '../../../translations.json';
const lang = new I18n(translations);
const updateCustomCssUrl = (updateSettings) => (event) => {
diff --git a/client/coral-admin/src/containers/Configure/Wordlist.js b/client/coral-admin/src/routes/Configure/components/Wordlist.js
similarity index 96%
rename from client/coral-admin/src/containers/Configure/Wordlist.js
rename to client/coral-admin/src/routes/Configure/components/Wordlist.js
index 983047acf..e01ebdc1f 100644
--- a/client/coral-admin/src/containers/Configure/Wordlist.js
+++ b/client/coral-admin/src/routes/Configure/components/Wordlist.js
@@ -1,6 +1,6 @@
import React from 'react';
import I18n from 'coral-framework/modules/i18n/i18n';
-import translations from '../../translations.json';
+import translations from '../../../translations.json';
import TagsInput from 'react-tagsinput';
import styles from './Configure.css';
import {Card} from 'coral-ui';
diff --git a/client/coral-admin/src/routes/Configure/containers/Configure.js b/client/coral-admin/src/routes/Configure/containers/Configure.js
new file mode 100644
index 000000000..c68b39e0c
--- /dev/null
+++ b/client/coral-admin/src/routes/Configure/containers/Configure.js
@@ -0,0 +1,42 @@
+import React, {Component} from 'react';
+import {connect} from 'react-redux';
+import {bindActionCreators} from 'redux';
+import {compose} from 'react-apollo';
+import {
+ fetchSettings,
+ updateSettings,
+ saveSettingsToServer,
+ updateWordlist,
+ updateDomainlist
+} from '../../../actions/settings';
+
+import Configure from '../components/Configure';
+
+class ConfigureContainer extends Component {
+ componentWillMount = () => {
+ this.props.fetchSettings();
+ }
+
+ render () {
+ return ;
+ }
+}
+
+const mapStateToProps = (state) => ({
+ auth: state.auth.toJS(),
+ settings: state.settings.toJS()
+});
+
+const mapDispatchToProps = (dispatch) =>
+ bindActionCreators({
+ fetchSettings,
+ updateSettings,
+ saveSettingsToServer,
+ updateWordlist,
+ updateDomainlist
+ }, dispatch);
+
+export default compose(
+ connect(mapStateToProps, mapDispatchToProps),
+)(ConfigureContainer);
+
diff --git a/client/coral-admin/src/routes/Configure/index.js b/client/coral-admin/src/routes/Configure/index.js
new file mode 100644
index 000000000..d548be931
--- /dev/null
+++ b/client/coral-admin/src/routes/Configure/index.js
@@ -0,0 +1 @@
+export {default} from './containers/Configure';
diff --git a/client/coral-admin/src/containers/Dashboard/ActivityWidget.js b/client/coral-admin/src/routes/Dashboard/components/ActivityWidget.js
similarity index 100%
rename from client/coral-admin/src/containers/Dashboard/ActivityWidget.js
rename to client/coral-admin/src/routes/Dashboard/components/ActivityWidget.js
diff --git a/client/coral-admin/src/components/CountdownTimer.js b/client/coral-admin/src/routes/Dashboard/components/CountdownTimer.js
similarity index 96%
rename from client/coral-admin/src/components/CountdownTimer.js
rename to client/coral-admin/src/routes/Dashboard/components/CountdownTimer.js
index aba4d0b5a..f1008672c 100644
--- a/client/coral-admin/src/components/CountdownTimer.js
+++ b/client/coral-admin/src/routes/Dashboard/components/CountdownTimer.js
@@ -1,7 +1,7 @@
import React, {PropTypes} from 'react';
import I18n from 'coral-framework/modules/i18n/i18n';
import translations from 'coral-admin/src/translations';
-import styles from 'coral-admin/src/containers/Dashboard/Dashboard.css';
+import styles from './Dashboard.css';
import {Icon} from 'coral-ui';
const lang = new I18n(translations);
diff --git a/client/coral-admin/src/containers/Dashboard/Dashboard.css b/client/coral-admin/src/routes/Dashboard/components/Dashboard.css
similarity index 100%
rename from client/coral-admin/src/containers/Dashboard/Dashboard.css
rename to client/coral-admin/src/routes/Dashboard/components/Dashboard.css
diff --git a/client/coral-admin/src/routes/Dashboard/components/Dashboard.js b/client/coral-admin/src/routes/Dashboard/components/Dashboard.js
new file mode 100644
index 000000000..06c9fd0b9
--- /dev/null
+++ b/client/coral-admin/src/routes/Dashboard/components/Dashboard.js
@@ -0,0 +1,15 @@
+import React from 'react';
+import FlagWidget from './FlagWidget';
+import ActivityWidget from './ActivityWidget';
+import CountdownTimer from './CountdownTimer';
+import styles from './Dashboard.css';
+
+export default ({data: {assetsByActivity, assetsByFlag}, reloadData}) => (
+
+);
diff --git a/client/coral-admin/src/containers/Dashboard/FlagWidget.js b/client/coral-admin/src/routes/Dashboard/components/FlagWidget.js
similarity index 100%
rename from client/coral-admin/src/containers/Dashboard/FlagWidget.js
rename to client/coral-admin/src/routes/Dashboard/components/FlagWidget.js
diff --git a/client/coral-admin/src/containers/Dashboard/LikeWidget.js b/client/coral-admin/src/routes/Dashboard/components/LikeWidget.js
similarity index 100%
rename from client/coral-admin/src/containers/Dashboard/LikeWidget.js
rename to client/coral-admin/src/routes/Dashboard/components/LikeWidget.js
diff --git a/client/coral-admin/src/containers/Dashboard/MostLikedCommentsWidget.js b/client/coral-admin/src/routes/Dashboard/components/MostLikedCommentsWidget.js
similarity index 100%
rename from client/coral-admin/src/containers/Dashboard/MostLikedCommentsWidget.js
rename to client/coral-admin/src/routes/Dashboard/components/MostLikedCommentsWidget.js
diff --git a/client/coral-admin/src/containers/Dashboard/Widget.css b/client/coral-admin/src/routes/Dashboard/components/Widget.css
similarity index 100%
rename from client/coral-admin/src/containers/Dashboard/Widget.css
rename to client/coral-admin/src/routes/Dashboard/components/Widget.css
diff --git a/client/coral-admin/src/routes/Dashboard/containers/Dashboard.js b/client/coral-admin/src/routes/Dashboard/containers/Dashboard.js
new file mode 100644
index 000000000..79f0b964f
--- /dev/null
+++ b/client/coral-admin/src/routes/Dashboard/containers/Dashboard.js
@@ -0,0 +1,33 @@
+import React from 'react';
+import {compose} from 'react-apollo';
+import {connect} from 'react-redux';
+import {getMetrics} from 'coral-admin/src/graphql/queries';
+import Dashboard from '../components/Dashboard';
+
+import {Spinner} from 'coral-ui';
+
+class DashboardContainer extends React.Component {
+
+ reloadData = () => {
+ this.props.data.refetch();
+ }
+
+ render () {
+ if (this.props.data && this.props.data.loading) {
+ return ;
+ }
+ return ;
+ }
+}
+
+const mapStateToProps = (state) => {
+ return {
+ settings: state.settings.toJS(),
+ moderation: state.moderation.toJS()
+ };
+};
+
+export default compose(
+ connect(mapStateToProps),
+ getMetrics
+)(DashboardContainer);
diff --git a/client/coral-admin/src/routes/Dashboard/index.js b/client/coral-admin/src/routes/Dashboard/index.js
new file mode 100644
index 000000000..5bbb476e2
--- /dev/null
+++ b/client/coral-admin/src/routes/Dashboard/index.js
@@ -0,0 +1 @@
+export {default} from './containers/Dashboard.js';
diff --git a/client/coral-admin/src/routes/Install/components/Install.js b/client/coral-admin/src/routes/Install/components/Install.js
new file mode 100644
index 000000000..4885ffed7
--- /dev/null
+++ b/client/coral-admin/src/routes/Install/components/Install.js
@@ -0,0 +1,79 @@
+import React, {Component} from 'react';
+import styles from './style.css';
+import {Wizard, WizardNav} from 'coral-ui';
+import Layout from 'coral-admin/src/components/ui/Layout';
+
+import InitialStep from './Steps/InitialStep';
+import AddOrganizationName from './Steps/AddOrganizationName';
+import CreateYourAccount from './Steps/CreateYourAccount';
+import PermittedDomainsStep from './Steps/PermittedDomainsStep';
+import FinalStep from './Steps/FinalStep';
+
+export default class Install extends Component {
+ handleDomainsChange = (value) => {
+ this.props.updatePermittedDomains(value);
+ };
+
+ handleSettingsChange = ({currentTarget: {name, value}}) => {
+ this.props.updateSettingsFormData(name, value);
+ };
+
+ handleUserChange = ({currentTarget: {name, value}}) => {
+ this.props.updateUserFormData(name, value);
+ };
+
+ handleSettingsSubmit = (e) => {
+ e.preventDefault();
+ this.props.submitSettings();
+ };
+
+ handleUserSubmit = (e) => {
+ e.preventDefault();
+ this.props.submitUser();
+ }
+
+ render() {
+ const {install} = this.props;
+
+ return (
+
+
+ {
+ !install.alreadyInstalled ? (
+
+
Welcome to the Coral Project
+ { install.step !== 0 ?
: null }
+
+
+
+
+
+
+
+
+ ) : (
+
Talk is already installed
+ )
+ }
+
+
+ );
+ }
+}
diff --git a/client/coral-admin/src/containers/Install/components/Steps/AddOrganizationName.js b/client/coral-admin/src/routes/Install/components/Steps/AddOrganizationName.js
similarity index 95%
rename from client/coral-admin/src/containers/Install/components/Steps/AddOrganizationName.js
rename to client/coral-admin/src/routes/Install/components/Steps/AddOrganizationName.js
index b25ddf143..ca4694efb 100644
--- a/client/coral-admin/src/containers/Install/components/Steps/AddOrganizationName.js
+++ b/client/coral-admin/src/routes/Install/components/Steps/AddOrganizationName.js
@@ -3,7 +3,7 @@ import styles from './style.css';
import {TextField, Button} from 'coral-ui';
const lang = new I18n(translations);
-import translations from '../../translations.json';
+import translations from '../translations.json';
import I18n from 'coral-framework/modules/i18n/i18n';
const AddOrganizationName = (props) => {
diff --git a/client/coral-admin/src/containers/Install/components/Steps/CreateYourAccount.js b/client/coral-admin/src/routes/Install/components/Steps/CreateYourAccount.js
similarity index 97%
rename from client/coral-admin/src/containers/Install/components/Steps/CreateYourAccount.js
rename to client/coral-admin/src/routes/Install/components/Steps/CreateYourAccount.js
index e46f013a8..b4ccd7d2b 100644
--- a/client/coral-admin/src/containers/Install/components/Steps/CreateYourAccount.js
+++ b/client/coral-admin/src/routes/Install/components/Steps/CreateYourAccount.js
@@ -3,7 +3,7 @@ import styles from './style.css';
import {TextField, Button, Spinner} from 'coral-ui';
const lang = new I18n(translations);
-import translations from '../../translations.json';
+import translations from '../translations.json';
import I18n from 'coral-framework/modules/i18n/i18n';
const InitialStep = (props) => {
diff --git a/client/coral-admin/src/containers/Install/components/Steps/FinalStep.js b/client/coral-admin/src/routes/Install/components/Steps/FinalStep.js
similarity index 92%
rename from client/coral-admin/src/containers/Install/components/Steps/FinalStep.js
rename to client/coral-admin/src/routes/Install/components/Steps/FinalStep.js
index 0ad918487..dd12de76e 100644
--- a/client/coral-admin/src/containers/Install/components/Steps/FinalStep.js
+++ b/client/coral-admin/src/routes/Install/components/Steps/FinalStep.js
@@ -4,7 +4,7 @@ import {Button} from 'coral-ui';
import {Link} from 'react-router';
const lang = new I18n(translations);
-import translations from '../../translations.json';
+import translations from '../translations.json';
import I18n from 'coral-framework/modules/i18n/i18n';
const InitialStep = () => {
diff --git a/client/coral-admin/src/containers/Install/components/Steps/InitialStep.js b/client/coral-admin/src/routes/Install/components/Steps/InitialStep.js
similarity index 90%
rename from client/coral-admin/src/containers/Install/components/Steps/InitialStep.js
rename to client/coral-admin/src/routes/Install/components/Steps/InitialStep.js
index 18b49ce64..8e19e1732 100644
--- a/client/coral-admin/src/containers/Install/components/Steps/InitialStep.js
+++ b/client/coral-admin/src/routes/Install/components/Steps/InitialStep.js
@@ -3,7 +3,7 @@ import styles from './style.css';
import {Button} from 'coral-ui';
const lang = new I18n(translations);
-import translations from '../../translations.json';
+import translations from '../translations.json';
import I18n from 'coral-framework/modules/i18n/i18n';
const InitialStep = (props) => {
diff --git a/client/coral-admin/src/containers/Install/components/Steps/InviteTeamMembers.js b/client/coral-admin/src/routes/Install/components/Steps/InviteTeamMembers.js
similarity index 100%
rename from client/coral-admin/src/containers/Install/components/Steps/InviteTeamMembers.js
rename to client/coral-admin/src/routes/Install/components/Steps/InviteTeamMembers.js
diff --git a/client/coral-admin/src/containers/Install/components/Steps/PermittedDomainsStep.js b/client/coral-admin/src/routes/Install/components/Steps/PermittedDomainsStep.js
similarity index 95%
rename from client/coral-admin/src/containers/Install/components/Steps/PermittedDomainsStep.js
rename to client/coral-admin/src/routes/Install/components/Steps/PermittedDomainsStep.js
index 9058db4c2..812f4bc3f 100644
--- a/client/coral-admin/src/containers/Install/components/Steps/PermittedDomainsStep.js
+++ b/client/coral-admin/src/routes/Install/components/Steps/PermittedDomainsStep.js
@@ -4,7 +4,7 @@ import {Button, Card} from 'coral-ui';
import TagsInput from 'react-tagsinput';
const lang = new I18n(translations);
-import translations from '../../translations.json';
+import translations from '../translations.json';
import I18n from 'coral-framework/modules/i18n/i18n';
const PermittedDomainsStep = (props) => {
diff --git a/client/coral-admin/src/containers/Install/components/Steps/style.css b/client/coral-admin/src/routes/Install/components/Steps/style.css
similarity index 100%
rename from client/coral-admin/src/containers/Install/components/Steps/style.css
rename to client/coral-admin/src/routes/Install/components/Steps/style.css
diff --git a/client/coral-admin/src/containers/Install/style.css b/client/coral-admin/src/routes/Install/components/style.css
similarity index 100%
rename from client/coral-admin/src/containers/Install/style.css
rename to client/coral-admin/src/routes/Install/components/style.css
diff --git a/client/coral-admin/src/containers/Install/translations.json b/client/coral-admin/src/routes/Install/components/translations.json
similarity index 100%
rename from client/coral-admin/src/containers/Install/translations.json
rename to client/coral-admin/src/routes/Install/components/translations.json
diff --git a/client/coral-admin/src/routes/Install/containers/InstallContainer.js b/client/coral-admin/src/routes/Install/containers/InstallContainer.js
new file mode 100644
index 000000000..5dcb35705
--- /dev/null
+++ b/client/coral-admin/src/routes/Install/containers/InstallContainer.js
@@ -0,0 +1,57 @@
+import React, {Component} from 'react';
+import {connect} from 'react-redux';
+import {bindActionCreators} from 'redux';
+import {compose} from 'react-apollo';
+import Install from '../components/Install';
+
+import {
+ goToStep,
+ nextStep,
+ submitUser,
+ checkInstall,
+ previousStep,
+ finishInstall,
+ submitSettings,
+ updateUserFormData,
+ updateSettingsFormData,
+ updatePermittedDomains
+} from '../../../actions/install';
+
+class InstallContainer extends Component {
+ componentDidMount() {
+ const {checkInstall} = this.props;
+ checkInstall(() => {
+ this.context.router.push('/admin');
+ });
+ }
+
+ render() {
+ return ;
+ }
+}
+
+InstallContainer.contextTypes = {
+ router: React.PropTypes.object
+};
+
+const mapStateToProps = (state) => ({
+ install: state.install.toJS()
+});
+
+const mapDispatchToProps = (dispatch) =>
+ bindActionCreators({
+ goToStep,
+ nextStep,
+ submitUser,
+ checkInstall,
+ previousStep,
+ finishInstall,
+ submitSettings,
+ updateUserFormData,
+ updateSettingsFormData,
+ updatePermittedDomains
+ }, dispatch);
+
+export default compose(
+ connect(mapStateToProps, mapDispatchToProps),
+)(InstallContainer);
diff --git a/client/coral-admin/src/routes/Install/index.js b/client/coral-admin/src/routes/Install/index.js
new file mode 100644
index 000000000..5c47e4060
--- /dev/null
+++ b/client/coral-admin/src/routes/Install/index.js
@@ -0,0 +1 @@
+export {default} from './containers/InstallContainer.js';
diff --git a/client/coral-admin/src/containers/ModerationQueue/components/BanUserDialog.css b/client/coral-admin/src/routes/Moderation/components/BanUserDialog.css
similarity index 100%
rename from client/coral-admin/src/containers/ModerationQueue/components/BanUserDialog.css
rename to client/coral-admin/src/routes/Moderation/components/BanUserDialog.css
diff --git a/client/coral-admin/src/containers/ModerationQueue/components/BanUserDialog.js b/client/coral-admin/src/routes/Moderation/components/BanUserDialog.js
similarity index 100%
rename from client/coral-admin/src/containers/ModerationQueue/components/BanUserDialog.js
rename to client/coral-admin/src/routes/Moderation/components/BanUserDialog.js
diff --git a/client/coral-admin/src/containers/ModerationQueue/components/Comment.css b/client/coral-admin/src/routes/Moderation/components/Comment.css
similarity index 100%
rename from client/coral-admin/src/containers/ModerationQueue/components/Comment.css
rename to client/coral-admin/src/routes/Moderation/components/Comment.css
diff --git a/client/coral-admin/src/containers/ModerationQueue/components/Comment.js b/client/coral-admin/src/routes/Moderation/components/Comment.js
similarity index 100%
rename from client/coral-admin/src/containers/ModerationQueue/components/Comment.js
rename to client/coral-admin/src/routes/Moderation/components/Comment.js
diff --git a/client/coral-admin/src/containers/ModerationQueue/components/CommentCount.css b/client/coral-admin/src/routes/Moderation/components/CommentCount.css
similarity index 100%
rename from client/coral-admin/src/containers/ModerationQueue/components/CommentCount.css
rename to client/coral-admin/src/routes/Moderation/components/CommentCount.css
diff --git a/client/coral-admin/src/containers/ModerationQueue/components/CommentCount.js b/client/coral-admin/src/routes/Moderation/components/CommentCount.js
similarity index 100%
rename from client/coral-admin/src/containers/ModerationQueue/components/CommentCount.js
rename to client/coral-admin/src/routes/Moderation/components/CommentCount.js
diff --git a/client/coral-admin/src/containers/ModerationQueue/components/CommentType.css b/client/coral-admin/src/routes/Moderation/components/CommentType.css
similarity index 100%
rename from client/coral-admin/src/containers/ModerationQueue/components/CommentType.css
rename to client/coral-admin/src/routes/Moderation/components/CommentType.css
diff --git a/client/coral-admin/src/containers/ModerationQueue/components/CommentType.js b/client/coral-admin/src/routes/Moderation/components/CommentType.js
similarity index 100%
rename from client/coral-admin/src/containers/ModerationQueue/components/CommentType.js
rename to client/coral-admin/src/routes/Moderation/components/CommentType.js
diff --git a/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.css b/client/coral-admin/src/routes/Moderation/components/FlagBox.css
similarity index 100%
rename from client/coral-admin/src/containers/ModerationQueue/components/FlagBox.css
rename to client/coral-admin/src/routes/Moderation/components/FlagBox.css
diff --git a/client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js b/client/coral-admin/src/routes/Moderation/components/FlagBox.js
similarity index 100%
rename from client/coral-admin/src/containers/ModerationQueue/components/FlagBox.js
rename to client/coral-admin/src/routes/Moderation/components/FlagBox.js
diff --git a/client/coral-admin/src/containers/ModerationQueue/components/LoadMore.js b/client/coral-admin/src/routes/Moderation/components/LoadMore.js
similarity index 100%
rename from client/coral-admin/src/containers/ModerationQueue/components/LoadMore.js
rename to client/coral-admin/src/routes/Moderation/components/LoadMore.js
diff --git a/client/coral-admin/src/containers/ModerationQueue/ModerationContainer.js b/client/coral-admin/src/routes/Moderation/components/Moderation.js
similarity index 73%
rename from client/coral-admin/src/containers/ModerationQueue/ModerationContainer.js
rename to client/coral-admin/src/routes/Moderation/components/Moderation.js
index 237059103..10f775cd7 100644
--- a/client/coral-admin/src/containers/ModerationQueue/ModerationContainer.js
+++ b/client/coral-admin/src/routes/Moderation/components/Moderation.js
@@ -1,44 +1,22 @@
import React, {Component} from 'react';
-import {connect} from 'react-redux';
-import {bindActionCreators} from 'redux';
-import {compose} from 'react-apollo';
import * as notification from 'coral-admin/src/services/notification';
import key from 'keymaster';
-import isEqual from 'lodash/isEqual';
-import styles from './components/styles.css';
+import styles from './styles.css';
import translations from 'coral-admin/src/translations';
import I18n from 'coral-framework/modules/i18n/i18n';
-import {modQueueQuery, getQueueCounts} from '../../graphql/queries';
-import {banUser, setCommentStatus, suspendUser} from '../../graphql/mutations';
-
-import {fetchSettings} from 'actions/settings';
-import {updateAssets} from 'actions/assets';
-import {
- toggleModal,
- singleView,
- showBanUserDialog,
- hideBanUserDialog,
- showSuspendUserDialog,
- hideSuspendUserDialog,
- hideShortcutsNote,
- viewUserDetail,
- hideUserDetail
-} from 'actions/moderation';
-
-import {Spinner} from 'coral-ui';
-import BanUserDialog from './components/BanUserDialog';
-import SuspendUserDialog from './components/SuspendUserDialog';
+import BanUserDialog from './BanUserDialog';
+import SuspendUserDialog from './SuspendUserDialog';
import ModerationQueue from './ModerationQueue';
-import ModerationMenu from './components/ModerationMenu';
-import ModerationHeader from './components/ModerationHeader';
-import NotFoundAsset from './components/NotFoundAsset';
-import ModerationKeysModal from '../../components/ModerationKeysModal';
+import ModerationMenu from './ModerationMenu';
+import ModerationHeader from './ModerationHeader';
+import NotFoundAsset from './NotFoundAsset';
+import ModerationKeysModal from '../../../components/ModerationKeysModal';
import UserDetail from './UserDetail';
const lang = new I18n(translations);
-class ModerationContainer extends Component {
+export default class Moderation extends Component {
state = {
selectedIndex: 0,
sort: 'REVERSE_CHRONOLOGICAL'
@@ -47,7 +25,6 @@ class ModerationContainer extends Component {
componentWillMount() {
const {toggleModal, singleView} = this.props;
- this.props.fetchSettings();
key('s', () => singleView());
key('shift+/', () => toggleModal(true));
key('esc', () => toggleModal(false));
@@ -57,6 +34,10 @@ class ModerationContainer extends Component {
key('t', this.moderate(true));
}
+ onClose = () => {
+ this.toggleModal(false);
+ }
+
moderate = (accept) => () => {
const {acceptComment, rejectComment} = this.props;
const {selectedIndex} = this.state;
@@ -148,28 +129,13 @@ class ModerationContainer extends Component {
}
}
- componentWillReceiveProps(nextProps) {
- const {updateAssets} = this.props;
- if(!isEqual(nextProps.data.assets, this.props.data.assets)) {
- updateAssets(nextProps.data.assets);
- }
- }
-
render () {
- const {data, moderation, settings, assets, onClose, viewUserDetail, hideUserDetail, ...props} = this.props;
+ const {data, moderation, settings, assets, viewUserDetail, hideUserDetail, ...props} = this.props;
const providedAssetId = this.props.params.id;
const activeTab = this.props.route.path === ':id' ? 'premod' : this.props.route.path;
let asset;
- if (!('premodCount' in data)) {
- return
;
- }
-
- if (data.error) {
- return Error
;
- }
-
if (providedAssetId) {
asset = assets.find((asset) => asset.id === this.props.params.id);
@@ -253,7 +219,7 @@ class ModerationContainer extends Component {
hideShortcutsNote={props.hideShortcutsNote}
shortcutsNoteVisible={moderation.shortcutsNoteVisible}
open={moderation.modalOpen}
- onClose={onClose}/>
+ onClose={this.onClose}/>
{moderation.userDetailId && (
({
- moderation: state.moderation.toJS(),
- settings: state.settings.toJS(),
- auth: state.auth.toJS(),
- assets: state.assets.get('assets')
-});
-
-const mapDispatchToProps = (dispatch) => ({
- onClose: () => dispatch(toggleModal(false)),
- hideBanUserDialog: () => dispatch(hideBanUserDialog(false)),
- ...bindActionCreators({
- toggleModal,
- singleView,
- updateAssets,
- fetchSettings,
- showBanUserDialog,
- hideShortcutsNote,
- showSuspendUserDialog,
- hideSuspendUserDialog,
- viewUserDetail,
- hideUserDetail,
- }, dispatch),
-});
-
-export default compose(
- connect(mapStateToProps, mapDispatchToProps),
- setCommentStatus,
- getQueueCounts,
- banUser,
- suspendUser,
- modQueueQuery,
-)(ModerationContainer);
diff --git a/client/coral-admin/src/containers/ModerationQueue/components/ModerationHeader.js b/client/coral-admin/src/routes/Moderation/components/ModerationHeader.js
similarity index 100%
rename from client/coral-admin/src/containers/ModerationQueue/components/ModerationHeader.js
rename to client/coral-admin/src/routes/Moderation/components/ModerationHeader.js
diff --git a/client/coral-admin/src/containers/ModerationQueue/ModerationLayout.js b/client/coral-admin/src/routes/Moderation/components/ModerationLayout.js
similarity index 100%
rename from client/coral-admin/src/containers/ModerationQueue/ModerationLayout.js
rename to client/coral-admin/src/routes/Moderation/components/ModerationLayout.js
diff --git a/client/coral-admin/src/containers/ModerationQueue/components/ModerationMenu.js b/client/coral-admin/src/routes/Moderation/components/ModerationMenu.js
similarity index 100%
rename from client/coral-admin/src/containers/ModerationQueue/components/ModerationMenu.js
rename to client/coral-admin/src/routes/Moderation/components/ModerationMenu.js
diff --git a/client/coral-admin/src/containers/ModerationQueue/ModerationQueue.js b/client/coral-admin/src/routes/Moderation/components/ModerationQueue.js
similarity index 91%
rename from client/coral-admin/src/containers/ModerationQueue/ModerationQueue.js
rename to client/coral-admin/src/routes/Moderation/components/ModerationQueue.js
index 043173549..f765df9f1 100644
--- a/client/coral-admin/src/containers/ModerationQueue/ModerationQueue.js
+++ b/client/coral-admin/src/routes/Moderation/components/ModerationQueue.js
@@ -1,12 +1,12 @@
import React, {PropTypes} from 'react';
-import Comment from './components/Comment';
-import styles from './components/styles.css';
-import EmptyCard from '../../components/EmptyCard';
-import {actionsMap} from './helpers/moderationQueueActionsMap';
+import Comment from './Comment';
+import styles from './styles.css';
+import EmptyCard from '../../../components/EmptyCard';
+import {actionsMap} from '../helpers/moderationQueueActionsMap';
import I18n from 'coral-framework/modules/i18n/i18n';
import translations from 'coral-admin/src/translations';
-import LoadMore from './components/LoadMore';
+import LoadMore from './LoadMore';
const lang = new I18n(translations);
class ModerationQueue extends React.Component {
diff --git a/client/coral-admin/src/containers/ModerationQueue/components/NotFoundAsset.js b/client/coral-admin/src/routes/Moderation/components/NotFoundAsset.js
similarity index 100%
rename from client/coral-admin/src/containers/ModerationQueue/components/NotFoundAsset.js
rename to client/coral-admin/src/routes/Moderation/components/NotFoundAsset.js
diff --git a/client/coral-admin/src/containers/ModerationQueue/components/SuspendUserDialog.css b/client/coral-admin/src/routes/Moderation/components/SuspendUserDialog.css
similarity index 100%
rename from client/coral-admin/src/containers/ModerationQueue/components/SuspendUserDialog.css
rename to client/coral-admin/src/routes/Moderation/components/SuspendUserDialog.css
diff --git a/client/coral-admin/src/containers/ModerationQueue/components/SuspendUserDialog.js b/client/coral-admin/src/routes/Moderation/components/SuspendUserDialog.js
similarity index 100%
rename from client/coral-admin/src/containers/ModerationQueue/components/SuspendUserDialog.js
rename to client/coral-admin/src/routes/Moderation/components/SuspendUserDialog.js
diff --git a/client/coral-admin/src/containers/ModerationQueue/UserDetail.css b/client/coral-admin/src/routes/Moderation/components/UserDetail.css
similarity index 100%
rename from client/coral-admin/src/containers/ModerationQueue/UserDetail.css
rename to client/coral-admin/src/routes/Moderation/components/UserDetail.css
diff --git a/client/coral-admin/src/containers/ModerationQueue/UserDetail.js b/client/coral-admin/src/routes/Moderation/components/UserDetail.js
similarity index 88%
rename from client/coral-admin/src/containers/ModerationQueue/UserDetail.js
rename to client/coral-admin/src/routes/Moderation/components/UserDetail.js
index d9b85a060..8da8b1a4c 100644
--- a/client/coral-admin/src/containers/ModerationQueue/UserDetail.js
+++ b/client/coral-admin/src/routes/Moderation/components/UserDetail.js
@@ -1,14 +1,13 @@
import React, {PropTypes} from 'react';
import {Button, Drawer} from 'coral-ui';
import styles from './UserDetail.css';
-import {compose} from 'react-apollo';
-import {getUserDetail} from 'coral-admin/src/graphql/queries';
import Slot from 'coral-framework/components/Slot';
-class UserDetail extends React.Component {
+export default class UserDetail extends React.Component {
static propTypes = {
id: PropTypes.string.isRequired,
- hideUserDetail: PropTypes.func.isRequired
+ hideUserDetail: PropTypes.func.isRequired,
+ data: PropTypes.string.isRequired,
}
copyPermalink = () => {
@@ -69,6 +68,3 @@ class UserDetail extends React.Component {
}
}
-export default compose(
- getUserDetail
-)(UserDetail);
diff --git a/client/coral-admin/src/containers/ModerationQueue/components/styles.css b/client/coral-admin/src/routes/Moderation/components/styles.css
similarity index 100%
rename from client/coral-admin/src/containers/ModerationQueue/components/styles.css
rename to client/coral-admin/src/routes/Moderation/components/styles.css
diff --git a/client/coral-admin/src/routes/Moderation/containers/Moderation.js b/client/coral-admin/src/routes/Moderation/containers/Moderation.js
new file mode 100644
index 000000000..722b6a0b4
--- /dev/null
+++ b/client/coral-admin/src/routes/Moderation/containers/Moderation.js
@@ -0,0 +1,83 @@
+import React, {Component} from 'react';
+import {connect} from 'react-redux';
+import {bindActionCreators} from 'redux';
+import {compose} from 'react-apollo';
+import isEqual from 'lodash/isEqual';
+
+import {modQueueQuery, getQueueCounts} from '../../../graphql/queries';
+import {banUser, setCommentStatus, suspendUser} from '../../../graphql/mutations';
+
+import {fetchSettings} from 'actions/settings';
+import {updateAssets} from 'actions/assets';
+import {
+ toggleModal,
+ singleView,
+ showBanUserDialog,
+ hideBanUserDialog,
+ showSuspendUserDialog,
+ hideSuspendUserDialog,
+ hideShortcutsNote,
+ viewUserDetail,
+ hideUserDetail
+} from 'actions/moderation';
+
+import {Spinner} from 'coral-ui';
+import Moderation from '../components/Moderation';
+
+class ModerationContainer extends Component {
+ componentWillMount() {
+ this.props.fetchSettings();
+ }
+
+ componentWillReceiveProps(nextProps) {
+ const {updateAssets} = this.props;
+ if(!isEqual(nextProps.data.assets, this.props.data.assets)) {
+ updateAssets(nextProps.data.assets);
+ }
+ }
+
+ render () {
+ const {data} = this.props;
+
+ if (!('premodCount' in data)) {
+ return
;
+ }
+
+ if (data.error) {
+ return Error
;
+ }
+ return ;
+ }
+}
+
+const mapStateToProps = (state) => ({
+ moderation: state.moderation.toJS(),
+ settings: state.settings.toJS(),
+ auth: state.auth.toJS(),
+ assets: state.assets.get('assets')
+});
+
+const mapDispatchToProps = (dispatch) => ({
+ ...bindActionCreators({
+ toggleModal,
+ singleView,
+ updateAssets,
+ fetchSettings,
+ showBanUserDialog,
+ hideBanUserDialog,
+ hideShortcutsNote,
+ showSuspendUserDialog,
+ hideSuspendUserDialog,
+ viewUserDetail,
+ hideUserDetail,
+ }, dispatch),
+});
+
+export default compose(
+ connect(mapStateToProps, mapDispatchToProps),
+ setCommentStatus,
+ getQueueCounts,
+ banUser,
+ suspendUser,
+ modQueueQuery,
+)(ModerationContainer);
diff --git a/client/coral-admin/src/routes/Moderation/containers/UserDetail.js b/client/coral-admin/src/routes/Moderation/containers/UserDetail.js
new file mode 100644
index 000000000..6923eb96e
--- /dev/null
+++ b/client/coral-admin/src/routes/Moderation/containers/UserDetail.js
@@ -0,0 +1,19 @@
+import React, {PropTypes} from 'react';
+import {compose} from 'react-apollo';
+import {getUserDetail} from 'coral-admin/src/graphql/queries';
+import UserDetail from '../components/UserDetail';
+
+class UserDetailContainer extends React.Component {
+ static propTypes = {
+ id: PropTypes.string.isRequired,
+ hideUserDetail: PropTypes.func.isRequired
+ }
+
+ render () {
+ return ;
+ }
+}
+
+export default compose(
+ getUserDetail
+)(UserDetailContainer);
diff --git a/client/coral-admin/src/containers/ModerationQueue/helpers/moderationQueueActionsMap.js b/client/coral-admin/src/routes/Moderation/helpers/moderationQueueActionsMap.js
similarity index 100%
rename from client/coral-admin/src/containers/ModerationQueue/helpers/moderationQueueActionsMap.js
rename to client/coral-admin/src/routes/Moderation/helpers/moderationQueueActionsMap.js
diff --git a/client/coral-admin/src/routes/Moderation/index.js b/client/coral-admin/src/routes/Moderation/index.js
new file mode 100644
index 000000000..e6bef5ef3
--- /dev/null
+++ b/client/coral-admin/src/routes/Moderation/index.js
@@ -0,0 +1,2 @@
+export {default as Moderation} from './containers/Moderation';
+export {default as ModerationLayout} from './components/ModerationLayout';
diff --git a/client/coral-admin/src/containers/Stories/Stories.css b/client/coral-admin/src/routes/Stories/components/Stories.css
similarity index 100%
rename from client/coral-admin/src/containers/Stories/Stories.css
rename to client/coral-admin/src/routes/Stories/components/Stories.css
diff --git a/client/coral-admin/src/containers/Stories/Stories.js b/client/coral-admin/src/routes/Stories/components/Stories.js
similarity index 91%
rename from client/coral-admin/src/containers/Stories/Stories.js
rename to client/coral-admin/src/routes/Stories/components/Stories.js
index 62393cb04..375f9e51e 100644
--- a/client/coral-admin/src/containers/Stories/Stories.js
+++ b/client/coral-admin/src/routes/Stories/components/Stories.js
@@ -1,8 +1,6 @@
import React, {Component} from 'react';
import styles from './Stories.css';
-import {connect} from 'react-redux';
import I18n from 'coral-framework/modules/i18n/i18n';
-import {fetchAssets, updateAssetState} from 'coral-admin/src/actions/assets';
import translations from 'coral-admin/src/translations.json';
import {Link} from 'react-router';
@@ -11,9 +9,11 @@ import {DataTable, TableHeader, RadioGroup, Radio} from 'react-mdl';
import EmptyCard from 'coral-admin/src/components/EmptyCard';
import sortBy from 'lodash/sortBy';
+const lang = new I18n(translations);
+
const limit = 25;
-class Stories extends Component {
+export default class Stories extends Component {
state = {
search: '',
@@ -171,22 +171,3 @@ class Stories extends Component {
);
}
}
-
-const mapStateToProps = ({assets}) => {
- return {
- assets: assets.toJS()
- };
-};
-
-const mapDispatchToProps = (dispatch) => {
- return {
- fetchAssets: (...args) => {
- dispatch(fetchAssets.apply(this, args));
- },
- updateAssetState: (...args) => dispatch(updateAssetState.apply(this, args))
- };
-};
-
-export default connect(mapStateToProps, mapDispatchToProps)(Stories);
-
-const lang = new I18n(translations);
diff --git a/client/coral-admin/src/routes/Stories/containers/Stories.js b/client/coral-admin/src/routes/Stories/containers/Stories.js
new file mode 100644
index 000000000..450efcf74
--- /dev/null
+++ b/client/coral-admin/src/routes/Stories/containers/Stories.js
@@ -0,0 +1,27 @@
+import React, {Component} from 'react';
+import {connect} from 'react-redux';
+import {bindActionCreators} from 'redux';
+import {compose} from 'react-apollo';
+import {fetchAssets, updateAssetState} from 'coral-admin/src/actions/assets';
+import Stories from '../components/Stories';
+
+class StoriesContainer extends Component {
+ render () {
+ return ;
+ }
+}
+
+const mapStateToProps = (state) => ({
+ assets: state.assets.toJS()
+});
+
+const mapDispatchToProps = (dispatch) =>
+ bindActionCreators({
+ fetchAssets,
+ updateAssetState,
+ }, dispatch);
+
+export default compose(
+ connect(mapStateToProps, mapDispatchToProps),
+)(StoriesContainer);
+
diff --git a/client/coral-admin/src/routes/Stories/index.js b/client/coral-admin/src/routes/Stories/index.js
new file mode 100644
index 000000000..5b2999b21
--- /dev/null
+++ b/client/coral-admin/src/routes/Stories/index.js
@@ -0,0 +1 @@
+export {default} from './containers/Stories.js';
diff --git a/services/users.js b/services/users.js
index 496db4528..b6a5e0404 100644
--- a/services/users.js
+++ b/services/users.js
@@ -381,12 +381,15 @@ module.exports = class UsersService {
* @param {Function} done callback after the operation is complete
*/
static addRoleToUser(id, role) {
+ const roles = [];
// Check to see if the user role is in the allowable set of roles.
- if (USER_ROLES.indexOf(role) === -1) {
+ if (role && USER_ROLES.indexOf(role) === -1) {
// User role is not supported! Error out here.
return Promise.reject(new Error(`role ${role} is not supported`));
+ } else {
+ roles.push(role);
}
return UserModel.update({id}, {$set: {roles: [role]}});