Skip to content

v2.4 - Labels and Filtering

Choose a tag to compare

@hydraInsurgent hydraInsurgent released this 20 Mar 09:42
· 46 commits to main since this release

Labels and Filtering

Backend

  • New Labels table with many-to-many relationship to Tasks (implicit join table via EF Core)
  • Full CRUD endpoints for labels: GET, POST, PATCH, DELETE
  • PATCH /api/tasks/{id}/labels - replaces the full label set on a task
  • Label name uniqueness enforced (case-insensitive, returns 409 Conflict)
  • Label ID validation on assignment (returns 400 with invalid IDs)
  • Task queries now eager-load labels via .Include(t => t.Labels)

Frontend

  • Labels dashboard page (/labels) - full CRUD with inline rename, color picker, and delete with confirmation
  • 10-color VIBGYOR palette for label colors, auto-cycling on creation
  • Labels field in AddTaskForm with autocomplete, multi-select, and auto-create on Enter
  • Labels row on task detail page with add/remove via AssignLabelsButton (optimistic updates)
  • Label chips (#labelname) shown on mobile task cards
  • Filter panel popover (three-dot menu) with label, project, and date filters
  • Filter state persists across navigation via sessionStorage

Tests

  • 15 new tests for LabelsController (CRUD, validation, uniqueness, color range)

Review fixes (#31-#36)

  • Case-insensitive label name uniqueness
  • Label ID validation in SetLabels endpoint
  • FilterPanel overflow clipping fix
  • Concurrent operation tracking in LabelsClient
  • Optimistic update with revert-on-error in AssignLabelsButton
  • Duplicate label auto-create prevention in AddTaskForm

See CHANGELOG.md for full details.