Skip to content

Commit 8a5d389

Browse files
docs: first step towards signals
1 parent 2be4bda commit 8a5d389

File tree

4 files changed

+41
-25
lines changed

4 files changed

+41
-25
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1-
import { Component, Input, Output, EventEmitter } from '@angular/core';
1+
import {
2+
Component,
3+
Input,
4+
Output,
5+
EventEmitter,
6+
input,
7+
output,
8+
} from '@angular/core';
29
import { RouterLink } from '@angular/router';
310
import { MaterialModule } from '@example-app/material';
411

@@ -7,11 +14,11 @@ import { MaterialModule } from '@example-app/material';
714
selector: 'bc-nav-item',
815
imports: [MaterialModule, RouterLink],
916
template: `
10-
<a mat-list-item [routerLink]="routerLink" (click)="navigate.emit()">
11-
<mat-icon matListItemIcon>{{ icon }}</mat-icon>
17+
<a mat-list-item [routerLink]="routerLink()" (click)="navigate.emit()">
18+
<mat-icon matListItemIcon>{{ icon() }}</mat-icon>
1219
<div matListItemTitle><ng-content></ng-content></div>
13-
@if (hint) {
14-
<div matListItemLine>{{ hint }}</div>
20+
@if (hint()) {
21+
<div matListItemLine>{{ hint() }}</div>
1522
}
1623
</a>
1724
`,
@@ -24,8 +31,9 @@ import { MaterialModule } from '@example-app/material';
2431
],
2532
})
2633
export class NavItemComponent {
27-
@Input() icon = '';
28-
@Input() hint = '';
29-
@Input() routerLink: string | any[] = '/';
30-
@Output() navigate = new EventEmitter<void>();
34+
icon = input('');
35+
hint = input('');
36+
routerLink = input<string | unknown[]>('/');
37+
38+
navigate = output<void>();
3139
}

projects/example-app/src/app/core/components/sidenav.component.ts

+11-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1-
import { Component, EventEmitter, Input, Output } from '@angular/core';
1+
import {
2+
Component,
3+
EventEmitter,
4+
input,
5+
Input,
6+
output,
7+
Output,
8+
} from '@angular/core';
29
import { MaterialModule } from '@example-app/material';
310

411
@Component({
@@ -8,7 +15,7 @@ import { MaterialModule } from '@example-app/material';
815
template: `
916
<mat-sidenav
1017
#sidenav
11-
[opened]="open"
18+
[opened]="open()"
1219
(keydown.escape)="sidenav.close()"
1320
(closedStart)="closeMenu.emit()"
1421
disableClose
@@ -27,6 +34,6 @@ import { MaterialModule } from '@example-app/material';
2734
],
2835
})
2936
export class SidenavComponent {
30-
@Input() open = false;
31-
@Output() closeMenu = new EventEmitter<void>();
37+
open = input(false);
38+
closeMenu = output<void>();
3239
}

projects/example-app/src/app/core/components/toolbar.component.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Component, Output, EventEmitter } from '@angular/core';
1+
import { Component, Output, EventEmitter, output } from '@angular/core';
22
import { MaterialModule } from '@example-app/material';
33

44
@Component({
@@ -15,5 +15,5 @@ import { MaterialModule } from '@example-app/material';
1515
`,
1616
})
1717
export class ToolbarComponent {
18-
@Output() openMenu = new EventEmitter<void>();
18+
openMenu = output<void>();
1919
}

projects/example-app/src/app/core/containers/app.component.ts

+11-10
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ import { selectShowSidenav } from '../reducers/layout.reducer';
3131
],
3232
template: `
3333
<bc-layout>
34-
<bc-sidenav [open]="(showSidenav$ | async)!" (closeMenu)="closeSidenav()">
35-
@if (loggedIn$ | async) {
34+
<bc-sidenav [open]="showSidenav()" (closeMenu)="closeSidenav()">
35+
@if (loggedIn()) {
3636
<bc-nav-item
3737
(navigate)="closeSidenav()"
3838
routerLink="/"
@@ -41,7 +41,6 @@ import { selectShowSidenav } from '../reducers/layout.reducer';
4141
>
4242
My Collection
4343
</bc-nav-item>
44-
} @if (loggedIn$ | async) {
4544
<bc-nav-item
4645
(navigate)="closeSidenav()"
4746
routerLink="/books/find"
@@ -50,13 +49,13 @@ import { selectShowSidenav } from '../reducers/layout.reducer';
5049
>
5150
Browse Books
5251
</bc-nav-item>
53-
} @if ((loggedIn$ | async) === false) {
54-
<bc-nav-item (navigate)="closeSidenav()"> Sign In </bc-nav-item>
55-
} @if (loggedIn$ | async) {
56-
<bc-nav-item (navigate)="logout()"> Sign Out </bc-nav-item>
52+
} @if (!loggedIn()) {
53+
<bc-nav-item (navigate)="closeSidenav()"> Sign In</bc-nav-item>
54+
} @if (loggedIn()) {
55+
<bc-nav-item (navigate)="logout()"> Sign Out</bc-nav-item>
5756
}
5857
</bc-sidenav>
59-
<bc-toolbar (openMenu)="openSidenav()"> Book Collection </bc-toolbar>
58+
<bc-toolbar (openMenu)="openSidenav()"> Book Collection</bc-toolbar>
6059
6160
<router-outlet></router-outlet>
6261
</bc-layout>
@@ -69,8 +68,10 @@ export class AppComponent {
6968
* Selectors can be applied with the `select` operator which passes the state
7069
* tree to the provided selector
7170
*/
72-
protected readonly showSidenav$ = this.store.select(selectShowSidenav);
73-
protected readonly loggedIn$ = this.store.select(fromAuth.selectLoggedIn);
71+
protected readonly showSidenav = this.store.selectSignal(selectShowSidenav);
72+
protected readonly loggedIn = this.store.selectSignal(
73+
fromAuth.selectLoggedIn
74+
);
7475

7576
closeSidenav() {
7677
/**

0 commit comments

Comments
 (0)