Browse Source

Pagination: handle NaN on props (#10623)

* Pagination: handle pageSize NaN

* Pagination: handle currentPage NaN
Brandon 7 years ago
parent
commit
79325390e2
2 changed files with 39 additions and 15 deletions
  1. 18 15
      packages/pagination/src/pagination.js
  2. 21 0
      test/unit/specs/pagination.spec.js

+ 18 - 15
packages/pagination/src/pagination.js

@@ -375,27 +375,30 @@ export default {
     pageSize: {
       immediate: true,
       handler(val) {
-        this.internalPageSize = val;
+        this.internalPageSize = isNaN(val) ? 10 : val;
       }
     },
 
-    internalCurrentPage(newVal, oldVal) {
-      newVal = parseInt(newVal, 10);
-
-      /* istanbul ignore if */
-      if (isNaN(newVal)) {
-        newVal = oldVal || 1;
-      } else {
-        newVal = this.getValidCurrentPage(newVal);
-      }
+    internalCurrentPage: {
+      immediate: true,
+      handler(newVal, oldVal) {
+        newVal = parseInt(newVal, 10);
+
+        /* istanbul ignore if */
+        if (isNaN(newVal)) {
+          newVal = oldVal || 1;
+        } else {
+          newVal = this.getValidCurrentPage(newVal);
+        }
 
-      if (newVal !== undefined) {
-        this.internalCurrentPage = newVal;
-        if (oldVal !== newVal) {
+        if (newVal !== undefined) {
+          this.internalCurrentPage = newVal;
+          if (oldVal !== newVal) {
+            this.$emit('update:currentPage', newVal);
+          }
+        } else {
           this.$emit('update:currentPage', newVal);
         }
-      } else {
-        this.$emit('update:currentPage', newVal);
       }
     },
 

+ 21 - 0
test/unit/specs/pagination.spec.js

@@ -82,6 +82,16 @@ describe('Pagination', () => {
     expect(vm.$el.querySelectorAll('li.number')).to.length(4);
   });
 
+  it('pageSize: NaN', () => {
+    vm = createTest(Pagination, {
+      pageSize: NaN,
+      total: 100
+    });
+
+    const pagers = vm.$el.querySelectorAll('li.number');
+    expect(pagers).to.length(7);
+  });
+
   it('pageCount', () => {
     const vm = createTest(Pagination, {
       pageSize: 25,
@@ -119,6 +129,17 @@ describe('Pagination', () => {
     expect(vm.$el.querySelector('li.number.active')).to.have.property('textContent').to.equal('3');
   });
 
+  it('currentPage: NaN', () => {
+    vm = createTest(Pagination, {
+      pageSize: 20,
+      total: 200,
+      currentPage: NaN
+    });
+
+    expect(vm.$el.querySelector('li.number.active')).to.have.property('textContent').to.equal('1');
+    expect(vm.$el.querySelectorAll('li.number')).to.length(7);
+  });
+
   it('set currentPage & total', (done) => {
     vm = createVue({
       template: `