Skip to content

Top-of-rail DM button + member context menu & quick DM#101

Merged
krazyjakee merged 1 commit into
masterfrom
claude/clever-haibt-40e8e2
Jun 10, 2026
Merged

Top-of-rail DM button + member context menu & quick DM#101
krazyjakee merged 1 commit into
masterfrom
claude/clever-haibt-40e8e2

Conversation

@krazyjakee

Copy link
Copy Markdown
Contributor

Summary

  • Direct Messages moved to the top of the left rail, restyled from a small 20px footer icon to a 48px speech-bubble tile that matches the space (server) icons — Discord-style — with a divider separating it from the space list.
  • Member roster context menu (right-click / long-press) with quick utilities: View Profile, Direct Message (hidden for yourself), Copy User ID, Copy Username. Moderation deliberately stays in the tap-to-open profile popout; the menu uses the app's existing showMenu pattern.
  • Direct Message action added to the member popout (modal) as well, for non-self users.
  • New openAccordDirectMessage(context, ref, userId) helper creates-or-opens the 1:1 DM via the idempotent users.createDm({recipients:[id]}) and opens the DM dialog straight into that conversation. showAccordDirectMessages gained an optional initialChannel to support this.

Why

The DM entry point was a hard-to-spot icon at the bottom of the rail, and members had no right-click affordance. This brings both in line with the reference client / Discord conventions and makes starting a DM a one-click action from a member's row or profile.

Reviewer notes

  • "Mention in composer" was intentionally left out of the quick menu: the message composer (_Composer) is private with a self-owned controller and no external injection hook, so wiring it would require new cross-cutting plumbing. Easy follow-up if wanted.
  • DM open relies on users.createDm being idempotent for a single recipient (returns the existing channel). When opened from the popout, the DM dialog stacks over it rather than replacing it.
  • flutter analyze --no-fatal-infos is clean on all four changed files. Not smoke-tested in a running app — worth a manual check of right-click → Direct Message and the popout's new button.

Test plan

  • DM tile appears at the top of the rail, sized like a space icon, opens the DM panel.
  • Right-click (and long-press) a member row → menu shows; each item works; copy items toast.
  • "Direct Message" from both the context menu and the popout opens the correct 1:1 conversation (existing or freshly created).
  • "Direct Message" is hidden when targeting yourself.

🤖 Generated with Claude Code

Move the Direct Messages entry to the top of the left rail and style it as
a 48px speech-bubble tile (Discord-style) instead of a small footer icon,
separated from the space list by a divider.

Add a quick-utility right-click / long-press context menu to member roster
rows (View Profile, Direct Message, Copy User ID, Copy Username); moderation
stays in the tap-to-open profile popout. Add a Direct Message action to the
member popout too.

Introduce openAccordDirectMessage(), which creates-or-opens the 1:1 DM via
the idempotent users.createDm and opens the DM dialog straight into the
conversation (showAccordDirectMessages gains an initialChannel param).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@krazyjakee krazyjakee merged commit 25f61f8 into master Jun 10, 2026
5 checks passed
@krazyjakee krazyjakee deleted the claude/clever-haibt-40e8e2 branch June 28, 2026 23:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant