Skip to content
Snippets Groups Projects
Commit 9cc72105 authored by Alexandru Munteanu's avatar Alexandru Munteanu
Browse files

Fix lint

parent 992b783a
No related branches found
No related tags found
No related merge requests found
import React from 'react' import React from 'react'
import { get } from 'lodash' import { get } from 'lodash'
import { Button } from '@pubsweet/ui' import { Button } from '@pubsweet/ui'
import { connect } from 'react-redux'
import { compose, withHandlers } from 'recompose'
import classes from './Dashboard.local.scss' import classes from './Dashboard.local.scss'
import DashboardItems from './DashboardItems' import DashboardItems from './DashboardItems'
...@@ -13,6 +15,8 @@ const Dashboard = ({ ...@@ -13,6 +15,8 @@ const Dashboard = ({
dashboard, dashboard,
deleteProject, deleteProject,
listView, listView,
filters,
getItems,
}) => ( }) => (
<div className={classes.root}> <div className={classes.root}>
<div className={classes.header}> <div className={classes.header}>
...@@ -24,10 +28,48 @@ const Dashboard = ({ ...@@ -24,10 +28,48 @@ const Dashboard = ({
<DashboardFilters changeView={changeViewMode} listView={listView} /> <DashboardFilters changeView={changeViewMode} listView={listView} />
<DashboardItems <DashboardItems
deleteProject={deleteProject} deleteProject={deleteProject}
list={get(currentUser, 'admin') ? dashboard.all : dashboard.owner} list={getItems()}
listView={listView} listView={listView}
/> />
</div> </div>
) )
export default Dashboard export default compose(
connect(state => ({
filters: state.filters.filter,
sortOrder: state.filters.sortValue,
})),
withHandlers({
getItems: ({ filters, sortOrder, currentUser, dashboard }) => () => {
const userItems = get(currentUser, 'admin')
? dashboard.all
: dashboard.owner
const statusItems =
filters.status === 'all'
? userItems
: userItems.filter(item => {
const itemStatus = get(item, 'status')
if (!itemStatus && filters.status === 'draft') {
return true
}
return itemStatus === filters.status
})
const ownerItems =
filters.owner === 'all'
? statusItems
: statusItems.filter(item => {
const itemOwnerIds = item.owners.map(o => o.id)
if (filters.owner === 'me') {
return itemOwnerIds.includes(currentUser.id)
} else if (filters.owner === 'other') {
return !itemOwnerIds.includes(currentUser.id)
}
return false
})
return ownerItems.sort((a, b) => {
if (sortOrder === 'newest') return a.created - b.created < 0
return a.created - b.created > 0
})
},
}),
)(Dashboard)
...@@ -15,11 +15,24 @@ ...@@ -15,11 +15,24 @@
} }
.filters { .filters {
align-items: flex-end;
display: flex;
> span { > span {
border: 1px solid gray; border: 1px solid gray;
margin: 0 0.5em; margin: 0 0.5em;
padding: 0 5px; padding: 0 5px;
} }
.filter-group {
align-items: flex-start;
display: flex;
flex-direction: column;
> span {
margin-left: 10px;
}
}
} }
.disabled { .disabled {
......
import React from 'react' import React from 'react'
import { Icon } from '@pubsweet/ui' import { connect } from 'react-redux'
import { Icon, Menu } from '@pubsweet/ui'
import { compose, withHandlers } from 'recompose'
import classes from './Dashboard.local.scss' import classes from './Dashboard.local.scss'
import { changeFilter, changeSort } from './redux/filters'
const statusFilterOptions = [
{ label: 'All', value: 'all' },
{ label: 'Submitted', value: 'submitted' },
{ label: 'Draft', value: 'draft' },
]
const ownerFilterOptions = [
{ label: 'Everyone', value: 'all' },
{ label: 'My work', value: 'me' },
{ label: `Other's work`, value: 'other' },
]
const sortOptions = [
{ label: 'Newest first', value: 'newest' },
{ label: 'Oldest first', value: 'oldest' },
]
const DashboardFilters = ({ const DashboardFilters = ({
view, view,
...@@ -9,14 +29,24 @@ const DashboardFilters = ({ ...@@ -9,14 +29,24 @@ const DashboardFilters = ({
createdAt, createdAt,
changeView, changeView,
listView, listView,
changeFilter,
changeSort,
}) => ( }) => (
<div className={classes.filtersContainer}> <div className={classes.filtersContainer}>
<div className={classes.filters}> <div className={classes.filters}>
Filter view: Filter view:
<span> My work </span> <div className={classes['filter-group']}>
<span> Type </span> <span>Owner</span>
<span> Status </span> <Menu onChange={changeFilter('owner')} options={ownerFilterOptions} />
<span> Newest on top </span> </div>
<div className={classes['filter-group']}>
<span>Status</span>
<Menu onChange={changeFilter('status')} options={statusFilterOptions} />
</div>
<div className={classes['filter-group']}>
<span>Sort</span>
<Menu onChange={changeSort} options={sortOptions} />
</div>
</div> </div>
<div className={classes.viewMode} onClick={changeView}> <div className={classes.viewMode} onClick={changeView}>
<div className={classes.icon}> <div className={classes.icon}>
...@@ -27,4 +57,11 @@ const DashboardFilters = ({ ...@@ -27,4 +57,11 @@ const DashboardFilters = ({
</div> </div>
) )
export default DashboardFilters export default compose(
connect(null, { changeFilter, changeSort }),
withHandlers({
changeFilter: ({ changeFilter }) => filterKey => value => {
changeFilter(filterKey, value)
},
}),
)(DashboardFilters)
export default (state = {}, action) => { const initialState = {
filter: {
status: 'all',
owner: 'all',
},
sortValue: 'newest',
}
const CHANGE_FILTER = 'filters/CHANGE_FILTER'
const CHANGE_SORT = 'filters/CHANGE_SORT'
export const changeFilter = (filterKey, value) => ({
type: CHANGE_FILTER,
filterKey,
value,
})
export const changeSort = value => ({
type: CHANGE_SORT,
value,
})
export default (state = initialState, action) => {
switch (action.type) { switch (action.type) {
case CHANGE_FILTER:
return {
...state,
filter: {
...state.filter,
[action.filterKey]: action.value,
},
}
case CHANGE_SORT:
return {
...state,
sortValue: action.value,
}
default: default:
return state return state
} }
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment