Skip to content

chore: Merge 4.71.2 into single-server#7113

Merged
diegolmello merged 2 commits into
single-serverfrom
build/4.71.2-single-server
Apr 8, 2026
Merged

chore: Merge 4.71.2 into single-server#7113
diegolmello merged 2 commits into
single-serverfrom
build/4.71.2-single-server

Conversation

@diegolmello

@diegolmello diegolmello commented Apr 8, 2026

Copy link
Copy Markdown
Member

Summary

Summary by CodeRabbit

  • Chores

    • Bumped application version to 4.71.2 across Android, iOS, and web platforms.
  • Bug Fixes

    • Enhanced gesture handling in modal dialogs and secure input screens to improve interaction responsiveness.

Rohit3523 and others added 2 commits April 8, 2026 15:15
Co-authored-by: Otávio Stasiak <91474186+OtavioStasiak@users.noreply.github.com>
@diegolmello diegolmello had a problem deploying to approve_e2e_testing April 8, 2026 18:17 — with GitHub Actions Failure
@coderabbitai

coderabbitai Bot commented Apr 8, 2026

Copy link
Copy Markdown
Contributor

Caution

Review failed

Pull request was closed or merged during review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 262e91d9-6f17-4197-93f1-c0719392a1c8

📥 Commits

Reviewing files that changed from the base of the PR and between 79b90a8 and f9871cb.

📒 Files selected for processing (10)
  • android/app/build.gradle
  • app/containers/TwoFactor/index.tsx
  • app/views/ChangePasscodeView.tsx
  • app/views/JitsiMeetView/JitsiAuthModal.tsx
  • app/views/RoomView/Banner.tsx
  • app/views/ScreenLockedView.tsx
  • ios/RocketChatRN.xcodeproj/project.pbxproj
  • ios/RocketChatRN/Info.plist
  • ios/ShareRocketChatRN/Info.plist
  • package.json
📜 Recent review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: ESLint and Test / run-eslint-and-test
🧰 Additional context used
📓 Path-based instructions (6)
**/*.{js,jsx,ts,tsx,json}

📄 CodeRabbit inference engine (CLAUDE.md)

Configure Prettier with tabs, single quotes, 130 character width, no trailing commas, arrow parens avoid, and bracket same line

Files:

  • app/views/JitsiMeetView/JitsiAuthModal.tsx
  • app/containers/TwoFactor/index.tsx
  • app/views/ScreenLockedView.tsx
  • app/views/ChangePasscodeView.tsx
  • package.json
  • app/views/RoomView/Banner.tsx
**/*.{js,jsx,ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

Use ESLint with @rocket.chat/eslint-config base configuration including React, React Native, TypeScript, and Jest plugins

Files:

  • app/views/JitsiMeetView/JitsiAuthModal.tsx
  • app/containers/TwoFactor/index.tsx
  • app/views/ScreenLockedView.tsx
  • app/views/ChangePasscodeView.tsx
  • app/views/RoomView/Banner.tsx
**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

Use TypeScript with strict mode enabled and configure baseUrl to app/ for import resolution

**/*.{ts,tsx}: Use TypeScript for type safety; add explicit type annotations to function parameters and return types
Prefer interfaces over type aliases for defining object shapes in TypeScript
Use enums for sets of related constants rather than magic strings or numbers

Files:

  • app/views/JitsiMeetView/JitsiAuthModal.tsx
  • app/containers/TwoFactor/index.tsx
  • app/views/ScreenLockedView.tsx
  • app/views/ChangePasscodeView.tsx
  • app/views/RoomView/Banner.tsx
app/views/**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

Place screen components in app/views/ directory

Files:

  • app/views/JitsiMeetView/JitsiAuthModal.tsx
  • app/views/ScreenLockedView.tsx
  • app/views/ChangePasscodeView.tsx
  • app/views/RoomView/Banner.tsx
**/*.{js,ts,jsx,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{js,ts,jsx,tsx}: Use descriptive names for functions, variables, and classes that clearly convey their purpose
Write comments that explain the 'why' behind code decisions, not the 'what'
Keep functions small and focused on a single responsibility
Use const by default, let when reassignment is needed, and avoid var
Prefer async/await over .then() chains for handling asynchronous operations
Use explicit error handling with try/catch blocks for async operations
Avoid deeply nested code; refactor complex logic into helper functions

Files:

  • app/views/JitsiMeetView/JitsiAuthModal.tsx
  • app/containers/TwoFactor/index.tsx
  • app/views/ScreenLockedView.tsx
  • app/views/ChangePasscodeView.tsx
  • app/views/RoomView/Banner.tsx
app/containers/**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

Place reusable UI components in app/containers/ directory

Files:

  • app/containers/TwoFactor/index.tsx
🧠 Learnings (15)
📓 Common learnings
Learnt from: CR
Repo: RocketChat/Rocket.Chat.ReactNative PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-07T17:49:17.538Z
Learning: Support React 19, React Native 0.79, and Expo 53
📚 Learning: 2026-04-07T17:49:17.538Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat.ReactNative PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-07T17:49:17.538Z
Learning: Applies to app/AppContainer.tsx : Implement root navigation container logic in app/AppContainer.tsx to switch between authentication states

Applied to files:

  • app/views/JitsiMeetView/JitsiAuthModal.tsx
  • app/containers/TwoFactor/index.tsx
  • app/views/ScreenLockedView.tsx
  • app/views/ChangePasscodeView.tsx
📚 Learning: 2026-04-07T17:49:17.538Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat.ReactNative PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-07T17:49:17.538Z
Learning: Applies to app/lib/services/voip/**/*.{ts,tsx} : Implement VoIP with WebRTC peer-to-peer audio calls in app/lib/services/voip/ using Zustand stores instead of Redux, with native CallKit (iOS) and Telecom (Android) integration; keep VoIP and VideoConf separate

Applied to files:

  • app/views/JitsiMeetView/JitsiAuthModal.tsx
📚 Learning: 2026-04-07T17:49:17.538Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat.ReactNative PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-07T17:49:17.538Z
Learning: Applies to @(app/sagas/videoConf.ts|app/lib/methods/videoConf.ts) : Manage video conferencing via Redux actions/reducers/sagas in app/sagas/videoConf.ts and app/lib/methods/videoConf.ts using server-managed Jitsi integration; do not conflate with VoIP

Applied to files:

  • app/views/JitsiMeetView/JitsiAuthModal.tsx
📚 Learning: 2026-04-07T17:49:17.538Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat.ReactNative PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-07T17:49:17.538Z
Learning: Applies to app/stacks/**/*.{ts,tsx} : Use React Navigation 7 for navigation with stacks for InsideStack (authenticated), OutsideStack (login/register), MasterDetailStack (tablets), and ShareExtensionStack

Applied to files:

  • app/views/JitsiMeetView/JitsiAuthModal.tsx
  • app/containers/TwoFactor/index.tsx
  • app/views/ScreenLockedView.tsx
  • app/views/RoomView/Banner.tsx
📚 Learning: 2026-03-10T15:21:45.098Z
Learnt from: Rohit3523
Repo: RocketChat/Rocket.Chat.ReactNative PR: 7046
File: app/containers/InAppNotification/NotifierComponent.stories.tsx:46-75
Timestamp: 2026-03-10T15:21:45.098Z
Learning: In `app/containers/InAppNotification/NotifierComponent.tsx` (React Native, Rocket.Chat), `NotifierComponent` is exported as a Redux-connected component via `connect(mapStateToProps)`. The `isMasterDetail` prop is automatically injected from `state.app.isMasterDetail` and does not need to be passed explicitly at call sites or in Storybook stories that use the default (connected) export.

Applied to files:

  • app/views/JitsiMeetView/JitsiAuthModal.tsx
  • app/containers/TwoFactor/index.tsx
  • app/views/ScreenLockedView.tsx
  • app/views/RoomView/Banner.tsx
📚 Learning: 2026-04-07T17:49:17.538Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat.ReactNative PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-07T17:49:17.538Z
Learning: Applies to app/containers/**/*.{ts,tsx} : Place reusable UI components in app/containers/ directory

Applied to files:

  • app/containers/TwoFactor/index.tsx
  • app/views/ChangePasscodeView.tsx
📚 Learning: 2026-03-31T11:59:31.061Z
Learnt from: Rohit3523
Repo: RocketChat/Rocket.Chat.ReactNative PR: 6875
File: android/build.gradle:3-8
Timestamp: 2026-03-31T11:59:31.061Z
Learning: In the RocketChat/Rocket.Chat.ReactNative repository, the React Native upgrade helper (https://react-native-community.github.io/upgrade-helper/?from=0.79.4&to=0.81.5) recommends kotlinVersion = "2.1.20", compileSdkVersion = 36, targetSdkVersion = 36, and buildToolsVersion = "36.0.0" in android/build.gradle for the RN 0.79.4 → 0.81.5 upgrade. These are the sanctioned values for this upgrade path and should not be flagged as compatibility concerns.

Applied to files:

  • android/app/build.gradle
  • package.json
  • ios/RocketChatRN.xcodeproj/project.pbxproj
📚 Learning: 2026-03-31T11:58:54.608Z
Learnt from: Rohit3523
Repo: RocketChat/Rocket.Chat.ReactNative PR: 6875
File: android/gradle/wrapper/gradle-wrapper.properties:3-3
Timestamp: 2026-03-31T11:58:54.608Z
Learning: In the RocketChat/Rocket.Chat.ReactNative repository, the React Native upgrade helper (https://react-native-community.github.io/upgrade-helper/) recommends gradle-8.14.3-bin for the React Native 0.79.4 → 0.81.5 upgrade. This is the sanctioned Gradle version for RN 0.81.5 even though it is above Kotlin 2.1.20's "fully supported" Gradle range (≤8.11); Kotlin 2.1.20 docs explicitly allow using newer Gradle versions with a caveat that deprecation warnings may appear.

Applied to files:

  • android/app/build.gradle
  • package.json
📚 Learning: 2026-04-07T17:49:17.538Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat.ReactNative PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-07T17:49:17.538Z
Learning: Applies to app/views/**/*.{ts,tsx} : Place screen components in app/views/ directory

Applied to files:

  • app/views/ScreenLockedView.tsx
📚 Learning: 2026-02-05T13:55:00.974Z
Learnt from: Rohit3523
Repo: RocketChat/Rocket.Chat.ReactNative PR: 6930
File: package.json:101-101
Timestamp: 2026-02-05T13:55:00.974Z
Learning: In this repository, the dependency on react-native-image-crop-picker should reference the RocketChat fork (RocketChat/react-native-image-crop-picker) with explicit commit pins, not the upstream ivpusic/react-native-image-crop-picker. Update package.json dependencies (and any lockfile) to point to the fork URL and a specific commit, ensuring edge-to-edge Android fixes are included. This pattern should apply to all package.json files in the repo that declare this dependency.

Applied to files:

  • package.json
📚 Learning: 2026-04-07T17:49:17.538Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat.ReactNative PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-07T17:49:17.538Z
Learning: Support React 19, React Native 0.79, and Expo 53

Applied to files:

  • package.json
  • app/views/RoomView/Banner.tsx
📚 Learning: 2026-03-30T15:49:30.957Z
Learnt from: Rohit3523
Repo: RocketChat/Rocket.Chat.ReactNative PR: 6875
File: app/containers/RoomItem/Actions.tsx:12-12
Timestamp: 2026-03-30T15:49:30.957Z
Learning: In RocketChat/Rocket.Chat.ReactNative, `react-native-worklets` version 0.6.1 does NOT export a built-in Jest mock (e.g., no `react-native-worklets/lib/module/mock`). The correct Jest mock approach for this version is to add a manual mock in `jest.setup.js`: `jest.mock('react-native-worklets', () => ({ scheduleOnRN: jest.fn((fn, ...args) => fn(...args)) }))`.

Applied to files:

  • package.json
📚 Learning: 2026-04-07T17:49:17.538Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat.ReactNative PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-07T17:49:17.538Z
Learning: Applies to **/*.{js,jsx,ts,tsx} : Use ESLint with rocket.chat/eslint-config base configuration including React, React Native, TypeScript, and Jest plugins

Applied to files:

  • package.json
📚 Learning: 2026-04-07T17:49:17.538Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat.ReactNative PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-04-07T17:49:17.538Z
Learning: Applies to app/index.tsx : Configure Redux provider, theme, navigation, and notifications in app/index.tsx

Applied to files:

  • app/views/RoomView/Banner.tsx
🔇 Additional comments (10)
ios/RocketChatRN.xcodeproj/project.pbxproj (1)

3010-3010: Version bump is consistent for NotificationService build configs.

Both Debug and Release MARKETING_VERSION values are aligned to 4.71.2, which is correct for this release bump.

Also applies to: 3062-3062

package.json (1)

3-3: Package version update looks good.

package.json is correctly bumped to 4.71.2 and stays aligned with the release scope.

ios/ShareRocketChatRN/Info.plist (1)

29-29: Share extension version bump is correct.

CFBundleShortVersionString is updated to 4.71.2 as expected.

android/app/build.gradle (1)

93-93: Android versionName bump is correct.

versionName is properly updated to 4.71.2 and matches the cross-platform release version.

ios/RocketChatRN/Info.plist (1)

31-31: Main iOS app version bump is correct.

CFBundleShortVersionString now matches 4.71.2 as intended for this release.

app/views/ChangePasscodeView.tsx (1)

6-6: LGTM! Correct fix for modal touchables regression.

Wrapping the modal content with GestureHandlerRootView is the correct approach to fix gesture handler components (touchables) not working inside react-native-modal. The modal creates a separate native view hierarchy that requires its own gesture handler root.

Also applies to: 16-20, 78-85

app/containers/TwoFactor/index.tsx (1)

10-10: LGTM! Clean replacement of View with GestureHandlerRootView.

The change correctly replaces the outer View wrapper with GestureHandlerRootView while preserving the existing styles and testID. This ensures the form inputs and buttons inside the two-factor modal respond correctly to touch events.

Also applies to: 161-161, 202-202

app/views/RoomView/Banner.tsx (1)

2-3: LGTM! Good consolidation of gesture handler imports.

The change correctly wraps modal content with GestureHandlerRootView and imports ScrollView from react-native-gesture-handler for better integration. This ensures the scrollable markdown content within the modal banner responds correctly to scroll and touch gestures.

Also applies to: 45-50

app/views/JitsiMeetView/JitsiAuthModal.tsx (1)

5-5: LGTM! Consistent fix for modal button interactions.

The change correctly replaces View with GestureHandlerRootView while preserving existing styles. This ensures the Cancel and Continue buttons in the Jitsi auth modal respond properly to touch events.

Also applies to: 52-52, 79-79

app/views/ScreenLockedView.tsx (1)

82-89: LGTM! Double gesture handler wrapping is intentional here.

While PasscodeEnter is already wrapped with gestureHandlerRootHOC (see app/containers/Passcode/PasscodeEnter.tsx:94), the additional GestureHandlerRootView wrapper is necessary because react-native-modal creates a separate native view hierarchy. This ensures both the PasscodeEnter component and the Touch close button work correctly within the modal context.


Walkthrough

This pull request bumps the application version from 4.71.1 to 4.71.2 across all version manifests, and wraps modal component contents with GestureHandlerRootView from react-native-gesture-handler in five view files.

Changes

Cohort / File(s) Summary
Version Bump
package.json, android/app/build.gradle, ios/RocketChatRN/Info.plist, ios/ShareRocketChatRN/Info.plist, ios/RocketChatRN.xcodeproj/project.pbxproj
Updated application version identifier from 4.71.1 to 4.71.2 in package manifest and build configuration files.
Modal GestureHandler Wrapping
app/containers/TwoFactor/index.tsx, app/views/ChangePasscodeView.tsx, app/views/JitsiMeetView/JitsiAuthModal.tsx, app/views/RoomView/Banner.tsx, app/views/ScreenLockedView.tsx
Wrapped modal content containers with GestureHandlerRootView and added corresponding imports from react-native-gesture-handler. Applied consistent centering layout styles to gesture handler roots where applicable.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Possibly related PRs

Suggested labels

type: chore, type: bug

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the primary change: merging version 4.71.2 into the single-server branch, which is confirmed by the version bumps across all platform files and the cherry-picked regression fix.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@diegolmello diegolmello merged commit 0a8cb30 into single-server Apr 8, 2026
4 of 6 checks passed
@diegolmello diegolmello deleted the build/4.71.2-single-server branch April 8, 2026 18:17
@diegolmello diegolmello had a problem deploying to experimental_ios_build April 8, 2026 18:21 — with GitHub Actions Failure
@diegolmello diegolmello had a problem deploying to experimental_android_build April 8, 2026 18:21 — with GitHub Actions Failure
@diegolmello diegolmello had a problem deploying to official_android_build April 8, 2026 18:21 — with GitHub Actions Failure
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants