mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-18 06:46:35 +00:00
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:
parent
e5d2f2d94b
commit
05bd70dd64
@ -26,7 +26,14 @@ class DialogBox extends LitElement {
|
|||||||
|
|
||||||
@query("ha-md-dialog") private _dialog?: HaMdDialog;
|
@query("ha-md-dialog") private _dialog?: HaMdDialog;
|
||||||
|
|
||||||
|
private _closePromise?: Promise<void>;
|
||||||
|
|
||||||
|
private _closeResolve?: () => void;
|
||||||
|
|
||||||
public async showDialog(params: DialogBoxParams): Promise<void> {
|
public async showDialog(params: DialogBoxParams): Promise<void> {
|
||||||
|
if (this._closePromise) {
|
||||||
|
await this._closePromise;
|
||||||
|
}
|
||||||
this._params = params;
|
this._params = params;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -131,21 +138,24 @@ class DialogBox extends LitElement {
|
|||||||
|
|
||||||
private _dismiss(): void {
|
private _dismiss(): void {
|
||||||
this._closeState = "canceled";
|
this._closeState = "canceled";
|
||||||
this._closeDialog();
|
|
||||||
this._cancel();
|
this._cancel();
|
||||||
|
this._closeDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
private _confirm(): void {
|
private _confirm(): void {
|
||||||
this._closeState = "confirmed";
|
this._closeState = "confirmed";
|
||||||
this._closeDialog();
|
|
||||||
if (this._params!.confirm) {
|
if (this._params!.confirm) {
|
||||||
this._params!.confirm(this._textField?.value);
|
this._params!.confirm(this._textField?.value);
|
||||||
}
|
}
|
||||||
|
this._closeDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
private _closeDialog() {
|
private _closeDialog() {
|
||||||
fireEvent(this, "dialog-closed", { dialog: this.localName });
|
fireEvent(this, "dialog-closed", { dialog: this.localName });
|
||||||
this._dialog?.close();
|
this._dialog?.close();
|
||||||
|
this._closePromise = new Promise((resolve) => {
|
||||||
|
this._closeResolve = resolve;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private _dialogClosed() {
|
private _dialogClosed() {
|
||||||
@ -155,6 +165,8 @@ class DialogBox extends LitElement {
|
|||||||
}
|
}
|
||||||
this._closeState = undefined;
|
this._closeState = undefined;
|
||||||
this._params = undefined;
|
this._params = undefined;
|
||||||
|
this._closeResolve?.();
|
||||||
|
this._closeResolve = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
static styles = css`
|
static styles = css`
|
||||||
|
Loading…
x
Reference in New Issue
Block a user