All files / app/features/picture/components/replace-file-dialog replace-file-dialog.component.ts

100% Statements 14/14
100% Branches 2/2
100% Functions 3/3
100% Lines 11/11

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 411x 1x 1x 1x                                   1x 12x   12x   12x           3x 2x       1x      
import { TITLE_MAX_LENGTH, TITLE_MIN_LENGTH } from '../../constants/picture.constants';
import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
import { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';
import { ButtonComponent, MODAL_DATA, ModalData } from '@drevo-web/ui';
 
export interface ReplaceFileDialogData {
    readonly currentTitle: string;
    readonly previewUrl: string;
}
 
export interface ReplaceFileDialogResult {
    readonly title: string;
}
 
@Component({
    selector: 'app-replace-file-dialog',
    imports: [ReactiveFormsModule, ButtonComponent],
    templateUrl: './replace-file-dialog.component.html',
    styleUrl: './replace-file-dialog.component.scss',
    changeDetection: ChangeDetectionStrategy.OnPush,
})
export class ReplaceFileDialogComponent {
    private readonly modalData = inject<ModalData<ReplaceFileDialogData, ReplaceFileDialogResult>>(MODAL_DATA);
 
    readonly previewUrl = this.modalData.data.previewUrl;
 
    readonly titleControl = new FormControl(this.modalData.data.currentTitle, {
        nonNullable: true,
        validators: [Validators.required, Validators.minLength(TITLE_MIN_LENGTH), Validators.maxLength(TITLE_MAX_LENGTH)],
    });
 
    confirm(): void {
        if (this.titleControl.invalid) return;
        this.modalData.close({ title: this.titleControl.value.trim() });
    }
 
    cancel(): void {
        this.modalData.close();
    }
}