98 lines
3.1 KiB
JavaScript
98 lines
3.1 KiB
JavaScript
|
|
import BaseComponent from './basic-component';
|
|
import { computed } from '@ember/object';
|
|
import { addObserver } from '@ember/object/observers';
|
|
|
|
export default BaseComponent.extend({
|
|
classNames: ['widget-toolbox', 'clearfix'],
|
|
didReceiveAttrs() {
|
|
const me = this;
|
|
me._super(...arguments);
|
|
|
|
if (!me.get('total')) {
|
|
const field = 'route.controller.model.total';
|
|
me.set('total', me.get(field));
|
|
addObserver(me, field, function() {
|
|
me.set('total', me.get(field));
|
|
});
|
|
}
|
|
},
|
|
prevPage: computed('currPage', function() {
|
|
return this.get('currPage') - 1 || 1;
|
|
}),
|
|
nextPage: computed('currPage', function() {
|
|
let me = this;
|
|
let page = me.get('currPage');
|
|
return page + 1 <= me.get('totalPage') ? page + 1 : page;
|
|
}),
|
|
currPage: computed('params.page', function() {
|
|
let me = this;
|
|
let currPage = parseInt(me.get('params.page') || 1);
|
|
console.log('Get current page [' + currPage + ']');
|
|
return currPage;
|
|
}),
|
|
pages: computed('currPage', function() {
|
|
const me = this;
|
|
const totalPage = me.get('totalPage');
|
|
const currPage = me.get('currPage');
|
|
let pages = [];
|
|
|
|
if (currPage > 4) {
|
|
pages.push({page: 1, text: 1});
|
|
pages.push({page: currPage - 3, text: '...'});
|
|
pages.push({page: currPage - 2, text: currPage - 2});
|
|
pages.push({page: currPage - 1, text: currPage - 1});
|
|
}
|
|
// from page 1
|
|
else {
|
|
let i = 0;
|
|
while (++i < currPage) {
|
|
pages.push({page: i, text: i});
|
|
}
|
|
}
|
|
|
|
pages.push({page: currPage, text: currPage, active: true});
|
|
|
|
if (currPage < totalPage - 4) {
|
|
pages.push({page: currPage + 1, text: currPage + 1});
|
|
pages.push({page: currPage + 2, text: currPage + 2});
|
|
pages.push({page: currPage + 3, text: '...'});
|
|
pages.push({page: totalPage, text: totalPage});
|
|
}
|
|
// to the end
|
|
else {
|
|
let i = currPage;
|
|
while (++i <= totalPage) {
|
|
pages.push({page: i, text: i});
|
|
}
|
|
}
|
|
return pages;
|
|
}),
|
|
allPages: computed('total', function() {
|
|
const me = this;
|
|
const totalPage = me.get('totalPage');
|
|
let pages = [];
|
|
|
|
let i = 0;
|
|
while (++i <= totalPage) {
|
|
pages.push(i);
|
|
}
|
|
return pages;
|
|
}),
|
|
totalPage: computed('total', function() {
|
|
let me = this;
|
|
let pageSize = me.get('service.pageSize') || 64;
|
|
return parseInt((me.get('total') + pageSize - 1) / pageSize);
|
|
}),
|
|
actions: {
|
|
gotoPage(page) {
|
|
let me = this;
|
|
let router = me.get('router');
|
|
let params = me.getRouteParams();
|
|
params.page = page;
|
|
console.log('Go to page [' + page + '], params: ', params);
|
|
router.transitionTo(me.get('routeName'), {queryParams: params});
|
|
}
|
|
}
|
|
});
|