mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
71 lines
2.4 KiB
JavaScript
71 lines
2.4 KiB
JavaScript
// HA-disabled lifecycle: saved marker -> forced hidden -> service ghost and
|
|
// blocked Show -> same marker restored after reactivation, without config writes.
|
|
import { launch, checkAll, finish } from './serve.mjs';
|
|
|
|
const { page, browser } = await launch({ width: 1000, height: 900 }, 1);
|
|
const res = await page.evaluate(async () => {
|
|
const c = window.__card;
|
|
const sr = () => c.shadowRoot || c.renderRoot;
|
|
const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
const paint = async () => { c.requestUpdate(); await c.updateComplete; };
|
|
|
|
c._serverCfg = {
|
|
...c._serverCfg,
|
|
markers: [
|
|
...(c._serverCfg.markers || []).filter((marker) => marker.id !== 'd_light1'),
|
|
{ id: 'd_light1', binding: 'device:d_light1' },
|
|
],
|
|
};
|
|
c._cfgEpoch++;
|
|
c._regSignature = '';
|
|
c._maybeRebuildDevices();
|
|
c._setMode('view');
|
|
await paint();
|
|
const configBefore = JSON.stringify(c._serverCfg);
|
|
const layoutBefore = JSON.stringify(c._layout);
|
|
const visibleBefore = !!sr().querySelector('.dev[data-id="d_light1"]');
|
|
|
|
window.__setRegistryDisabled('device', 'd_light1', 'user');
|
|
c.hass = window.__mkHass();
|
|
await wait(220);
|
|
await paint();
|
|
const hiddenInView = !sr().querySelector('.dev[data-id="d_light1"]');
|
|
|
|
c._showHidden = true;
|
|
c._setMode('devices');
|
|
c._regSignature = '';
|
|
c._maybeRebuildDevices();
|
|
await paint();
|
|
const ghost = sr().querySelector('.dev[data-id="d_light1"][data-binding-status="ha-disabled"]');
|
|
const disabledDevice = c._devices.find((device) => device.id === 'd_light1');
|
|
c._openMarkerDialog(disabledDevice);
|
|
await paint();
|
|
const hiddenBeforeShow = c._markerDialog?.hideFromPlan;
|
|
c._toggleMarkerDialogVisibility();
|
|
await paint();
|
|
const showBlocked = /disabled|deactiv/i.test(c._toast)
|
|
&& c._markerDialog?.hideFromPlan === hiddenBeforeShow
|
|
&& sr().querySelector('.toast')?.getAttribute('role') === 'alert';
|
|
c._markerDialog = null;
|
|
|
|
window.__setRegistryDisabled('device', 'd_light1', null);
|
|
c.hass = window.__mkHass();
|
|
await wait(220);
|
|
c._showHidden = false;
|
|
c._setMode('view');
|
|
await paint();
|
|
|
|
return {
|
|
visibleBefore,
|
|
hiddenInView,
|
|
labelledGhost: !!ghost,
|
|
showBlocked,
|
|
restored: !!sr().querySelector('.dev[data-id="d_light1"]'),
|
|
configUnchanged: JSON.stringify(c._serverCfg) === configBefore,
|
|
layoutUnchanged: JSON.stringify(c._layout) === layoutBefore,
|
|
};
|
|
});
|
|
|
|
checkAll(res);
|
|
await finish(browser, res);
|