Bug report(desktop): can't move a canvas into a space from the top-right menu
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 39.9k
- Forks
- 3.4k
- Avg merge
- 6h 51m
- Merged PRs (30d)
- 232
Description
Bug Description
In PostHog Desktop, moving a canvas into a space is much harder to find than moving a chat, and in some cases is impossible.
Two problems:
1. No "File to…" in the canvas's own top-right menu. With a canvas open, the only dropdown in the header is the "Drafts" list (FreeformCanvasView.tsx) — there is no rename, pin, file, or delete control. The same gap exists for an open chat: TaskActionsMenu.tsx only carries PR/git actions. So for both object types, the only way to move something into a space is to leave what you are looking at, find its row in the sidebar tree, and right-click it. The canvas card menu in the artifacts grid (WebsiteDashboardsIndex.tsx) only offers "Copy link" and "Delete", so that route is a dead end too.
2. The sidebar "File to…" for canvases is author-only. TaskRowMenu does have a "File to…" submenu for canvases, but ChannelItemRow.tsx only wires onFile when canFileCanvas is true, which requires the current user to be the canvas author. Tasks have no equivalent restriction on filing, so a canvas you didn't author has no move option at all, and the menu gives no reason why. If the restriction is intentional it should show a disabled item with an explanation instead of hiding the entry.
Expected behavior
Move a canvas into a space the same way you move a chat, and do it from the top right of the thing you are looking at — not only from the sidebar.
How to reproduce
- Open PostHog Desktop and open a canvas.
- Look for a way to move it into a space from the top-right menu — there isn't one.
- Find the canvas in the sidebar space tree and right-click it. "File to…" appears only if you authored the canvas.
- Do the same with a chat: filing works from the sidebar row, but also isn't in the open chat's top-right menu.
Suggested fix
- Add a "File to…" (move to space) item to the canvas header menu and to the open chat's top-right menu, reusing the existing filing path (
dashboards.file/channelTasks.file— the backend already supports it viaPATCH canvases/<id>/ {channel_id}andPATCH tasks/<id>/ {channel}). - Add "File to…" to the artifacts grid card menu.
- Either drop the author-only gate on canvas filing, or render it as a disabled item with a
disabledReasonso the restriction is visible.
Additional context
The backend and the service layer are already in place — Canvas.channel is a writable FK and CanvasViewSet.partial_update accepts channel_id, validates the target channel, clears pinned_at, and writes an audit entry. This is a UI affordance gap, not a missing capability.
Reported in this Slack thread.
Related feedback from the same thread, worth splitting out if you'd rather track it separately: space names show their raw slug (lowercased, hyphenated) instead of a display name.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with FreeformCanvasView.tsx, TaskActionsMenu.tsx, WebsiteDashboardsIndex.tsx, ChannelItemRow.tsx, and the shared TaskRowMenu to trace existing canvas and chat actions. Follow the dashboards.file and channelTasks.file paths, then verify that both open-object menus and the artifacts card expose filing appropriately, including the author restriction behavior. Done means canvases and chats can be moved into spaces from the relevant menus without losing the existing sidebar flow.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- react, typescript
- Domain
- desktop, frontend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 68/100