Skip to content

Commit

Permalink
Merge 7a82523 into 3e6b08c
Browse files Browse the repository at this point in the history
  • Loading branch information
liuzaijiang committed Jul 7, 2022
2 parents 3e6b08c + 7a82523 commit ca6c36b
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 6 deletions.
3 changes: 3 additions & 0 deletions packages/components/cascader/src/contents/OverlayOption.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,9 @@ export default defineComponent({

const handleClick = () => {
if (props.isLeaf) {
if (!isSelected.value && selectedLimit.value) {
return
}
handleSelect(key)
setOverlayOpened(false)
} else {
Expand Down
11 changes: 10 additions & 1 deletion packages/components/select/__tests__/select.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -510,21 +510,30 @@ describe('Select', () => {
})

test('multipleLimit work', async () => {
const onChange = vi.fn()
const wrapper = SelectMount({
props: { open: true, value: [0, 1, 2, 3], multipleLimit: 4 },
props: { open: true, value: [0, 1, 2, 3], multipleLimit: 4, onChange },
})

let options = wrapper.findAllComponents(Option)

expect(options[4].find('.ix-checkbox').classes()).toContain('ix-checkbox-disabled')
expect(options[4].attributes('title')).toBe('该选择器的值不能超过 4 项')

await options[4].trigger('click')

expect(onChange).not.toBeCalled()

await wrapper.setProps({ multipleLimit: 5 })

options = wrapper.findAllComponents(Option)

expect(options[4].find('.ix-checkbox').classes()).not.toContain('ix-checkbox-disabled')
expect(options[4].attributes('title')).toBe('A4')

await options[4].trigger('click')

expect(onChange).toBeCalled()
})

test('maxLabel work', async () => {
Expand Down
13 changes: 8 additions & 5 deletions packages/components/select/src/panel/Option.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,15 @@ export default defineComponent({

const isSelected = computed(() => selectedKeys.value.some(selectedKey => selectedKey === key))

const isDisabled = computed(() => props.disabled || (!isSelected.value && selectedLimit.value))

const classes = computed(() => {
const { disabled, parentKey } = props
const { parentKey } = props
const prefixCls = `${mergedPrefixCls.value}-option`
return {
[prefixCls]: true,
[`${prefixCls}-active`]: isActive.value,
[`${prefixCls}-disabled`]: disabled,
[`${prefixCls}-disabled`]: isDisabled.value,
[`${prefixCls}-grouped`]: !isNil(parentKey),
[`${prefixCls}-selected`]: isSelected.value,
}
Expand All @@ -55,14 +57,15 @@ export default defineComponent({
}

return () => {
const { disabled, label, rawData } = props
const { label, rawData } = props
const { multiple } = selectPanelProps
const selected = isSelected.value
const disabled = isDisabled.value
const prefixCls = `${mergedPrefixCls.value}-option`
const _label = toString(label)

// 优先显示 selectedLimitTitle
const title = (!(disabled || selected) && selectedLimitTitle.value) || _label
const title = (disabled && selectedLimitTitle.value) || _label
const customAdditional = selectPanelProps.customAdditional
? selectPanelProps.customAdditional({ data: rawData!, index: props.index! })
: undefined
Expand All @@ -78,7 +81,7 @@ export default defineComponent({
{...rawData!.additional}
{...customAdditional}
>
{multiple && <IxCheckbox checked={selected} disabled={disabled || (!selected && selectedLimit.value)} />}
{multiple && <IxCheckbox checked={selected} disabled={disabled} />}
<span class={`${prefixCls}-label`}>{renderOptionLabel(slots, rawData!, _label)}</span>
</div>
)
Expand Down

0 comments on commit ca6c36b

Please sign in to comment.