[PAY-1032][PAY-892] Mobile DMs unread indicator, prefetch chats#3352
Conversation
|
Preview this change https://demo.audius.co/rt-unread-purple |
|
Preview this change https://demo.audius.co/rt-unread-purple |
|
Preview this change https://demo.audius.co/rt-unread-purple |
|
Preview this change https://demo.audius.co/rt-unread-purple |
| return | ||
| } | ||
| const existingSummary = state.chats.entities[chatId]?.messagesSummary | ||
| if (summary.next_count > (existingSummary?.next_count ?? -1)) { |
There was a problem hiding this comment.
I think we really want to take the max of the next_cursor and the min of the prev_cursor (or vice versa? can't remember which way they go)?
There was a problem hiding this comment.
Wouldn't we want to take whichever summary is latest? And to get that, we could either check max of next_cursor or min of prev_cursor. And wouldn't a summary with a higher next_count necessarily have a later next_cursor, and vice versa?
There was a problem hiding this comment.
Chatted with @rickyrombo on slack, his way is the way to go. "the summary we get back is for that query but I want the store to have the summary for all the stuff itself."
There was a problem hiding this comment.
Turns out we want min of both i believe.
| action: PayloadAction<{ unreadMessagesCount: number }> | ||
| ) => { | ||
| state.unreadMessagesCount = action.payload.unreadMessagesCount | ||
| state.optimisticUnreadMessagesCount = action.payload.unreadMessagesCount |
There was a problem hiding this comment.
maybe don't do this actually... this will clear any pending optimistic changes. Perhaps instead of an "optimisticUnreadMessagesCount" we should keep track of "optimisticUnreadMessageCountChanges"?
There was a problem hiding this comment.
- UI shows 10 unreads
- start fetching unread count
- start mark chat as read that has 4 unreads
- optimistic unread count decremented 4 to 6
- UI shows 6 unreads
- fetch unread count succeeds with 10 since the write hasn't completed yet
- optimistic unread count set to unread count, 10
- UI shows 10 unreads
- mark chat as read succeeds
- unread count updated to optimistic unread count (10)
- optimistic unread count deleted
- UI shows 10 unreads
There was a problem hiding this comment.
When should we reset optimisticUnreadMessageCountChanges? We need to reconcile it with the actual unread count eventually, right? Eg:
- On first load we fetch unread count, it's 4.
- We mark a chat as read that had all 4 unread messages, optimisticUnreadCountChanges = -4.
- 2 new messages come in on a different chat, optimisticUnreadCountChanges = -2
- Open left nav bar which re-fetches unreadCount, it is now 2.
- We would incorrectly show no unread messages bc unreadCount + optimisticUnreadCountChanges = 0.
Not sure of solution here, just pointing out broken case, but if we don't reconcile the optimistic changes ever... this approach may not work.
There was a problem hiding this comment.
Hmm yeah this is quite tricky... Before I say anything, I think we could delete state.optimisticUnreadMessagesCount here and merge this as v1 and revisit before launch
Wonder if we could get away with only fetching the unread message count once, maybe on initial app load. The websocket is always listening, right? It'll "reconcile" on app kill + reopen. It sounds a little risky but it might not be...
Might have to sleep on this and think more
|
Preview this change https://demo.audius.co/rt-unread-purple |
|
Preview this change https://demo.audius.co/rt-unread-purple |
[9855fd2] Update locks (#3397) Dylan Jeffers [aecef5f] [PAY-1144] [PAY-1182] [PAY-1147] DMs: Delete chat, message permissions (#3390) Marcus Pasell [64ccd9d] Add stylelint to ci (#3373) Dylan Jeffers [b642a16] [C-2518, C-2523, C-2611] Improve playlist create sagas (#3378) Dylan Jeffers [5620d53] [PAY-1197] Mobile inbox unavailable modal from profile screen (#3376) Reed [2ebaef5] [PAY-1248] Initial changes to get ready for upcoming PRs that include track and playlist tiles in DMs (#3391) Saliou Diallo [c2fabf6] [PAY-1218] Mobile block dms drawer switches block/unblock (#3387) Reed [0acad29] [C-2575] Match length of related artists user list to preview (#3395) Andrew Mendelsohn [40525ae] [C-2615] Fix favorite tracks error due to empty track entries on web mobile (#3386) Kyle Shanks [93a8077] [PAY-1145] DMs: Add InboxUnavailableModal (#3369) Marcus Pasell [633484d] Update edit playlist flow and components (#3361) Kyle Shanks [334ea0d] Special case ios safari for stem download (#3385) Raymond Jacobson [d38238d] [C-2607] Pagination wrapper hooks for audius-query (#3375) Andrew Mendelsohn [0a332d8] Hotfix: Fix stems downloads on mobile web (#3382) Marcus Pasell [81da65e] Clean up artist_pick_track_id in APIUser (#3381) Michelle Brier [64d89ef] Fix lint (#3380) Raymond Jacobson [59129b4] [C-2614] Fix download stems mobile web (#3379) Raymond Jacobson [df68727] [PAY-1032][PAY-892] Mobile DMs unread indicator, prefetch chats (#3352) Reed [4a00fad] [PAY-1151] Handle chat reactions near top of screen on mobile (#3370) Reed [bff316f] [PAY-1139] Throttle calls to fetchMessages on web scroll (#3372) Michael Piazza [e723cec] C-2483 Fix queue overshot empty track player bug (#3353) nicoback2 [472a41d] [C-2596] Add disabled option to audius-query hooks (#3367) Andrew Mendelsohn [f518962] [C-2602] Improve playlist library layout (#3364) Dylan Jeffers [b3db8fa] Fix debounce on notif reaction (#3362) Raymond Jacobson [2104b2b] [PAY-1183] Make clicking ChatUser handle/displayname lead to profile (#3368) Michael Piazza [21cb6fc] DMs: Fix click handler in search user list for users you can't chat (#3358) Marcus Pasell [24e7d8a] DMs: Update copy, scroll inbox-settings modal (#3359) Marcus Pasell [e5e8d90] [PAY-941] Fix "1 new messages" unread tag (web) (#3366) Michael Piazza [cfa1b2a] [C-2603] Fix readonly object error in audius-query reducer (#3365) Andrew Mendelsohn [978c993] Fix invite reward claimable state on mobile (#3363) Reed [a174fcc] [C-2556, C-2557] Address AI Attribution QA (#3349) Dylan Jeffers [3c9b0f1] [PAY-1202] Refactor saved collections fetching (#3337) Randy Schott [a0bdad5] Get call to action for chat permissions (#3325) Marcus Pasell [03a2721] DMs: Use the optimistic unread count if applicable (#3354) Marcus Pasell [8b99c2b] [C-2550] Left-nav fixes and improvements (#3357) Dylan Jeffers [e7b0aab] [PAY-1215] Fix create new message crash (#3356) Reed [6e7ece9] [PAY-1196] Mobile dms search users empty state (#3355) Reed [315ae4f] [PAY-1219] Fix mobile chat reactions popup message getting cut off (#3342) Reed
Description
Purple unread circle to indicate unread chats.
To enable this, also fetching chats + connecting to websockets at root screen load, and moved fetching chat messages for the first 10 messages on ChatListScreen load.
Changed
takeLatesttotakeEveryso multiplefetchMoreMessagescalls in a row would all go through.Dragons
Is there anything the reviewer should be on the lookout for? Are there any dangerous changes?
How Has This Been Tested?
Local ios stage
How will this change be monitored?
For features that are critical or could fail silently please describe the monitoring/alerting being added.
Feature Flags
Are all new features properly feature flagged? Describe added feature flags.