Repository navigation
Swipe between a profile's commits and replies under a header that scrolls away - #11
Merged
Merged
Conversation
…olls away The profile's Commits and Replies are now pages of a pager, with the tabs the pager draws, as on the Log and Notifications, underlined in your lane colour. The header (avatar, facts, counts, activity, streaks, achievements) goes in the pager's new header slot from NativePHP/mobile-ui#139. It scrolls up with the tab you're on, the tabs pin under the nav bar once it has gone, and the pages swipe under the tabs while the header stays put. Each tab has its own list, cache and pull to refresh. Only the tab you're on is live. The other shows the first five commits kept for it, so the frame stays small. The tab you leave starts again at the top of a fresh list, and tapping the tab you're on takes it back to the top. Your own profile still opens on the tab you last had. The new commits pill hangs under the tabs wherever they are, in the pager's overlay slot, instead of the sticky header between the tabs and the commits. The Log keeps its sticky header. The profile now sends every frame in full, like the Log: a reselect only changes a list's key, and EDGE's subtree reuse never sent it. The PHP-drawn page tabs partial is gone, since nothing uses it now. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
simonhamp
force-pushed
the
feat/profile-pager
branch
from
October 18, 2026 20:38
d57a2fe to
462c897
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A profile's Commits and Replies now swipe, with the pager's own tabs underlined in your lane colour, as on the Log and Notifications. The header (avatar, facts, counts, activity, streaks and achievements) scrolls up with the tab you're on, the tabs pin under the nav bar once it has gone, and the pages swipe under the tabs while the header stays still. Your own profile and someone else's work the same.
This needs NativePHP/mobile-ui#139, which adds a header slot and an overlay slot to the pager. It's merged into
combined/dev-null-appand the lock points at it (ca9b7ef).What changed
Profilefollows the Log's pattern:showPageandbackToTopfrom the pager, a list key per tab, and only the tab you're on is live. The other tab shows the first five commits kept for it, so the frame stays small (about 1,550 nodes with 30 commits on the live tab). Your own profile still opens on the tab you last had (ShownTabs).partials/profile-headerand goes in<native:pager-header>. Each tab's page ispartials/profile-page.<native:pager-overlay>, which hangs it just under the tabs wherever the header has scrolled them. On the profile that replaces Put the new commits pill under the composer, and pin it when you scroll #9's sticky header between the tabs and the commits; the Log keeps the sticky header.Profilenow sends every frame in full, like the Log. Without it, tapping the tab you're on did nothing on the phone: only the list's key changes, and EDGE's subtree reuse ignores keys.partials/page-tabsis gone, since nothing uses it now.What I tried
Header rows in each page's list, with PHP tabs or the pager's tabs above, would have slid the header sideways with every swipe, and the tabs couldn't pin. Laying the header over the pages left drags on it scrolling nothing. So the mobile-ui change has each page's list draw the header and pin the tabs, holds them still during a swipe, and keeps the two lists level while any of the header shows. Details are in NativePHP/mobile-ui#139.
What to check
Profile.combined/dev-null-appcarries is already behind (no pager tabs, sticky header or this), so I left it alone.Known rough edges
On a real iPhone it can be a little glitchy at times. Simon tested it on his phone and is happy to ship it as it is. These are the spots I know of or suspect, for anyone who wants to pick them up.
Seen in the simulator:
Suspected, since the simulator looked fine:
The pager side of these is in NativePHP/mobile-ui#139.
Verified
php artisan test(775 passed) and Pint. On an iPhone 17 Pro simulator (iOS 26.2) against the local API: swipe both ways, tap both tabs, tap the tab you're on to go back to the top, scroll the header part way and swipe (the other tab is level), scroll it away and swipe to a short tab, pull to refresh, the pill under the tabs and following them up, dark mode, my own profile and someone else's. After the rebase, on a fresh simulator: swipes, tab taps, reselect, the header scrolled away, the badge shelf opening the achievements sheet, the followers count opening the list (the shared API site has no followers endpoint, so the list itself 404s there), the ⋯ menu on someone else's profile, and deleting my own commit from my profile. Android was checked with a test screen in NativePHP/mobile-ui#139.Recording: ios-profile-pager.mp4
🤖 Generated with Claude Code