Label UI: tree management, page assignment, and sidebar filter #44
Labels
No Label
area:auth
area:docs
area:export
area:ops
area:storage
area:supply-chain
auth
backend
blocked
collab
deployment
docs
effort:L
effort:M
effort:S
frontend
plugins
qa
vs-nfd
vs-nfd:blocker
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: stwaidele/dorfteich#44
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
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?
Context
Users need to create/organize labels and filter the sidebar by them.
Scope
Pond settings section 'Labels': tree view with create/rename/recolor/move (drag or menu)/delete; page-level label picker (multi-select with search, shows hierarchy); sidebar: label filter (select one or more labels, shows matching pages incl. descendant-label matches), label chips on page list entries (colored).
Acceptance criteria
Technical notes
Dependencies
Depends on #26, #43.
Size: ~1.5 days
Conventions: English code/comments, clear human-readable code, no hard-coded UI strings (ADR 0012, add
deanden), permission checks only via the shared guard (docs/architecture/permissions.md). Read the referenced ADRs before starting.Implemented in
03e72242d3e164adf201a0481da24b4921984e88(Claude Opus 4.8). Pipeline green (CI: lint/typecheck/test + all e2e packs incl. the new labels pack; CD: deploy Test → smoke → promote Int).Browser-verified end to end locally (isolated full stack, both e2e tests green):
label lifecycle works from the pond settings UI: keyboard-created root label, add sub-label, rename, delete child + root. ✓page picker assigns a label and the sidebar filter includes descendants: picker assign saves immediately → sidebar chip appears; filtering by the parent label shows the page tagged with its child and hides the untagged page; clearing restores it. ✓Live-verified on Test (
test.dorfteich.cloud):GET /ponds/:id/pagesnow returnslabelIdsper page, reflecting an assigned (child) label — the data the sidebar chips and filter run on. ✓Acceptance criteria
collectSubtreeIds)page-labels+ the pondpagesquery)Notes
/p/:pondSlug/settings(newPondSettingsPage, hosting theLabelManager); the sidebar links owners there. Future pond config joins this page.flattenLabelTreeadded topackages/shared;PageListItemViewcarrieslabelIdsso the sidebar needs no per-page label calls.labelsnamespace (de + en).Two e2e lessons captured for later frontend work: the UI language follows the signed-in user's profile locale (
auth-contextcallsi18n.changeLanguage(user.locale)), so?lng=/browser locale don't win — label-UI e2e selectors are language-independent (CSS classes + label names); andgetByText(labelName)also matches the move-dropdown<option>s across rows, so rows are located via.label-node__name.Next M4 issue: #45 (manual page ordering with drag-and-drop).