Skip to content

Commit 3dbc763

Browse files
authored
Add Change Event to ngx-toggle Component (#1050)
* Added change event to ngx-toggle * removed unnecessary event handler on demo page * removed browseranimationsmodule import causing cypress tests to break
1 parent 3225123 commit 3dbc763

File tree

5 files changed

+52
-40
lines changed

5 files changed

+52
-40
lines changed

package-lock.json

Lines changed: 0 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

projects/swimlane/ngx-ui/src/lib/components/toggle/toggle.component.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111
[name]="name"
1212
(blur)="onBlur()"
1313
/>
14-
<label [attr.for]="id" class="ngx-toggle-label" >
14+
<label [attr.for]="id" class="ngx-toggle-label">
1515
<span *ngIf="showIcons && value" class="ngx-icon ngx-check"></span>
1616
<span *ngIf="showIcons && !value" class="ngx-icon ngx-x"></span>
1717
</label>
18-
<label [attr.for]="id" class="ngx-toggle-text" >
18+
<label [attr.for]="id" class="ngx-toggle-text">
1919
<span *ngIf="label" [innerHTML]="label"></span>
2020
<ng-content></ng-content>
2121
</label>

projects/swimlane/ngx-ui/src/lib/components/toggle/toggle.component.spec.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,4 +131,12 @@ describe('ToggleComponent', () => {
131131

132132
expect(component.value).toEqual(false);
133133
});
134+
135+
it('emitChange should emit the change event', () => {
136+
spyOn(component.change, 'emit');
137+
138+
component['emitChange']();
139+
140+
expect(component.change.emit).toHaveBeenCalled();
141+
});
134142
});

projects/swimlane/ngx-ui/src/lib/components/toggle/toggle.component.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import {
55
forwardRef,
66
ChangeDetectionStrategy,
77
ChangeDetectorRef,
8-
HostListener
8+
HostListener,
9+
Output,
10+
EventEmitter
911
} from '@angular/core';
1012
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
1113
import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
@@ -36,6 +38,7 @@ export class ToggleComponent implements ControlValueAccessor {
3638
ev.preventDefault();
3739
if (!this.disabled) {
3840
this.toggle();
41+
this.emitChange();
3942
}
4043
}
4144

@@ -76,6 +79,8 @@ export class ToggleComponent implements ControlValueAccessor {
7679
this._tabIndex = coerceNumberProperty(tabIndex);
7780
}
7881

82+
@Output() change = new EventEmitter<Event>();
83+
7984
get value(): boolean {
8085
return this._value;
8186
}
@@ -138,4 +143,8 @@ export class ToggleComponent implements ControlValueAccessor {
138143
private onChangeCallback = (_: unknown) => {
139144
// placeholder
140145
};
146+
147+
private emitChange() {
148+
this.change.emit({ stopPropagation: () => {}, target: { checked: this._value } } as any);
149+
}
141150
}

src/app/forms/toggle-page/toggle-page.component.html

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,60 +3,45 @@ <h3 class="style-header">Toggle</h3>
33
<ngx-tabs>
44
<ngx-tab label="Examples">
55
<ngx-section class="shadow" [sectionTitle]="'Demo'">
6-
<ngx-toggle name="toggle1" [(ngModel)]="toggleChk" [label]="'High Priority'">
7-
</ngx-toggle>
6+
<ngx-toggle name="toggle1" [(ngModel)]="toggleChk" [label]="'High Priority'"> </ngx-toggle>
87
<app-prism>
9-
<![CDATA[<ngx-toggle
10-
name="toggle1"
11-
[(ngModel)]="toggleChk"
12-
[label]="'High Priority'">
13-
</ngx-toggle>]]>
8+
<![CDATA[<ngx-toggle name="toggle1" [(ngModel)]="toggleChk" [label]="'High Priority'"> </ngx-toggle>]]>
149
</app-prism>
1510
<br />
1611
<br />
17-
18-
<ngx-toggle name="toggle2" [disabled]="true" [label]="'Disabled'">
19-
</ngx-toggle>
12+
13+
<ngx-toggle name="toggle2" [disabled]="true" [label]="'Disabled'"> </ngx-toggle>
2014
<app-prism>
21-
<![CDATA[<ngx-toggle
22-
name="toggle2"
23-
[disabled]="true"
24-
[label]="'Disabled'">
25-
</ngx-toggle>]]>
15+
<![CDATA[<ngx-toggle name="toggle2" [disabled]="true" [label]="'Disabled'"> </ngx-toggle>]]>
2616
</app-prism>
2717
<br />
2818
<br />
29-
19+
3020
<ngx-toggle name="toggle3" [(ngModel)]="toggleChk" (ngModelChange)="onToggleChange($event)">
3121
<strong class="color-red" [hidden]="!toggleChk">Alert Everyone!</strong>
3222
<strong class="color-green" [hidden]="toggleChk">All good!</strong>
3323
</ngx-toggle>
3424
<app-prism>
35-
<![CDATA[<ngx-toggle name="toggle3" [(ngModel)]="toggleChk" (ngModelChange)="onToggleChange($event)">
36-
<strong class="color-red" [hidden]="!toggleChk">Alert Everyone!</strong>
37-
<strong class="color-green" [hidden]="toggleChk">All good!</strong>
38-
</ngx-toggle>]]>
25+
<![CDATA[<ngx-toggle name="toggle3" [(ngModel)]="toggleChk" (ngModelChange)="onToggleChange($event)"> <strong
26+
class="color-red" [hidden]="!toggleChk">Alert Everyone!</strong> <strong class="color-green"
27+
[hidden]="toggleChk">All good!</strong> </ngx-toggle>]]>
3928
</app-prism>
4029
<br />
4130
<br />
42-
31+
4332
<ngx-toggle name="toggle4" [(ngModel)]="toggleChk" [label]="'High Priority With No Icons'" [showIcons]="false">
4433
</ngx-toggle>
4534
<app-prism>
46-
<![CDATA[<ngx-toggle
47-
name="toggle4"
48-
[(ngModel)]="toggleChk"
49-
[label]="'High Priority With No Icons'"
50-
[showIcons]="false">
51-
</ngx-toggle>]]>
35+
<![CDATA[<ngx-toggle name="toggle4" [(ngModel)]="toggleChk" [label]="'High Priority With No Icons'"
36+
[showIcons]="false"> </ngx-toggle>]]>
5237
</app-prism>
5338
</ngx-section>
5439
</ngx-tab>
5540
<ngx-tab label="API">
5641
<h3>Table of Contents</h3>
5742
<a class="documentation-content" (click)="scrollTo('inputs')">Component Inputs</a>
5843
<a class="documentation-content" (click)="scrollTo('outputs')">Component Outputs</a>
59-
<hr>
44+
<hr />
6045

6146
<h3 class="style-header" id="inputs">Component Inputs</h3>
6247
<table class="table documentation-table">
@@ -118,8 +103,24 @@ <h3 class="style-header" id="inputs">Component Inputs</h3>
118103
</tr>
119104
</tbody>
120105
</table>
121-
<hr>
106+
<hr />
122107
<h3 class="style-header" id="outputs">Component Outputs</h3>
123-
<h4>No component outputs to display.</h4>
108+
<table class="table documentation-table">
109+
<thead>
110+
<tr>
111+
<th>Name</th>
112+
<th>Description</th>
113+
</tr>
114+
</thead>
115+
<tbody>
116+
<tr>
117+
<th>
118+
<code class="component-type">&#64;Output()</code>
119+
<code>change: EventEmitter&lt;Event&gt;</code>
120+
</th>
121+
<td>Event emitted when the value is changed.</td>
122+
</tr>
123+
</tbody>
124+
</table>
124125
</ngx-tab>
125-
</ngx-tabs>
126+
</ngx-tabs>

0 commit comments

Comments
 (0)