#488: copy endpoint, expanded row menu, create space from selection (wave C) #512

Merged
Cordy merged 2 commits from fix-488 into main 2026-09-12 19:04:50 +00:00
Owner

Third wave of the approved file-browser mockup.

BackendPOST /api/v1/copy (internal/api/copy.go): a real duplicate through the caller's scoped store, mirroring the rename handler; refuses an existing destination with 409 (no overwrite here — WebDAV COPY keeps the Overwrite semantics for protocol clients). TDD: 3 endpoint tests witnessed red first (copies, 409 on existing destination without touching Copy, 404 on missing source) using the nil-embedded-Driver fake pattern.

Frontend (mockup variant 4 + 5):

  • Menu regrouped: Open · hr · Download / Share / Copy link / Send to peer · hr · Copy to… / Move / Rename / Create space from selection (n) · hr · Add/Remove favourites / Lock / Details · hr · Delete.
  • Create-space entry renders only under feat.spaceCreate; with a multi-selection that includes the clicked row it acts on the whole selection and shows the count.
  • The dialog (variant 5): name validation reuses the server's rules (errors inline, incl. 409 name-taken), the selected items listed with icons and sizes in a sunk-band box, move (default) / copy radio, sunk footer stating the ownership consequence, per-item failures reported by name. Creates via the existing self-service POST /api/v1/spaces (#94), then moves/copies item by item.
  • i18n: 18 new keys ×4 locales.
Third wave of the approved file-browser mockup. **Backend** — `POST /api/v1/copy` (`internal/api/copy.go`): a real duplicate through the caller's scoped store, mirroring the rename handler; refuses an existing destination with 409 (no overwrite here — WebDAV COPY keeps the Overwrite semantics for protocol clients). TDD: 3 endpoint tests witnessed red first (copies, 409 on existing destination without touching Copy, 404 on missing source) using the nil-embedded-Driver fake pattern. **Frontend** (mockup variant 4 + 5): - Menu regrouped: **Open** · hr · Download / Share / Copy link / Send to peer · hr · **Copy to…** / Move / Rename / **Create space from selection (n)** · hr · **Add/Remove favourites** / Lock / Details · hr · Delete. - Create-space entry renders only under `feat.spaceCreate`; with a multi-selection that includes the clicked row it acts on the whole selection and shows the count. - The dialog (variant 5): name validation reuses the server's rules (errors inline, incl. 409 name-taken), the selected items listed with icons and sizes in a sunk-band box, move (default) / copy radio, sunk footer stating the ownership consequence, per-item failures reported **by name**. Creates via the existing self-service `POST /api/v1/spaces` (#94), then moves/copies item by item. - i18n: 18 new keys ×4 locales.
Cordy merged commit e193d10ff3 into main 2026-09-12 19:04:50 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
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#512
No description provided.