From 9db610d2a8c359c63dfa2f9e098ee15983d54c01 Mon Sep 17 00:00:00 2001 From: Aidan Timson Date: Thu, 18 Dec 2025 12:53:01 +0000 Subject: [PATCH] Migrate cropper dialog to wa --- .../image-cropper-dialog.ts | 100 +++++++++++------- 1 file changed, 62 insertions(+), 38 deletions(-) diff --git a/src/dialogs/image-cropper-dialog/image-cropper-dialog.ts b/src/dialogs/image-cropper-dialog/image-cropper-dialog.ts index 3e3ad06c88..30db80d45b 100644 --- a/src/dialogs/image-cropper-dialog/image-cropper-dialog.ts +++ b/src/dialogs/image-cropper-dialog/image-cropper-dialog.ts @@ -5,14 +5,20 @@ import type { CSSResultGroup, PropertyValues, TemplateResult } from "lit"; import { css, html, LitElement, nothing, unsafeCSS } from "lit"; import { customElement, property, query, state } from "lit/decorators"; import { classMap } from "lit/directives/class-map"; +import { fireEvent } from "../../common/dom/fire_event"; import "../../components/ha-button"; -import "../../components/ha-dialog"; +import "../../components/ha-dialog-footer"; +import "../../components/ha-wa-dialog"; import { haStyleDialog } from "../../resources/styles"; import type { HomeAssistant } from "../../types"; +import type { HassDialog } from "../make-dialog-manager"; import type { HaImageCropperDialogParams } from "./show-image-cropper-dialog"; @customElement("image-cropper-dialog") -export class HaImagecropperDialog extends LitElement { +export class HaImagecropperDialog + extends LitElement + implements HassDialog +{ @property({ attribute: false }) public hass!: HomeAssistant; @state() private _params?: HaImageCropperDialogParams; @@ -30,12 +36,17 @@ export class HaImagecropperDialog extends LitElement { this._open = true; } - public closeDialog() { + public closeDialog(): boolean { this._open = false; - this._params = undefined; this._cropper?.destroy(); this._cropper = undefined; this._isTargetAspectRatio = false; + return true; + } + + private _dialogClosed(): void { + this._params = undefined; + fireEvent(this, "dialog-closed", { dialog: this.localName }); } protected updated(changedProperties: PropertyValues) { @@ -78,41 +89,54 @@ export class HaImagecropperDialog extends LitElement { return Math.abs(targetWidth - imageData.naturalWidth) <= 1; } - protected render(): TemplateResult { - return html` -
- ${this.hass.localize("ui.dialogs.image_cropper.crop_image")} -
- - ${this.hass.localize("ui.common.cancel")} - - ${this._isTargetAspectRatio - ? html` - ${this.hass.localize("ui.dialogs.image_cropper.use_original")} - ` - : nothing} + protected render(): TemplateResult | typeof nothing { + if (!this._params) { + return nothing; + } - - ${this.hass.localize("ui.dialogs.image_cropper.crop")} - -
`; + return html` + +
+ ${this.hass.localize("ui.dialogs.image_cropper.crop_image")} +
+ + + ${this.hass.localize("ui.common.cancel")} + + ${this._isTargetAspectRatio + ? html` + + ${this.hass.localize("ui.dialogs.image_cropper.use_original")} + + ` + : nothing} + + ${this.hass.localize("ui.dialogs.image_cropper.crop")} + + +
+ `; } private _cropImage() {