Skip to content

feat(profile): favourite public groups - #1701

Merged
bmc08gt merged 4 commits into
feat/profile-share-to-chatsfrom
feat/profile-favorite-groups
Oct 7, 2026
Merged

bmc08gt merged 4 commits into
feat/profile-share-to-chatsfrom
feat/profile-favorite-groups

Conversation

@bmc08gt

@bmc08gt bmc08gt commented Oct 7, 2026

Copy link
Copy Markdown
Collaborator

Profiles can now feature up to 10 public groups, matching code-ios-app#996. Stacked on #1700.

  • You tab and other people's profiles: a "Favorite Public Groups" list sits under the stats card and is hidden when empty. Tapping a group opens its chat through the existing ByChatId access gate.
  • Edit Profile: a "Favorite Public Groups" field after Minimum To Chat shows "N groups" and opens the picker.
  • Picker: your current picks first, then your other public groups. New picks go to the end, and at 10 the remaining rows dim and stop taking taps. Search matches titles. Save is enabled only once the list has loaded and the selection differs from what the server last returned. A DENIED error shows "Only Public Groups Can Be Featured"; any other error shows "Couldn't Save Your Groups".
  • The picker list scrolls under the frosted search field and Save button, and fades out with verticalScrollStateGradient from Save's top edge, like the iOS scroll-edge bar.

Your own picks live in FeaturedGroupsStore, an in-memory session singleton in shared/chat that RealSessionController resets on logout. Other people's lists come from getFeaturedGroups(username) in ChatProfileViewModel, and a failed read hides the section. The picker's candidates come from one page of the live getGroupChatFeed() filtered to public groups, the same single call iOS makes, so there's no Room change.

The list UI (FeaturedGroupsSection, FeaturedGroupRow) is in shared/common-ui/profile and takes render inputs, like the rest of the shared profile UI.

EditFeaturedGroupsViewModelTest ports the 12 iOS EditFeaturedGroupsModelTests cases and adds one for a pick made before the load finishes.

Also capitalises "Minimum To Chat" on Edit Profile. The stats card label is a separate string and is unchanged.

@bmc08gt bmc08gt self-assigned this Oct 7, 2026
Both profiles get a Favorite Public Groups section under the stats card, hidden while empty. The signed-in user's list is held for the session in FeaturedGroupsStore and cleared on sign-out; another person's is read by handle when their profile opens, and a failed read leaves the section hidden. Rows open the group chat by id.
Edit Profile gets a Favorite Public Groups row that opens a picker over the featured groups plus the joined public ones, up to 10, saved in pick order. Public groups are filtered from the live group feed because isPrivate is not persisted.
The list runs under the search header and the Save button, which use
floatingGlass like the rest of the app. Rows fade in under search and fade
out with verticalScrollStateGradient from Save's top edge to the bottom of
the screen, matching iOS's scroll-edge bar. Group pictures are clipped to
circles, as iOS draws them.
@bmc08gt
bmc08gt force-pushed the feat/profile-favorite-groups branch from 0966d81 to 9a2b8be Compare October 7, 2026 13:53
@bmc08gt
bmc08gt added this pull request to stack #1696 October 7, 2026 13:56
@bmc08gt
bmc08gt merged commit d40943f into code/cash Oct 7, 2026
3 checks passed
@bmc08gt
bmc08gt deleted the feat/profile-favorite-groups branch October 7, 2026 13:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant