diff --git a/client/src/handlers/select-related.js b/client/src/handlers/select-related.js index 60bbd2f47d..1ebbf05a89 100644 --- a/client/src/handlers/select-related.js +++ b/client/src/handlers/select-related.js @@ -35,6 +35,8 @@ * Advanced filters map. A field name as a key. * @property {string[]} [bool] Bool filters. * @property {string} [primary] A primary filter. + * @property {string} [orderBy] A field to order by. + * @property {'asc'|'desc'} [order] An order direction. */ /** diff --git a/client/src/views/fields/link.js b/client/src/views/fields/link.js index 1e7cfe8353..dd262a6411 100644 --- a/client/src/views/fields/link.js +++ b/client/src/views/fields/link.js @@ -543,12 +543,13 @@ class LinkFieldView extends BaseFieldView { url += '&' + $.param({'where': filters.advanced}); } - if (this.panelDefs.selectOrderBy) { - const direction = this.panelDefs.selectOrderDirection || 'asc'; + const orderBy = filters.orderBy || this.panelDefs.selectOrderBy; + const orderDirection = filters.orderBy ? filters.order : this.panelDefs.selectOrderDirection; + if (orderBy) { url += '&' + $.param({ - orderBy: this.panelDefs.selectOrderBy, - order: direction, + orderBy: orderBy, + order: orderDirection || 'asc', }); } @@ -1118,6 +1119,9 @@ class LinkFieldView extends BaseFieldView { null; this._getSelectFilters().then(filters => { + const orderBy = filters.orderBy || this.panelDefs.selectOrderBy; + const orderDirection = filters.orderBy ? filters.order : this.panelDefs.selectOrderDirection; + this.createView('dialog', viewName, { scope: this.foreignScope, createButton: createButton, @@ -1129,8 +1133,8 @@ class LinkFieldView extends BaseFieldView { filterList: this.getSelectFilterList(), createAttributesProvider: createAttributesProvider, layoutName: this.panelDefs.selectLayout, - orderBy: this.panelDefs.selectOrderBy, - orderDirection: this.panelDefs.selectOrderDirection, + orderBy: orderBy, + orderDirection: orderDirection, }, view => { view.render(); @@ -1236,10 +1240,15 @@ class LinkFieldView extends BaseFieldView { this._applyAdditionalFilter(advanced); + const orderBy = filters.orderBy; + const order = orderBy ? filters.order : undefined; + resolve({ bool: boolFilterList, primary: primaryFilter, advanced: advanced, + orderBy: orderBy, + order: order, }); }); });