BigW Consortium Gitlab

Commit bff8e5ba by Regis

add change page logic to pagination component - add first test for pagination

parent b5cd430a
...@@ -9,11 +9,41 @@ ...@@ -9,11 +9,41 @@
const FIRST = '<< First'; const FIRST = '<< First';
const LAST = 'Last >>'; const LAST = 'Last >>';
const getParameterByName = (name) => {
const url = window.location.href;
name = name.replace(/[[\]]/g, '\\$&');
const regex = new RegExp(`[?&]${name}(=([^&#]*)|&|#|$)`);
const results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, ' '));
};
gl.VueGlPagination = Vue.extend({ gl.VueGlPagination = Vue.extend({
props: [ props: [
'changepage', 'change',
'pageInfo', 'pageInfo',
], ],
methods: {
changepage(e) {
let pagenum = this.pageInfo.page;
let apiScope = getParameterByName('scope');
if (!apiScope) apiScope = 'all';
const text = e.target.innerText;
const { totalPages, nextPage, previousPage } = this.pageInfo;
if (text === SPREAD) return;
if (/^-?[\d.]+(?:e-?\d+)?$/.test(text)) pagenum = +text;
if (text === LAST) pagenum = totalPages;
if (text === NEXT) pagenum = nextPage;
if (text === PREV) pagenum = previousPage;
if (text === FIRST) pagenum = 1;
this.change(pagenum, apiScope);
},
},
computed: { computed: {
prev() { prev() {
return this.pageInfo.previousPage; return this.pageInfo.previousPage;
......
...@@ -2,12 +2,6 @@ ...@@ -2,12 +2,6 @@
/* eslint-disable no-param-reassign, no-bitwise*/ /* eslint-disable no-param-reassign, no-bitwise*/
((gl) => { ((gl) => {
const SPREAD = '...';
const PREV = 'Prev';
const NEXT = 'Next';
const FIRST = '<< First';
const LAST = 'Last >>';
const getParameterByName = (name) => { const getParameterByName = (name) => {
const url = window.location.href; const url = window.location.href;
name = name.replace(/[[\]]/g, '\\$&'); name = name.replace(/[[\]]/g, '\\$&');
...@@ -51,21 +45,11 @@ ...@@ -51,21 +45,11 @@
this.store.fetchDataLoop.call(this, Vue, this.pagenum, this.scope, this.apiScope); this.store.fetchDataLoop.call(this, Vue, this.pagenum, this.scope, this.apiScope);
}, },
methods: { methods: {
changepage(e) { change(pagenum, apiScope) {
const scope = getParameterByName('scope'); window.history.pushState({}, null, `?scope=${apiScope}&p=${pagenum}`);
if (scope) this.apiScope = scope;
const text = e.target.innerText;
const { totalPages, nextPage, previousPage } = this.pageInfo;
if (text === SPREAD) return;
if (/^-?[\d.]+(?:e-?\d+)?$/.test(text)) this.pagenum = +text;
if (text === LAST) this.pagenum = totalPages;
if (text === NEXT) this.pagenum = nextPage;
if (text === PREV) this.pagenum = previousPage;
if (text === FIRST) this.pagenum = 1;
window.history.pushState({}, null, `?scope=${this.apiScope}&p=${this.pagenum}`);
clearInterval(this.timeLoopInterval); clearInterval(this.timeLoopInterval);
this.pageRequest = true; this.pageRequest = true;
this.store.fetchDataLoop.call(this, Vue, this.pagenum, this.scope, this.apiScope); this.store.fetchDataLoop.call(this, Vue, pagenum, this.scope, apiScope);
}, },
author(pipeline) { author(pipeline) {
if (!pipeline.commit) return ({ avatar_url: '', web_url: '', username: '' }); if (!pipeline.commit) return ({ avatar_url: '', web_url: '', username: '' });
...@@ -129,7 +113,7 @@ ...@@ -129,7 +113,7 @@
<gl-pagination <gl-pagination
v-if='pageInfo.total > pageInfo.perPage' v-if='pageInfo.total > pageInfo.perPage'
:pagenum='pagenum' :pagenum='pagenum'
:changepage='changepage' :change='change'
:count='count.all' :count='count.all'
:pageInfo='pageInfo' :pageInfo='pageInfo'
> >
......
//= require vue
//= require vue_pagination/index
describe('Pagination component', () => {
let component;
const changeChanges = {
one: '',
two: '',
};
const change = (one, two) => {
changeChanges.one = one;
changeChanges.two = two;
};
it('should render', () => {
fixture.set('<div class="test-pagination-container"></div>');
component = new window.gl.VueGlPagination({
el: document.querySelector('.test-pagination-container'),
propsData: {
pageInfo: {
totalPages: 10,
nextPage: 2,
previousPage: '',
},
change,
},
});
expect(component.$el.classList).toContain('gl-pagination');
component.changepage({ target: { innerText: '1' } });
expect(changeChanges.one).toEqual(1);
expect(changeChanges.two).toEqual('all');
});
});
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment