Extract snackbar error message implementation to service #43

Closed
ptran wants to merge 37 commits from refactor/error-message into main
3 changed files with 74 additions and 22 deletions
Showing only changes of commit e0101a5364 - Show all commits

View File

@ -1,7 +1,22 @@
<ul> @if (qualifications$ | async; as qualifications) {
@for (qualification of qualifications$ | async; track qualification.skill) { @if (qualifications) {
<li> <table
{{ qualification.skill }} mat-table
</li> [dataSource]="qualifications"
} class="mat-elevation-z8"
</ul> >
<ng-container matColumnDef="skill">
<th mat-header-cell *matHeaderCellDef>Skill</th>
<td mat-cell *matCellDef="let qualification">{{ qualification.skill }}</td>
</ng-container>
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef>Actions</th>
<td mat-cell *matCellDef="let qualification"></td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
</table>
}
}

View File

@ -1,25 +1,43 @@
import { Component } from '@angular/core'; import {Component} from '@angular/core';
import {Observable} from "rxjs"; import {Observable} from "rxjs";
import {Employee} from "../Employee";
import {Qualification} from "../Qualification"; import {Qualification} from "../Qualification";
import {HttpClient} from "@angular/common/http"; import {HttpClient} from "@angular/common/http";
import {MatSnackBar} from "@angular/material/snack-bar";
import {AsyncPipe} from "@angular/common"; import {AsyncPipe} from "@angular/common";
import {
MatCell,
MatCellDef,
MatColumnDef,
MatHeaderCell,
MatHeaderCellDef,
MatHeaderRow, MatHeaderRowDef, MatRow, MatRowDef,
MatTable
} from "@angular/material/table";
import QualificationService from "../services/qualification.service";
@Component({ @Component({
selector: 'app-qualifications', selector: 'app-qualifications',
imports: [ imports: [
AsyncPipe AsyncPipe,
], MatTable,
templateUrl: './qualifications.component.html', MatHeaderCell,
styleUrl: './qualifications.component.css' MatColumnDef,
MatCell,
MatCellDef,
MatHeaderCellDef,
MatHeaderRow,
MatRow,
MatHeaderRowDef,
MatRowDef
],
templateUrl: './qualifications.component.html',
styleUrl: './qualifications.component.css'
}) })
export class QualificationsComponent { export class QualificationsComponent {
public qualifications$: Observable<Qualification[]>; public qualifications$: Observable<Qualification[]>;
public readonly displayedColumns: string[] = ['skill', 'actions'];
constructor(
private readonly httpClient: HttpClient, constructor(private readonly qualificationService: QualificationService) {
) { this.qualifications$ = this.qualificationService.getAll();
this.qualifications$ = this.httpClient.get<Qualification[]>('http://localhost:8089/qualifications'); }
}
} }

View File

@ -0,0 +1,19 @@
import {inject, Injectable} from "@angular/core";
import {HttpClient} from "@angular/common/http";
import {Observable} from "rxjs";
import {Employee} from "../Employee";
import {Qualification} from "../Qualification";
@Injectable({
providedIn: 'root'
})
export default class QualificationService {
private http: HttpClient = inject(HttpClient);
private static readonly BASE_URL = 'http://localhost:8089';
public getAll(): Observable<Qualification[]> {
return this.http.get<Qualification[]>(`${QualificationService.BASE_URL}/qualifications`)
}
}