import { Component, ElementRef, afterNextRender, inject, input, signal, viewChild, } from '@angular/core'; import { I18nService } from '../i18n.service'; import { DialogsService, type PromptRequest } from '../dialogs.service'; import { FocusService } from '../focus.service'; @Component({ selector: 'app-prompt-dialog', template: `

{{ request().title }}

`, }) export class PromptDialog { readonly i18n = inject(I18nService); readonly request = input.required(); readonly value = signal(''); private readonly box = viewChild.required>('box'); private readonly dialogs = inject(DialogsService); private readonly focus = inject(FocusService); constructor() { afterNextRender(() => { this.value.set(this.request().initial ?? ''); const el = this.box().nativeElement; el.focus(); el.select(); }); } submit(): void { const value = this.value().trim(); if (!value) return; const req = this.request(); this.close(); req.onConfirm(value); } cancel(): void { this.close(); } private close(): void { this.dialogs.prompt.set(null); this.focus.bump(); } }