feat: add base component for configuration card
This commit is contained in:
@ -0,0 +1,17 @@
|
|||||||
|
<mat-card style="margin: 16px; padding: 16px;">
|
||||||
|
<mat-card-header style="margin-bottom: 15px;">
|
||||||
|
<mat-card-title>{{ title }}</mat-card-title>
|
||||||
|
</mat-card-header>
|
||||||
|
<mat-card-content>
|
||||||
|
<ng-content></ng-content>
|
||||||
|
</mat-card-content>
|
||||||
|
<mat-card-actions style="display: flex; justify-content: end; margin-top: 15px;">
|
||||||
|
@if (isLoading) {
|
||||||
|
<app-data-spinner/>
|
||||||
|
} @else {
|
||||||
|
<button mat-raised-button color="accent" [disabled]="!isSaveEnabled" (click)="onSave()">
|
||||||
|
Сохранить
|
||||||
|
</button>
|
||||||
|
}
|
||||||
|
</mat-card-actions>
|
||||||
|
</mat-card>
|
@ -0,0 +1,37 @@
|
|||||||
|
import {Component, EventEmitter, Input, Output} from '@angular/core';
|
||||||
|
import {MatCardModule} from "@angular/material/card";
|
||||||
|
import {MatButton} from "@angular/material/button";
|
||||||
|
import {catchError, Observable, tap} from "rxjs";
|
||||||
|
import {DataSpinnerComponent} from "@component/common/data-spinner/data-spinner.component";
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-configuration-card',
|
||||||
|
imports: [
|
||||||
|
MatCardModule,
|
||||||
|
MatButton,
|
||||||
|
DataSpinnerComponent
|
||||||
|
],
|
||||||
|
templateUrl: './configuration-card.component.html'
|
||||||
|
})
|
||||||
|
export class ConfigurationCardComponent {
|
||||||
|
@Input() title: string = '';
|
||||||
|
@Input() isSaveEnabled: boolean = false;
|
||||||
|
@Input() saveFunction!: () => Observable<any>;
|
||||||
|
@Output() onSaveFunction = new EventEmitter<any>();
|
||||||
|
|
||||||
|
protected isLoading: boolean = false;
|
||||||
|
|
||||||
|
onSave(): void {
|
||||||
|
this.isLoading = true;
|
||||||
|
|
||||||
|
const result = this.saveFunction().pipe(catchError(err => {
|
||||||
|
this.isLoading = false;
|
||||||
|
throw err;
|
||||||
|
}),
|
||||||
|
tap(_ => {
|
||||||
|
this.isLoading = false;
|
||||||
|
}));
|
||||||
|
|
||||||
|
this.onSaveFunction.emit(result);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user