Prevent race in dialog box (#23758)

Co-authored-by: Petar Petrov <MindFreeze@users.noreply.github.com>
Co-authored-by: Wendelin <12148533+wendevlin@users.noreply.github.com>
This commit is contained in:
Bram Kragten 2025-01-16 12:46:10 +01:00 committed by GitHub
parent e5d2f2d94b
commit 05bd70dd64
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -26,7 +26,14 @@ class DialogBox extends LitElement {
@query("ha-md-dialog") private _dialog?: HaMdDialog;
private _closePromise?: Promise<void>;
private _closeResolve?: () => void;
public async showDialog(params: DialogBoxParams): Promise<void> {
if (this._closePromise) {
await this._closePromise;
}
this._params = params;
}
@ -131,21 +138,24 @@ class DialogBox extends LitElement {
private _dismiss(): void {
this._closeState = "canceled";
this._closeDialog();
this._cancel();
this._closeDialog();
}
private _confirm(): void {
this._closeState = "confirmed";
this._closeDialog();
if (this._params!.confirm) {
this._params!.confirm(this._textField?.value);
}
this._closeDialog();
}
private _closeDialog() {
fireEvent(this, "dialog-closed", { dialog: this.localName });
this._dialog?.close();
this._closePromise = new Promise((resolve) => {
this._closeResolve = resolve;
});
}
private _dialogClosed() {
@ -155,6 +165,8 @@ class DialogBox extends LitElement {
}
this._closeState = undefined;
this._params = undefined;
this._closeResolve?.();
this._closeResolve = undefined;
}
static styles = css`