feat(components): [checkbox] Checkbox can uncheck exceed max value (#15513)

* feat(components): [checkbox] Checkbox can uncheck exceed max value

closed #15494

* feat(components): add test
This commit is contained in:
kooriookami
2024-01-16 16:35:57 +08:00
committed by GitHub
parent 345a374362
commit 01c99477a6
2 changed files with 30 additions and 1 deletions

View File

@@ -495,6 +495,34 @@ describe('check-button', () => {
expect(wrapper.findComponent({ ref: 'a' }).vm.isDisabled).toBe(true)
})
test('button group exceed max', async () => {
const checkList = ref(['a', 'b', 'c', 'd'])
const wrapper = mount({
setup() {
return () => (
<CheckboxGroup v-model={checkList.value} max={3}>
<CheckboxButton label="a" ref="a" />
<CheckboxButton label="b" ref="b" />
<CheckboxButton label="c" ref="c" />
<CheckboxButton label="d" ref="d" />
<CheckboxButton label="e" ref="e" />
</CheckboxGroup>
)
},
})
expect(checkList.value.length).toBe(4)
await wrapper.findComponent({ ref: 'a' }).trigger('click')
expect(checkList.value.length).toBe(3)
await wrapper.findComponent({ ref: 'a' }).trigger('click')
expect(checkList.value.length).toBe(3)
expect(checkList.value).toEqual(['b', 'c', 'd'])
expect(wrapper.findComponent({ ref: 'a' }).vm.isDisabled).toBe(true)
})
test('nested group', async () => {
const checkList = ref([])
const wrapper = mount({

View File

@@ -22,7 +22,8 @@ export const useCheckboxModel = (props: CheckboxProps) => {
if (isGroup.value && isArray(val)) {
isLimitExceeded.value =
checkboxGroup?.max?.value !== undefined &&
val.length > checkboxGroup?.max.value
val.length > checkboxGroup?.max.value &&
val.length > model.value.length
isLimitExceeded.value === false && checkboxGroup?.changeEvent?.(val)
} else {
emit(UPDATE_MODEL_EVENT, val)