Skip to content

Commit fc6be0f

Browse files
committed
Merge branch 'develop' into deprecated-fix
2 parents da5df56 + 7d163d3 commit fc6be0f

203 files changed

Lines changed: 59987 additions & 33767 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.maestro/tests/accessibilityAndAppearance/ToastsAndDialogs.yml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,13 @@ tags:
1818
# Show alerts as Toasts
1919
- tapOn: 'Menu'
2020
- tapOn: 'Accessibility & appearance'
21-
- tapOn: 'Show alerts as. Toasts'
21+
- tapOn: '.*Show alerts as.*'
2222
- assertVisible: 'Toasts. Dismissed automatically. Checked'
2323
- assertVisible: 'Dialogs. Require manual dismissal. Unchecked'
24-
- tapOn: 'Bottom Sheet backdrop'
24+
- tapOn:
25+
id: 'action-sheet-handle'
26+
- waitForAnimationToEnd:
27+
timeout: 5000
2528
- tapOn: 'Menu'
2629
- tapOn: 'Edit status'
2730
- tapOn:
@@ -34,7 +37,7 @@ tags:
3437

3538
# Show alerts as Dialogs
3639
- tapOn: 'Accessibility & appearance'
37-
- tapOn: 'Show alerts as. Toasts'
40+
- tapOn: '.*Show alerts as.*'
3841
- assertVisible: 'Toasts. Dismissed automatically. Checked'
3942
- tapOn: 'Dialogs. Require manual dismissal. Unchecked'
4043
- tapOn: 'Menu'

.maestro/tests/assorted/join-from-directory.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,10 @@ tags:
9797
id: 'directory-view-filter'
9898
- extendedWaitUntil:
9999
visible:
100-
text: 'Users unselected'
100+
id: 'directory-switch-users'
101101
timeout: 60000
102102
- tapOn:
103-
text: 'Users unselected'
103+
id: 'directory-switch-users'
104104
- tapOn:
105105
id: 'directory-view-search'
106106
- inputText: ${output.otherUser.username}
@@ -145,10 +145,10 @@ tags:
145145
id: 'directory-view-filter'
146146
- extendedWaitUntil:
147147
visible:
148-
text: 'Teams unselected'
148+
id: 'directory-switch-teams'
149149
timeout: 60000
150150
- tapOn:
151-
text: 'Teams unselected'
151+
id: 'directory-switch-teams'
152152
- tapOn:
153153
id: 'directory-view-search'
154154
- inputText: ${output.team}

.maestro/tests/assorted/profile.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,8 @@ tags:
9696
env:
9797
id: 'profile-view-username'
9898
- inputText: ${output.user.username + 'username'}
99-
- tapOn: '.*Username.*' #hidekeyboard on iOS
99+
- runFlow:
100+
file: '../../helpers/hide-keyboard.yaml'
100101
- scrollUntilVisible:
101102
element:
102103
id: 'profile-view-submit'
@@ -111,9 +112,8 @@ tags:
111112
- tapOn:
112113
id: 'profile-view-nickname'
113114
- inputText: ${output.user.username + 'newnickname'}
114-
- tapOn:
115-
text: '.*Nickname.*'
116-
index: 0
115+
- runFlow:
116+
file: '../../helpers/hide-keyboard.yaml'
117117
- assertVisible:
118118
id: 'profile-view-bio'
119119
- tapOn:

.maestro/tests/room/room-actions.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,8 @@ tags:
121121
from:
122122
id: action-sheet-handle
123123
direction: UP
124-
- extendedWaitUntil:
125-
visible:
124+
- scrollUntilVisible:
125+
element:
126126
text: 'Star'
127127
timeout: 60000
128128
- tapOn:

.maestro/tests/room/room.yaml

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ tags:
161161
- tapOn:
162162
id: emoji-searchbar-input
163163
- inputText: 'laughing'
164+
- hideKeyboard
164165
- extendedWaitUntil:
165166
visible:
166167
id: emoji-laughing
@@ -252,10 +253,8 @@ tags:
252253
visible:
253254
id: 'action-sheet-handle'
254255
timeout: 60000
255-
- swipe:
256-
from:
257-
id: action-sheet-handle
258-
direction: DOWN
256+
- tapOn:
257+
id: 'action-sheet-handle'
259258
- extendedWaitUntil:
260259
notVisible:
261260
id: 'reactionsList'
@@ -317,22 +316,23 @@ tags:
317316
visible:
318317
text: '.*edit.*'
319318
timeout: 60000
319+
- hideKeyboard
320320
- longPressOn:
321321
id: 'message-content-edit'
322+
- waitForAnimationToEnd:
323+
timeout: 1000
322324
- extendedWaitUntil:
323325
visible:
324326
id: action-sheet
325327
timeout: 60000
326328
- extendedWaitUntil:
327329
visible:
328-
id: action-sheet-handle
329-
timeout: 60000
330-
- extendedWaitUntil:
331-
visible:
332-
text: 'Edit'
330+
id: message-actions-edit
333331
timeout: 60000
332+
- waitForAnimationToEnd:
333+
timeout: 1000
334334
- tapOn:
335-
text: 'Edit'
335+
id: message-actions-edit
336336
- extendedWaitUntil:
337337
visible:
338338
id: message-composer-input
@@ -363,10 +363,10 @@ tags:
363363
timeout: 60000
364364
- extendedWaitUntil:
365365
visible:
366-
text: 'Quote'
366+
id: message-actions-quote
367367
timeout: 60000
368368
- tapOn:
369-
text: 'Quote'
369+
id: message-actions-quote
370370
- extendedWaitUntil:
371371
visible:
372372
id: message-composer-input
@@ -419,9 +419,9 @@ tags:
419419
direction: UP
420420
- scrollUntilVisible:
421421
element:
422-
text: 'Delete'
422+
id: message-actions-delete
423423
- tapOn:
424-
text: 'Delete'
424+
id: message-actions-delete
425425
- extendedWaitUntil:
426426
visible:
427427
text: '.*You will not be able to recover this message.*'
@@ -471,10 +471,10 @@ tags:
471471
timeout: 60000
472472
- extendedWaitUntil:
473473
visible:
474-
text: 'Reply in direct message'
474+
id: message-actions-reply-in-dm
475475
timeout: 60000
476476
- tapOn:
477-
text: 'Reply in direct message'
477+
id: message-actions-reply-in-dm
478478
- extendedWaitUntil:
479479
visible:
480480
id: room-view-title-${output.replyUser.username}
@@ -585,7 +585,7 @@ tags:
585585
id: action-sheet
586586
timeout: 60000
587587
- tapOn:
588-
text: 'Quote'
588+
id: message-actions-quote
589589
- extendedWaitUntil:
590590
visible:
591591
id: 'markdown-preview-${output.originalMessage}'

.maestro/tests/room/share-message.yaml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,9 @@ tags:
7474
timeout: 60000
7575
- tapOn:
7676
id: multi-select-item-${output.otherUser.username.toLowerCase()}
77-
- swipe:
78-
from:
79-
id: 'action-sheet-handle'
80-
direction: DOWN
77+
# this is to hide bottom sheet and keyboard together
78+
- tapOn:
79+
point: 5%,10%
8180
- extendedWaitUntil:
8281
notVisible:
8382
id: 'multi-select-search'

.maestro/tests/teams/utils/close-action-sheet.yaml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@ tags:
33
- 'util'
44

55
---
6-
- swipe:
7-
from:
8-
id: action-sheet-handle
9-
direction: DOWN
6+
- tapOn:
7+
id: action-sheet-handle
108
- extendedWaitUntil:
119
notVisible:
1210
id: action-sheet-handle

.maestro/tests/teams/utils/open-action-sheet.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,16 @@ tags:
77
visible:
88
id: room-members-view-item-${username}
99
timeout: 60000
10+
- waitForAnimationToEnd:
11+
timeout: 2000
1012
- tapOn:
1113
id: room-members-view-item-${username}
14+
- waitForAnimationToEnd:
15+
timeout: 2000
1216
- extendedWaitUntil:
1317
visible:
1418
id: action-sheet
1519
timeout: 60000
16-
- assertVisible:
17-
id: action-sheet-handle
18-
- tapOn:
19-
id: action-sheet-handle
2020
- extendedWaitUntil:
2121
visible:
2222
id: action-sheet

AGENTS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
CLAUDE.md

CLAUDE.md

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
# CLAUDE.md
2+
3+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4+
5+
## Project Overview
6+
7+
Rocket.Chat React Native mobile client. Single-package React Native app (not a monorepo) using Yarn 1.22.22 (npm won't work). Supports iOS 13.4+ and Android 6.0+.
8+
9+
- React 19, React Native 0.79, Expo 53
10+
- TypeScript with strict mode, baseUrl set to `app/` (imports resolve from there)
11+
- Min Node: 22.14.0
12+
13+
## Commands
14+
15+
```bash
16+
# Install & setup
17+
yarn # Install dependencies (postinstall runs patch-package)
18+
yarn pod-install # Install iOS CocoaPods (required before iOS builds)
19+
20+
# Run
21+
yarn start # Start Metro bundler
22+
yarn ios # Build and run on iOS
23+
yarn android # Build and run on Android
24+
25+
# Test
26+
TZ=UTC yarn test # Run Jest unit tests (TZ=UTC is set in script)
27+
yarn test -- --testPathPattern='path/to/test' # Run a single test file
28+
yarn test-update # Update snapshots
29+
30+
# Lint & format
31+
yarn lint # ESLint + TypeScript compiler check
32+
yarn prettier-lint # Prettier auto-fix + lint
33+
34+
# Storybook
35+
yarn storybook:start # Start Metro with Storybook UI
36+
yarn storybook-generate # Generate story snapshots
37+
```
38+
39+
## Code Style
40+
41+
- **Prettier**: tabs, single quotes, 130 char width, no trailing commas, arrow parens avoid, bracket same line
42+
- **ESLint**: `@rocket.chat/eslint-config` base with React, React Native, TypeScript, Jest plugins
43+
- **Before committing**: Run `yarn prettier-lint` and `TZ=UTC yarn test` for modified files
44+
- Pre-commit hooks enforce these checks
45+
46+
## Architecture
47+
48+
### State Management: Redux + Redux-Saga
49+
50+
- **Actions** (`app/actions/`) — plain action creators
51+
- **Reducers** (`app/reducers/`) — state shape (app, login, connect, rooms, encryption, etc.)
52+
- **Sagas** (`app/sagas/`) — side effects (init, login, rooms, messages, encryption, deepLinking, videoConf)
53+
- **Selectors** (`app/selectors/`) — memoized with reselect
54+
- **Store** (`app/lib/store/`) — configures middleware (saga, app state, internet state)
55+
56+
### Navigation: React Navigation 7
57+
58+
- **Stacks** (`app/stacks/`) — InsideStack (authenticated), OutsideStack (login/register), MasterDetailStack (tablets), ShareExtensionStack
59+
- **Root** (`app/AppContainer.tsx`) — switches between auth states
60+
- **Responsive layout** (`app/lib/hooks/useResponsiveLayout/`) — master-detail on tablets vs single stack on phones
61+
62+
### Database: WatermelonDB (offline-first SQLite)
63+
64+
- **Models** (`app/lib/database/model/`) — Message, Room, Subscription, User, Thread, Upload, Server, CustomEmoji, Permission, Role, etc.
65+
- **Schema** (`app/lib/database/schema/`)
66+
- Local-first: UI reads from DB, sagas sync with server
67+
68+
### API Layer
69+
70+
- **SDK** (`app/lib/services/sdk.ts`) — Rocket.Chat JS SDK for WebSocket real-time subscriptions
71+
- **REST** (`app/lib/services/restApi.ts`) — HTTP via fetch
72+
- **Connect** (`app/lib/services/connect.ts`) — server connection management
73+
74+
### Views & Components
75+
76+
- **Views** (`app/views/`) — 70+ screen components
77+
- **Containers** (`app/containers/`) — reusable UI components
78+
- **Theme** (`app/theme.tsx`) — theming context
79+
80+
### Other Key Systems
81+
82+
- **i18n** (`app/i18n/`) — i18n-js with 40+ locales, RTL support
83+
- **Encryption** (`app/lib/encryption/`) — E2E encryption via @rocket.chat/mobile-crypto
84+
- **Enterprise** (`app/ee/`) — Omnichannel/livechat features
85+
- **Definitions** (`app/definitions/`) — shared TypeScript types
86+
- **VideoConf** (`app/sagas/videoConf.ts`, `app/lib/methods/videoConf.ts`) — server-managed video conferencing (Jitsi); uses Redux actions/reducers/sagas. May be replaced or removed in the future.
87+
- **VoIP** (`app/lib/services/voip/`) — new WebRTC peer-to-peer audio calls with native CallKit (iOS) and Telecom (Android) integration; uses Zustand stores, not Redux. VoIP and VideoConf are entirely separate features — do not conflate them.
88+
89+
### Entry Points
90+
91+
- `index.js` — registers app, conditionally loads Storybook
92+
- `app/index.tsx` — Redux provider, theme, navigation, notifications setup
93+
- `app/AppContainer.tsx` — root navigation container

0 commit comments

Comments
 (0)