Repository navigation
docs(ai-migration): cover gaps found migrating the website demo apps - #3356
Conversation
Migrating two demo apps from v14 to 15.0.0-rc.3 with only the guides surfaced UI states that compile but behave differently, mostly around ChatView unmounting the inactive view, and a few type-level holes. - explain that ChatView views unmount; create the channel paginator above ChatView and guard useOpenFirstChannel on openChannels - list isThreadDismissable and the header members in "Without ChatView" - show stale state seeded from the channel, and a typing.start guard - add a grep for removed CSS classes, combinators included - smaller fixes in sections 1, 6, 7, 10, 13 and 18 - point the stream-chat-js v10 guide links at release-v10 (master 404s)
|
No actionable comments were generated in the recent review.
|
| Layer / File(s) | Summary |
|---|---|
View lifecycle and channel navigation ai-docs/ai-migration-v14-v15.md |
Explains how ChatView unmounts inactive views and how local state and paginators behave on return. Updates navigation overrides, channel-name draft handling, and first-channel initialization examples. |
API and migration clarifications ai-docs/ai-migration-v14-v15.md |
Updates stream-chat compatibility guidance and clarifies typing events, thread slots, message actions, composer setup, translations, and CSS troubleshooting. Also updates migration-note references and channel-list item guidance. |
Priority:
Estimated code review effort: 2 (Simple) | ~10 minutes
Change: Other
Possibly related PRs
- GetStream/stream-chat-react#3328: Changes v15 runtime behavior around
ChatView, workspace navigation, pagination, and APIs covered by the guide. - GetStream/stream-chat-react#3342: Changes pagination and typing behavior documented in the guide.
- GetStream/stream-chat-react#3329: Creates the v14-to-v15 migration guide that this PR updates.
Suggested reviewers: martincupela, nikolagorannaumovski
Merge Risk: 
Minimal · up to ffcc9
-
This documentation-only update clarifies migration guidance and examples, and no concrete defect remains. There is no runtime impact and no merge-blocking risk.
Pre-merge checks: 
5
-
Full details: Description check
-
Explanation
The description includes the goal, implementation details, and UI changes sections. It explains the migration findings, documentation updates, validation approach, and confirms that no UI changes were made.
Full details: Docstring Coverage
-
Explanation
No eligible functions found in the changed files. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 0 functions across 0 files. (1 skipped: 1 unsupported.)
-
Finishing Touches
-
🧪 Generate unit tests (beta)
-
- Commit to this branch
- Create a new PR
-
- Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.
Comment @coderabbitai help to get the list of available commands.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #3356 +/- ##
=======================================
Coverage 88.66% 88.66%
=======================================
Files 563 563
Lines 17139 17139
Branches 5246 5246
=======================================
Hits 15196 15196
Misses 1943 1943 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
The guide's section 4 (from #3356) already lists every navigation member to override, so the builder would add public API for the minority path without ChatView. Section 4 is back to master's text; the section 6 open-first-channel snippet fix stays.
…e apps (#3361) ### 🎯 Goal Cover the gaps in the v14 → v15 AI migration guide that the stream-video-js sample-app migration hit (GetStream/stream-video-js#2559). Gaps already fixed by #3356 were dropped. ### 🛠 Implementation details Checked against `stream-chat-react@15.0.0-rc.3` (and `14.10.0` for the v14 comparisons). The new snippets type-check. - **List widths:** `--str-chat__channel-list-width` / `--str-chat__thread-list-width` default to `100%` with `flex-shrink: 0`. In a view with a list beside a `<Slot>`, the slot collapses and the page scrolls sideways. Added to Panel layout and the silent-break table. - **Active row:** v14 styled `[aria-pressed=true]` and `[aria-selected=true]`; v15 styles only `[aria-selected=true]`. Updated the `active` prop row, the `CustomItem` example and the §19 table. - **Open channel outside `ChatView`:** an app component that reads `useWorkspaceNavigation()` next to `ChatView` always gets `openChannels: []`. Render it as a `ChatView` child, which sits inside the provider and stays mounted across view switches. - **Stability:** only `layouts` re-creates the layout controller. `views` is read per render, and slot renderers are called as plain functions, so neither has to be module-scoped. The comments and the §6 bullet are relaxed accordingly. If stability is meant as a contract, keep the old wording and I'll drop this part. - **i18n:** 62 v14 keys (`live`, `Create`, `Submit`, typing strings, ...) have no key-map entry, so "never an SDK key" was wrong for them. Step 3 is reworded, and `i18n-v15-migration.md` gets the list. Please check whether any of them were renamed and just missed in the map. Ticket: https://linear.app/stream/issue/REACT-1474 ### 🎨 UI Changes None (docs only). <!-- This is an auto-generated comment: release notes by coderabbit.ai --> <!-- coderabbit-ai-generated:v1 --> ## Summary by CodeRabbit * **Documentation** * Clarified migration guidance for component placement, view configuration, referential stability, channel lists, accessibility, styling, and translations. * Documented how to handle translation keys that no longer have v15 replacements. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
Goal
Ticket: https://linear.app/stream/issue/REACT-1162
We migrated two demo apps from v14 to
15.0.0-rc.3(stream-chat@10.0.0-rc.26) using onlyai-docs/ai-migration-v14-v15.mdand the stream-chat-jsv10-breaking-changes.md, and logged every place the guides fell short. The findings and the migrated code are in GetStream/website-react-examples#138. Every compile error had an answer in the guides; the gaps are UI states that compile but behave differently, mostly becauseChatViewunmounts the inactive view, plus a few type-level holes. This PR fixes them in the guide. Docs only, and it describes the current rc API.Implementation details
Each claim was checked against the source in this repo, and every new or changed snippet compiles against the installed
stream-chat-react@15.0.0-rc.3/stream-chat@10.0.0-rc.26(strict,noImplicitReturns,noUnusedLocals).ChatViewview unmounts. Only the slot bindings survive; state, refs and effects inside a view start over on every switch.useOpenFirstChannel: theuseRefguard reset on remount, so returning from the threads view re-opened the first channel over the one the user had open. The hook now guards onuseWorkspaceNavigation().openChannels.length === 0. It also notes where to call it (the channels view, not an always-renderedChatViewchild, whereopenChannelsis empty in the threads view) and that it re-opens when nothing is open.ChatView(useChannelPaginator), so it is not re-created and re-queried on every view switch.isThreadDismissable(the defaultThreadHeaderclose button needs it, and its default is() => false),isChannelDismissablewithcloseChannel, andcanGoBackwithgoBack. The example now overridesisThreadDismissable.useState(channel.data?.custom?.name)keeps the previous channel name) and its fix.event.userfrom thetypingslice behind anEventPayload<'typing.start'>type guard (Eventis a union, so the unguarded read fails withTS2339), plus a note that the guard can go ifstream-chatnarrows the slice type.*.css/*.scss/*.sass/*.less, which also matches them inside combinators (e.g..x + .str-chat__main-panel) and skips.str-chat__main-panel-innerand.str-chat__thread-container, which still exist.ChatView, and state seeded from the channel going stale; the CSS row now points at the grep.ThreadHead?" for a staleThreadHeaderkey points at the parent-message slot.useCloseThreadtakes aWorkspaceNavigationTriggerEvent, narrower than v14'sBaseSyntheticEvent.getMessageActions()" so those apps know to switch touseUserRole.setMessageComposerSetupFunctionbeing deprecated in favour ofclient.config.setSetupFunction('messageComposer', ...).asDynamicKey".ChannelListItemUIreceives the computedactiveprop.stream-chatpeer range from the installedpackage.jsoninstead of a hard-coded rc, and lists thestream-chattype changes that are usually the first errors (ChannelSorttoSortParamRequest[],queryChannelsraw vsqueryChannelsAndHydrate,queryUsers({ payload })).master/ai-docs/v10-breaking-changes.mdreturned 404, because the file lives onrelease-v10(docs: consolidate v10 breaking changes into ai-docs stream-chat-js#1919 merged there). They now point atrelease-v10and use that guide's explicit anchors.UI Changes
None, documentation only.
Summary by CodeRabbit