Skip to content

Commit e9abf92

Browse files
authored
fix(module:badge): after setting nzColor, display incorrect (#9376)
1 parent 1948eac commit e9abf92

3 files changed

Lines changed: 73 additions & 3 deletions

File tree

components/badge/badge-sup.component.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*/
55

66
import {
7+
booleanAttribute,
78
ChangeDetectionStrategy,
89
Component,
910
Input,
@@ -49,11 +50,13 @@ import { NzSafeAny, NzSizeDSType } from 'ng-zorro-antd/core/types';
4950
`,
5051
host: {
5152
class: 'ant-scroll-number',
53+
'[class]': `isPresetColor ? ('ant-badge-status-' + nzColor) : ''`,
5254
'[@.disabled]': `disableAnimation`,
5355
'[@zoomBadgeMotion]': '',
5456
'[attr.title]': `nzTitle === null ? '' : nzTitle || nzCount`,
5557
'[style]': `nzStyle`,
5658
'[style.right.px]': `nzOffset && nzOffset[0] ? -nzOffset[0] : null`,
59+
'[style.background]': `isPresetColor ? nzStyle?.background : nzColor`,
5760
'[style.margin-top.px]': `nzOffset && nzOffset[1] ? nzOffset[1] : null`,
5861
'[class.ant-badge-count]': `!nzDot`,
5962
'[class.ant-badge-count-sm]': `nzSize === 'small'`,
@@ -71,6 +74,8 @@ export class NzBadgeSupComponent implements OnInit, OnChanges {
7174
@Input() nzCount?: number | TemplateRef<NzSafeAny>;
7275
@Input() noAnimation = false;
7376
@Input() nzSize: NzSizeDSType = 'default';
77+
@Input({ transform: booleanAttribute }) isPresetColor = false;
78+
@Input() nzColor?: string = undefined;
7479
maxNumberArray: string[] = [];
7580
countArray: number[] = [];
7681
count: number = 0;

components/badge/badge.component.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,10 @@ const NZ_CONFIG_MODULE_NAME: NzConfigKey = 'badge';
4242
animations: [zoomBadgeMotion],
4343
imports: [NzBadgeSupComponent, NzOutletModule],
4444
template: `
45-
@if (nzStatus || nzColor) {
45+
@if ((nzStatus || nzColor) && !showSup && !nzCount) {
4646
<span
47-
class="ant-badge-status-dot ant-badge-status-{{ nzStatus || presetColor }}"
47+
class="ant-badge-status-dot"
48+
[class]="(nzStatus || presetColor) && 'ant-badge-status-' + (nzStatus || presetColor)"
4849
[style.background]="!presetColor && nzColor"
4950
[style]="nzStyle"
5051
></span>
@@ -56,6 +57,8 @@ const NZ_CONFIG_MODULE_NAME: NzConfigKey = 'badge';
5657
<ng-container *nzStringTemplateOutlet="nzCount">
5758
@if (showSup) {
5859
<nz-badge-sup
60+
[isPresetColor]="nzStatus || presetColor"
61+
[nzColor]="nzStatus || presetColor || nzColor"
5962
[nzOffset]="nzOffset"
6063
[nzSize]="nzSize"
6164
[nzTitle]="nzTitle"
@@ -72,7 +75,7 @@ const NZ_CONFIG_MODULE_NAME: NzConfigKey = 'badge';
7275
host: {
7376
class: 'ant-badge',
7477
'[class.ant-badge-status]': 'nzStatus',
75-
'[class.ant-badge-not-a-wrapper]': '!!(nzStandalone || nzStatus || nzColor)'
78+
'[class.ant-badge-not-a-wrapper]': '!!(nzStandalone || ((nzStatus || nzColor) && !showSup && !nzCount))'
7679
}
7780
})
7881
export class NzBadgeComponent implements OnChanges, OnInit {

components/badge/badge.spec.ts

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ describe('nz-badge', () => {
148148

149149
it('should status work', () => {
150150
testComponent.inner = false;
151+
testComponent.count = 0;
151152
const statusList = ['success', 'processing', 'default', 'error', 'warning'];
152153
statusList.forEach(status => {
153154
testComponent.status = status;
@@ -191,6 +192,65 @@ describe('nz-badge', () => {
191192
tick();
192193
expect(component.presetColor).toEqual(null);
193194
}));
195+
196+
it('should display correct of nzColor related change', fakeAsync(() => {
197+
let color: string | undefined;
198+
testComponent.inner = false;
199+
testComponent.count = 0;
200+
testComponent.status = 'success';
201+
fixture.detectChanges();
202+
expect(badgeElement.nativeElement.classList).toContain('ant-badge-not-a-wrapper');
203+
expect(badgeElement.nativeElement.querySelector('.ant-badge-status-dot').classList).toContain(
204+
`ant-badge-status-success`
205+
);
206+
expect(badgeElement.nativeElement.querySelector('.ant-badge-status-text').innerText).toBe('');
207+
expect(badgeElement.nativeElement.querySelector('nz-badge-sup')).toBeNull();
208+
209+
testComponent.status = '';
210+
testComponent.text = 'test';
211+
fixture.detectChanges();
212+
expect(badgeElement.nativeElement.classList).toContain('ant-badge-not-a-wrapper');
213+
expect(badgeElement.nativeElement.querySelector('.ant-badge-status-dot')).toBeNull();
214+
expect(badgeElement.nativeElement.querySelector('.ant-badge-status-text')).toBeNull();
215+
expect(badgeElement.nativeElement.querySelector('nz-badge-sup')).toBeNull();
216+
217+
color = 'blue';
218+
testComponent.color = color;
219+
fixture.detectChanges();
220+
expect(badgeElement.nativeElement.classList).toContain('ant-badge-not-a-wrapper');
221+
expect(badgeElement.nativeElement.querySelector('.ant-badge-status-dot').classList).toContain(
222+
`ant-badge-status-${color}`
223+
);
224+
expect(badgeElement.nativeElement.querySelector('.ant-badge-status-text').innerText).toBe('test');
225+
expect(badgeElement.nativeElement.querySelector('nz-badge-sup')).toBeNull();
226+
227+
testComponent.inner = true;
228+
color = '#f5222d';
229+
testComponent.color = color;
230+
fixture.detectChanges();
231+
expect(badgeElement.nativeElement.classList).toContain('ant-badge-not-a-wrapper');
232+
expect(badgeElement.nativeElement.querySelector('.ant-badge-status-dot').classList).not.toContain(
233+
`ant-badge-status-`
234+
);
235+
expect(badgeElement.nativeElement.querySelector('.ant-badge-status-dot').style.backgroundColor).toBe(
236+
'rgb(245, 34, 45)'
237+
);
238+
expect(badgeElement.nativeElement.querySelector('.ant-badge-status-text').innerText).toBe('test');
239+
expect(badgeElement.nativeElement.querySelector('nz-badge-sup')).toBeNull();
240+
241+
testComponent.text = '';
242+
testComponent.showZero = true;
243+
fixture.detectChanges();
244+
expect(badgeElement.nativeElement.classList).not.toContain('ant-badge-not-a-wrapper');
245+
expect(badgeElement.nativeElement.querySelector('.ant-badge-status-dot')).toBeNull();
246+
expect(badgeElement.nativeElement.querySelector('.ant-badge-status-text')).toBeNull();
247+
248+
testComponent.count = 5;
249+
fixture.detectChanges();
250+
expect(badgeElement.nativeElement.classList).not.toContain('ant-badge-not-a-wrapper');
251+
expect(badgeElement.nativeElement.querySelector('.ant-badge-status-dot')).toBeNull();
252+
expect(badgeElement.nativeElement.querySelector('.ant-badge-status-text')).toBeNull();
253+
}));
194254
});
195255

196256
describe('ribbon', () => {
@@ -275,6 +335,7 @@ describe('nz-badge', () => {
275335
[nzTitle]="title"
276336
[nzStandalone]="!inner"
277337
[nzSize]="size"
338+
[nzColor]="color"
278339
>
279340
@if (inner) {
280341
<a></a>
@@ -295,6 +356,7 @@ export class NzTestBadgeBasicComponent {
295356
offset?: [number, number];
296357
size: NzSizeDSType = 'default';
297358
noAnimation = true;
359+
color?: string;
298360
}
299361

300362
@Component({

0 commit comments

Comments
 (0)