import { ADMIN_FORMSERVICE } from '@admin-client/shared'; import { NavigationService } from '@alfa-client/navigation-shared'; import { AbstractFormService, createEmptyStateResource, isLoaded, StateResource } from '@alfa-client/tech-shared'; import { CommonModule } from '@angular/common'; import { Component, inject, Input } from '@angular/core'; import { Resource } from '@ngxp/rest'; import { ButtonWithSpinnerComponent } from '@ods/component'; import { Observable, of, tap } from 'rxjs'; @Component({ selector: 'admin-save-button', standalone: true, imports: [CommonModule, ButtonWithSpinnerComponent], templateUrl: './admin-save-button.component.html', }) export class AdminSaveButtonComponent { @Input() successLinkPath: string; private readonly formService: AbstractFormService<Resource> = inject(ADMIN_FORMSERVICE); private readonly navigationService: NavigationService = inject(NavigationService); public stateResource$: Observable<StateResource<Resource>> = of(createEmptyStateResource<Resource>()); public submit(): void { this.stateResource$ = this.formService.submit().pipe( tap((stateResource: StateResource<Resource>) => { this._navigateOnSuccessfulSubmission(stateResource); }), ); } _navigateOnSuccessfulSubmission(stateResource: StateResource<Resource>) { if (isLoaded(stateResource)) { this.navigationService.navigate(this.successLinkPath); } } }