private getGroupedData()

in src/tableView.ts [214:301]


        private getGroupedData(): TableViewGroupedData {
            let options: TableViewViewOptions = this.options,
                groupedData: any[] = [],
                totalItems: number = this._data.length,
                totalRows: number = options.rows > totalItems
                    ? totalItems
                    : options.rows,
                totalColumns: number = options.columns > totalItems
                    ? totalItems
                    : options.columns;

            if (totalColumns === 0 && totalRows === 0) {
                if (options.orientation === Orientation.HORIZONTAL) {
                    totalColumns = totalItems;
                    totalRows = 1;
                } else {
                    totalColumns = 1;
                    totalRows = totalItems;
                }
            } else if (totalColumns === 0 && totalRows > 0) {
                totalColumns = Math.ceil(totalItems / totalRows);
            } else if (totalColumns > 0 && totalRows === 0) {
                totalRows = Math.ceil(totalItems / totalColumns);
            }

            if (this.options.orientation === Orientation.VERTICAL) {
                let n: number = totalRows;

                totalRows = totalColumns;
                totalColumns = n;
            } else if (this.options.orientation === Orientation.HORIZONTAL) {
                if (totalRows === 0) {
                    totalRows = this._totalRows;
                }

                if (totalColumns === 0) {
                    totalColumns = this._totalColumns;
                }
            }

            let m: number = 0,
                k: number = 0;

            for (let i: number = 0; i < totalRows; i++) {
                if (this.options.orientation === Orientation.VERTICAL
                    && options.rows === 0
                    && totalItems % options.columns > 0
                    && options.columns <= totalItems) {
                    if (totalItems % options.columns > i) {
                        m = i * Math.ceil(totalItems / options.columns);
                        k = m + Math.ceil(totalItems / options.columns);

                        this.addDataToArray(groupedData, this._data, m, k);
                    } else {
                        this.addDataToArray(groupedData, this._data, k, k + Math.floor(totalItems / options.columns));

                        k = k + Math.floor(totalItems / options.columns);
                    }
                } else if (this.options.orientation === Orientation.HORIZONTAL
                    && options.columns === 0
                    && totalItems % options.rows > 0
                    && options.rows <= totalItems) {

                    if (totalItems % options.rows > i) {
                        m = i * Math.ceil(totalItems / options.rows);
                        k = m + Math.ceil(totalItems / options.rows);

                        this.addDataToArray(groupedData, this._data, m, k);
                    } else {
                        this.addDataToArray(groupedData, this._data, k, k + Math.floor(totalItems / options.rows));

                        k = k + Math.floor(totalItems / options.rows);
                    }
                } else {
                    let k: number = i * totalColumns;

                    this.addDataToArray(groupedData, this._data, k, k + totalColumns);
                }
            }

            this.computedOptions = this.getComputedOptions(groupedData, this.options.orientation);

            return {
                data: groupedData,
                totalColumns: totalColumns,
                totalRows: totalRows
            };
        }