Asymmetrik/ngx-starter

View on GitHub
src/app/core/admin/end-user-agreement/manage-eua/manage-eua.component.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { TitleCasePipe } from '@angular/common';
import { Component, DestroyRef, computed, inject, input } from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { FormsModule } from '@angular/forms';
import { Router, RouterLink } from '@angular/router';

import { SkipToDirective } from '../../../../common';
import { DialogService } from '../../../../common/dialog';
import { SystemAlertComponent, SystemAlertService } from '../../../../common/system-alert';
import { EndUserAgreement } from '../../../auth';
import { EuaService } from '../eua.service';

@Component({
    standalone: true,
    templateUrl: './manage-eua.component.html',
    imports: [RouterLink, SystemAlertComponent, FormsModule, TitleCasePipe, SkipToDirective]
})
export class ManageEuaComponent {
    readonly #router = inject(Router);
    readonly #destroyRef = inject(DestroyRef);
    readonly #euaService = inject(EuaService);
    readonly #alertService = inject(SystemAlertService);
    readonly #dialogService = inject(DialogService);

    readonly eua = input.required({
        transform: (value?: EndUserAgreement) => value ?? new EndUserAgreement()
    });

    readonly mode = computed(() => (this.eua()._id ? 'edit' : 'create'));

    constructor() {
        this.#alertService.clearAllAlerts();
    }

    submitEua(): void {
        const obs$ =
            this.mode() === 'create'
                ? this.#euaService.create(this.eua())
                : this.#euaService.update(this.eua());

        obs$.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe(() =>
            this.#router.navigate(['/admin/euas'])
        );
    }

    previewEua(): void {
        this.#dialogService.alert(this.eua().title, this.eua().text);
    }
}