Repository navigation
refactor(messenger): split ChatViewModel's reducer into per-area files - #1933
Merged
Merged
Conversation
stateReducer's branches move verbatim into nine reducer files in the same package. stateReducer dispatches to them in turn; State, Event and the reducer's signature are unchanged. The private helpers narrowedFor and withQuickReactionStrip, and the ROUTED_TO_PROFILE constant, become internal so the new files can reach them.
The dispatcher is a when over Event with no else, grouping each area's events and forwarding to that area's reducer, so adding an Event without routing it is a compile error again. Area reducers return a non-null reducer; branch bodies are unchanged.
bmc08gt
added a commit
that referenced
this pull request
Nov 3, 2026
…ee-pane * origin/code/cash: (44 commits) refactor(chat-list): move the chat list into a KMP module and wire it into the desktop graph (#1950) build(deps): bump dev.zacsweers.metro from 1.4.5 to 1.5.1 (#1901) feat(flipcash): add return-payment contract scaffolding (#1949) refactor(chat-ui): make shared/chat-ui a KMP module (#1934) build(deps): bump com.google.firebase:firebase-bom from 34.19.0 to 35.1.0 (#1900) build(deps): bump io.ktor:ktor-network from 3.4.1 to 3.6.0 (#1909) build(deps): bump rinku from 1.6.0 to 1.9.0 (#1907) build(deps): bump androidx.webkit:webkit from 1.17.0 to 1.18.0 (#1906) build(deps): bump agp from 9.4.1 to 9.5.0 (#1905) build(deps): bump androidx-datastore from 1.2.1 to 1.3.0 (#1904) build(deps): bump compose-multiplatform from 1.12.1 to 1.12.2 (#1903) build(deps): bump com.google.android.gms:play-services-base (#1902) build(deps): bump okhttp from 5.5.0 to 5.5.1 (#1899) refactor(messenger): split ChatViewModel's reducer into per-area files (#1933) refactor(amount-entry): make shared/amount-entry a KMP module (#1932) fix(build): stop KMP host tests building release variants and debug manifests changing per commit (#1948) refactor(theme): collapse Avenir into one family with a real Medium face (#1947) perf: run independent hot-path calls concurrently (#1945) docs(claude): test gestures with device input and keep mode state at screen level (#1943) build: bump Flipcash to 2026.11.2 ... # Conflicts: # CLAUDE.md
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.
Step B1 of the desktop chat split:
ChatViewModel.stateReducerwas onewhenof about 370 lines. Its branches now live in nine reducer files next to it, one per area:ChatOpenReducer(open, group, lobby, members, chat-wide inputs),PinsReducer,SendReducer,TypingReducer,ComposerPhotosReducer,MessageActionReducer(selection, edit, delete, reply, mentions),ReactionsReducer,JumpReturnReducer,UnreadReducer.stateReducer(event, lifetime)keeps its signature and tries each area in turn, soState,Eventand every caller are untouched. The dispatcher'swhenoverEventhas noelse, so the compiler still rejects anEventthat isn't routed to an area.No logic changed. The only edits outside the move are
narrowedFor,withQuickReactionStripandROUTED_TO_PROFILEgoing from private to internal so the new files can use them, and the imports.How "verbatim" was checked: the stripped, non-blank lines of the old branch region (367) and of the new
whenbodies match as multisets, andgit diff --color-moved --color-moved-ws=allow-indentation-changeshows the branches as moved. The messenger unit suite runs 1,130 tests with the same names and no failures on bothcode/cashand this branch.