1
0
mirror of https://github.com/bitwarden/browser synced 2026-02-20 11:24:07 +00:00

[CL-946] Migrate ToggleGroup to OnPush (#17718)

Migrates the ToggleGroup and Toggle components to use OnPush.
This commit is contained in:
Oscar Hinton
2025-12-05 13:06:03 +01:00
committed by jaasen-livefront
parent d7a8c26587
commit d44d83c652
5 changed files with 178 additions and 122 deletions

View File

@@ -1,7 +1,9 @@
import { Component, DebugElement } from "@angular/core";
import { ChangeDetectionStrategy, Component, DebugElement, signal } from "@angular/core";
import { ComponentFixture, TestBed } from "@angular/core/testing";
import { By } from "@angular/platform-browser";
import { BadgeModule } from "../badge";
import { ToggleGroupComponent } from "./toggle-group.component";
import { ToggleGroupModule } from "./toggle-group.module";
@@ -45,8 +47,45 @@ describe("Toggle", () => {
});
});
// FIXME(https://bitwarden.atlassian.net/browse/CL-764): Migrate to OnPush
// eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection
describe("Toggle with badge content", () => {
let fixtureWithBadge: ComponentFixture<TestComponentWithBadgeComponent>;
let badgeContainers: DebugElement[];
beforeEach(async () => {
TestBed.configureTestingModule({
imports: [TestComponentWithBadgeComponent],
});
await TestBed.compileComponents();
fixtureWithBadge = TestBed.createComponent(TestComponentWithBadgeComponent);
fixtureWithBadge.detectChanges();
badgeContainers = fixtureWithBadge.debugElement.queryAll(By.css(".tw-shrink-0"));
});
it("should hide badge container when no badge content is projected", () => {
// First toggle has no badge
expect(badgeContainers[0].nativeElement.hidden).toBe(true);
// Second toggle has a badge
expect(badgeContainers[1].nativeElement.hidden).toBe(false);
// Third toggle has no badge
expect(badgeContainers[2].nativeElement.hidden).toBe(true);
});
it("should show badge container when badge content is projected", () => {
const badgeElement = fixtureWithBadge.debugElement.query(By.css("[bitBadge]"));
expect(badgeElement).toBeTruthy();
expect(badgeElement.nativeElement.textContent.trim()).toBe("2");
});
it("should render badge content correctly", () => {
const badges = fixtureWithBadge.debugElement.queryAll(By.css("[bitBadge]"));
expect(badges.length).toBe(1);
expect(badges[0].nativeElement.textContent.trim()).toBe("2");
});
});
@Component({
selector: "test-component",
template: `
@@ -56,7 +95,24 @@ describe("Toggle", () => {
</bit-toggle-group>
`,
imports: [ToggleGroupModule],
changeDetection: ChangeDetectionStrategy.OnPush,
})
class TestComponent {
selected = 0;
readonly selected = signal(0);
}
@Component({
selector: "test-component-with-badge",
template: `
<bit-toggle-group [(selected)]="selected">
<bit-toggle [value]="0">Zero</bit-toggle>
<bit-toggle [value]="1">One <span bitBadge variant="info">2</span></bit-toggle>
<bit-toggle [value]="2">Two</bit-toggle>
</bit-toggle-group>
`,
imports: [ToggleGroupModule, BadgeModule],
changeDetection: ChangeDetectionStrategy.OnPush,
})
class TestComponentWithBadgeComponent {
readonly selected = signal(0);
}