fix(messaging): #30 iOS safe-area input + Deleted-vs-Unknown user (completes all 5)#143
Merged
Merged
Conversation
…wn user Ships 2 of the 5 messaging fixes from #30 (the other 3 — password-manager full-page setup, autocomplete hints, the encrypted-with-previous-keys indicator — already shipped). Fix #1 (iOS Safari input hidden behind the home indicator): the real root cause was a missing viewport-fit=cover, which left env(safe-area-inset-*) at 0. Add viewportFit:'cover' to the root viewport, then extend the message-input padding (ChatWindow input row pb → max(1.5rem, env(safe-area-inset-bottom))) and the fixed /messages container bottom inset (calc(7rem + env(safe-area-inset-bottom))) so the input clears the indicator. Fix #5 (deleted vs unknown user): ConversationView now distinguishes a genuinely missing profile row (maybeSingle → null = "Deleted User") from a transient query error (kept neutral as "Unknown User") and a present-but-unnamed profile (display_name || username fallback). Extracted as a pure resolveParticipantName helper + unit-tested (3 cases). ConversationListItem is intentionally NOT changed — its `participant?` prop can't distinguish null (deleted) from undefined (not-yet-loaded), so forcing "Deleted User" there would mislabel loading states. Tests: 3 new resolveParticipantName cases (error → Unknown, null → Deleted, present → display_name/username/fallback). type-check / lint / build green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
Closes #30.
This ships the last 2 of #30's 5 fixes; the other 3 already shipped (verified on main), so #30 is now complete:
src/app/messages/setup/page.tsxnew-passwordautocomplete + save-password prompt in setupMessageBubble.tsx:249This PR
viewport-fit=cover, leavingenv(safe-area-inset-*)at 0. AddviewportFit:'cover'to the root viewport, then extend the message-input padding (pb → max(1.5rem, env(safe-area-inset-bottom))) and the fixed/messagescontainer bottom inset so the input clears the indicator.ConversationViewnow distinguishes a genuinely missing profile row (maybeSingle → null= "Deleted User") from a transient query error (neutral "Unknown User") and a present-but-unnamed profile (display_name || usernamefallback). Extracted as a pureresolveParticipantNamehelper + unit-tested.ConversationListItemis intentionally unchanged — itsparticipant?prop can't distinguish null (deleted) from undefined (not-loaded), so forcing "Deleted User" there would mislabel loading states.Verification
resolveParticipantNametests (error→Unknown, null→Deleted, present→fallback) + existing ConversationView suite pass.🤖 Generated with Claude Code