From f5628e7b16cc865ea2bc5c50650e5d746db98e45 Mon Sep 17 00:00:00 2001 From: sea <45450994+warmthsea@users.noreply.github.com> Date: Sat, 28 Sep 2024 17:10:35 +0800 Subject: [PATCH] refactor(components): [badge] show-zero implement (#18360) --- .../components/badge/__tests__/badge.test.tsx | 25 ++++++++++++++----- packages/components/badge/src/badge.vue | 7 +++--- packages/theme-chalk/src/badge.scss | 4 +++ 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/packages/components/badge/__tests__/badge.test.tsx b/packages/components/badge/__tests__/badge.test.tsx index e2aab4fb74..d3ed6d448c 100644 --- a/packages/components/badge/__tests__/badge.test.tsx +++ b/packages/components/badge/__tests__/badge.test.tsx @@ -70,16 +70,29 @@ describe('Badge', () => { )) expect(wrapper.find('.el-badge__content').text()).toEqual('0') - badgeValue.value = 80 - await nextTick() - expect(wrapper.find('.el-badge__content').text()).toEqual('80') showZero.value = false + await nextTick() + expect(wrapper.find('.el-badge__content').classes()).toContain( + 'is-hide-zero' + ) + + badgeValue.value = 1 + await nextTick() + expect(wrapper.find('.el-badge__content').text()).toEqual('1') + expect(wrapper.find('.el-badge__content').classes()).not.toContain( + 'is-hide-zero' + ) badgeValue.value = 0 await nextTick() - expect(wrapper.find('.el-badge__content').text()).toEqual('') - badgeValue.value = 80 + expect(wrapper.find('.el-badge__content').classes()).toContain( + 'is-hide-zero' + ) + + showZero.value = true await nextTick() - expect(wrapper.find('.el-badge__content').text()).toEqual('80') + expect(wrapper.find('.el-badge__content').classes()).not.toContain( + 'is-hide-zero' + ) }) test('showZero with max', async () => { diff --git a/packages/components/badge/src/badge.vue b/packages/components/badge/src/badge.vue index 29703be944..b2de55b91f 100644 --- a/packages/components/badge/src/badge.vue +++ b/packages/components/badge/src/badge.vue @@ -9,6 +9,7 @@ ns.em('content', type), ns.is('fixed', !!$slots.default), ns.is('dot', isDot), + ns.is('hide-zero', !showZero && props.value === 0), badgeClass, ]" :style="style" @@ -36,13 +37,11 @@ const ns = useNamespace('badge') const content = computed(() => { if (props.isDot) return '' if (isNumber(props.value) && isNumber(props.max)) { - if (props.max < props.value) { - return `${props.max}+` - } - return props.value === 0 && !props.showZero ? '' : `${props.value}` + return props.max < props.value ? `${props.max}+` : `${props.value}` } return `${props.value}` }) + const style = computed(() => { return [ { diff --git a/packages/theme-chalk/src/badge.scss b/packages/theme-chalk/src/badge.scss index 05d18becbb..07db187d3f 100644 --- a/packages/theme-chalk/src/badge.scss +++ b/packages/theme-chalk/src/badge.scss @@ -45,6 +45,10 @@ border-radius: 50%; } + @include when(hide-zero) { + display: none; + } + @each $type in (primary, success, warning, info, danger) { @include m($type) { background-color: getCssVar('color', $type);