Frontend: correct day-cell icon meanings and add a conflicts filter (#48) #95
No reviewers
Labels
No labels
area/ai
area/backend
area/frontend
area/infra
area/scheduler
area/wled
good-first-issue
priority/high
priority/low
priority/medium
type/bug
type/chore
type/ci-cd
type/docs
type/feature
type/qa
v1.0.0
v1.1.0
v1.2.0
v2.0.0
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
rbrooks/Iris-WLED!95
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/conflict-icon-and-filter"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Batch C items 1 and 2. Both were blocked on #93 — now that the backend reports
conflictper day, neither needs resolution logic in the client.Icons
Spec §10.1 names four states —
✓approved,⏳candidate,✕no scheme,⚠conflict. Two were bound to the wrong thing:✕meant rejected and⚠meant stale. So a day with no scheme rendered nothing at all, and nothing anywhere indicated a conflict.✓⏳✕⚠↻⊘staleandrejectedare real states the spec's list doesn't cover. They keep distinct glyphs rather than collapsing into✕, because "I rejected this" and "nothing was generated" call for different actions. Every icon now carries atitleandaria-label; previously they were bare unlabelled glyphs.Conflict renders beside the scheme status, not instead of it. It describes the day (two events tied at the top), while status describes the scheme — and a conflicted day can perfectly well be approved. It's suppressed once the day is
pinned, since the pin settles the ambiguity. The backend reports the two flags independently precisely so the UI can make that call.Filter
"Conflicts" joins the toolbar. Two details that would otherwise have bitten:
isVisiblechecksconflictbefore the "no scheme" guard. A conflicted day with no scheme yet is exactly what this filter should surface; the existing guard would have hidden it.CalendarPagenarrowsfilteredSchemeIdsfor the new filter too. Toolbar falls back to approving all candidates when that list is empty — so a filter that narrowed the view but not the list would bulk-approve far beyond what the user could see. That's a data-loss-shaped bug, not a cosmetic one.A test-harness fix worth noting
makeDayin the DayCell tests didn't supply the new required fields. Because test files aren't in thetsc -bproject, nothing flagged it — and every conflict assertion would have readundefined, gone falsy, and passed for the wrong reason. Fixed by adding the fields to the helper.That's the second time this session that gap has mattered; still worth a follow-up.
Verification
In a
node:22container matching CI:7 new tests:
✕for no scheme,⚠no longer used for stale,⊘for rejected, conflict shown / absent / suppressed-when-pinned, and conflict rendering alongside status rather than replacing it.Batch C after this
Remaining: 3 (gradient swatches), 4 (month backdrop bar), 7 (import panel), 8 (quick-push arbitrary colour).