Move files and folders inside the UI: drag & drop + explicit move affordance #179
Labels
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: Cordy/Cairn#179
Loading…
Add table
Add a link
Reference in a new issue
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?
Dogfood note (Nikola): drag and drop folders from within the Cairn UI to move them into folders, plus a general possibility to move files and folders up and down the tree.
What exists: the backend has everything needed (
POST /api/v1/renamemoves any path; the row menu has a "Move…" dialog with a typed target path). What's missing is the direct-manipulation UX users expect from every other file product.Scope:
/renamegoes through the scoped store.Shipped in v0.6.12 (PR #199), live on the dogfood (
version=v0.6.12, pod 1/1).Drag & drop within the listing (scope 1):
draggable; folder rows and every breadcrumb are drop targets (wireDropTarget). A drag source dims (opacity) and valid targets highlight.Care points (scope 2) — all handled:
application/x-cairn-move. The external OS-file upload drop zone arms only ondataTransfer"Files", so it ignores internal drags; the internal drop handlerstopPropagations so it never reaches the document upload handler. The two drop paths are fully separated.POST /api/v1/rename, so read-only spaces and held paths refuse server-side and surface via thesay()banner (#172 pattern). Admins go through the same scoped store — no special-casing (consistent with #177).Keyboard/menu parity (scope 3): the Move dialog + folder picker (#185) stay. The folder-picker-instead-of-typed-path note in scope 3 already landed in #185.
Follow-up (not in this change): multi-select drag — deferred until row selection exists, as the issue anticipated. Closing this; will open a separate issue for multi-select drag when selection lands.