From 3cefe969be6dfca112b92df869fb2e10f3751949 Mon Sep 17 00:00:00 2001 From: Mathieu DARTIGUES Date: Wed, 22 Mar 2017 22:21:33 +0100 Subject: [PATCH] Add minimum/maximum prop to checkbox group --- packages/checkbox/src/checkbox-group.vue | 4 ++- packages/checkbox/src/checkbox.vue | 11 +++++++ test/unit/specs/checkbox.spec.js | 39 ++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/packages/checkbox/src/checkbox-group.vue b/packages/checkbox/src/checkbox-group.vue index 95ed0b030..c784ad7fc 100644 --- a/packages/checkbox/src/checkbox-group.vue +++ b/packages/checkbox/src/checkbox-group.vue @@ -9,7 +9,9 @@ mixins: [Emitter], props: { - value: {} + value: {}, + minimum: String, + maximum: String }, watch: { diff --git a/packages/checkbox/src/checkbox.vue b/packages/checkbox/src/checkbox.vue index 96739ba8e..2e6873f72 100644 --- a/packages/checkbox/src/checkbox.vue +++ b/packages/checkbox/src/checkbox.vue @@ -66,7 +66,18 @@ set(val) { if (this.isGroup) { + let isLimitExceeded = false; + (this._checkboxGroup.minimum !== undefined && + val.length < this._checkboxGroup.minimum && + (isLimitExceeded = true)); + + (this._checkboxGroup.maximum !== undefined && + val.length > this._checkboxGroup.maximum && + (isLimitExceeded = true)); + + isLimitExceeded === false && this.dispatch('ElCheckboxGroup', 'input', [val]); + } else if (this.value !== undefined) { this.$emit('input', val); } else { diff --git a/test/unit/specs/checkbox.spec.js b/test/unit/specs/checkbox.spec.js index d79ed0549..cfeb472d9 100644 --- a/test/unit/specs/checkbox.spec.js +++ b/test/unit/specs/checkbox.spec.js @@ -68,6 +68,45 @@ describe('Checkbox', () => { }); }); + it('checkbox group minimum and maximum', done => { + vm = createVue({ + template: ` + + + + + + + `, + data() { + return { + checkList: ['a'], + lastEvent: null + }; + } + }, true); + expect(vm.checkList.length === 1).to.be.true; + vm.$refs.a.$el.click(); + vm.$nextTick(() => { + expect(vm.checkList.indexOf('a') !== -1).to.be.true; + vm.$refs.b.$el.click(); + vm.$nextTick(() => { + expect(vm.checkList.indexOf('a') !== -1).to.be.true; + expect(vm.checkList.indexOf('b') !== -1).to.be.true; + vm.$refs.c.$el.click(); + vm.$nextTick(() => { + expect(vm.checkList.indexOf('c') !== -1).to.be.false; + expect(vm.checkList.indexOf('d') !== -1).to.be.false; + done(); + }); + }); + }); + }); + it('nested group', done => { vm = createVue({ template: `