diff --git a/client/coral-admin/src/AppRouter.js b/client/coral-admin/src/AppRouter.js index d8e1b5377..362143d38 100644 --- a/client/coral-admin/src/AppRouter.js +++ b/client/coral-admin/src/AppRouter.js @@ -3,7 +3,6 @@ import PropTypes from 'prop-types'; import {Router, Route, IndexRedirect, IndexRoute} from 'react-router'; import Configure from 'routes/Configure'; -import Dashboard from 'routes/Dashboard'; import Install from 'routes/Install'; import Stories from 'routes/Stories'; import Community from 'routes/Community/containers/Community'; @@ -18,7 +17,6 @@ const routes = ( - {/* Community Routes */} diff --git a/client/coral-admin/src/components/Drawer.js b/client/coral-admin/src/components/Drawer.js index 70da8ad5e..29ee8d17e 100644 --- a/client/coral-admin/src/components/Drawer.js +++ b/client/coral-admin/src/components/Drawer.js @@ -12,20 +12,14 @@ const CoralDrawer = ({handleLogout, auth = {}}) => ( { auth && auth.user && can(auth.user, 'ACCESS_ADMIN') ?
- - {t('configure.dashboard')} - { can(auth.user, 'MODERATE_COMMENTS') && ( - {t('configure.moderate')} - + ) } - - {t('configure.dashboard')} - { can(auth.user, 'MODERATE_COMMENTS') && ( - {t('configure.moderate')} {(root.premodCount !== 0 || root.reportedCount !== 0) && } - + ) } { - return ( -
-

{t('dashboard.most_conversations')}

-
-

{t('streams.article')}

-

{t('dashboard.comment_count')}

-
-
- { - assets.length - ? assets.map((asset) => { - return ( -
- Moderate -

{asset.commentCount}

- -

{asset.title}

-
-

{asset.author} — Published: {new Date(asset.created_at).toLocaleDateString()}

-
- ); - }) - :
{t('dashboard.no_activity')}
- } -
-
- ); -}; - -ActivityWidget.propTypes = { - assets: PropTypes.arrayOf(PropTypes.shape({ - id: PropTypes.string, - url: PropTypes.string, - commentCount: PropTypes.number, - author: PropTypes.string, - created_at: PropTypes.string - })).isRequired -}; - -export default ActivityWidget; diff --git a/client/coral-admin/src/routes/Dashboard/components/CountdownTimer.js b/client/coral-admin/src/routes/Dashboard/components/CountdownTimer.js deleted file mode 100644 index a2e6ea9f1..000000000 --- a/client/coral-admin/src/routes/Dashboard/components/CountdownTimer.js +++ /dev/null @@ -1,93 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import styles from './Dashboard.css'; -import {Icon} from 'coral-ui'; - -import t from 'coral-framework/services/i18n'; -const refreshIntervalSeconds = 60 * 5; - -// TODO: refactor out storage code into redux. - -class CountdownTimer extends React.Component { - - static contextTypes = { - storage: PropTypes.object, - }; - - static propTypes = { - handleTimeout: PropTypes.func.isRequired - } - - constructor (props, context) { - super(props, context); - const {storage} = context; - try { - if (storage && storage.getItem('coral:dashboardNote') === null) { - storage.setItem('coral:dashboardNote', 'show'); - } - } catch (e) { - - // above will fail in Private Mode in some browsers. - } - - this.state = { - secondsUntilRefresh: refreshIntervalSeconds, - dashboardNote: (storage && storage.getItem('coral:dashboardNote')) || 'show' - }; - } - - componentWillMount () { - this.interval = setInterval(() => { // the countdown timer - let nextCount = this.state.secondsUntilRefresh - 1; - if (nextCount < 0) { - nextCount = refreshIntervalSeconds; - return this.props.handleTimeout(); - } - this.setState({secondsUntilRefresh: nextCount}); - }, 1000); - } - - componentWillUnmount () { - window.clearInterval(this.interval); - } - - formatTime = () => { - const minutes = Math.floor(this.state.secondsUntilRefresh / 60); - let seconds = (this.state.secondsUntilRefresh % 60).toString(); - if (seconds.length < 2) { - seconds = `0${seconds}`; - } - - return `${minutes}:${seconds}`; - } - - dismissNote = () => { - const {storage} = this.context; - try { - if (storage) { - storage.setItem('coral:dashboardNote', 'hide'); - } - } catch (e) { - - // when setItem fails in Safari Private mode - this.setState({dashboardNote: 'hide'}); - } - } - - render () { - const {storage} = this.context; - const hideReloadNote = (storage && storage.getItem('coral:dashboardNote') === 'hide') || - this.state.dashboardNote === 'hide'; // for Safari Incognito - return ( -

- × - {t('dashboard.next_update', this.formatTime())} {t('dashboard.auto_update')} -

- ); - } -} - -export default CountdownTimer; diff --git a/client/coral-admin/src/routes/Dashboard/components/Dashboard.css b/client/coral-admin/src/routes/Dashboard/components/Dashboard.css deleted file mode 100644 index aee7e702b..000000000 --- a/client/coral-admin/src/routes/Dashboard/components/Dashboard.css +++ /dev/null @@ -1,40 +0,0 @@ -/** - * @TODO: deprecated as this file contains styles from multiple components. Please refactor. - */ - -.Dashboard { - display: flex; - max-width: 1280px; - margin: 0 auto; -} - -.heading { - margin: 0; - font-size: 1.5rem; - font-weight: bold; -} - -.autoUpdate { - background-color: #d5d5d5; - padding: 3px 10px 10px 10px; - margin-bottom: 0; - - i { - position: relative; - top: 7px; - } - - b { - float: right; - border-radius: 20px; - cursor: pointer; - background-color: #c0c0c0; - width: 30px; - height: 30px; - text-align: center; - top: 4px; - position: relative; - line-height: 1.7em; - font-size: 1.3em; - } -} diff --git a/client/coral-admin/src/routes/Dashboard/components/Dashboard.js b/client/coral-admin/src/routes/Dashboard/components/Dashboard.js deleted file mode 100644 index ba224a3b9..000000000 --- a/client/coral-admin/src/routes/Dashboard/components/Dashboard.js +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react'; -import FlagWidget from './FlagWidget'; -import ActivityWidget from './ActivityWidget'; -import CountdownTimer from './CountdownTimer'; -import styles from './Dashboard.css'; - -export default ({root: {assetsByActivity, assetsByFlag}, reloadData}) => ( -
- -
- - -
-
-); diff --git a/client/coral-admin/src/routes/Dashboard/components/FlagWidget.js b/client/coral-admin/src/routes/Dashboard/components/FlagWidget.js deleted file mode 100644 index 2f3548cf1..000000000 --- a/client/coral-admin/src/routes/Dashboard/components/FlagWidget.js +++ /dev/null @@ -1,54 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import {Link} from 'react-router'; -import styles from './Widget.css'; - -import t from 'coral-framework/services/i18n'; - -const FlagWidget = ({assets}) => { - - return ( -
-

{t('dashboard.most_flags')}

-
-

{t('streams.article')}

-

{t('dashboard.flags')}

-
-
- { - assets.length - ? assets.map((asset) => { - let flagSummary = null; - if (asset.action_summaries) { - flagSummary = asset.action_summaries.find((s) => s.__typename === 'FlagAssetActionSummary'); - } - - return ( -
- Moderate -

{flagSummary ? flagSummary.actionCount : 0}

- -

{asset.title}

-
-

{asset.author} — Published: {new Date(asset.created_at).toLocaleDateString()}

-
- ); - }) - :
{t('dashboard.no_flags')}
- } -
-
- ); -}; - -FlagWidget.propTypes = { - assets: PropTypes.arrayOf(PropTypes.shape({ - id: PropTypes.string, - url: PropTypes.string, - action_summaries: PropTypes.array, - author: PropTypes.string, - created_at: PropTypes.string - })).isRequired -}; - -export default FlagWidget; diff --git a/client/coral-admin/src/routes/Dashboard/components/LikeWidget.js b/client/coral-admin/src/routes/Dashboard/components/LikeWidget.js deleted file mode 100644 index 7525f7223..000000000 --- a/client/coral-admin/src/routes/Dashboard/components/LikeWidget.js +++ /dev/null @@ -1,49 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import {Link} from 'react-router'; -import styles from './Widget.css'; -import t from 'coral-framework/services/i18n'; - -const LikeWidget = ({assets}) => { - - return ( -
-

Articles with the most likes

-
-

{t('streams.article')}

-

{t('modqueue.likes')}

-
-
- { - assets.length - ? assets.map((asset) => { - const likeSummary = asset.action_summaries.find((s) => s.type === 'LikeAssetActionSummary'); - return ( -
- Moderate -

{likeSummary ? likeSummary.actionCount : 0}

- -

{asset.title}

-
-

{asset.author} — Published: {new Date(asset.created_at).toLocaleDateString()}

-
- ); - }) - :
{t('dashboard.no_likes')}
- } -
-
- ); -}; - -LikeWidget.propTypes = { - assets: PropTypes.arrayOf(PropTypes.shape({ - id: PropTypes.string, - url: PropTypes.string, - action_summaries: PropTypes.array, - author: PropTypes.string, - created_at: PropTypes.string - })).isRequired -}; - -export default LikeWidget; diff --git a/client/coral-admin/src/routes/Dashboard/components/MostLikedCommentsWidget.js b/client/coral-admin/src/routes/Dashboard/components/MostLikedCommentsWidget.js deleted file mode 100644 index 6bbb67c50..000000000 --- a/client/coral-admin/src/routes/Dashboard/components/MostLikedCommentsWidget.js +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react'; - -import ModerationQueue from 'coral-admin/src/containers/ModerationQueue/ModerationQueue'; -import styles from './Widget.css'; -import BanUserDialog from 'coral-admin/src/components/BanUserDialog'; -import t from 'coral-framework/services/i18n'; - -const MostLikedCommentsWidget = (props) => { - const { - comments, - moderation, - settings, - handleBanUser, - showBanUserDialog, - hideBanUserDialog, - acceptComment, - rejectComment - } = props; - - return ( -
-

{t('most_liked_comments')}

- - -
- ); -}; - -export default MostLikedCommentsWidget; diff --git a/client/coral-admin/src/routes/Dashboard/components/Widget.css b/client/coral-admin/src/routes/Dashboard/components/Widget.css deleted file mode 100644 index e94d2313f..000000000 --- a/client/coral-admin/src/routes/Dashboard/components/Widget.css +++ /dev/null @@ -1,110 +0,0 @@ -/** - * @TODO: deprecated as this file contains styles from multiple components. Please refactor. - */ - -:root { - --row-height: 60px; -} - -.widget { - margin: 10px 5px 5px 5px; - box-shadow: 0px 0px 5px 0px rgba(0,0,0,0.2); - flex: 1; - background-color: white; - box-sizing: border-box; -} - -.widget * { - box-sizing: border-box; -} - -.heading { - margin: 0; - padding-left: 10px; - font-size: 1.3rem; - font-weight: 600; - color: #2c2c2c; -} - -.widgetTable { - height: calc(var(--row-height) * 10); -} - -.widgetTable + div:after { - content: ''; - clear: both; - display: block; -} - -.widgetHead p { - color: #2c2c2c; - font-weight: 500; - padding: 10px; - text-align: left; - text-transform: capitalize; - display: inline-block; - box-sizing: border-box; - margin-bottom: 0; -} - -.widgetHead p:last-child { - float: right; - margin-right: 100px; -} - -.rowLinkify { - border-bottom: 1px solid lightgrey; - color: #555; - height: var(--row-height); - padding: 10px; - transition: background-color 200ms; -} - -.rowLinkify:last-child { - border-bottom: none; -} - -.rowLinkify:hover { - background-color: #f8f8f8; - pointer: default; -} - -.linkToAsset { - display: inline-block; - text-decoration: none; -} - -.linkToModerate { - background-color: #BDBDBD; - padding: 10px 14px; - text-decoration: none; - color: black; - float: right; - margin-left: 15px; - transition: background-color 200ms; -} - -.linkToModerate:hover { - background-color: #9E9E9E; -} - -.lede { - font-size: 0.9em; - color: #aaa; -} - -.assetTitle { - color: #555; - text-decoration: none; - font-size: 1.2em; - font-weight: 500; - margin: 0; -} - -.widgetCount { - color: #555; - font-size: 1.3em; - font-weight: 400; - float: right; - margin-top: 7px; -} diff --git a/client/coral-admin/src/routes/Dashboard/containers/Dashboard.js b/client/coral-admin/src/routes/Dashboard/containers/Dashboard.js deleted file mode 100644 index e2e9ef28c..000000000 --- a/client/coral-admin/src/routes/Dashboard/containers/Dashboard.js +++ /dev/null @@ -1,65 +0,0 @@ -import React from 'react'; -import {connect} from 'react-redux'; -import Dashboard from '../components/Dashboard'; -import {compose, gql} from 'react-apollo'; -import withQuery from 'coral-framework/hocs/withQuery'; - -import {Spinner} from 'coral-ui'; - -class DashboardContainer extends React.Component { - - reloadData = () => { - this.props.data.refetch(); - } - - render () { - if (this.props.data.loading) { - return ; - } - return ; - } -} - -export const witDashboardQuery = withQuery(gql` - query CoralAdmin_Dashboard($from: Date!, $to: Date!) { - assetsByFlag: assetMetrics(from: $from, to: $to, sortBy: FLAG) { - ...CoralAdmin_Metrics - } - assetsByActivity: assetMetrics(from: $from, to: $to, sortBy: ACTIVITY) { - ...CoralAdmin_Metrics - } - } - fragment CoralAdmin_Metrics on Asset { - id - title - url - author - created_at - commentCount - action_summaries { - actionCount - actionableItemCount - } - } -`, { - options: ({windowStart, windowEnd}) => { - return { - variables: { - from: windowStart, - to: windowEnd, - } - }; - } - }); - -const mapStateToProps = (state) => { - return { - windowStart: state.dashboard.windowStart, - windowEnd: state.dashboard.windowEnd, - }; -}; - -export default compose( - connect(mapStateToProps), - witDashboardQuery, -)(DashboardContainer); diff --git a/client/coral-admin/src/routes/Dashboard/index.js b/client/coral-admin/src/routes/Dashboard/index.js deleted file mode 100644 index 5bbb476e2..000000000 --- a/client/coral-admin/src/routes/Dashboard/index.js +++ /dev/null @@ -1 +0,0 @@ -export {default} from './containers/Dashboard.js';