import PropTypes from 'prop-types'
import { connect } from 'react-redux'
import { actions } from 'pubsweet-client'
import { withJournal } from 'xpub-journal'
import { ConnectPage } from 'xpub-connect'
import { withRouter } from 'react-router-dom'
import { compose, withContext } from 'recompose'
import { selectCurrentUser } from 'xpub-selectors'

import {
  getUserPermissions,
  newestFirstParseDashboard,
} from 'pubsweet-component-faraday-selectors'

import { Dashboard } from './'
import { priorityFilter, orderFilter, withFiltersHOC } from '../Filters'

export default compose(
  ConnectPage(() => [actions.getCollections(), actions.getUsers()]),
  connect(
    state => {
      const { collections, conversion } = state
      const currentUser = selectCurrentUser(state)
      const dashboard = newestFirstParseDashboard(state)

      const userPermissions = getUserPermissions(state)
      return {
        dashboard,
        conversion,
        collections,
        currentUser,
        userPermissions,
      }
    },
    dispatch => ({
      deleteProject: collection =>
        dispatch(actions.deleteCollection(collection)),
    }),
  ),
  withRouter,
  withJournal,
  withFiltersHOC({
    priority: priorityFilter,
    order: orderFilter,
  }),
  withContext(
    {
      journal: PropTypes.object,
      currentUser: PropTypes.object,
    },
    ({ journal, currentUser }) => ({ journal, currentUser }),
  ),
)(Dashboard)