mirror of
https://github.com/Matysh/houseplan-card
synced 2026-08-01 00:48:29 +00:00
v1.45.3: 'value instead of an icon' could never be saved (issue #3)
The device editor has offered display='value' since v1.26.0; MARKER_SCHEMA accepted only badge/ripple/icon_ripple. Picking it produced not a valid value for dictionary value @ data['config']['markers'][n]['display'] and since one rejected marker fails the whole config write, the user could not save the plan at all until the setting was undone. Reported by @RemyRoux with the exact error text, 2026-07-27 — a year and a half after the feature shipped. The schema now accepts it, and the class of bug is closed rather than the instance: DISPLAY_MODES, TAP_ACTIONS, SPACE_FILL_MODES and ROOM_FILL_MODES are exported from src/logic.ts, the editors render their options from them, and a backend test parses those lists out of the TypeScript source and asserts the schema accepts every one (and rejects a bogus value). Reverting the one-word schema fix fails that test, which is the check that was missing. Plus an HA-harness test saving a config that contains a value-display marker — the exact call the user's card was making. Docs: CHANGELOG.md + CHANGELOG.ru.md + TESTING.md + STATUS.md.
This commit is contained in:
@@ -531,6 +531,24 @@ export function safeUrl(url: string | null | undefined): string | null {
|
||||
export type TapAction = 'info' | 'more-info' | 'toggle';
|
||||
|
||||
/** Domains a card-wide `tap_action: toggle` may toggle (accidental-tap safe). */
|
||||
/**
|
||||
* The option lists the editors offer, in one place — and the reason they are
|
||||
* here rather than inline in the templates.
|
||||
*
|
||||
* `display` gained 'value' in v1.26.0 ("show the measurement instead of the
|
||||
* icon") but the backend schema still only accepted badge/ripple/icon_ripple,
|
||||
* so saving any marker configured that way was rejected outright — the feature
|
||||
* was unusable for a year and a half and only surfaced through a user's error
|
||||
* message (issue #3, 2026-07-27). The lists are exported so a backend test can
|
||||
* read them and assert the schema accepts every value a user can pick.
|
||||
* Adding an option here and forgetting the schema now fails the test suite.
|
||||
*/
|
||||
export const DISPLAY_MODES = ['badge', 'ripple', 'icon_ripple', 'value'] as const;
|
||||
export const TAP_ACTIONS = ['info', 'more-info', 'toggle'] as const;
|
||||
/** Space-level fill: 'glow' is a whole-space light model, not a per-room one. */
|
||||
export const SPACE_FILL_MODES = ['none', 'lqi', 'light', 'temp', 'glow'] as const;
|
||||
export const ROOM_FILL_MODES = ['none', 'lqi', 'light', 'temp'] as const;
|
||||
|
||||
export const TOGGLE_SAFE_DOMAINS = new Set(['light', 'switch', 'fan', 'humidifier']);
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user