diff --git a/src/mixins/wakelock-mixin.ts b/src/mixins/wakelock-mixin.ts new file mode 100644 index 0000000000..20a7233f6d --- /dev/null +++ b/src/mixins/wakelock-mixin.ts @@ -0,0 +1,21 @@ +import type { ReactiveElement } from "lit"; +import type { Constructor } from "../types"; + +export const WakeLockMixin = >( + superClass: T +) => + class WakeLockClass extends superClass { + private _wakeLock?: Promise; + + public connectedCallback() { + super.connectedCallback(); + if ("wakeLock" in navigator) { + this._wakeLock = navigator.wakeLock.request(); + } + } + + public disconnectedCallback() { + super.disconnectedCallback(); + this._wakeLock?.then((wakeLock) => wakeLock.release()); + } + }; diff --git a/src/panels/config/integrations/integration-panels/zwave_js/add-node/dialog-zwave_js-add-node.ts b/src/panels/config/integrations/integration-panels/zwave_js/add-node/dialog-zwave_js-add-node.ts index 203f5b9cc6..245a7ba841 100644 --- a/src/panels/config/integrations/integration-panels/zwave_js/add-node/dialog-zwave_js-add-node.ts +++ b/src/panels/config/integrations/integration-panels/zwave_js/add-node/dialog-zwave_js-add-node.ts @@ -48,7 +48,6 @@ import "../../../../../../components/ha-dialog-header"; import "../../../../../../components/ha-fade-in"; import "../../../../../../components/ha-icon-button"; import "../../../../../../components/ha-qr-scanner"; -import "../../../../../../components/ha-spinner"; import { computeStateName } from "../../../../../../common/entity/compute_state_name"; import { navigate } from "../../../../../../common/navigate"; diff --git a/src/panels/config/integrations/integration-panels/zwave_js/add-node/zwave-js-add-node-loading.ts b/src/panels/config/integrations/integration-panels/zwave_js/add-node/zwave-js-add-node-loading.ts index bae3acb94b..ba319058f7 100644 --- a/src/panels/config/integrations/integration-panels/zwave_js/add-node/zwave-js-add-node-loading.ts +++ b/src/panels/config/integrations/integration-panels/zwave_js/add-node/zwave-js-add-node-loading.ts @@ -3,9 +3,10 @@ import { css, html, LitElement, nothing } from "lit"; import "../../../../../../components/ha-fade-in"; import "../../../../../../components/ha-spinner"; +import { WakeLockMixin } from "../../../../../../mixins/wakelock-mixin"; @customElement("zwave-js-add-node-loading") -export class ZWaveJsAddNodeLoading extends LitElement { +export class ZWaveJsAddNodeLoading extends WakeLockMixin(LitElement) { @property() public description?: string; @property({ type: Number }) public delay = 0; diff --git a/src/panels/config/integrations/integration-panels/zwave_js/add-node/zwave-js-add-node-searching-devices.ts b/src/panels/config/integrations/integration-panels/zwave_js/add-node/zwave-js-add-node-searching-devices.ts index d966009c42..fcde665c93 100644 --- a/src/panels/config/integrations/integration-panels/zwave_js/add-node/zwave-js-add-node-searching-devices.ts +++ b/src/panels/config/integrations/integration-panels/zwave_js/add-node/zwave-js-add-node-searching-devices.ts @@ -10,9 +10,10 @@ import { InclusionStrategy } from "../../../../../../data/zwave_js"; import "../../../../../../components/ha-spinner"; import "../../../../../../components/ha-button"; import "../../../../../../components/ha-alert"; +import { WakeLockMixin } from "../../../../../../mixins/wakelock-mixin"; @customElement("zwave-js-add-node-searching-devices") -export class ZWaveJsAddNodeSearchingDevices extends LitElement { +export class ZWaveJsAddNodeSearchingDevices extends WakeLockMixin(LitElement) { @property({ attribute: false }) public hass!: HomeAssistant; @property({ type: Boolean, attribute: "smart-start" })