Skip to content

Manage an org's members and leave it from its thread - #101

Merged
simonhamp merged 3 commits into
mainfrom
feat/org-members
Oct 28, 2026
Merged

simonhamp merged 3 commits into
mainfrom
feat/org-members

Conversation

@simonhamp

@simonhamp simonhamp commented Oct 27, 2026 •

Copy link
Copy Markdown
Member

An org thread's menu now has Members. It opens the web's org settings as a native screen:

  • Everyone in the org with their avatar (ringed in their lane), name, handle and role. A tap opens their profile.
  • For a maintainer: a Rename field, Add people at the top of the list, and More (…) on everyone else. More opens the platform's own menu, as the web's member menu does: Make maintainer or Make contributor, then Remove from org, which asks in an alert first. Make contributor is greyed out for the last maintainer.
  • For everyone: Leave org, which asks first in the web's words. Once devnull has taken it, the app goes back to the Remotes inbox with the org gone from it.

A contributor gets the list and Leave org and nothing else, and the screen's actions check the role again, so calling them directly does nothing (there's a test for that).

Role changes, removals and renames show straight away and go through writeInBackground. If devnull says no, the change is undone and a toast shows devnull's message. Leaving waits for devnull before going back, since the screen has to be on top to hear the answer.

Add people is New org's picker pointed at an existing org: it searches remotes/candidates?org=<id>, so devnull marks people already in the org, and Share history is a system switch on the right, sent as the API's share_history. New org's picking moved into a PicksPeople concern, and its chips and results moved into partials, so both screens share them. New org looks and behaves the same.

The member menu items live in App\Devnull\OrgMemberMenu, shaped like RemoteMenu from #116. Remove uses a new user-minus Lucide icon, copied from Lucide like the others in resources/icons.

Things to look at:

  • Conversation.php has two small changes besides the menu entry: an import, and a check at the top of onResume that steps back to the inbox when you've just left the org from its members screen. NativePHP has no pop to root, so the members screen leaves a one-time marker in ResponseCache (orgLeft / takeLeftOrg) and the thread under it reads it. main is merged in, and the menu now reads Members, Pin, Stash, Mute.
  • The org menu's "before" shots predate Long press a Remotes row for the web's menu: pin, stash, mute, block, leave #116, so the after shots also show its Pin and Mute.
  • The web doesn't confirm removing someone. This does, as asked.
  • The iOS shots show Share history off: switches don't take simulated taps on the simulator. On the Android emulator it flips, and devnull got share_history: true.
  • The iOS nav bar doesn't show the "6/100 members" subtitle. Android does. The thread's own subtitle behaves the same way, so I left it.

Screenshots are from a local dev-null.sh at production with a seeded org. The thread's events in the menu shots are from testing each action against that API.

Screenshots

Org thread menu

iOS light iOS dark Android light Android dark
Before
After

Members (new screen)

iOS light iOS dark Android light Android dark
After

More on a member

iOS light iOS dark Android light Android dark
After

Remove from org asks first

iOS light iOS dark Android light Android dark
After

Add people

iOS light iOS dark Android light Android dark
After

Leave org

iOS light
Confirm

Recording: leaving, back to the inbox without the org (iOS)

  • No visible change

🤖 Generated with Claude Code

simonhamp and others added 3 commits October 27, 2026 18:42
An org thread's menu now has Members, which opens the web's org settings
as a screen: everyone in the org with their role, Rename and Add people
for maintainers, a sheet per member to change their role or remove them,
and Leave org for anyone. Changes show at once and go to devnull in the
background; one devnull turns down goes back with a toast.

Add people reuses New org's search, chips and candidate rows, asks
devnull who could join this org, and sends the share history choice.
New org's picking moved into a PicksPeople concern so both screens share it.

Leaving drops the org from the kept inbox, and the thread under the
members screen steps back to the inbox when it shows again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
More on a member now opens the platform's own menu, as the web's member
menu does: Make maintainer or Make contributor (off for the last
maintainer), then Remove from org, which asks in an alert. The sheet is
gone, and the new user-minus icon draws Remove.

Share history on Add people is the system switch again, on the right.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@simonhamp
simonhamp merged commit 7cabefa into main Oct 28, 2026
3 checks passed
@simonhamp
simonhamp deleted the feat/org-members branch October 28, 2026 16:49
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