Additions/55 back button navigation (#1016)

feat: new angular back button navigation challenge
This commit is contained in:
Tsironis Ioannis
2024-07-01 11:59:13 +03:00
committed by GitHub
parent d05c279e67
commit 7335c396b8
35 changed files with 493 additions and 15 deletions

View File

@@ -0,0 +1 @@
<router-outlet></router-outlet>

View File

@@ -0,0 +1,10 @@
import { Component } from '@angular/core';
import { RouterLink, RouterOutlet } from '@angular/router';
@Component({
standalone: true,
imports: [RouterOutlet, RouterLink],
selector: 'app-root',
templateUrl: './app.component.html',
})
export class AppComponent {}

View File

@@ -0,0 +1,10 @@
import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
import { provideRouter } from '@angular/router';
import { APP_ROUTES } from './app.routes';
export const appConfig: ApplicationConfig = {
providers: [
provideZoneChangeDetection({ eventCoalescing: true }),
provideRouter(APP_ROUTES),
],
};

View File

@@ -0,0 +1,24 @@
import { Routes } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { SensitiveActionComponent } from './sensitive-action/sensitive-action.component';
import { SimpleActionComponent } from './simple-action/simple-action.component';
export const APP_ROUTES: Routes = [
{
path: '',
pathMatch: 'full',
redirectTo: 'home',
},
{
path: 'home',
component: HomeComponent,
},
{
path: 'simple-action',
component: SimpleActionComponent,
},
{
path: 'sensitive-action',
component: SensitiveActionComponent,
},
];

View File

@@ -0,0 +1,6 @@
<h2 mat-dialog-title>Delete file</h2>
<mat-dialog-content>Would you like to delete cat.jpeg?</mat-dialog-content>
<mat-dialog-actions>
<button mat-button mat-dialog-close>No</button>
<button mat-button mat-dialog-close cdkFocusInitial>Ok</button>
</mat-dialog-actions>

View File

@@ -0,0 +1,26 @@
import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import {
MatDialogActions,
MatDialogClose,
MatDialogContent,
MatDialogRef,
MatDialogTitle,
} from '@angular/material/dialog';
@Component({
selector: 'app-dialog-dialog',
templateUrl: './dialog.component.html',
standalone: true,
imports: [
MatButtonModule,
MatDialogActions,
MatDialogClose,
MatDialogTitle,
MatDialogContent,
],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class DialogComponent {
readonly dialogRef = inject(MatDialogRef<DialogComponent>);
}

View File

@@ -0,0 +1,7 @@
<a mat-raised-button routerLink="/simple-action" routerLinkActive="active">
Go to simple dialog action page
</a>
<a mat-raised-button routerLink="/sensitive-action" routerLinkActive="active">
Go to sensitive dialog action page
</a>

View File

@@ -0,0 +1,11 @@
import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import { RouterLink } from '@angular/router';
@Component({
standalone: true,
imports: [MatButtonModule, RouterLink],
selector: 'app-home',
templateUrl: './home.component.html',
})
export class HomeComponent {}

View File

@@ -0,0 +1,3 @@
<button mat-raised-button (click)="openDialog()">
Open dialog with confirmation dialog on browser back button click
</button>

View File

@@ -0,0 +1,20 @@
import { Component, inject } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import { MatDialog } from '@angular/material/dialog';
import { DialogComponent } from '../dialog/dialog.component';
@Component({
standalone: true,
imports: [MatButtonModule],
selector: 'app-sensitive-action',
templateUrl: './sensitive-action.component.html',
})
export class SensitiveActionComponent {
readonly #dialog = inject(MatDialog);
openDialog(): void {
this.#dialog.open(DialogComponent, {
width: '250px',
});
}
}

View File

@@ -0,0 +1 @@
<button mat-raised-button (click)="openDialog()">Open simple dialog</button>

View File

@@ -0,0 +1,20 @@
import { Component, inject } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import { MatDialog } from '@angular/material/dialog';
import { DialogComponent } from '../dialog/dialog.component';
@Component({
standalone: true,
imports: [MatButtonModule],
selector: 'app-simple-action',
templateUrl: './simple-action.component.html',
})
export class SimpleActionComponent {
readonly #dialog = inject(MatDialog);
openDialog(): void {
this.#dialog.open(DialogComponent, {
width: '250px',
});
}
}