Folder picker: legal holds (and Move) stop requiring typed backend paths #185

Closed
opened 2026-08-10 20:18:52 +00:00 by Cordy · 0 comments
Owner

Dogfood note (Nikola, while trying to test #172): placing a legal hold requires typing a fully-qualified backend path into a free-text field (/spaces/records-unit/case-2026-001 placeholder) — the operator has to know or look up the exact path instead of picking it. Wanted: a dropdown of the main folders, expandable as a tree for subfolders, so the operator browses to the target.

Scope:

  1. A small reusable folder-picker component in the web UI: starts at the top level the caller provides (for holds as admin: /home, /spaces, or the backend root; wait for #177's outcome on what an admin's default view is), lazy-loads children via the existing GET /api/v1/files?path=…, one level per click, breadcrumb inside the picker, and a "use this folder" confirm. Files selectable too where the caller wants them (holds apply to files as well).
  2. Legal holds dialog uses it: pick target → path field fills (still editable for power users — the typed path stays as the escape hatch, it just stops being the only way).
  3. Move dialog adopts the same component (this half was already noted in #179's scope — implement once, use twice).

Care points: the picker must respect the caller's store (scoped for users in Move, unscoped for admins in Holds), lazy-load to stay cheap on big trees, and be keyboard-navigable.

Dogfood note (Nikola, while trying to test #172): placing a legal hold requires typing a fully-qualified backend path into a free-text field (`/spaces/records-unit/case-2026-001` placeholder) — the operator has to know or look up the exact path instead of picking it. Wanted: a dropdown of the main folders, expandable as a tree for subfolders, so the operator *browses* to the target. **Scope:** 1. A small reusable **folder-picker component** in the web UI: starts at the top level the caller provides (for holds as admin: `/home`, `/spaces`, or the backend root; wait for #177's outcome on what an admin's default view is), lazy-loads children via the existing `GET /api/v1/files?path=…`, one level per click, breadcrumb inside the picker, and a "use this folder" confirm. Files selectable too where the caller wants them (holds apply to files as well). 2. **Legal holds dialog** uses it: pick target → path field fills (still editable for power users — the typed path stays as the escape hatch, it just stops being the only way). 3. **Move dialog** adopts the same component (this half was already noted in #179's scope — implement once, use twice). Care points: the picker must respect the caller's store (scoped for users in Move, unscoped for admins in Holds), lazy-load to stay cheap on big trees, and be keyboard-navigable.
Cordy closed this issue 2026-08-11 23:09:40 +00:00
Sign in to join this conversation.
No labels
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Cordy/Cairn#185
No description provided.