feat(xo-web/home): put sort criteria in URL (#2780)

Fixes #2585
This commit is contained in:
Pierre Donias 2018-03-20 10:41:03 +01:00 committed by Julien Fontanet
parent d1a046279d
commit 4cac99d79a

View File

@ -124,7 +124,11 @@ const OPTIONS = {
sortOrder: 'desc', sortOrder: 'desc',
}, },
{ labelId: 'homeSortByRAM', sortBy: 'memory.size', sortOrder: 'desc' }, { labelId: 'homeSortByRAM', sortBy: 'memory.size', sortOrder: 'desc' },
{ labelId: 'homeSortByCpus', sortBy: 'CPUs.cpu_count', sortOrder: 'desc' }, {
labelId: 'homeSortByCpus',
sortBy: 'CPUs.cpu_count',
sortOrder: 'desc',
},
], ],
}, },
VM: { VM: {
@ -199,7 +203,11 @@ const OPTIONS = {
defaultFilter: '', defaultFilter: '',
filters: homeFilters.vmTemplate, filters: homeFilters.vmTemplate,
mainActions: [ mainActions: [
{ handler: deleteTemplates, icon: 'delete', tooltip: _('templateDelete') }, {
handler: deleteTemplates,
icon: 'delete',
tooltip: _('templateDelete'),
},
], ],
Item: TemplateItem, Item: TemplateItem,
showPoolsSelector: true, showPoolsSelector: true,
@ -485,14 +493,36 @@ export default class Home extends Component {
} }
_getDefaultSort (props = this.props) { _getDefaultSort (props = this.props) {
const sortOption = find(OPTIONS[props.type].sortOptions, 'default') const { sortOptions } = OPTIONS[props.type]
const defaultSort = find(sortOptions, 'default')
const urlSort = find(sortOptions, { sortBy: props.location.query.sortBy })
return { return {
sortBy: defined(() => sortOption.sortBy, 'name_label'), sortBy: defined(
sortOrder: defined(() => sortOption.sortOrder, 'asc'), () => urlSort.sortBy,
() => defaultSort.sortBy,
'name_label'
),
sortOrder: defined(
() => urlSort.sortOrder,
() => defaultSort.sortOrder,
'asc'
),
} }
} }
_setSort (event) {
const { sortBy, sortOrder } = event.currentTarget.dataset
const { pathname, query } = this.props.location
this.setState({ sortBy, sortOrder })
this.context.router.replace({
pathname,
query: { ...query, sortBy },
})
}
_setSort = this._setSort.bind(this)
_initFilterAndSortBy (props) { _initFilterAndSortBy (props) {
const filter = this._getFilter(props) const filter = this._getFilter(props)
@ -1060,9 +1090,9 @@ export default class Home extends Component {
({ labelId, sortBy: _sortBy, sortOrder }, key) => ( ({ labelId, sortBy: _sortBy, sortOrder }, key) => (
<MenuItem <MenuItem
key={key} key={key}
onClick={() => data-sort-by={_sortBy}
this.setState({ sortBy: _sortBy, sortOrder }) data-sort-order={sortOrder}
} onClick={this._setSort}
> >
{this._tick(_sortBy === sortBy)} {this._tick(_sortBy === sortBy)}
{_sortBy === sortBy ? ( {_sortBy === sortBy ? (