Skip to content

Commit 40a0779

Browse files
author
esuau
committed
Fix #176 Update toggle to support checked input
1 parent 0403ddf commit 40a0779

File tree

5 files changed

+38
-14
lines changed

5 files changed

+38
-14
lines changed

src/switch/switch.component.spec.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,10 @@ describe("Switch", () => {
6464
expect(labelElement.innerHTML).toContain("bx--toggle__check");
6565
});
6666

67+
it("should match the input checked value", () => {
68+
component.checked = true;
69+
fixture.detectChanges();
70+
expect(buttonElement.attributes.getNamedItem("aria-checked").value).toEqual("true");
71+
});
72+
6773
});

src/switch/switch.component.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,19 @@ export class SwitchChange {
5151
template: `
5252
<input
5353
class="bx--toggle"
54+
type="checkbox"
5455
[ngClass]="{
5556
'bx--toggle--small': size === 'sm'
5657
}"
5758
[id]="id"
58-
type="checkbox"
59-
(click)="onClick($event)"
59+
[value]="value"
60+
[name]="name"
61+
[required]="required"
62+
[checked]="checked"
6063
[disabled]="disabled"
61-
[attr.aria-checked]="checked">
64+
[attr.aria-checked]="checked"
65+
(change)="onChange($event)"
66+
(click)="onClick($event)">
6267
<label *ngIf="size === 'md'" class="bx--toggle__label" [for]="id">
6368
<span class="bx--toggle__text--left">Off</span>
6469
<span class="bx--toggle__appearance"></span>

src/toggle/toggle.component.spec.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
11
import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
22
import { ComponentFixture, TestBed, fakeAsync, tick, async } from "@angular/core/testing";
33
import { By } from "@angular/platform-browser";
4-
import { DebugElement } from "@angular/core";
54
import { StaticIconModule } from "../icon/static-icon.module";
65

76
import { Toggle } from "./toggle.component";
8-
import { Checkbox } from "../checkbox/checkbox.module";
97

108
describe("Toggle", () => {
119
let component: Toggle;
1210
let fixture: ComponentFixture<Toggle>;
1311
let labelElement: HTMLElement;
1412
let buttonElement: HTMLElement;
15-
let svgElement: HTMLElement;
1613

1714
beforeEach(() => {
1815
TestBed.configureTestingModule({
@@ -64,4 +61,10 @@ describe("Toggle", () => {
6461
expect(labelElement.innerHTML).toContain("bx--toggle__check");
6562
});
6663

64+
it("should match the input checked value", () => {
65+
component.checked = true;
66+
fixture.detectChanges();
67+
expect(buttonElement.attributes.getNamedItem("aria-checked").value).toEqual("true");
68+
});
69+
6770
});

src/toggle/toggle.component.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ import { Checkbox } from "../checkbox/checkbox.component";
22
import {
33
ChangeDetectorRef,
44
Component,
5-
Input
5+
Input,
6+
Output,
7+
EventEmitter,
8+
ChangeDetectionStrategy
69
} from "@angular/core";
710
import { NG_VALUE_ACCESSOR } from "@angular/forms";
811

@@ -53,14 +56,19 @@ export class ToggleChange {
5356
template: `
5457
<input
5558
class="bx--toggle"
59+
type="checkbox"
5660
[ngClass]="{
5761
'bx--toggle--small': size === 'sm'
5862
}"
5963
[id]="id"
60-
type="checkbox"
61-
(click)="onClick($event)"
64+
[value]="value"
65+
[name]="name"
66+
[required]="required"
67+
[checked]="checked"
6268
[disabled]="disabled"
63-
[attr.aria-checked]="checked">
69+
[attr.aria-checked]="checked"
70+
(change)="onChange($event)"
71+
(click)="onClick($event)">
6472
<label *ngIf="size === 'md'" class="bx--toggle__label" [for]="id">
6573
<span class="bx--toggle__text--left">Off</span>
6674
<span class="bx--toggle__appearance"></span>

src/toggle/toggle.stories.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,20 @@ storiesOf("Toggle", module).addDecorator(
1111
.addDecorator(withKnobs)
1212
.add("Basic", () => ({
1313
template: `
14-
<ibm-toggle [disabled]="disabled"></ibm-toggle>
14+
<ibm-toggle [disabled]="disabled" [checked]="checked"></ibm-toggle>
1515
`,
1616
props: {
17-
disabled: boolean("disabled", false)
17+
disabled: boolean("disabled", false),
18+
checked: boolean("checked", false)
1819
}
1920

2021
}))
2122
.add("Small", () => ({
2223
template: `
23-
<ibm-toggle [disabled]="disabled" size="sm"></ibm-toggle>
24+
<ibm-toggle [disabled]="disabled" [checked]="checked" size="sm"></ibm-toggle>
2425
`,
2526
props: {
26-
disabled: boolean("disabled", false)
27+
disabled: boolean("disabled", false),
28+
checked: boolean("checked", false)
2729
}
2830
}));

0 commit comments

Comments
 (0)