APIs

Show:
  1. /**
  2. @module ember-flexberry
  3. */
  4.  
  5. import Mixin from '@ember/object/mixin';
  6. import { A } from '@ember/array';
  7. import { inject as service } from '@ember/service';
  8. import serializeSortingParam from '../utils/serialize-sorting-param';
  9.  
  10. /**
  11. Mixin for route, that sorting on the list form.
  12.  
  13. @example
  14. ```javascript
  15. // app/controllers/employees.js
  16. import Controller from '@ember/controller';
  17. import SortableController from 'ember-flexberry/mixins/sortable-controller'
  18. export default Controller.extend(SortableController, {
  19. });
  20. ```
  21.  
  22. ```javascript
  23. // app/routes/employees.js
  24. import Route from '@ember/routing/route';
  25. import SortableRoute from 'ember-flexberry/mixins/sortable-route'
  26. export default Route.extend(SortableRoute, {
  27. });
  28. ```
  29.  
  30. ```handlebars
  31. <!-- app/templates/employees.hbs -->
  32. ...
  33. {{flexberry-objectlistview
  34. ...
  35. orderable=true
  36. sortByColumn=(action 'sortByColumn')
  37. addColumnToSorting=(action 'addColumnToSorting')
  38. ...
  39. }}
  40. ...
  41. ```
  42.  
  43. @class SortableRoute
  44. @uses <a href="https://www.emberjs.com/api/ember/release/classes/Mixin">Mixin</a>
  45. */
  46. export default Mixin.create({
  47. /**
  48. Configuration hash for this route's queryParams. [More info](https://www.emberjs.com/api/ember/release/classes/Route/properties/queryParams?anchor=queryParams).
  49.  
  50. @property queryParams
  51. @type Object
  52. */
  53. queryParams: {
  54. sort: { refreshModel: true }
  55. },
  56.  
  57. /**
  58. Service that triggers objectlistview events.
  59.  
  60. @property objectlistviewEvents
  61. @type Service
  62. */
  63. objectlistviewEvents: service(),
  64.  
  65. /**
  66. Apply sorting to result list.
  67.  
  68. @method includeSorting
  69. @param {DS.Model} model
  70. @param {String} sorting
  71. @return {DS.Model}
  72. */
  73. includeSorting(model, sorting) {
  74. if (model) {
  75. model.set('sorting', sorting);
  76. }
  77.  
  78. return model;
  79. },
  80.  
  81. /**
  82. Sets sorting and reload component content by component name.
  83.  
  84. @method setSorting
  85. @param {String} componentName Component name.
  86. @param {Array} sorting Sorting object.
  87. */
  88. setSorting(componentName, sorting) {
  89. let sort = serializeSortingParam(A(sorting));
  90. this.transitionTo(this.currentRouteName, { queryParams: { sort: sort } });
  91. },
  92.  
  93. setupController() {
  94. this._super(...arguments);
  95.  
  96. this.get('objectlistviewEvents').on('setSorting', this, this.setSorting);
  97. },
  98.  
  99. resetController() {
  100. this._super(...arguments);
  101.  
  102. this.get('objectlistviewEvents').off('setSorting', this, this.setSorting);
  103. }
  104. });
  105.