fix: HA Light Target cards flickering on every poll cycle
Lint & Test / test (push) Has been cancelled

Use stable placeholder values in card HTML for volatile metrics (fps,
uptime, HA status, entity swatches) so CardSection.reconcile() skips
unchanged cards. Actual values are patched in-place via
patchHALightTargetMetrics() — same pattern LED target cards already use.
This commit is contained in:
2026-04-12 20:55:30 +03:00
parent d3cd48e7a7
commit 83ceaeda9d
@@ -546,20 +546,18 @@ export function createHALightTargetCard(target: any, haSourceMap: Record<string,
<div class="metrics-grid target-metrics-expanded">
<div class="metric">
<div class="metric-label">${t('targets.fps')}</div>
<div class="metric-value" data-tm="fps">${(state.fps_actual ?? target.update_rate ?? 2).toFixed(1)} Hz</div>
<div class="metric-value" data-tm="fps">---</div>
</div>
<div class="metric">
<div class="metric-label">${t('device.metrics.uptime')}</div>
<div class="metric-value" data-tm="uptime">${metrics.uptime_seconds ? formatUptime(metrics.uptime_seconds) : '---'}</div>
<div class="metric-value" data-tm="uptime">---</div>
</div>
<div class="metric">
<div class="metric-label">HA</div>
<div class="metric-value" data-tm="ha-status">${state.ha_connected ? ICON_OK : ICON_WARNING}</div>
<div class="metric-value" data-tm="ha-status">---</div>
</div>
</div>
<div class="ha-light-swatches" data-ha-swatches="${target.id}">
${_renderEntitySwatches(state.entity_colors || {}, target.ha_light_mappings || [])}
</div>
<div class="ha-light-swatches" data-ha-swatches="${target.id}"></div>
` : ''}
</div>`,
actions: `
@@ -587,6 +585,9 @@ export function patchHALightTargetMetrics(target: any): void {
const haEl = card.querySelector('[data-tm="ha-status"]') as HTMLElement | null;
if (haEl) haEl.innerHTML = state.ha_connected ? ICON_OK : ICON_WARNING;
const swatchesEl = card.querySelector(`[data-ha-swatches="${target.id}"]`) as HTMLElement | null;
if (swatchesEl) swatchesEl.innerHTML = _renderEntitySwatches(state.entity_colors || {}, target.ha_light_mappings || []);
}
// ── Event delegation ──