- /**
- @module ember-flexberry
- */
-
- import Mixin from '@ember/object/mixin';
- import { A } from '@ember/array';
- import { inject as service } from '@ember/service';
- import serializeSortingParam from '../utils/serialize-sorting-param';
-
- /**
- Mixin for route, that sorting on the list form.
-
- @example
- ```javascript
- // app/controllers/employees.js
- import Controller from '@ember/controller';
- import SortableController from 'ember-flexberry/mixins/sortable-controller'
- export default Controller.extend(SortableController, {
- });
- ```
-
- ```javascript
- // app/routes/employees.js
- import Route from '@ember/routing/route';
- import SortableRoute from 'ember-flexberry/mixins/sortable-route'
- export default Route.extend(SortableRoute, {
- });
- ```
-
- ```handlebars
- <!-- app/templates/employees.hbs -->
- ...
- {{flexberry-objectlistview
- ...
- orderable=true
- sortByColumn=(action 'sortByColumn')
- addColumnToSorting=(action 'addColumnToSorting')
- ...
- }}
- ...
- ```
-
- @class SortableRoute
- @uses <a href="https://www.emberjs.com/api/ember/release/classes/Mixin">Mixin</a>
- */
- export default Mixin.create({
- /**
- Configuration hash for this route's queryParams. [More info](https://www.emberjs.com/api/ember/release/classes/Route/properties/queryParams?anchor=queryParams).
-
- @property queryParams
- @type Object
- */
- queryParams: {
- sort: { refreshModel: true }
- },
-
- /**
- Service that triggers objectlistview events.
-
- @property objectlistviewEvents
- @type Service
- */
- objectlistviewEvents: service(),
-
- /**
- Apply sorting to result list.
-
- @method includeSorting
- @param {DS.Model} model
- @param {String} sorting
- @return {DS.Model}
- */
- includeSorting(model, sorting) {
- if (model) {
- model.set('sorting', sorting);
- }
-
- return model;
- },
-
- /**
- Sets sorting and reload component content by component name.
-
- @method setSorting
- @param {String} componentName Component name.
- @param {Array} sorting Sorting object.
- */
- setSorting(componentName, sorting) {
- let sort = serializeSortingParam(A(sorting));
- this.transitionTo(this.currentRouteName, { queryParams: { sort: sort } });
- },
-
- setupController() {
- this._super(...arguments);
-
- this.get('objectlistviewEvents').on('setSorting', this, this.setSorting);
- },
-
- resetController() {
- this._super(...arguments);
-
- this.get('objectlistviewEvents').off('setSorting', this, this.setSorting);
- }
- });
-
-