blob: 604f9950506fde52effbfec19e116662bca44bd4 [file] [log] [blame]
Matteo Scandolofb46ae62017-08-08 09:10:50 -07001
2/*
3 * Copyright 2017-present Open Networking Foundation
4
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8
9 * http://www.apache.org/licenses/LICENSE-2.0
10
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18
Matteo Scandolo8b2370c2017-02-02 17:19:07 -080019class XosPaginationCtrl {
20 $inject = ['$onInit', '$scope'];
21
22 public pageSize: number;
23 public totalElements: number;
24 public change: any; // fn
25 public currentPage: number;
26 public pages: number;
27 public pageList: number[];
28
29 constructor (
30 private $scope: ng.IScope
31 ) {
32 }
33
34 $onInit() {
35 this.currentPage = 0;
36
37 // watch for data changes
38 this.$scope.$watch(() => this.totalElements, () => {
39 if (this.totalElements) {
40 this.pages = Math.ceil(this.totalElements / this.pageSize);
41 this.pageList = this.createPages(this.pages);
42 }
43 });
44 }
45
46 public goToPage = (n) => {
47 if (n < 0 || n === this.pages) {
48 return;
49 }
50 this.currentPage = n;
51 this.change(n);
52 };
53
54 private createPages = (pages) => {
55 let arr = [];
56 for (let i = 0; i < pages; i++) {
57 arr.push(i);
58 }
59 return arr;
60 };
61}
62
63export const xosPagination: angular.IComponentOptions = {
64 template: require('./pagination.html'),
65 controllerAs: 'vm',
66 controller: XosPaginationCtrl,
67 bindings: {
68 pageSize: '=',
69 totalElements: '=',
70 change: '='
71 }
72};