Skip to content
Snippets Groups Projects
admin-save-button.component.ts 1.4 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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);
        }
      }