Repository navigation
Conversation
`/chat/{id}/m/{seq}` parsed as `.chat(id)` and dropped the message, so a
message link opened the chat at the bottom. It now parses to
`.chatMessage(id, seq)` and routes through `routeChat` to a sibling
destination that carries the message.
The transcript lands with the reply jump's scroll-and-flash. When the
message isn't stored locally, `MessageLoader.revealPaging` pages older
history back from the oldest stored message until it is, capped at 20
pages, so the window stays contiguous. A link to the open chat jumps in
place instead of remounting it.
A link tapped in another chat shows a back chip under the bar that
returns there. It hides when the user drags the transcript or sends.
A malformed `/m/` segment falls back to `.chat(id)`. A private group the
viewer isn't in still opens its profile. The scan allowlist and the
link-card classifier accept the new route; the classifier keeps the
group card until the message card lands.
A link to a message older than the first page landed with the target as
the window's first row, half under the top edge, because `reveal`
anchored the window on the target itself. It now anchors 12 messages
earlier where history allows, and `revealPaging` fetches one more page
when the page it stopped on begins at the target.
`MessageLinkSmokeTests` opens `/chat/{id}/m/100` in the XCTests tip DM,
whose first page holds 251-300, and waits for the highlighted row to be
on screen. The row a jump lands on carries the `chat-attention-target`
accessibility identifier while the flash runs, so the test can find it.
* commit '16a24ad1eb3eeac2097eac72d32150ba2c368f18': fix(ui): draw UIKit caption in Avenir Medium like SwiftUI (#1064) fix(members): host chip and member count label to match Android (#1058) chore(chat): log the attach lifecycle the same way in both hosts (#1062) refactor(chat): decide attach close events in one place (#1061) refactor(chat): measure the attach card's frame once (#1060) refactor(chat): read the attach menu rows live over the keyboard (#1059) refactor(chat): build the attach actions once for both hosts (#1056) fix(chat): render system messages in the transcript (#1054) # Conflicts: # Flipcash/Core/Screens/Conversation/ChatScreenRepresentable.swift
It used a flat 12% white fill. On iOS 26 it now takes the same interactive glass as the composer; older iOS keeps the fill and hairline border.
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.
https://app.flipcash.com/chat/{chatId}/m/{seq}opened the chat at the bottom:Routeparsed it as.chat(id)and dropped the message. This is task A of the message-links design (route and land); the message card follows in a stacked PR.Routeparses/m/{seq}to.chatMessage(id, MessageID(value: seq)). A non-numeric seq falls back to.chat(id), as before.DeepLinkActionroutes it throughrouteChatto a new.chatMessage(id, MessageLanding)destination, the sameConversationScreenwith a landing. A private group the viewer isn't in still opens its profile.scrollToMessage→flashAttention). When the message isn't stored,MessageLoader.revealPagingpages older history back from the oldest stored message until it is, up to 20 pages. Paging back keeps the window contiguous; a page fetched around the target would leave a hole, because the window reads forward from its anchor.LinkCardClassifiersends it to the group card until the message card lands.On the simulator,
flipcash://chat/<Jeffy group>/m/150with messages 315–364 stored paged back to 115 and landed on 150; a second link to 62, while that chat was open, paged back to 15 and landed on 62.Known limits:
loadOlderMessagesreturns early whencanReadis false, so a viewer whose transcript is obscured by the gate can only land inside the initial window.