After performing the migration from v8 to v9, you must follow a strict verification workflow to ensure no legacy symbols remain and that the new architecture is correctly implemented.
1. Symbol Detection
Run the following rg (ripgrep) commands to ensure no v8-specific symbols are left in your src/ directory. If any return hits, they must be migrated or manually verified as legitimate (e.g., comments or test strings).
- Legacy Components:
rg '\b(MessageSimple|MessageAvatar|ChannelPreviewMessenger|ChannelListMessenger)\b' src/ - Audio Controller:
rg '\buseAudioController\b' src/ - Muted Users (Scope-split):
rg '\buseMutedUsers\b' src/ (Note: Chat-level usage is a bug; ChannelList-level usage is fine). - Multi-send:
rg '\basyncMessagesMultiSendEnabled\b' src/ - Message/Preview Props:
rg '\b(latestMessagePreview|deletedMessagesVisibilityType|messageContentWidth|setMessageContentWidth|legacyImageViewerSwipeBehaviour)\b' src/ - Attachment/Card Components:
rg '\b(AttachmentActions|AttachmentUploadProgressIndicator|Card|CardCover|CardFooter|CardHeader|ImageReloadIndicator|MessagePreview)\b' src/ - Selector Icons:
rg '\b(CameraSelectorIcon|FileSelectorIcon|ImageSelectorIcon|VideoRecorderSelectorIcon)\b' src/ - Theme/Surface Keys:
rg '\b(backgroundCoreSurface|badgeTextInverse|textInverse|backgroundCoreElevation4)\b' src/
2. Component Override Check
Ensure component override props are no longer passed to Channel, ChannelList, Chat, or Thread. This regex should return 0 hits:
rg '<(Channel|ChannelList|Chat|Thread)\s[^>]*\b([A-Z]\w+)=\{' src/
3. MessageInput Component Check
MessageInput has been renamed to MessageComposer. However, the context, hooks, and helper views were NOT renamed. Use this command to find remaining component references while ignoring valid context/hook names:
rg '\bMessageInput\b' src/ | rg -v 'MessageInputContext|MessageInputHeaderView|MessageInputFooterView|MessageInputLeadingView|MessageInputTrailingView|useMessageInputContext|MessageInputContextValue'
4. Dependency and Type Check
- Peer Dependency: Verify
"react-native-teleport" is present in package.json using rg '"react-native-teleport"' package.json. - TypeScript: Run
yarn tsc --noEmit or npx tsc --noEmit. - Lint/Tests: Run
yarn lint and yarn test if applicable.
5. Manual Smoke Test
Verify the following runtime behaviors:
- Render the hierarchy:
<Chat> → <Channel> → <MessageList> + <MessageComposer>. - Send a text message and long-press to confirm reactions/actions appear via the new overlay.
- Swipe a message right to confirm the reply preview appears (the entire
MessageItemView row is now the hit area). - Attach an image and confirm upload indicators render.
- Start an audio recording and confirm send behavior.
- Open the image gallery from a message with media.
Note on Theming: If components render incorrectly, check for stale theme keys by diffing against contexts/themeContext/utils/theme.ts.
# Example: Checking for legacy MessageInput component usage while ignoring valid context/hooks
rg '\bMessageInput\b' src/ | rg -v 'MessageInputContext|MessageInputHeaderView|MessageInputFooterView|MessageInputLeadingView|MessageInputTrailingView|useMessageInputContext|MessageInputContextValue'