Show:
/**
  @module ember-flexberry-designer
*/

import Ember from 'ember';
import FdDataTypes from '../utils/fd-datatypes';

/**
  This component mimics the `flexberry-objectlistview` component in the edit form constructor.

  @class FdObjectlistviewComponent
  @extends <a href="http://emberjs.com/api/classes/Ember.Component.html">Ember.Component</a>
*/
export default Ember.Component.extend({
  /**
    @private
    @property _dataTypes
    @type Ember.Object
  */
  _dataTypes: FdDataTypes.create(),

  /**
    Table headings.

    @private
    @property _headers
    @type Ember.NativeArray
  */
  _headers: Ember.computed.map('view.definition', pd => pd.get('caption') || pd.get('name')),

  /**
    Cells for each row, they are always generated anew.

    @private
    @property _cells
    @type Ember.NativeArray
  */
  _cells: Ember.computed('_headers.length', function() {
    let cells = Ember.A();
    let types = this.get('types');
    let dataTypes = this.get('_dataTypes');
    let length = this.get('_headers.length');
    for (let i = 0; i < length; i++) {
      let type = dataTypes.flexberryTypeToFD(types && types[i] && types[i].type);
      cells.pushObject(dataTypes.randomValue(type));
    }

    return cells;
  }).volatile(),

  /**
    The rows generated for rendering in the table.

    @private
    @property _rows
    @type Ember.NativeArray
  */
  _rows: Ember.computed('rowsCount', function() {
    let rows = Ember.A();
    let rowsCount = this.get('rowsCount');
    for (let i = 0; i < rowsCount; i++) {
      rows.pushObject(this.get('_cells'));
    }

    return rows;
  }),

  /**
    The rows displayed on the current page.

    @private
    @property _rowsOnPage
    @type Ember.NativeArray
  */
  _rowsOnPage: Ember.computed('_rows.[]', 'page', 'perPage', function() {
    let { page, perPage } = this.getProperties('page', 'perPage');

    return this.get('_rows').slice((page - 1) * perPage, perPage * page);
  }),

  /**
    Page numbers.

    @private
    @property _pages
    @type Ember.NativeArray
  */
  _pages: Ember.computed('rowsCount', 'perPage', function() {
    let pages = Ember.A();
    let count = Math.ceil(this.get('rowsCount') / this.get('perPage'));
    for (let i = 1; i <= count; i++) {
      pages.pushObject(i);
    }

    return pages;
  }),

  /**
    An array of types used in the view.

    @property types
    @type Array
  */
  types: undefined,

  /**
    The view on which the table will be rendered.

    @property view
    @type FdDevViewModel
  */
  view: undefined,

  /**
    The count of rows that will be generated to render the table.

    @property rowsCount
    @type Number
    @default 15
  */
  rowsCount: 15,

  /**
    The current page.

    @property page
    @type Number
    @default 1
  */
  page: 1,

  /**
    The count of rows showing on per page.

    @property perPage
    @type Number
    @default 5
  */
  perPage: 5,
});