From 6f1f506bcb5204485165183c5bfdf70ef85cbb1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=98=E9=9A=8F=E9=A3=8E=E6=9F=93?= <83899365+chensuifengran@users.noreply.github.com> Date: Mon, 23 Sep 2024 11:24:48 +0800 Subject: [PATCH] fix(components): [color-picker] support dynamic change of showAlpha prop (#18280) * feat(components): [color-picker] supports dynamic change of colorFormat * test(components): [color-picker] test cases with fixes added * fix(components): [color-picker] support dynamic change of showAlpha prop --------- Co-authored-by: SKSQ2529720581 <83899365+SKSQ2529720581@users.noreply.github.com> --- .../__tests__/color-picker.test.tsx | 66 +++++++++++++------ .../color-picker/src/color-picker.vue | 11 ++-- 2 files changed, 50 insertions(+), 27 deletions(-) diff --git a/packages/components/color-picker/__tests__/color-picker.test.tsx b/packages/components/color-picker/__tests__/color-picker.test.tsx index 3464f423f4..e6f5cbcd15 100644 --- a/packages/components/color-picker/__tests__/color-picker.test.tsx +++ b/packages/components/color-picker/__tests__/color-picker.test.tsx @@ -433,6 +433,51 @@ describe('Color-picker', () => { wrapper.unmount() }) + it('should update the colorFormat and selected color when the colorFormat prop changes', async () => { + const color = ref('#00FF00') + const colorFormat = ref('hex') + const wrapper = mount(() => ( + + )) + + colorFormat.value = 'rgb' + await nextTick() + const colorPickerWrapper = wrapper.findComponent(ColorPicker) + const customInput = colorPickerWrapper.findComponent({ + ref: 'inputRef', + }) + expect(colorPickerWrapper.vm.color.format).toBe('rgb') + expect(color.value).toBe('rgb(0, 255, 0)') + expect( + customInput.find('.el-input__inner').element.value + ).toBe('rgb(0, 255, 0)') + wrapper.unmount() + }) + it('should update the selected color when the showAlpha prop changes', async () => { + const color = ref('#00FF00AA') + const showAlpha = ref(true) + const wrapper = mount(() => ( + + )) + + showAlpha.value = false + await nextTick() + const colorPickerWrapper = wrapper.findComponent(ColorPicker) + const customInput = colorPickerWrapper.findComponent({ + ref: 'inputRef', + }) + expect(colorPickerWrapper.vm.color.enableAlpha).toBe(false) + expect(color.value).toBe('#00FF00') + expect( + customInput.find('.el-input__inner').element.value + ).toBe('#00FF00') + wrapper.unmount() + }) + describe('form item accessibility integration', () => { it('automatic id attachment', async () => { const wrapper = mount(() => ( @@ -498,25 +543,4 @@ describe('Color-picker', () => { expect(blurHandler).toHaveBeenCalled() wrapper.unmount() }) - - it('when colorFormat prop changes, the color format and v-model binding values should be updated', async () => { - const color = ref('#00FF00') - const colorFormat = ref('hex') - const wrapper = mount(() => ( - - )) - - colorFormat.value = 'rgb' - await nextTick() - const colorPickerWrapper = wrapper.findComponent(ColorPicker) - const customInput = colorPickerWrapper.findComponent({ - ref: 'inputRef', - }) - expect(colorPickerWrapper.vm.color.format).toBe('rgb') - expect(color.value).toBe('rgb(0, 255, 0)') - expect( - customInput.find('.el-input__inner').element.value - ).toBe('rgb(0, 255, 0)') - wrapper.unmount() - }) }) diff --git a/packages/components/color-picker/src/color-picker.vue b/packages/components/color-picker/src/color-picker.vue index e59d356a00..28ee6cd842 100644 --- a/packages/components/color-picker/src/color-picker.vue +++ b/packages/components/color-picker/src/color-picker.vue @@ -364,13 +364,12 @@ watch( ) watch( - () => props.colorFormat, + () => [props.colorFormat, props.showAlpha], () => { - if (props.colorFormat) { - color.format = props.colorFormat - color.doOnChange() - emit(UPDATE_MODEL_EVENT, color.value) - } + color.enableAlpha = props.showAlpha + color.format = props.colorFormat || color.format + color.doOnChange() + emit(UPDATE_MODEL_EVENT, color.value) } )