fix(projects): drag-drop status change on the board view #128

Merged
zaelgohary merged 1 commit from development_fix_projects_board_drag into development 2026-04-22 09:14:43 +00:00
Member

Summary

The Projects island's Board view rendered three status columns (Todo / In Progress / Done) with no HTML5 drag-drop wired, so users could not change a project's status from the board — they had to open the project, click Edit, pick a status, and save. This PR adds drag-drop so dropping a card on a column updates the project through ProjectService::save and the card moves to the new column.

Closes #127

Changes

  • project_card.rs — draggable card, SID in dataTransfer
  • board_view.rs — column ondragover + ondrop, emits (sid, status)
  • island.rs — save project on drop, replace in local list

Test Results

  • cargo check -p hero_archipelagos_projects: pass
  • cargo clippy -p hero_archipelagos_projects -- -D warnings: pass
  • cargo fmt --check -p hero_archipelagos_projects: pass
  • dx build --package hero_os_app --web --features web: pass, deployed to the shared test instance
  • Playwright coverage in hero_os tests/e2e/projects-board-drag.spec.ts:
    • cards expose draggable=true and data-project-sid
    • synthetic drop on a different column fires projects.project.set on the RPC

Manual verification

  • Open the Projects island on its Board view
  • Drag a card from Todo to In Progress → card lands in In Progress; no error banner
  • Reload the island → the card is still in In Progress (the change was persisted)
  • Drop a card onto its own column → nothing changes (no spurious project.set call)
## Summary The Projects island's Board view rendered three status columns (Todo / In Progress / Done) with no HTML5 drag-drop wired, so users could not change a project's status from the board — they had to open the project, click Edit, pick a status, and save. This PR adds drag-drop so dropping a card on a column updates the project through `ProjectService::save` and the card moves to the new column. ## Related Issue Closes #127 ## Changes - `project_card.rs` — draggable card, SID in dataTransfer - `board_view.rs` — column ondragover + ondrop, emits (sid, status) - `island.rs` — save project on drop, replace in local list ## Test Results - `cargo check -p hero_archipelagos_projects`: pass - `cargo clippy -p hero_archipelagos_projects -- -D warnings`: pass - `cargo fmt --check -p hero_archipelagos_projects`: pass - `dx build --package hero_os_app --web --features web`: pass, deployed to the shared test instance - Playwright coverage in hero_os `tests/e2e/projects-board-drag.spec.ts`: - cards expose `draggable=true` and `data-project-sid` - synthetic drop on a different column fires `projects.project.set` on the RPC ## Manual verification - [ ] Open the Projects island on its Board view - [ ] Drag a card from Todo to In Progress → card lands in In Progress; no error banner - [ ] Reload the island → the card is still in In Progress (the change was persisted) - [ ] Drop a card onto its own column → nothing changes (no spurious `project.set` call)
fix(projects): drag-drop status change on the board view
All checks were successful
Build and Test / build (pull_request) Successful in 6m11s
0badc98b04
ProjectCard now exposes `draggable=true`, stores the project SID in the
drag `dataTransfer`, and each BoardColumn handles `ondragover`/`ondrop`
to raise a `(sid, new_status)` event. The island applies the new status
to the in-memory project, persists it through `ProjectService::save`,
and replaces the project in the local list so the card moves to its
new column without a full refetch.
zaelgohary merged commit 7d50f4101f into development 2026-04-22 09:14:43 +00:00
zaelgohary deleted branch development_fix_projects_board_drag 2026-04-22 09:14:44 +00:00
Sign in to join this conversation.
No reviewers
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
lhumina_code/hero_archipelagos!128
No description provided.