More-info service
This commit is contained in:
parent
30d8f027dc
commit
77554aa86c
@ -887,6 +887,13 @@ const ServicesMixin = (SuperClass) => {
|
|||||||
[timeout: <number>]
|
[timeout: <number>]
|
||||||
[timeout_action: <service call>]
|
[timeout_action: <service call>]
|
||||||
|
|
||||||
|
More-info:
|
||||||
|
service: browser_mod.more_info
|
||||||
|
data:
|
||||||
|
entity: <string>
|
||||||
|
[large: <true/FALSE>]
|
||||||
|
[ignore_popup_card: <true/FALSE>]
|
||||||
|
|
||||||
Close popup:
|
Close popup:
|
||||||
service: browser_mod.close_popup
|
service: browser_mod.close_popup
|
||||||
|
|
||||||
@ -914,6 +921,7 @@ const ServicesMixin = (SuperClass) => {
|
|||||||
"sequence",
|
"sequence",
|
||||||
"delay",
|
"delay",
|
||||||
"popup",
|
"popup",
|
||||||
|
"more_info",
|
||||||
"close_popup",
|
"close_popup",
|
||||||
"navigate",
|
"navigate",
|
||||||
"refresh",
|
"refresh",
|
||||||
@ -948,6 +956,10 @@ const ServicesMixin = (SuperClass) => {
|
|||||||
case "delay":
|
case "delay":
|
||||||
await new Promise((resolve) => setTimeout(resolve, data.time));
|
await new Promise((resolve) => setTimeout(resolve, data.time));
|
||||||
break;
|
break;
|
||||||
|
case "more_info":
|
||||||
|
const { entity, large, ignore_popup_card } = data;
|
||||||
|
this.showMoreInfo(entity, large, ignore_popup_card);
|
||||||
|
break;
|
||||||
case "popup":
|
case "popup":
|
||||||
const { title, content } = data, d = __rest(data, ["title", "content"]);
|
const { title, content } = data, d = __rest(data, ["title", "content"]);
|
||||||
for (const [k, v] of Object.entries(d)) {
|
for (const [k, v] of Object.entries(d)) {
|
||||||
@ -1332,6 +1344,22 @@ const PopupMixin = (SuperClass) => {
|
|||||||
}
|
}
|
||||||
closePopup(...args) {
|
closePopup(...args) {
|
||||||
this._popupEl.closeDialog();
|
this._popupEl.closeDialog();
|
||||||
|
this.showMoreInfo("");
|
||||||
|
}
|
||||||
|
async showMoreInfo(entityId, large = false, ignore_popup_card = undefined) {
|
||||||
|
const base = await hass_base_el();
|
||||||
|
base.dispatchEvent(new CustomEvent("hass-more-info", {
|
||||||
|
bubbles: true,
|
||||||
|
composed: true,
|
||||||
|
cancelable: false,
|
||||||
|
detail: { entityId, ignore_popup_card },
|
||||||
|
}));
|
||||||
|
if (large) {
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, 50));
|
||||||
|
const dialog = base.shadowRoot.querySelector("ha-more-info-dialog");
|
||||||
|
if (dialog)
|
||||||
|
dialog.large = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -1670,18 +1698,19 @@ class PopupCard extends s {
|
|||||||
window.removeEventListener("hass-more-info", this.popup);
|
window.removeEventListener("hass-more-info", this.popup);
|
||||||
}
|
}
|
||||||
popup(ev) {
|
popup(ev) {
|
||||||
var _a, _b;
|
var _a, _b, _c;
|
||||||
if (((_a = ev.detail) === null || _a === void 0 ? void 0 : _a.entityId) === this._config.entity) {
|
if (((_a = ev.detail) === null || _a === void 0 ? void 0 : _a.entityId) === this._config.entity &&
|
||||||
|
!((_b = ev.detail) === null || _b === void 0 ? void 0 : _b.ignore_popup_card)) {
|
||||||
ev.stopPropagation();
|
ev.stopPropagation();
|
||||||
ev.preventDefault();
|
ev.preventDefault();
|
||||||
const config = Object.assign({}, this._config);
|
const config = Object.assign({}, this._config);
|
||||||
delete config.card;
|
delete config.card;
|
||||||
(_b = window.browser_mod) === null || _b === void 0 ? void 0 : _b.service("popup", Object.assign({ content: this._config.card }, this._config));
|
(_c = window.browser_mod) === null || _c === void 0 ? void 0 : _c.service("popup", Object.assign({ content: this._config.card }, this._config));
|
||||||
setTimeout(() => this.dispatchEvent(new CustomEvent("hass-more-info", {
|
setTimeout(() => this.dispatchEvent(new CustomEvent("hass-more-info", {
|
||||||
bubbles: true,
|
bubbles: true,
|
||||||
composed: true,
|
composed: true,
|
||||||
cancelable: false,
|
cancelable: false,
|
||||||
detail: { entityID: "." },
|
detail: { entityId: "." },
|
||||||
})), 50);
|
})), 50);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1761,7 +1790,7 @@ __decorate([
|
|||||||
- Commands
|
- Commands
|
||||||
x popup
|
x popup
|
||||||
x close_popup
|
x close_popup
|
||||||
- more-info
|
x more-info
|
||||||
x navigate
|
x navigate
|
||||||
- lovelace-reload?
|
- lovelace-reload?
|
||||||
x window-reload
|
x window-reload
|
||||||
|
@ -62,6 +62,7 @@ async def async_setup_services(hass):
|
|||||||
hass.services.async_register(DOMAIN, "sequence", handle_service)
|
hass.services.async_register(DOMAIN, "sequence", handle_service)
|
||||||
hass.services.async_register(DOMAIN, "delay", handle_service)
|
hass.services.async_register(DOMAIN, "delay", handle_service)
|
||||||
hass.services.async_register(DOMAIN, "popup", handle_service)
|
hass.services.async_register(DOMAIN, "popup", handle_service)
|
||||||
|
hass.services.async_register(DOMAIN, "more_info", handle_service)
|
||||||
hass.services.async_register(DOMAIN, "close_popup", handle_service)
|
hass.services.async_register(DOMAIN, "close_popup", handle_service)
|
||||||
hass.services.async_register(DOMAIN, "navigate", handle_service)
|
hass.services.async_register(DOMAIN, "navigate", handle_service)
|
||||||
hass.services.async_register(DOMAIN, "refresh", handle_service)
|
hass.services.async_register(DOMAIN, "refresh", handle_service)
|
||||||
|
@ -113,6 +113,35 @@ popup:
|
|||||||
selector:
|
selector:
|
||||||
object:
|
object:
|
||||||
|
|
||||||
|
more_info:
|
||||||
|
description: "Show more-info dialog"
|
||||||
|
target:
|
||||||
|
device:
|
||||||
|
integration: "browser_mod"
|
||||||
|
multiple: true
|
||||||
|
entity:
|
||||||
|
integration: "browser_mod_none"
|
||||||
|
area:
|
||||||
|
device:
|
||||||
|
integration: "browser_mod"
|
||||||
|
multiple: true
|
||||||
|
fields:
|
||||||
|
entity:
|
||||||
|
name: Entity ID
|
||||||
|
required: true
|
||||||
|
selector:
|
||||||
|
text:
|
||||||
|
large:
|
||||||
|
name: Large size
|
||||||
|
default: false
|
||||||
|
selector:
|
||||||
|
boolean:
|
||||||
|
ignore_popup_card:
|
||||||
|
name: Ignore any active popup-card overrides
|
||||||
|
default: false
|
||||||
|
selector:
|
||||||
|
boolean:
|
||||||
|
|
||||||
close_popup:
|
close_popup:
|
||||||
description: "Close a popup"
|
description: "Close a popup"
|
||||||
target:
|
target:
|
||||||
|
@ -36,7 +36,7 @@ import "./popup-card";
|
|||||||
- Commands
|
- Commands
|
||||||
x popup
|
x popup
|
||||||
x close_popup
|
x close_popup
|
||||||
- more-info
|
x more-info
|
||||||
x navigate
|
x navigate
|
||||||
- lovelace-reload?
|
- lovelace-reload?
|
||||||
x window-reload
|
x window-reload
|
||||||
|
@ -52,7 +52,10 @@ class PopupCard extends LitElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
popup(ev: CustomEvent) {
|
popup(ev: CustomEvent) {
|
||||||
if (ev.detail?.entityId === this._config.entity) {
|
if (
|
||||||
|
ev.detail?.entityId === this._config.entity &&
|
||||||
|
!ev.detail?.ignore_popup_card
|
||||||
|
) {
|
||||||
ev.stopPropagation();
|
ev.stopPropagation();
|
||||||
ev.preventDefault();
|
ev.preventDefault();
|
||||||
const config = { ...this._config };
|
const config = { ...this._config };
|
||||||
@ -69,7 +72,7 @@ class PopupCard extends LitElement {
|
|||||||
bubbles: true,
|
bubbles: true,
|
||||||
composed: true,
|
composed: true,
|
||||||
cancelable: false,
|
cancelable: false,
|
||||||
detail: { entityID: "." },
|
detail: { entityId: "." },
|
||||||
})
|
})
|
||||||
),
|
),
|
||||||
50
|
50
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { LitElement, html, css } from "lit";
|
import { LitElement, html, css } from "lit";
|
||||||
import { property } from "lit/decorators.js";
|
import { property } from "lit/decorators.js";
|
||||||
import { unsafeHTML } from "lit/directives/unsafe-html.js";
|
import { unsafeHTML } from "lit/directives/unsafe-html.js";
|
||||||
import { provideHass, loadLoadCardHelpers } from "../helpers";
|
import { provideHass, loadLoadCardHelpers, hass_base_el } from "../helpers";
|
||||||
|
|
||||||
class BrowserModPopup extends LitElement {
|
class BrowserModPopup extends LitElement {
|
||||||
@property() open;
|
@property() open;
|
||||||
@ -309,6 +309,26 @@ export const PopupMixin = (SuperClass) => {
|
|||||||
|
|
||||||
closePopup(...args) {
|
closePopup(...args) {
|
||||||
this._popupEl.closeDialog();
|
this._popupEl.closeDialog();
|
||||||
|
this.showMoreInfo("");
|
||||||
|
}
|
||||||
|
|
||||||
|
async showMoreInfo(entityId, large = false, ignore_popup_card = undefined) {
|
||||||
|
const base = await hass_base_el();
|
||||||
|
base.dispatchEvent(
|
||||||
|
new CustomEvent("hass-more-info", {
|
||||||
|
bubbles: true,
|
||||||
|
composed: true,
|
||||||
|
cancelable: false,
|
||||||
|
detail: { entityId, ignore_popup_card },
|
||||||
|
})
|
||||||
|
);
|
||||||
|
if (large) {
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, 50));
|
||||||
|
const dialog: any = base.shadowRoot.querySelector(
|
||||||
|
"ha-more-info-dialog"
|
||||||
|
);
|
||||||
|
if (dialog) dialog.large = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -32,6 +32,13 @@ export const ServicesMixin = (SuperClass) => {
|
|||||||
[timeout: <number>]
|
[timeout: <number>]
|
||||||
[timeout_action: <service call>]
|
[timeout_action: <service call>]
|
||||||
|
|
||||||
|
More-info:
|
||||||
|
service: browser_mod.more_info
|
||||||
|
data:
|
||||||
|
entity: <string>
|
||||||
|
[large: <true/FALSE>]
|
||||||
|
[ignore_popup_card: <true/FALSE>]
|
||||||
|
|
||||||
Close popup:
|
Close popup:
|
||||||
service: browser_mod.close_popup
|
service: browser_mod.close_popup
|
||||||
|
|
||||||
@ -60,6 +67,7 @@ export const ServicesMixin = (SuperClass) => {
|
|||||||
"sequence",
|
"sequence",
|
||||||
"delay",
|
"delay",
|
||||||
"popup",
|
"popup",
|
||||||
|
"more_info",
|
||||||
"close_popup",
|
"close_popup",
|
||||||
"navigate",
|
"navigate",
|
||||||
"refresh",
|
"refresh",
|
||||||
@ -101,6 +109,11 @@ export const ServicesMixin = (SuperClass) => {
|
|||||||
await new Promise((resolve) => setTimeout(resolve, data.time));
|
await new Promise((resolve) => setTimeout(resolve, data.time));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "more_info":
|
||||||
|
const { entity, large, ignore_popup_card } = data;
|
||||||
|
this.showMoreInfo(entity, large, ignore_popup_card);
|
||||||
|
break;
|
||||||
|
|
||||||
case "popup":
|
case "popup":
|
||||||
const { title, content, ...d } = data;
|
const { title, content, ...d } = data;
|
||||||
for (const [k, v] of Object.entries(d)) {
|
for (const [k, v] of Object.entries(d)) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user