import { Component, Inject, ChangeDetectorRef } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
import { MatButtonModule } from '@angular/material/button';
import { MatIconModule } from '@angular/material/icon';
import { MatToolbarModule } from '@angular/material/toolbar';
import { MatTooltipModule } from '@angular/material/tooltip';
import { BreakpointObserver } from '@angular/cdk/layout';
import { DialogCancelButtonComponent } from '../components/dialog-cancel-button.component';
export interface PromptDialogData {
title: string;
placeholder: string;
initialValue?: string;
okButton: string;
cancelButton: string;
}
@Component({
selector: 'p3xr-prompt-dialog',
standalone: true,
imports: [
CommonModule, FormsModule, MatDialogModule, MatFormFieldModule, MatInputModule,
MatButtonModule, MatIconModule, MatToolbarModule, MatTooltipModule,
DialogCancelButtonComponent,
],
template: `
{{ data.title }}
{{ data.placeholder }}
@if (inputField.invalid && inputField.touched) {
{{ data.placeholder }} is required
}
`,
styles: [`.full-width { width: 100%; min-width: 0; }`],
})
export class PromptDialogComponent {
value: string;
isWide = true;
constructor(
@Inject(MAT_DIALOG_DATA) public data: PromptDialogData,
@Inject(MatDialogRef) private dialogRef: MatDialogRef,
@Inject(BreakpointObserver) private breakpointObserver: BreakpointObserver,
@Inject(ChangeDetectorRef) private cdr: ChangeDetectorRef,
) {
this.value = data.initialValue || '';
this.breakpointObserver.observe('(min-width: 600px)').subscribe(r => {
this.isWide = r.matches;
this.cdr.markForCheck();
});
}
onOk(): void {
if (!this.value?.trim()) return;
this.dialogRef.close(this.value);
}
onCancel(): void {
this.dialogRef.close(undefined);
}
}