Merge 4.18.0 into master (#3283)
* [CHORE] Update Xcode to 12.1.0 (#2592) * [CHORE] Update Xcode to 12.1.0 * Remove alpha from Xcode App Store Icon * [IMPROVEMENT] Auto search when text changes in directory textfield (#2547) Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com> Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Rooms header overlapping right icons (#2503) takes into account long names on small screen which led to overlapping title and right buttons on the header bar * [IMPROVEMENT] Jitsi lean (#2534) * 2.10.2 * update jitsi sdk * use our own react-native-jitsi-meet * use own android jitsi sdk * remove jsc reference * use self-builded ios sdk * update react-native-jitsi-meet Co-authored-by: Diego Mello <diegolmello@gmail.com> * [i18n] German word fix (#2598) Report in German means "The Report" not "to report". Therefor "Melden" ist better suited here. Co-authored-by: Diego Mello <diegolmello@gmail.com> * [i18n] Improve Chinese translation (#2570) * [FIX] App crashing when notification is received/replied (Android) (#2602) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Update react native CLI to support white labeling with XCode 12 (#2560) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [i18n] Add missing German strings (#2571) * adding missing German strings * resolving conflict Co-authored-by: Diego Mello <diegolmello@gmail.com> * [REGRESSION] Avatars doesn't show up on older servers (< 3.6.0) (#2603) * [REGRESSION] Avatars doesn't show up on older servers (< 3.6.0) * fix: snapshots tests failing Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Missing locales in moment helper (#2562) * [i18n] Add missing Russian strings (#2555) * Added waiting for network string translate * [i18n] Add missing russian strings * Some E2E strings * [i18n] Add missing russian strings * Some grammatical changes and translate optimizations * Add english strings * Final translate Co-authored-by: Карлан Антон Андреевич <KarlanAA@global.bcs> Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] 'Send to channel' when replying as a quote (#2606) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Android notification on Dark Theme using Official main color (#2604) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Storybook not able to import Avatar (#2607) * [FIX] Storybook not able to import Avatar * Fix lint * Mock Date.now * Fix RU translation * isLegacy -> serverVersion * Remove change avatar from room info edit for servers below 3.6 * Mock for storyshots only * lint Co-authored-by: Diego Mello <diegolmello@gmail.com> * [BUG] App isn't showing message for PDF/file uploads (#2584) * Fixed the issue #2531 In app/containers/message/Reply.js added a View Contaier around the Attachment Touchable and Added a Markdown attribute with msg set to description of attachment to display the message if any. * Added the condition to check if File Description Exists Added an if statement to check if file description exists and if yes then add a markdown with value msg equal to the description. Also tested using 'yarn test -u' to add/update the tests. * Made the requested Changes Removed the condition to check for attachment description. Added the `markdown` inside the touchable and wrapped `attachmentContainer` and the `markdown` inside a `<>` component * Added file not showing message issue code in this branch * Fixed the mistake in return * fix * Add tests Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Header title positioning not changing according to the number of icons (#2608) * [DOCS] Update Android Supported versions (#2611) * [i18n] Improve Russian translation (#2609) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] User notification preferences throwing an error when select default Email option (#2615) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] MomentJS crashing on Spanish language (#2616) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] AllowBackup manifest attribute causing unexpected behaviour on login (#2617) * [FIX] Search messages crashing when show a thread message (#2618) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] F-Droid build for store (#2557) * [FIX] F-Droid build for store * Trying to make Override custom push notifications on play build only * Use play sourceSets * Change version code * Fix react-native-config-reader * [FIX] F-Droid build for store * Trying to make Override custom push notifications on play build only * Use play sourceSets * Change version code * Fix react-native-config-reader * Remove react-native-device-info Google dependencies / Use LIBRE_BUILD of react-native-jitsi-meet * Invalidate CI Cache * Set specific jitsi-meet-sdk * Specify 2.10.0-libre * jitsi-meet using an url based on play build * update react-native-jitsi-meet * react-native-device-info foss * undo some unnecessary changes * Fix notifications Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com> * Merge beta into master (#2621) * Sync develop on master (#275) * Create LICENSE * Sync master (#721) * Merge 1.13.0 into Master (#936) * fix last messages (#239) * fix last messages * Room actions (#231) * Layout * Empty starred list * Favorite room * Pinned messages * fix last messages * fix date on pinned messages * fix package * [NEW] OAuth (#241) * Layout * tmp * test iscordova * Webview redirecting * Open and Close login actions * Login services saved on redux * OAuth Github * Server regex fix * OAuth modal style * - Twitter login - Remove services from redux - Open login saga fix * - Facebook login - Fixed user agent - Reactions fix - Message url unique key fix * Google login * Email keyboard removed from messagebox * - Login buttons refactored - RoomList header * Layout improvements * Meteor login redirect_uri changed * fix * Random credentialToken state * [NEW] Room actions: Mentioned messages and Room Members (#242) * Mentioned messages * Starred and pinned actions debounce * Room members * Open room on member touch * [WIP] Improves (#245) * hotfix for ios * hotfix for ios * Update config.yml * Workaround for RN 0.54 on iOS (#246) * Update iOS to RN 0.54 (#248) * Update iOS to RN 0.54 * [WIP] Audio message functionality (#247) * [NEW] Add module react-native-audio * [WIP] Audio message basic UI * [NEW] Record audio message * Use cordova repository to get certificates * Icon 1024 * [NEW] Room actions: block user, snippet messages, room files and leave room (#250) * - Block user - Load room members async - fixed reactive change of room's read only flag * Snippet messages * - Room files - Dismiss Video component on back button press - Improvements on Image component * Improvement on Video component * Leave room * Missing message types * lint * Reactotron working (#249) * [NEW] Room info and Room info edit (#254) * - Block user - Load room members async - fixed reactive change of room's read only flag * Snippet messages * - Room files - Dismiss Video component on back button press - Improvements on Image component * Improvement on Video component * Leave room * Missing message types * lint * - Room info (read only) - Missing message types * Room info scroll * - Tap on room header opens room info - Layout tweaks * - Room info edit - iOS Toast fixed * - Style not implemented actions as disabled * Edit room permission * - Save all room settings in a single call - Implemented roomType and readOnly * - Allow reacting when room is read only * Message type added: room_changed_privacy * Erase room * Created TextInput and SwitchContainer components for reuse and readability * - hasPermission method * - Archive/Unarchive room - Set Join Code * Twitter keyboard type on iOS * Archived room * reactWhenReadOnly permission on message * Active users refactored * User roles * - Subscribe to roles (in order to get role description info: e.g. 'core-team' to 'Rocket.Chat Team') - Save roles to realm (for offline access) - Save roles to redux (and get data from realm on app init) * Lint * code style * password show/hide feature * fix show/hide password * password show/hide * Crashlytics (#258) * Fabric iOS * Fabric configured on iOS and Android * login tracked * more logs * fix reaction * CI fix * Bug fixes (#261) * Layout fixes * RoomsListView's SafeAreaView * Unhandled promise rejection fix * Prevent navigation from opening scenes twice * Create channel fixes * Create LICENSE * Beta (#265) * Fabric iOS * Fabric configured on iOS and Android * - react-native-fabric configured - login tracked * README updated * Run scripts from README updated * README scripts * get rooms and messages by rest * user status * more improves * more improves * send pong on timeout * fix some methods * more tests * rest messages * Room actions (#266) * Toggle notifications * Search messages * Invite users * Mute/Unmute users in room * rocket.cat messages * Room topic layout fixed * Starred messages loading onEndReached * Room actions onEndReached * Unnecessary login request * Login loading * Login services fixed * User presence layout * ïmproves on room actions view * Removed unnecessary data from SelectedUsersView * load few messages on open room, search message improve * fix loading messages forever * Removed state from search * Custom message time format * secureTextEntry layout * Reduce android app size * Roles subscription fix * Public routes navigation * fix reconnect * - New login/register, login, register * proguard * Login flux * App init/restore * Android layout fixes * Multiple meteor connection requests fixed * Nested attachments * Nested attachments * fix check status * New login layout (#269) * Public routes navigation * New login/register, login, register * Multiple meteor connection requests fixed * Nested attachments * Button component * TextInput android layout fixed * Register fixed * Thinner close modal button * Requests /me after login only one time * Static images moved * fix reconnect * fix ddp * fix custom emoji * New message layout (#273) * Grouping messages * Message layout * Users typing animation * Image attachment layout * Fabric and image fix (#284) * Fixed images not showing * Keyboard libs updated * Fabric fix and location removed (#286) * Proguard disabled * message with list + links fixed (#288) * Better image cache component (#292) * react-native-img-cache removed * Improve list render * Support <http://link/Text> inside markdown * Deep linking (#291) * deep linking * Basic deep link working * Deep link routing * Multiple servers working * Send user to the room * Avatar initials and room type icon (#298) * Deep linking fix and more (#294) * Fix - Any https link was deep linking to RocketChat * Keyboard dismiss after add new server * Room info bug fix * Opacity animation * Navigation when adding server fixed * Throttle for unnecessary render on receiving several messages * Search inputs without autocorrect and autocapitalize * Search messages fixed * Messagebox unnecessary render and spotlight fixed * react-native-keyboard-input updated * Lint * Tests updated * Update all dependencies (#299) * Update react-navigation to the latest version 🚀 (#293) * fix(package): update react-navigation to version 2.0.0 * Code updated to support breaking changes of react-navigation * Detox tests E2E (#283) * RoomsListView re-render (#304) <!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR --> @RocketChat/ReactNative <!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below --> <!-- INSTRUCTION: Tell us more about your PR with screen shots if you can --> - [x] Removed unnecessary re-renders on RoomsListView * [NEW] Broadcast channels (#301) * Broadcast channels * e2e tests * New markdown (#306) Our current markdown is causing a lot of issues on Android devices, since it wraps everything inside a Text component. On Android, Text doesn't support View as a child. This PR adds react-native-markdown-renderer, that uses View as wrapper and may be better. * Fixed audio recording issues (#310) * Fix for "java.lang.IllegalArgumentException: unexpected url" (#313) <!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR --> @RocketChat/ReactNative <!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below --> User was able to add an invalid instance of Rocket.Chat by pressing submit button instead of "Connect" button. <!-- INSTRUCTION: Tell us more about your PR with screen shots if you can --> * I18n (#312) * Unread and date separator layout improved (#319) <!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR --> @RocketChat/ReactNative <!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below --> - [x] Unread and date separator layout - [x] "Start of conversation"/"Loading messages" label ![screen shot 2018-05-30 at 18 10 43](https://user-images.githubusercontent.com/804994/40747867-0424964a-6435-11e8-9293-31cc43c110ab.png) ![screen shot 2018-05-30 at 18 09 05](https://user-images.githubusercontent.com/804994/40747868-04484784-6435-11e8-8c31-92e0776276f0.png) <!-- INSTRUCTION: Tell us more about your PR with screen shots if you can --> * [FIX] iOS Universal links (#318) * [NEW] Drawer (#322) * [FIX] invalid user muted value * Ddp fixes (#324) * [NEW] User Profile (#323) * Drawer layout * Drawer changes * Profile * Profile avatar * Set language * Tests * Custom fields * Readme updated * fix invalid user muted value * Fix for "Cannot add a child that doesn't have a YogaNode to a parent without a measure function! (Trying to add a 'RCTVirtualText' to a 'RCTView')" * Settings/Permissions improvements (#325) * Changed the way we read RocketChat settings since setting.type won't be returned from server anymore * Permissions * Unnecessary action sheet render * Update gradle and targetSdkVersion (#328) * Changed the way we read RocketChat settings since setting.type won't be returned from server anymore * Permissions * Unnecessary action sheet render * Update gradle * Switched testServer to use blob * RoomsListHeader search fixed * Runs loadMessagesForRoom only if room has at least 20 rows * - Logout if user's token expired - Removed update avatar logic - Profile dialog border on android * - Animations disabled - CircleCI set * Tests updated * "eventType argument is required" fix * Switch push notification lib (#346) <!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR --> @RocketChat/ReactNative <!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below --> Closes #342 <!-- INSTRUCTION: Tell us more about your PR with screen shots if you can --> * Allow x-instance-id and X-Instance-ID header (#354) <!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR --> @RocketChat/ReactNative <!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below --> Closes #137 <!-- INSTRUCTION: Tell us more about your PR with screen shots if you can --> Some server configurations may send x-instance-id header with different case. * Image upload improvements (#368) <!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR --> @RocketChat/ReactNative <!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below --> - [x] Crop image - [x] Type image description (like web) - [x] Show upload progress - [x] "Try again" in case of error - [x] Cancel upload while in progress - [x] [Android] Zoom on photos <!-- INSTRUCTION: Tell us more about your PR with screen shots if you can --> ![image](https://user-images.githubusercontent.com/804994/42526934-a12da304-844d-11e8-8668-f3d69369726a.png) ![image](https://user-images.githubusercontent.com/804994/42527829-297945fe-8450-11e8-9f0e-9e668dd33043.png) * [NEW] Room Loading(#372) <!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR --> @RocketChat/ReactNative <!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below --> <!-- INSTRUCTION: Tell us more about your PR with screen shots if you can --> * [FIX] Empty room name for livechat (#375) <!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR --> @RocketChat/ReactNative <!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below --> Closes #320 Closes #209 <!-- INSTRUCTION: Tell us more about your PR with screen shots if you can --> * [NEW] Reply preview (#374) * Updated to React Native 0.56 * Reply Preview * [FIX] Close websocket (#379) * Fixed a bug when closing websocket * removeListener fixed * [I18N] Russian translation (#381) [I18N] Russian translation file * [NEW] Icon (#383) <!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR --> @RocketChat/ReactNative <!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below --> <!-- INSTRUCTION: Tell us more about your PR with screen shots if you can --> ![image](https://user-images.githubusercontent.com/804994/43228416-d8af49d6-9037-11e8-8830-a1803932c7fd.png) * [FIX] Android 8 notifications (#382) <!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR --> @RocketChat/ReactNative <!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below --> Closes #380 <!-- INSTRUCTION: Tell us more about your PR with screen shots if you can --> * Added CocoaPods to manage react-native-image-crop-picker (#373) <!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR --> @RocketChat/ReactNative <!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below --> <!-- INSTRUCTION: Tell us more about your PR with screen shots if you can --> react-native-image-crop-picker raised an error when uploading to TestFlight. The lib highly recommends CocoaPods for production builds. * Added single-server to readme (#390) <!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR --> @RocketChat/ReactNative <!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below --> Closes #386 Closes #295 <!-- INSTRUCTION: Tell us more about your PR with screen shots if you can --> * Improve RoomsList render time (#384) <!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR --> @RocketChat/ReactNative <!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below --> <!-- INSTRUCTION: Tell us more about your PR with screen shots if you can --> - [x] Added FlatList.getItemLayout() to improve list render time - [x] Some texts were breaking lines at sidebar - [x] Removed onPress from links at RoomsListView - [x] Added eslint rule to prevent unused styles - [x] Fixed auto focus bug at CreateChannel and NewServer - [x] Fix change server bug - [x] Fixed a bug when resuming in ListServer - [x] I18n fixed - [x] Fixed a bug on actionsheet ref not being created - [x] Reply wasn't showing on Android - [x] Use Notification.Builder.setColor/getColor only after Android SDK 23 - [x] Listen to app state only when inside app - [x] Switched register push token position in order to improve login performance - [x] When deep link changes server, it doesn't refresh rooms list - [x] Added SafeAreaView in all views to improve iPhone X experience - [x] Subpath regex #388 * [NEW] Empty room background (#412) <!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR --> @RocketChat/ReactNative <!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below --> Closes #398 <!-- INSTRUCTION: Tell us more about your PR with screen shots if you can --> ![aug-09-2018 11-35-32](https://user-images.githubusercontent.com/804994/43906080-cbfadf92-9bc8-11e8-9ac9-44f43d3af023.gif) ![aug-09-2018 11-35-16](https://user-images.githubusercontent.com/804994/43906082-cc19411c-9bc8-11e8-9892-c65c86951a91.gif) ![image](https://user-images.githubusercontent.com/804994/43911366-ad830cd0-9bd5-11e8-8913-6a7e87a2206c.png) * Add roadmap (#406) <!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR --> @RocketChat/ReactNative <!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below --> Closes #45 <!-- INSTRUCTION: Tell us more about your PR with screen shots if you can --> * [NEW] Onboarding (#407) <!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR --> @RocketChat/ReactNative <!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below --> Closes #392 <!-- INSTRUCTION: Tell us more about your PR with screen shots if you can --> ![aug-07-2018 17-03-50](https://user-images.githubusercontent.com/804994/43799447-f62074dc-9a63-11e8-8aac-bf2c4c5a8a2b.gif) ![aug-07-2018 17-03-35](https://user-images.githubusercontent.com/804994/43799446-f5f84a70-9a63-11e8-8947-265113ae9bf4.gif) ![aug-07-2018 17-03-13](https://user-images.githubusercontent.com/804994/43799445-f5d70ee6-9a63-11e8-94a9-f49c7d69fbba.gif) * [NEW] Updated Logo on Splash screen (#409) <!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR --> @RocketChat/ReactNative <!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below --> Closes #399 <!-- INSTRUCTION: Tell us more about your PR with screen shots if you can --> ![aug-07-2018 17-39-44](https://user-images.githubusercontent.com/804994/43801415-739a0cca-9a69-11e8-8bec-d65f751e6a28.gif) ![aug-07-2018 17-31-12](https://user-images.githubusercontent.com/804994/43801416-73d19bd6-9a69-11e8-90ac-bbc7ddeed938.gif) * [FIX] Only single attachment rendered (#417) * [NEW] Rooms list layout (#413) * RoomsListView layout * Rooms list layout * Sort component * Header icons * Default header colors * Add server dropdown * Close sort dropdown if server dropdown will open * UserItem * Room type icon * Search working * Tests updated * Android layout * Using realm queries instead of array iterates * Animation duration * Fixed render bug * [NEW] Create channel layout (#420) * RoomsListView layout * Rooms list layout * Sort component * Header icons * Default header colors * Add server dropdown * Close sort dropdown if server dropdown will open * UserItem * Room type icon * Search working * Tests updated * Android layout * Using realm queries instead of array iterates * Animation duration * Fixed render bug * - NewMessageView - backButtonTitle always empty - SearchBox created * New create channel layout * Search refactored * loginSuccess dismiss modal * Tests working * [FIX] Open unsupported videos on browser (#422) * 1.1 * Sort/group rooms local only (#425) * Update android api from ci * Sort local only * [FIX] Missing current server (#427) * server.current removed * Increased area of touch on header * Hide search when sort dropdown is tapped * default server icon url * 1.1.1 * [NEW] Experimental Icon (#430) * [NEW] Message layout (#426) * message container/component * Separator component * Reply * Url * tests updated * Minor changes * Audio component * Broadcast button * Minor touches * Reply preview * Edited * Minor bug fixes * - Update roadmap - Bump version to 1.2 * Onboarding styles fix * [FIX] Drawer navigation won't refresh chats (#432) * Avoid errors on Audio/Image/Video (#443) * Bump version to 1.2.1 (#444) * Stop supporting Android 4.4 and lower (#447) * Several fixes for 1.2.1 (#448) * Fix user.roles * Better onLongPress handle on messages * Indicator position * Fix role undefined in system messages * Add baseUrl in case of file attachments * Join room fixed * RoomView params * Broadcast fixes * Add server layout changes * Use native images * Subscribe to not joined channels * Fix alerts without i18n * Tests updated * Bump version to 1.2.2 (#449) * [NEW] Use community JSC for Android (#450) * [NEW] Use community JSC for Android * Quick fix on unread chats * [NEW] Show app version (#454) * [NEW] Portuguese translation (#452) * [NEW] Portuguese translation * Remove servers from sidebar * Update dependencies (#431) * Update dependencies * Lint and test * Added react-native fork * rn 57 * Lint and tests updated * Update xcode on circleci * Use legacy build system * Update tests * Use inline requires (#459) * Update dependencies * Lint and test * Added react-native fork * rn 57 * Lint and tests updated * Update xcode on circleci * Use legacy build system * Update tests * Inline requires * Fix eslint and remove temp gradle * Unnecessary renders * Update isNotch and Readme * Tests updated * Bump version to 1.3.0 (#461) * Better touch handling on rooms list (#462) * Use react-native-gesture-handler at RoomItem * Fixed info message author * Edit message render improvement * Fix ws to http replace * Bump version to 1.3.1 (#463) * Composer layout tweaked (#464) * Composer layout tweaked * Fix localization error * Bump version to 1.3.2 * [FIX] Handle deleted messages (#466) * [FIX] Handle deleted messages * Fix rest error * Fix some connection issues * [FIX] Search rooms (#468) * Bump version to 1.3.3 (#469) * Connecting to DDP badge (#471) * Display custom fields on user info (#476) * Render custom fields on user info * renderCustomFields fix * Display custom fields in user info * Fix lint error * [FIX] DDP badge wasn't hiding on fast connections (#477) * Use Rocket.Chat JS SDK (#481) * JS SDK * API working * Multiple servers * Bump version to 1.4.0 (#482) * [FIX] 2FA and LDAP (#488) * [FIX] Unread rooms group order (#487) * Use grouping setting on temp messages (#486) * [FIX] Delete room error (#485) * Rename to Rocket.Chat Experimental (#483) * Update dependencies (#484) * Bump version to 1.4.0 (#482) * test * one more test * Fix build * Regression: Wait for unmount to delete database after logout (#489) * Bump version to 1.4.1 (#490) * Regression: Crash on Android search (#492) * Bump version to 1.4.2 (#493) * Update Rocket.Chat.js.SDK (#494) * Bump version to v1.4.3 (#495) * [FIX] OAuth (#496) * Smaller header icons inside the room (#499) * [FIX] Logout (#497) * [FIX] Logout * Removed realm instances on rooms list * Bump version to 1.4.4 (#498) * Update navigation library (#501) * v2 * Working on Android 0.57.3 * Drawer working * Removing v1 navigator * - Splash screen - Icons changed * Deeplink * Remove EventEmitter from CreateChannelView * Android search * Android notifications * OAuth * Fix search props * Lint and tests fixed * Fix android build * Improvements on iPhone X* usage * Fix detox * Fix android build * Room.f added to RoomView.shouldComponentUpdate * Animations on RoomsListView and RoomView * Fix topbar buttons on Android * Bump version to 1.5.0 (#503) * Check $FABRIC_KEY availability in CircleCI (#506) * Check $FABRIC_KEY in CircleCI * Remove config scripts * Check $FABRIC_KEY availability in CircleCI for iOS (#507) * [I18n] Add Simplified Chinese(zh-CN) locale (#505) * [FIX] iOS pop gesture not working properly (#509) * Check if lastMessage has an attachment and show "User sent an attachment" at RoomsList (#510) * [FIX] Messages not being loaded properly (#513) * Fetch avatar initials from server (#512) * Fix iOS pop gesture and open sidemenu gesture (#511) * Bump version to 1.5.1 (#516) * [NEW] Room header layout (#521) * Clear iOS notification on resume/open (#520) * [FIX] Flashing avatars on Android after #512 (#519) * [FIX] App connects to previous server instead of the recent added (#518) * [FIX] Room view header crashes when destructuring reducer (#523) * [FIX] Dismiss keyboard on room close (#530) * [FIX] Composer composer's send icon slowness (#528) * [WIP] New Authentication layout (#536) New Authentication layout * Regression: Resend messages with error (#532) * DDP Connection badge animation changed (#533) * [FIX] Upload buttons on Android (#541) * Bump version to 1.6.0 (#543) * I18n: Add missing translation of simplified Chinese (#539) * Update dependencies (#544) * AndroidManifest changes * Regression: Deep linking stopped working after react-native-navigation update (#549) * [FIX] Android stuck on splash screen after hardware back button is pressed (#550) * [FIX] Android stuck on splash screen after hardware button is pressed * Fix empty user at asyncstorage * Remove unused subscribe * [FIX] x-instance-id header prop is case insensitive (#551) * Bump version to 1.6.1 (#553) * [FIX] x-instance-id header prop is case insensitive * Use Rest API calls (#558) * Chats: Don't show group header if none of the filters is selected (#560) * [CHORE] Update Xcode image version on CircleCI (#561) * Bump version to 1.7.0 (#562) * [FIX] Load messages on notification tap (#564) * Use Rest API pt 2 (#568) * Room files * Pinned messages * Starred messages * Mentioned messages * Search messages * Bug fixes * Profile * Livechat * Block/unblock user * Erase room * Archive room * Remove unused method * Bug fix * [CHORE] Add hold step on CircleCI before TestFlight (#572) * [FIX] GET /info to check if it's a valid server instead of x-instance-id (#573) * Bump version to 1.7.1 (#574) * Unnecessary re-renders removed (#570) * shouldComponentUpdate * Rooms list shouldcomponentupdate * RoomView shouldComponentUpdate * Messagebox and Message shouldComponentUpdate * EmojiPicker shouldComponentUpdate * RoomActions shouldComponentUpdate * Room info shouldComponentUpdate * Update RNN * Use only one Flatlist if none group filter is selected * Update fix * shouldComponentUpdate * Bug fixes * ListView changes * Bug fix * render list bug fix * Changes on public channels * - RoomView saga leak removed - Join room e2e tests added * Rest versions * Method call versions * Min RocketChat version alert * Update dependencies (#587) * [FIX] Better message actions (#567) * [FIX] Back button press on message actions (#592) * Bump version to 1.8.0 (#595) * [FIX] LDAP login (#596) * Create class to manage navigation (#594) * Add Navigation class * Place Drawer.js logic inside of Navigation * Load less views at startup * [FIX] v1.8.0 (#599) * Downgrade react-native-fast-image * Update iOS permission usage descriptions * [FIX] Delete upload item * Update JS SDK version (#602) * Add Icons class (#611) Creates Icons class to manage when to load icons from native side or react-native-vector-icons. It also fixes `react-native run-android` #517 * Updating room indicator (#609) Shows "Updating..." when requesting rooms from Rest API. * [FIX] Load avatar on servers that prevent unauthenticated avatar access (#604) App would show an empty space on servers that require authentication on avatar access * [FIX] 2FA login in a server with LDAP enabled (#612) * [FIX] Start loop searching for rooms updates only when connection goes down and SDK has userId (#613) * Allow to create empty channel (#615) * [FIX] Reply title should break text (#616) * Bump version to 1.9.0 (#617) * [FIX] SDK issues (#621) * Remove listeners from room * Properly close connections on change server * Minor layout change on connecting badge * [CHORE] Add TestFlight invite and update Readme (#623) * [FIX] npm -> yarn dependencies migration (#622) * I18n: Add French (#629) * [FIX] Remove rooms listener (#630) * [CHORE] Update issue template (#638) * I18n: Add German (#641) * Bump version to 1.10.0 (#644) * [FIX] Prevent mass is typing dispatchs (#651) * [FIX] Handle database errors properly (#650) * [FIX] Change actions labels (#654) * [FIX] Room members filter (#655) * [FIX] uploadProgress is not a function (#656) * [FIX] Slow messagebox (#658) * Remove drawer (#653) * Remove drawer (layout needs to be changed in future releases, though) * Don't navigate outside on logout if there's other logged server * Update react-native-navigation * Message button (#660) * Remove touchable opacity when scrolling messages * Tap on disable messages closes keyboard * Unify vibration * Vibrate only on Android * [FIX] Fetch rooms date (#662) * [FIX] Select emoji error (#666) * Update Realm to 2.24 (#667) * Update React Native to 0.58.6 (#668) * [FIX] Fix some language issues in German language (#664) * New icons (#643) * New Icons * Remove unused assets * Change send icon * Layout tweaks * Refactor Status * Styles changed * User layout fix * Separator layout changes * Sidebar status layout fix * Fix Message.onLongPress issue * Fix code markdown Closes https://github.com/RocketChat/Rocket.Chat.ReactNative/issues/625 * Status lint * Fix tests * Navigation debounce * RoomActions icons * Space between components * Group text * Update tests * [CHORE] Remove .debug suffix on Android (#681) * [FIX] Fix null native Messagebox component object (#680) * Fix null native Messagebox component object * [iOS] Fix header alignment * Remove unused files * Switch to react-navigation (#687) * Update readme (#714) * Bump to 1.10.1 (#731) * [FIX] Deep linking between multiple logged servers (#730) * Fix handle invisible status (#692) * I18n: Add Portuguese (Portugal) (#722) * [FIX] Show ActivityIndicator in RoomMembersView (#686) * Bump version to 1.11.0 (#761) * Migrate from GCM to FCM (#760) * [NEW] Scrollable room name feature (#756) * [NEW] Scroll down floating button (#735) * [CHORE] Added Storybook documentation (#757) * Use FlatList in RoomView (#762) * [FIX] iOS requiring location permission (#768) * Room item layout (#771) * [NEW] Draft message per room (#772) * [FIX] Add Realm.safeAddListener (#785) * [CHORE] Remove tvOS target (#779) * [NEW] Discussions (#696) * Bump version to 1.12.0 (#804) * [NEW] Threads (#798) * RoomsListView improvements (#819) * [FIX] Giphy not showing (#810) * [FIX] Apply emojify on empty texts (#824) * Lock drawer when stack is not on root screen (#825) * Room item layout (#835) * [FIX] Threads (#838) Closes #826 Closes #827 Closes #828 Closes #829 Closes #830 Closes #831 Closes #832 Closes #833 * [FIX] Smaller thread title (#846) * [FIX] Smaller thread title * Remove markdown notation from thread title * On message press debounce * Align vertical thread title * [Regression] Search stopped working on Android after LastMessage refactor (#851) * Load legal pages from web (#849) * Update fetch permissions api (#850) * Update custom emojis endpoint (#852) * Update emoji endpoint * Use React.memo on Markdown * Support RC versions lower than 0.75.0 * Realm migration * Fetch roles from rest api (#853) * Fetch roles from rest api * Fix RoomInfoView role get * Remove roles from redux * Bump version to 1.13 (#857) * Active users improvements (#855) * Remove connection badge (#862) * Connecting indicator on RoomsListView header * Connecting indicator on RoomView header * Remove ConnectionBadge * Show updating on RoomView load messages * Update dependencies (#863) * Minor updates * Update jsc-android * Update react-native-modal * Minor updates * Update react-native-fast-image * Minor dev updates * Few major updates * Update react-native-keyboard-aware-scroll-view * Update pods * Update android-support * Update tests * Remove duplicated getRoleDescription function (#866) * [FIX] Load local URL image (#871) * [FIX] Toggle/follow thread icon (#867) * Tweaks on sequential threads messages layout (#858) * Tweaks on sequential threads messages * Update tests * Fix quote * Prevent from deleting thread start message when positioned inside the thread * Remove thread listener from RightButtons * Fix error on thread start parse * Stop parsing threads on render * Check replied thread only if necessary * Fix messages don't displaying * Fix threads e2e * RoomsListView.updateState slice * Stop fetching hidden messages on threads * Set initialNumToRender to 5 * [FIX] Check if room is mounted before setting state (#864) * Tweaks on sequential threads messages * Update tests * Fix quote * Prevent from deleting thread start message when positioned inside the thread * Remove thread listener from RightButtons * Fix error on thread start parse * Stop parsing threads on render * Check replied thread only if necessary * Fix messages don't displaying * Fix threads e2e * RoomsListView.updateState slice * Stop fetching hidden messages on threads * Check if RoomView is mounted before rendering * Refactor navigation events on RoomsListView * Fix lint * Fix listener * [FIX] Typing not getting cleared after popping a room (#873) * [CHORE] Remove e2e tests from CI (#875) * [FIX] Remove listeners on RoomView header unmount (#874) * [RELEASE] Merge beta into master (#1055) * Bump version to 1.16.0 (#1014) * [IMPROVEMENT] Share credentials with Rocket.Chat.iOS (#982) * ✨ Create user table * ✨ Introduce user table * 🔥 Remove unused table * ➕ Add userdefaults to storage data * 💚 Fix android build * ✨ Get credentials from iOS native client * 🔥 Remove unused code * ⏪ Revert sign xcode * 🐛 Fix first login-logout * 🎨 Use constants to UserDefaults Keys * 🐛 Fix clear server-user-info on logout * 🐛 Fix filter null value * 🚑 Remove user object in logout * ✨ Fix get servers from native-client * 🚑 Fix error on change server * [FIX] Don't run UserDefaults credentials on Android (#1015) * 🐛 Fix native credentials (android) * Fix migration loop * [IMPROVEMENT] Hide frequently used emoji tab when empty (#792) * [IMPROVEMENT] Bigger emoji in emoji only messages (#793) * issue #725: bigger emoji in emoji only message * issue-725/add storybook for Message/Emoji * issue-725: update storybook/Message jest snapshot * comment storybook import * allow spaces and line breaks in emoji only message * merge develop * revert unnecessary spacing * [FIX] Empty message if contains only a link (#787) * Fix empty message if contains only a link * 🐛 Fix empty space * [IMPROVEMENT] Refactor empty space regex on quote (#1017) * 🎨 Improve regex to empty space on quote * 🎨 Improve on regex to empty space on quote * [NEW] Custom fields on signup (#1013) * added custom feilds on registration * added flag as leftIcon and removed lable * added try and catch * typo * [CHORE] Renew provisioning profiles (#1020) * [NEW] Auto-translate (#1012) * Update realm * View original and translate working * Read AutoTranslate_Enabled setting * RocketChat.canAutoTranslate() * AutoTranslateView * Save language * Auto-translate switch * Translate message * [IMPROVEMENT] Use haptics rather than vibration (#1016) * Install expo-haptics * Use expo-haptics rather than RN's Vibration module * [IMPROVEMENT] Use Rest API for file upload (#1005) * removed rn-fetch-blob and use native XMLHttpRequest instead * removed unnessary changes * fix android bug * fix android bug * added tmid support * fix bug * fixed isssue with cacel model * fix problems with audio * done requested changes * fix bug with android * [CHORE] [CI] [TESTS] update detox to make ci pass (#1026) * feat: update detox to 12.11.3 to make CI pass * ci: comment all jobs but leave e2e-test job * commit to rerun IC e2e-test job * ci: uncomment all CI jobs * [NEW] Room swipe actions: mark as read/unread, hide, fav (#976) * added unread and fav feature * changed the layout * fix jest * done requested changes * added requested changes * [FIX] Android build (#1027) * [FIX] Android build * CircleCI error * [FIX] iOS share credentials build (#1028) * [FIX] iOS share credentials build * Use `hasMigration` as a string * [CI] Restore cache on CI (#1029) * feat: add fastlane save\restore cache config; comment not needed jobs; * install fastlane using 'bundle install' * install fastlane using 'sudo bundle install' * uncomment ios build commands * run set up google services in ios folder * add working_directory: ios to ios-build steps * remove 'cd ios' from Fastlane build step * add save\restore cache for npm modules * group save_cache steps * cache fastlane in ios-testflight job * uncomment previously commented jobs\steps * fix: add missing colon * use key for caching: node-modules-{{ checksum ".circleci/config.yml" }}-{{ checksum "yarn.lock" }} * add names for save\restore steps * ci: add `default` step with `working_directory: ~/repo` to ios-build job * return back caching npm: `node-v1-{{ checksum "package.json" }}-{{ arch }}` * fix: add missing curly braces * save\restore cache in e2e-test job; remove {{arch}} from cache names * add names to restore_cache steps in android-build job * add names to save_cache steps in android-build job * add names to all save\restore steps; change checksum package.json to yarn.lock * change `npm` to `NPM` in steps naming * remove {{ checksum circle ci }} from android-build job and fix naming of steps * [FIX] Rooms swipes (#1034) * Regression: on press style feedback * Action button styles * Fix animations * Styles changed * Update subscription without having to wait for socket * Calculate width on RoomsListView instead * [FIX] Decrease bigger emoji size to 30 (#1031) * [FIX] Append server URL on avatar if necessary (#1038) * Comment removeClippedSubviews * Comment width animation * Remove redux from RoomItem * Fix wrong re-render comparison * Remove listener * Raise minDeltaX * memo actions * Spring with native driver * Refactor functions * Fix props issues * Remove RoomItem.height * Long swipe * Refactor animations * this.rowTranslation -> this.transX * Moved state to this * Bump version to 1.16.1 (#1045) * [FIX] Set UserDefaults AppGroup on notification tap (#1047) * [FIX] Auto-translate messages as they arrive * Fix favorite button * [RELEASE] Merge beta into master (#1082) * Bump version to 1.16.0 (#1014) * [IMPROVEMENT] Share credentials with Rocket.Chat.iOS (#982) * ✨ Create user table * ✨ Introduce user table * 🔥 Remove unused table * ➕ Add userdefaults to storage data * 💚 Fix android build * ✨ Get credentials from iOS native client * 🔥 Remove unused code * ⏪ Revert sign xcode * 🐛 Fix first login-logout * 🎨 Use constants to UserDefaults Keys * 🐛 Fix clear server-user-info on logout * 🐛 Fix filter null value * 🚑 Remove user object in logout * ✨ Fix get servers from native-client * 🚑 Fix error on change server * [FIX] Don't run UserDefaults credentials on Android (#1015) * 🐛 Fix native credentials (android) * Fix migration loop * [IMPROVEMENT] Hide frequently used emoji tab when empty (#792) * [IMPROVEMENT] Bigger emoji in emoji only messages (#793) * issue #725: bigger emoji in emoji only message * issue-725/add storybook for Message/Emoji * issue-725: update storybook/Message jest snapshot * comment storybook import * allow spaces and line breaks in emoji only message * merge develop * revert unnecessary spacing * [FIX] Empty message if contains only a link (#787) * Fix empty message if contains only a link * 🐛 Fix empty space * [IMPROVEMENT] Refactor empty space regex on quote (#1017) * 🎨 Improve regex to empty space on quote * 🎨 Improve on regex to empty space on quote * [NEW] Custom fields on signup (#1013) * added custom feilds on registration * added flag as leftIcon and removed lable * added try and catch * typo * [CHORE] Renew provisioning profiles (#1020) * [NEW] Auto-translate (#1012) * Update realm * View original and translate working * Read AutoTranslate_Enabled setting * RocketChat.canAutoTranslate() * AutoTranslateView * Save language * Auto-translate switch * Translate message * [IMPROVEMENT] Use haptics rather than vibration (#1016) * Install expo-haptics * Use expo-haptics rather than RN's Vibration module * [IMPROVEMENT] Use Rest API for file upload (#1005) * removed rn-fetch-blob and use native XMLHttpRequest instead * removed unnessary changes * fix android bug * fix android bug * added tmid support * fix bug * fixed isssue with cacel model * fix problems with audio * done requested changes * fix bug with android * [CHORE] [CI] [TESTS] update detox to make ci pass (#1026) * feat: update detox to 12.11.3 to make CI pass * ci: comment all jobs but leave e2e-test job * commit to rerun IC e2e-test job * ci: uncomment all CI jobs * [NEW] Room swipe actions: mark as read/unread, hide, fav (#976) * added unread and fav feature * changed the layout * fix jest * done requested changes * added requested changes * [FIX] Android build (#1027) * [FIX] Android build * CircleCI error * [FIX] iOS share credentials build (#1028) * [FIX] iOS share credentials build * Use `hasMigration` as a string * [CI] Restore cache on CI (#1029) * feat: add fastlane save\restore cache config; comment not needed jobs; * install fastlane using 'bundle install' * install fastlane using 'sudo bundle install' * uncomment ios build commands * run set up google services in ios folder * add working_directory: ios to ios-build steps * remove 'cd ios' from Fastlane build step * add save\restore cache for npm modules * group save_cache steps * cache fastlane in ios-testflight job * uncomment previously commented jobs\steps * fix: add missing colon * use key for caching: node-modules-{{ checksum ".circleci/config.yml" }}-{{ checksum "yarn.lock" }} * add names for save\restore steps * ci: add `default` step with `working_directory: ~/repo` to ios-build job * return back caching npm: `node-v1-{{ checksum "package.json" }}-{{ arch }}` * fix: add missing curly braces * save\restore cache in e2e-test job; remove {{arch}} from cache names * add names to restore_cache steps in android-build job * add names to save_cache steps in android-build job * add names to all save\restore steps; change checksum package.json to yarn.lock * change `npm` to `NPM` in steps naming * remove {{ checksum circle ci }} from android-build job and fix naming of steps * [FIX] Rooms swipes (#1034) * Regression: on press style feedback * Action button styles * Fix animations * Styles changed * Update subscription without having to wait for socket * Calculate width on RoomsListView instead * [FIX] Decrease bigger emoji size to 30 (#1031) * [FIX] Append server URL on avatar if necessary (#1038) * Comment removeClippedSubviews * Comment width animation * Remove redux from RoomItem * Fix wrong re-render comparison * Remove listener * Raise minDeltaX * memo actions * Spring with native driver * Refactor functions * Fix props issues * Remove RoomItem.height * Long swipe * Refactor animations * this.rowTranslation -> this.transX * Moved state to this * Bump version to 1.16.1 (#1045) * [FIX] Set UserDefaults AppGroup on notification tap (#1047) * [FIX] Auto-translate messages as they arrive * Fix favorite button * [FIX] Swipe animations (#1044) * Comment removeClippedSubviews * Comment width animation * Remove redux from RoomItem * Fix wrong re-render comparison * Remove listener * Raise minDeltaX * memo actions * Spring with native driver * Refactor functions * Fix props issues * Remove RoomItem.height * Long swipe * Refactor animations * this.rowTranslation -> this.transX * Moved state to this * Fix favorite button * [FIX] Auto-translate messages as they arrive (#1049) * Comment removeClippedSubviews * Comment width animation * Remove redux from RoomItem * Fix wrong re-render comparison * Remove listener * Raise minDeltaX * memo actions * Spring with native driver * Refactor functions * Fix props issues * Remove RoomItem.height * Long swipe * Refactor animations * this.rowTranslation -> this.transX * Moved state to this * [FIX] Auto-translate messages as they arrive * [i18n] Add missing de translations (#1040) * [CHORE] Switch to react-native-localize (#1043) * Bump version to 1.17.0 (#1057) * Load views as needed (#1056) * [IMPROVEMENT] Change "resend" icon position (#1048) * [NEW] Video support (#801) * [NEW] File upload (#882) * [NEW] Share extension (#942) * [FIX] Share extension CI build (#1060) * Change bundleID * Provisioning * get provisioning profile * [IMPROVEMENT] Reusable toast (#1065) * [FIX] Moment locales (#1066) * [FIX] Share Extension issues (#1064) * [FIX] Empty white list enables all media types upload (#1077) * Merge branch 'master' into develop (#1079) * [FIX] Empty white list enables all media types upload (#1080) * Create utils to media (canUpload) * Fix variable name * [CHORE] Update README (#1081) * [RELEASE] Merge beta into master (#1088) * Bump version to 1.16.0 (#1014) * [IMPROVEMENT] Share credentials with Rocket.Chat.iOS (#982) * ✨ Create user table * ✨ Introduce user table * 🔥 Remove unused table * ➕ Add userdefaults to storage data * 💚 Fix android build * ✨ Get credentials from iOS native client * 🔥 Remove unused code * ⏪ Revert sign xcode * 🐛 Fix first login-logout * 🎨 Use constants to UserDefaults Keys * 🐛 Fix clear server-user-info on logout * 🐛 Fix filter null value * 🚑 Remove user object in logout * ✨ Fix get servers from native-client * 🚑 Fix error on change server * [FIX] Don't run UserDefaults credentials on Android (#1015) * 🐛 Fix native credentials (android) * Fix migration loop * [IMPROVEMENT] Hide frequently used emoji tab when empty (#792) * [IMPROVEMENT] Bigger emoji in emoji only messages (#793) * issue #725: bigger emoji in emoji only message * issue-725/add storybook for Message/Emoji * issue-725: update storybook/Message jest snapshot * comment storybook import * allow spaces and line breaks in emoji only message * merge develop * revert unnecessary spacing * [FIX] Empty message if contains only a link (#787) * Fix empty message if contains only a link * 🐛 Fix empty space * [IMPROVEMENT] Refactor empty space regex on quote (#1017) * 🎨 Improve regex to empty space on quote * 🎨 Improve on regex to empty space on quote * [NEW] Custom fields on signup (#1013) * added custom feilds on registration * added flag as leftIcon and removed lable * added try and catch * typo * [CHORE] Renew provisioning profiles (#1020) * [NEW] Auto-translate (#1012) * Update realm * View original and translate working * Read AutoTranslate_Enabled setting * RocketChat.canAutoTranslate() * AutoTranslateView * Save language * Auto-translate switch * Translate message * [IMPROVEMENT] Use haptics rather than vibration (#1016) * Install expo-haptics * Use expo-haptics rather than RN's Vibration module * [IMPROVEMENT] Use Rest API for file upload (#1005) * removed rn-fetch-blob and use native XMLHttpRequest instead * removed unnessary changes * fix android bug * fix android bug * added tmid support * fix bug * fixed isssue with cacel model * fix problems with audio * done requested changes * fix bug with android * [CHORE] [CI] [TESTS] update detox to make ci pass (#1026) * feat: update detox to 12.11.3 to make CI pass * ci: comment all jobs but leave e2e-test job * commit to rerun IC e2e-test job * ci: uncomment all CI jobs * [NEW] Room swipe actions: mark as read/unread, hide, fav (#976) * added unread and fav feature * changed the layout * fix jest * done requested changes * added requested changes * [FIX] Android build (#1027) * [FIX] Android build * CircleCI error * [FIX] iOS share credentials build (#1028) * [FIX] iOS share credentials build * Use `hasMigration` as a string * [CI] Restore cache on CI (#1029) * feat: add fastlane save\restore cache config; comment not needed jobs; * install fastlane using 'bundle install' * install fastlane using 'sudo bundle install' * uncomment ios build commands * run set up google services in ios folder * add working_directory: ios to ios-build steps * remove 'cd ios' from Fastlane build step * add save\restore cache for npm modules * group save_cache steps * cache fastlane in ios-testflight job * uncomment previously commented jobs\steps * fix: add missing colon * use key for caching: node-modules-{{ checksum ".circleci/config.yml" }}-{{ checksum "yarn.lock" }} * add names for save\restore steps * ci: add `default` step with `working_directory: ~/repo` to ios-build job * return back caching npm: `node-v1-{{ checksum "package.json" }}-{{ arch }}` * fix: add missing curly braces * save\restore cache in e2e-test job; remove {{arch}} from cache names * add names to restore_cache steps in android-build job * add names to save_cache steps in android-build job * add names to all save\restore steps; change checksum package.json to yarn.lock * change `npm` to `NPM` in steps naming * remove {{ checksum circle ci }} from android-build job and fix naming of steps * [FIX] Rooms swipes (#1034) * Regression: on press style feedback * Action button styles * Fix animations * Styles changed * Update subscription without having to wait for socket * Calculate width on RoomsListView instead * [FIX] Decrease bigger emoji size to 30 (#1031) * [FIX] Append server URL on avatar if necessary (#1038) * Comment removeClippedSubviews * Comment width animation * Remove redux from RoomItem * Fix wrong re-render comparison * Remove listener * Raise minDeltaX * memo actions * Spring with native driver * Refactor functions * Fix props issues * Remove RoomItem.height * Long swipe * Refactor animations * this.rowTranslation -> this.transX * Moved state to this * Bump version to 1.16.1 (#1045) * [FIX] Set UserDefaults AppGroup on notification tap (#1047) * [FIX] Auto-translate messages as they arrive * Fix favorite button * [FIX] Swipe animations (#1044) * Comment removeClippedSubviews * Comment width animation * Remove redux from RoomItem * Fix wrong re-render comparison * Remove listener * Raise minDeltaX * memo actions * Spring with native driver * Refactor functions * Fix props issues * Remove RoomItem.height * Long swipe * Refactor animations * this.rowTranslation -> this.transX * Moved state to this * Fix favorite button * [FIX] Auto-translate messages as they arrive (#1049) * Comment removeClippedSubviews * Comment width animation * Remove redux from RoomItem * Fix wrong re-render comparison * Remove listener * Raise minDeltaX * memo actions * Spring with native driver * Refactor functions * Fix props issues * Remove RoomItem.height * Long swipe * Refactor animations * this.rowTranslation -> this.transX * Moved state to this * [FIX] Auto-translate messages as they arrive * [i18n] Add missing de translations (#1040) * [CHORE] Switch to react-native-localize (#1043) * Bump version to 1.17.0 (#1057) * Load views as needed (#1056) * [IMPROVEMENT] Change "resend" icon position (#1048) * [NEW] Video support (#801) * [NEW] File upload (#882) * [NEW] Share extension (#942) * [FIX] Share extension CI build (#1060) * Change bundleID * Provisioning * get provisioning profile * [IMPROVEMENT] Reusable toast (#1065) * [FIX] Moment locales (#1066) * [FIX] Share Extension issues (#1064) * [FIX] Empty white list enables all media types upload (#1077) * Merge branch 'master' into develop (#1079) * [FIX] Empty white list enables all media types upload (#1080) * Create utils to media (canUpload) * Fix variable name * [CHORE] Update README (#1081) * [FIX] Media share type (#1086) * [RELEASE] Merge beta into master (#1142) * [RELEASE] Merge beta into master (#1174) * [RELEASE] Merge beta into master (#1282) * Merge beta into master (#1461) * Merge beta into master (#1637) * Merge beta into master (#1759) * Merge beta into master (#1897) * [FIX] Close SortDropdown on sort select (#1230) * [FIX] Cancel upload and check failed upload (#1232) * [FIX] Slash commands not cleaning is typing and not using state (#1233) * [FIX] Dispatch roomsRequest on app foreground event even if not connected (#1234) * [CHORE] Update react-native-jitsi-meet (#1235) * [FIX] Regex on run slash command (#1223) * Update React Native to 0.61.1 (#1236) * Update React Native to 0.61.1 * Update patch to SSL Pinning * Revert storybook * [CHORE] Update react-native-safe-area-view (#1219) * [FIX] Try/catch JSON.parse XHR response (#1238) * [FIX] Change messagebox icon immediate on change text (#1241) * [FIX] Update last open on message stream received (#1240) * [FIX] Remove animation from RoomsListView.willFocus (#1239) * [FIX] Delete message on thread (#1214) * [REGRESSION] Markdown text (#1242) * [FIX] Jest (#1243) * [FIX] Avatar shown when useRealName is activated (#1162) * Fix avatar when use real name * Wrong indentation * [DOCS] Add SECURITY.md (#1244) * [CHORE] Update react-native-reanimated to 1.3.0 (#1246) * [FIX] Run credentials migration only once (#1245) * [CHORE] Update react-native-jitsi-meet to 2.0.1 (#1249) * [FIX] Messagebox onChangeText issues (#1252) * Stop ongoing debounces on messagebox unmount * Immediately change send icon, but keep debouncing others * Make CustomEmoji stateless function * Fix mentions keyExtractor * [FIX] Room subscription issues (#1255) * [FIX] Reaction press (#1258) * [FIX] Channel avatars not showing after application unloads (#1264) * Revert react-native-safe-area-view (#1265) * [FIX] Remove console on production mode (#1268) * [FIX] Messages preview issues (#1257) * [FIX] Select user from native credentials (#1266) * [FIX] Some issues on preview message (#1271) * [FIX] Audio player track and thumb not rendering on Android (#1273) * [FIX] Record audio message throws exception when FileSystem.getInfoAsync is called (#1272) * [FIX] China shouldn't use CallKit (#1274) * [FIX] Watermelon batches (#1277) * Bump version to 1.20.1 (#1285) * [CHORE] Remove memoize-one (#1284) * [FIX] End Jitsi call on unmount (#1291) * [FIX] Allow self-signed certificates (#1310) * [FIX] Set User-Agent (#1318) * Set User-Agent Fetch & Websocket & XHR * Set User-Agent * Custom User Agent on fetch/websocket * Fix names * Use DeviceInfo * fix server with subpath (#1322) * [FIX] Server with https:\\ instead of https:// (#1320) * [FIX] Server dropdown not closing after changing stack (#1299) * [FIX] Invalid server version (#1319) * [IMPROVEMENT] Respect "Hide counter" preference (#1306) * [FIX] Pass isFocused as a function to Messagebox (#1309) * [CHORE] Remove icons folder (#1290) * [CHORE] Refactor RoomItem touchable (#1331) * [FIX] Unnecessary rerender on RoomItem when status is undefined (#1336) * [UPDATE DEPS] react-navigation and react-navigation-stack (#1337) * [FIX] Avatars not loading on share extension when Accounts_AvatarBlockUnauthenticatedAccess is enabled (#1339) * Bump version to 1.20.2 (#1340) * [FIX] Remove some unnecessary re-renders on Messagebox (#1341) * [REGRESSION] Use LayoutAnimation instead of Transition API (#1338) * [FIX] Remove setState from notifications view causing watermelon object to be updated outside an action (#1342) * [IMPROVEMENT] Save last message as message when subscription is updated (#1344) * [UPDATE DEPS] Update RN to 0.61.3 (#1345) * [DOCS] Update Readme (#1346) * [CHORE] Remove react-native-scrollable-tab-view fork (#1352) * [FIX] URL preview (#1360) * [REGRESSION] Decrease list view memory size (#1361) * [FIX] Paste (#1350) * [CHORE] Update gems (#1365) * Bump version to 1.20.3 (#1366) * [FIX] Use Ruby 2.4 on TestFlight upload (#1368) * [FIX] Parse Urls (#1371) * [FIX] Parse image URL only if it's not empty (#1372) * [FIX] Load messages issues (#1373) * Bump version to 1.21.0 (#1376) * [FIX] Crowd login (#1381) * [FIX] Clicking user avatar in thread previews crashes app (#1363) * [IMPROVEMENT] Error messages on connect (#1379) * [FIX] ProfileView input navigation error when custom fields aren't set (#1383) * [FIX] Batch server deletion on logout (#1382) * Bump app to 1.22.0 (#1387) * [FIX] Server Version (#1392) * Update patch and minor deps (#1386) * [FIX] Crash when open thread (#1395) * Bump version to 1.23.0 (#1394) * [I18N] Update ru.js (#1384) * [FIX] CAS building wrong URL (#1362) * [FIX] Delete messages (#1399) * [FIX] In-app notification showing wrong content on channels (#1400) * Bump version to 1.24.0 (#1404) * [FIX] Prevent server with whitespace (#1402) * [IMPROVEMENT] Keyboard and content type on login (#1403) * [FIX] Messages stop loading (#1410) * [NEW] Tablet support (#1300) * [IMPROVEMENT] Authentication via deep linking (#1418) * [IMPROVEMENT] Markdown performance when identifying emoji only content (#1422) * [FIX] BackHandler remove random failing on development (#1423) * Bump version to 1.25.0 (#1424) * [CHORE] Update CI Xcode Image (#1430) * [FIX] Rooms grouping not working properly (#1435) * [FIX] Take a video (#1437) * [NEW] Themes (#1298) * [FIX] Share extension doesn't reconnect to previous selected server on Android (#1429) * [FIX] Init local settings on notification tap (#1438) * Bump version to 1.26.0 (#1450) * [FIX] Emoji parser not working on Hermes (#1445) * [NEW] Enable Hermes (#1446) * [FIX] Automatic theme repeating (#1457) * [CHORE] Sync Experimental and Official app versions (#1458) * [DOCS] Update readme (#1459) * [FIX] Messages being sent but showing as temp status (#1469) * [FIX] Missing messages after reconnect (#1470) * [FIX] Few fixes on themes (#1477) * [I18N] Missing German translations (#1465) * Missing German translation * adding a missing space behind colon * added a missing space after colon * and another attempt to finally fix this – got confused by all the branches * some smaller fixes for the translation * better wording * fixed another typo * [FIX] Crash while displaying the attached image with http on file name (#1401) * [IMPROVEMENT] Tap app and server version to copy to clipboard (#1425) * [NEW] Reply notification (#1448) * [FIX] Incorrect background color login on iPad (#1480) * [FIX] Prevent multiple tap on send (Share Extension) (#1481) * [NEW] Image Viewer (#1479) * [DOCS] Update Readme (#1485) * [FIX] Jitsi with Hermes Enabled (#1523) * [FIX] Draft messages not working with themed Messagebox (#1525) * [FIX] Go to direct message from members list (#1519) * [FIX] Make SAML wait for idp token instead of creating it on client (#1527) * [FIX] Server Test Push Notification (#1508) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [CHORE] Update to new server response (#1509) * [FIX] Insert messages with blank users (#1529) * Bump version to 4.2.1 (#1530) * [FIX] Error when normalizing empty messages (#1532) * [REGRESSION] CAS (#1570) * Bump version to 4.2.2 (#1571) * [FIX] Add username block condition to prevent error (#1585) * Bump version to 4.2.3 * Bump version to 4.2.4 * Bump version to 4.3.0 (#1630) * [FIX] Channels doesn't load (#1586) * [FIX] Channels doesn't load * [FIX] Update roomsUpdatedAt when subscriptions.length is 0 * [FIX] Remove unnecessary changes * [FIX] Improve the code Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Make SAML to work on Rocket.Chat < 2.3.0 (#1629) * [NEW] Invite links (#1534) * [FIX] Set the http-agent to the form that Rocket.Chat requires for logging (#1482) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] "Following thread" and "Unfollowed Thread" is hardcoded and not translated (#1625) * [FIX] Disable reset button if form didn't changed (#1569) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Header title of RoomInfoView (#1553) * [I18N] Gallery Permissions DE (#1542) * [FIX] Not allow to send messages to archived room (#1623) * [FIX] Profile fields automatically reset (#1502) * [FIX] Show attachment on ThreadMessagesView (#1493) * [NEW] Wordpress auth (#1633) * [CHORE] Add Start Packager script (#1639) * [CHORE] Update RN to 0.61.5 (#1638) * [CHORE] Update RN to 0.61.5 * [CHORE] Update react-native patch Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com> * Bump version to 4.3.1 (#1641) * [FIX] Change force logout rule (#1640) * Bump version to 4.4.0 (#1643) * [IMPROVEMENT] Use MessagingStyle on Android Notification (#1575) * [NEW] Request review (#1627) * [NEW] Pull to refresh RoomView (#1657) * [FIX] Unsubscribe from room (#1655) * [FIX] Server with subdirs (#1646) * [NEW] Clear cache (#1660) * [IMPROVEMENT] Memoize and batch subscriptions updates (#1642) * [FIX] Disallow empty sharing (#1664) * [REGRESSION] Use HTTPS links for sharing and markets protocol for review (#1663) * [FIX] In some cases, share extension doesn't load images (#1649) * [i18n] DE translations for new invite function and some minor fixes (#1631) * [FIX] Remove duplicate jetify step (#1628) minor: also remove 'cd' calls Co-authored-by: Diego Mello <diegolmello@gmail.com> * [REGRESSION] Read messages (#1666) * [i18n] German translations missing (#1670) * [FIX] Notifications crash on older Android Versions (#1672) * [i18n] Added Dutch translation (#1676) * [NEW] Omnichannel Beta (#1674) * [NEW] Confirm logout/clear cache (#1688) * [I18N] Add es-ES language (#1495) * [NEW] UiKit Beta (#1497) * [IMPROVEMENT] Use reselect (#1696) * [FIX] Notification in Android API level less than 24 (#1692) * [IMPROVEMENT] Send tmid on slash commands and media (#1698) * [FIX] Unhandled action on UIKit (#1703) * [NEW] Pull to refresh RoomsList (#1701) * [IMPROVEMENT] Reset app when language is changed (#1702) * [FIX] Small fixes on UIKit (#1709) * [FIX] Spotlight (#1719) * [CHORE] Update react-native-image-crop-picker (#1712) * [FIX] Messages Overlapping (Android) and MessageBox Scroll (iOS) (#1720) * [REGRESSION] Remove @ and # from mention (#1721) * [NEW] Direct message from user info (#1516) * [FIX] Delete slash commands (#1723) * [IMPROVEMENT] Hold URL to copy (#1684) * [FIX] Different sourcemaps generation for Hermes (#1724) * [FIX] Different sourcemaps generation for Hermes * Upload sourcemaps after build * [REVERT] Show emoji keyboard on Android (#1738) * [FIX] Stop logging react-native-image-crop-picker (#1745) * [FIX] Prevent toast ref error (#1744) * [FIX] Prevent reaction map error (#1743) * [FIX] Add missing calls to user info (#1741) * [FIX] Catch room unsubscribe error (#1739) * [i18n] Missing German keys (#1735) * [FIX] Missing i18n on MessagesView title (#1733) * [FIX] UIKit Modal: Weird behavior on Android Tablet (#1742) * [i18n] Missing key on German (#1747) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [i18n] Add Italian (#1736) … * [FIX] Notification stream throwing an error when there isn't a message on payload (#2637) * [FIX] Threads not being updated and other related issues (#2636) * Fix parent title on thread header breaking lines * Fix https://github.com/RocketChat/Rocket.Chat.ReactNative/issues/2519 * Fix thread badge not being updated * [FIX] Minor room header issues (#2630) * Add hitSlop to RoomView header * Use 1 icon padding for threads header Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com> * [FIX] Whitelabel unable to find package name (#2626) * Fixes #2625 * Fixes #2614 * Apply resValue on defaultConfig and undo unnecessary changes Co-authored-by: Diego Mello <diegolmello@gmail.com> * [i18n] Add missing German strings (#2619) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Model columns misplaced (#2640) * [FIX] Connect a null server (#2639) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Jitsi users unable to unmute (#2623) * [FIX] Jitsi users being muted always * fix: bundle is invalid * Update jitsi meet sdk with ui improvements * Update JitsiMeetSDK ios * Centralize toolbox android * Fix images on Jitsi Co-authored-by: Diego Mello <diegolmello@gmail.com> * Bump version to 4.12.1 (#2641) * [FIX] Share extension and save image not working on Android 10 (#2651) * Bump version to 4.13.0 (#2657) * [FIX] Update Loading logo (#2658) * [NEW] Support client certificates for SSL (two-way authentication) (Android) (#2624) * wip: Android SSL Pinning * Use own SSLPinningModule * wip: Use Rocket.Chat own react-native * wip: Fresco Images using custom OkHttpClient * wip: react-native-webview onReceivedClientCertRequest * feat: Save Images of a SSL Pinning protected server * chore: SSLPinning package as a interface to iOS & Android implementations * chore: update glide * feat: load images under a client ssl certificate protected server * chore: remove patch * feat: Audio & Video under a SSL Client protected server * fix: Unpin certificate when change server * feat: Fast Image as a patch * chore: update fast-image * Fix merge Co-authored-by: Diego Mello <diegolmello@gmail.com> * [NEW] Channel actions (#2644) * room roles * handle owner * endpoints * Leader and Moderator * Remove user from room * stash ignore * Add subscription.ignored column * ignore user * Fix icons * I18n * Minor i18n fixes * Direct Message and open action sheet after a normal tap * Fix icon * stash isIgnored * isManualUnignored message * Fix update * Ignored * Mute, moderator, leader, owner, remove from room * ignore * Tests * pt-BR * Update pods * Apply requested changes * Add RC version on requests * [NEW] Support RTL (#2656) * wip: RTL (iOS) * wip: RTL (Android) * wip: reload bundle when change between RTL languages * fix: Stack Animation on Android * fix: update snapshot * fix: Swipe Room Actions in RTL mode * fix: snapshots * Move isRTL to i18n * Fix styling * Update tests * Update pods Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Initial users' status is not fetched (#2664) * [FIX] Messages overlapping and emoji keyboard not opening (#2670) * Replace keyboard libs for react-native-ui-lib * Apply Jitsi branch * Require keyboard on bundle * Update ui-lib * chore: update deps Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com> * [CHORE] Force normalized params for 2FA (#2683) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Thread message flickering while thread parent isn't found (#2676) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Light theme not working on Android with Dark Theme set (#2675) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] App not prompting join code for password protected channels (#2514) * Adding joinCode parameter Co-authored-by: Vitor Leal <vitor_leal2201@hotmail.com> Co-authored-by: Fernando Aguilar <fernando.aguilar@hotmail.com.br> * Insert join code input Signed-off-by: Vitor.Leal <vitor_leal2201@hotmail.com> * Add joinCode field on db Signed-off-by: Vitor.Leal <vitor_leal2201@hotmail.com> * Add label i18 pt-br and en-us Signed-off-by: Vitor.Leal <vitor_leal2201@hotmail.com> * Add insert join code text Signed-off-by: Vitor.Leal <vitor_leal2201@hotmail.com> * Fix atribute name Signed-off-by: Vitor.Leal <vitor_leal2201@hotmail.com> * Add join text Signed-off-by: Vitor.Leal <vitor_leal2201@hotmail.com> Co-authored-by: Daniel Maike <danmke@hotmail.com> Co-authored-by: Fernando Aguilar <fernando.aguilar@hotmail.com.br> * Fix attributes joinCode, joinCodeRequired and pass attribute param in navigation Signed-off-by: Daniel Maike <danmke@hotmail.com> Co-authored-by: Vitor Leal <vitor_leal2201@hotmail.com> * Fixing attribute joinCodeRequired pass to goRoom Signed-off-by: Daniel Maike <danmke@hotmail.com> * Changed textinput style Signed-off-by: Daniel Maike <danmke@hotmail.com> Co-authored-by: Vitor Leal <vitor_leal2201@hotmail.com> * Delete not necessary attribute Signed-off-by: Daniel Maike <danmke@hotmail.com> * Fixing input style Co-authored-by: Vitor Leal <vitor_leal2201@hotmail.com> * Undo unncessary changes * use a join code modal * tests: e2e tests to join protected channel * fix: undo unnecessary change * tests: cancel join code * Remove some tests * Minor fixes Co-authored-by: Vitor Leal <vitor_leal2201@hotmail.com> Co-authored-by: Fernando Aguilar <fernando.aguilar@hotmail.com.br> Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com> Co-authored-by: youssef-md <emaildeyoussefmuhamad@gmail.com> Co-authored-by: Diego Mello <diegolmello@gmail.com> * [I18n] Add Arabic (#2537) * Arabic language setup * Added arabic translation * Arabic translation Proofreading Co-authored-by: Diego Mello <diegolmello@gmail.com> * [I18N] Add missing zh_TW and zh_CN strings (#2680) * feat(i18n): add some missing strings and improve some translation * fix: add missing server version Co-authored-by: Diego Mello <diegolmello@gmail.com> * [IMPROVEMENT] Add username on status messages (#2553) * 1689 - missing user name for status messages * 1689 - missing user name for status messages. Fixed broken e2e test "should pin message". * Minor tweak * Remove center style * Small refactor on User * Remove toLowerCase * Update tests Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Filenames are incorrect in non-latin alphabets on upload (#2671) * fix: filename on react-native-image-crop-picker * fix: use rn-fetch-blob to upload files * fix: FileUpload as a service * fix: cancel upload on iOS * fix: file upload from share extension Co-authored-by: Diego Mello <diegolmello@gmail.com> * [IMPROVEMENT] Ease white labelling for Android (#2685) * improve white labelling for Android * Move application ID to gradle properties * Fix CI * Point foss sufix to main app * Use npx on android-whitelabel script Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Chats order (#2688) * Persist highest value on subscription.roomUpdatedAt * Update tests Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com> * [REGRESSION] Re-enable Jitsi Chat (#2687) * Fix main jitsi * Fix iOS * Clear build.gradle cache * Don't restore gradle * cache is back * Use master * Point to react-native-jitsi-meet#master * [CHORE] Build official apps on CI (#2701) * Duplicated target and changed Bridging Header * Display name * Unnecessary dumb swift file removed * Buildable name * Reorder Info.plist * Rename Official target's bundle id * Ignore .mobileprovision * Fix provisioning of official app * Starting signing * stash fastfile * starting official ci iOS * Uncomment Fastfile keychain * Fix CI config * allowProvisioningUpdates * Changing AppIcon and Splash Screen * Remove unnecessary folder inside of Images.xcassets * Reorder notificationservice and shareextension plists * Fix signing * Manual signing style for official * Split official signing * Update project provisioning * Use ENV as profile * Output match * Keys * TestFlight refactor * Setting up android * android-official-play-build job * Start removing unnecessary fastlane tasks on Android * Trying to refactor Android jobs * android-env * Remove foss build for now * Fork * Fix if conditions * Fix push * ios-build command * Rename Android builds * Upload dSYMs * Refactoring workflow * Reorder upload-to-testflight * upload-to-google-play-beta command * Fix ci * Fix android fork build * Fix keystore * Fix options on fastlane android * Fix keystore * Check isOfficial on iOS * Check isOfficial on db * Remove unused imports * Database names on Android * Tag fix * Minor fixes * Set IS_OFFICIAL on CI * Fix detox * follow review suggestions Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com> * [i18n] Update fr (#2697) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [i18n] Update fr (#2705) Typo Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Empty space on Messagebox (#2704) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Yarn android scripts (#2716) * [CHORE] Rename Experimental iOS lane (#2717) * Move build_fork to the end * Rename release to build_experimental * [IMPROVEMENT] Use class variable instead of state for List's animated (#2718) * [FIX] Bottom sheet being hidden sometimes (#2722) * [IMPROVEMENT] Match background and text mention colors (#2723) * [FIX] App freezing if Markdown preview contains sequential empty spaces (#2726) * Remove sequential empty spaces from Markdown preview * Use Markdown preview on RepliedThread * [FIX] Official app without sharedUserId (#2734) * [CHORE] Update React Native to 0.63.4 (#2737) * Bump version to 4.13.1 (#2739) * [REGRESSION] Multiple uploads not working on iOS (#2738) * Update React Native to 0.63.4 * Fix multiple uploads not working on iOS * [FIX] Unable to save attachment on iOS (#2743) * Fix rn-fetch-blob's document dir without forward slash * Update camera roll * [FIX] Generate Jitsi access token when making a call (#2694) fixes: #2693 # Please enter the commit message for your changes. Lines starting Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Jitsi notification delay (#2668) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Channels list not following the same sorting logic from web client (#2763) * [FIX] Pods lost on Official target (#2764) * [FIX] RoomItem using deprecated animated event signature (#2771) * [FIX] Server autocomplete text breaking line (#2774) * [FIX] ServerDropdown flashing bigger server icon (#2775) * [FIX] ServerDropdown flashing bigger server icon * Remove unused logo and update image path where needed * Minor tweak Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Rooms list not being updated on some cases (#2765) * Request subscriptions on RoomsListView.constructor * Removes opened rooms from last message persisting * Change server reducer * Prevent undefined ids causing query error * [FIX] Share Extension hitting memory limit on iOS (#2788) * [FIX] Disallow swipe to dismiss on share extension * Limit query to 20 and clean up props * Remove rn-extension-share branch pointer * Test new branch * Remove branch * [IMPROVEMENT] Threads layout tweaks (#2686) * improvement: Thread Details * fix: re-render Thread Messages Item * fix: update snapshots * improve: thread details component * fix: cast replies length * improvement: format date of threads * improvement: thread details styles * fix: wrap text * tests: update snapshot * improvement: use same date format for all dates * Icon size 24 * Remove date * Remove prop drill * Badge position * Badge container tweak * Fix inline style * Move ThreadDetails to containers * Update stories * Fix lint * Remove wrong prop Co-authored-by: Diego Mello <diegolmello@gmail.com> * [CHORE] Remove some migrations (#2792) * Remove force rooms refresh * Remove MMKV migration * Bump version to 4.14.0 (#2797) * [FIX] Messagebox tracking lost on pop gesture navigation (#2799) * Use setTimeout instead of InteractionManager * Update tracking lib * [FIX] Back button closing activity when on root stack screen (#2804) * Make hardware back button to behave as home button on root screens * Remove unnecessary code * Remove handleBackPress from OnboardingView * Fix lint * [i18n] Add missing German strings (#2715) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [NEW] Encrypted Discussions (#2813) * I18n key fix * Add encrypted switch * Remove unused i18n keys * Add enabled to encryption reducer * Show encrypted option on CreateDiscussionView only when e2e encryption is properly set * Add localSearch and use it on search * Use encrypted from parent channel * Fix method calls as rest api with 2fa enabled * Fix logout after reset keys * Use encryption reducer instead of lib directly to check render * Check for room type logic to display encryption option on create discussion * Check toggle-room-e2e-encryption permission on RoomActionsView * Check for encryption status instead of setting on server * Fix * Disable switch instead of hide it * Fix spotlight for DMs * Fix server test * [FIX] Messagebox missing style for text color (#2786) * Changing auxilaryTintColor * Changed Placeholder color to BodyText color * added color prop * eslint changes * used array for styles Co-authored-by: Diego Mello <diegolmello@gmail.com> * [I18N] Update arabic (#2696) * Update ar.js * Update ar.js Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Workspace input without i18n (#2689) * [FIX] Translation of strings in Login page * Strings are added for translation. fixes: #2620 * Add pt-BR Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Spotlight returning duplicated entries (#2805) * Update rocketchat.js * Updated search function * Minor improvements * Remove atIndex * Add remove logic to remove duplicate data from response Co-authored-by: Diego Mello <diegolmello@gmail.com> * [CHORE] Refactor ServerItem (#2778) * Updated ServerDropdown and ServerItem * Added ServerItem stories * Update ServerDropdown.js * Updated ServerItem stories * Updated ServerItem stories and ServerItem component * Updated SelectServerView, ServerItem and ServerItem stories * Updated ServerItem stories * Updated ServerItem stories * Update tests Co-authored-by: Diego Mello <diegolmello@gmail.com> * [DOCS] Updated Quick Start docs link in e2e/readme (#2802) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [I18N] Add Turkish (#2793) * Turkish language support added * Update tr.js Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Lint on #2793 (#2818) * [I18N] Add missing german strings (#2689) (#2820) * [I18N] Add missing italian strings (#2817) * [FIX] Server version becoming null on server change (#2821) * [FIX] Wrong styling on E2E encryption banner (#2767) * [FIX] Wrong styling on E2E encryption banner * [FIX] Wrong styling on E2E encryption banner * [FIX] Wrong styling on E2E encryption banner * [FIX] Wrong styling on E2E encryption banner (#2767) * Updated SortDropdown, ListHeader, ListItem and added stories for List.Item * Updated SortDropdown * Removed unused component * Updated List.Item and stories * Reverted unnecessary changes and updated ListItem stories * Fix minor indentation * Stop breaking Touch's default underlay color * Fix indentation * Remove falsy comparison from render * Fix left icon * Use List.Item on OmnichannelStatus * Add missing separator * Lint * Fix sort dropdown * Remove unnecessary styles * Fix detox Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] App Store using Experimental's app id (#2826) * [FIX] Wrong username on push notifications (#2825) * [FIX] Share extension memory issues on iOS (#2845) * Remove unnecessary class prop * Stop rendering servers when there's only one * Map and alloc only necessary columns from query * Fetch servers count instead of all servers records * Fetch only needed servers * Separators * Remove renderContent * Minor fix * Refactor query * Smaller avatars in memory * Fix getItemLayout * Add topic * Load less pods * tests * Import only used functions from lodash * Fix pods * Import only used functions from semver * Fix media sharing * Update pods * Disables preview and thumb on iOS * Update expo-video-thumbnail * Unnecessary change * [FIX] Logout from other locations not prompting confirmation option (#2854) * Fixed logout toast bug for the iOS * Removing callToAction and replacing with confirmationText Co-authored-by: Diego Mello <diegolmello@gmail.com> * Bump version to 4.14.1 (#2859) * [IMPROVEMENT] Check for focused rooms on in-app notifications (#2857) * Update InAppNotification and room reducer * Update InAppNotification This reverts commit 60330a1e04cfe8d2e5aa311f367083d831682c49. * Stop subscribing to threads * Remove ref * Fix prop-types Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Real name being ignored in SearchMessagesView (#2838) Co-authored-by: Gerzon Z <gerzonc@icloud.com> Co-authored-by: Diego Mello <diegolmello@gmail.com> * [CHORE] Remove unnecessary share reducer calls (#2861) * Remove unnecesary share reducer calls * Update Avatar Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Breadcrumbs exceeding characters limit (#2862) * [FIX] breadcrumbs exceeding * fix.breadcrumbs-exceeding-change-events Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] App compressing videos on iOS (#2915) * Update index.js * Update index.js * [FIX] Real name setting ignored on reply preview (#2908) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Reply component sending unused prop to Description (#2900) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [CHORE] BackdropOpacity based on themes (#2863) * Added backdropOpacity based on theme * Updated ActionSheet, ReactionsModal, ReactionPicker and Sidebar * Updated MultiSelect Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Webview not falling back to default auth challenge when no cert is provided (#2918) * [FIX] Android - fallback to default auth challenge handling when no cert is provided * If a certificate auth challenge is requested on Android the webview will hang if no certificate is loaded. To prevent this, fallback to default Android behavior and cancel the challenge with request.cancel() * No client certificate case defaults to super implementation * Update react-native-webview * Downgrade to previous dependency version Co-authored-by: Diego Mello <diegolmello@gmail.com> Co-authored-by: Gerzon Z <gerzonc@icloud.com> Co-authored-by: Jan Garaj <jan.garaj@gmail.com> * [FIX] Support Jitsi_URL_Room_Hash (#2905) * [FIX] Temp attachment files not being flushed after saved to gallery (#2871) * Update AttachmentView.js * Update AttachmentView.js * Update AttachmentView.js * Update AttachmentView.js Co-authored-by: Diego Mello <diegolmello@gmail.com> * [CHORE] Update iOS profiles for Experimental app (#2933) * [IMPROVE] Deleted thread reply redirects to thread (#2840) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Thread showing typing indicator from main room (#2869) * [FIX] Remove typing indicator from thread's header * remove unnecessary props and change usersTyping condition Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] DM rooms show typing status from last group room (#2878) * [FIX] DM rooms show typing status from last group room * Undo changes * Check if current typing is from focused room before dispatching to redux Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Can't copy or edit media's description (#2885) * [FIX] Image descriptions issues * shorten the condition string * fix selectedMessage state Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] RightButtonsContainer re-render check not returning default value (#2899) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [CHORE] Remove InteractionManager blocks (#2906) * [FIX] Remove InteractionManager blocks * Minor fix Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] App not sending second argument for EventEmitter.removeListener on some places (#2909) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Temp message ignoring real name (#2919) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] System message of e2e encryption is missing (#2888) * [FIX] System message of e2e encryption missing * add new encryption string * add to stories * Add pt-BR * Move stories Co-authored-by: Diego Mello <diegolmello@gmail.com> * [CHORE] Add permissions to Redux (#2914) * [FIX] Add permissions to Redux store * add only permissions being used in the app * add clear permissions reducer * call RocketChat.hasPermission from reducer * add server version comparison on getPermissions * refactor hasPermission function * refactor hasPermission function * remove uncomment code * use Q.experimentalSortBy() * add coerce function * Change Rocketchat.hasPermission * Apply on isReadOnly * Apply to RoomInfoEditView * Apply to RoomInfoView and RoomInfoEditView * canAutoTranslate * Unnecessary clear permissions * Revert getUpdatedSince * Naming fix Co-authored-by: Diego Mello <diegolmello@gmail.com> * [CHORE] Add hold step for ios and android build experimental (#2943) * [CHORE] Add hold step for ios-build-experimental and android-build-experimental * Android hold step * add ios hold step Co-authored-by: Diego Mello <diegolmello@gmail.com> * [IMPROVEMENT] Remove lodash.isEqual (#2893) * Added dequal and react-fast-compare as substitutes to lodash.isEqual * Update ReplyPreview.js * Remove react-fast-compare * Removed deep-equal and upgrade babel-eslint dev dependency * Fix avatar * Fix Messagebox * Fix CreateDiscussionView * ModalBlockView * NewMessageView * ProfileView * RoomInfoEditView * ServerDropdown * Return local search as object instead of observable * SelectedUsersView Co-authored-by: Diego Mello <diegolmello@gmail.com> * [I18N] Add missing Russian strings (#2946) * [i18n] Add missing Russian strings * Couple fixes * Fix Direct_message Translate Direct_message as already has been translated Co-authored-by: Diego Mello <diegolmello@gmail.com> * [CHORE] Use shortcut syntax for get collections (#2932) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Use List.Separator in all places (#2931) * [FIX] Use List.Separator in all places * add List.Separator * change List.Separator Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Limit new message list query size to 50 (#2947) * Limit query to 50 * Remove observable * [FIX] Support chats order for older versions of the server (#2934) * Update mergeSubscriptionsRooms.js * Update mergeSubscriptionsRooms.js * Update mergeSubscriptionsRooms.js * Minor refactor Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Reactions modal's backdrop color too light (#2949) Co-authored-by: Diego Mello <diegolmello@gmail.com> * Bump version to 4.15.0 (#2950) * [FIX] Share extension not working correctly on Official app (#2963) * [FIX] Cannot read property 'some' of undefined on hasPermission (#2966) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Deep linking and other connectivity issues (#2894) * Navigate from push notification only if necessary * Use JS SDK branch * Stop reconnecting if it's already connected * Fix RoomsListView forever loading after tapping push notification of another server * Execute fewer operations on app/index * Remove roomsRequest call from onForeground * Apply check and reopen * Stop opening in-app notification when the app is on backgorund * Connecting tweaks * Fix deep linking not working if the app is on background * Force reset yarn cache * Upgrade JS SDK * Remove listener on unmount * Fix resume on Android after back button is pressed * Fix local authentication resume * Fix back button android * Change JS SDK branch * [FIX] Messagebox's placeholder color is too bright (#2968) * [IMPROVEMENT] Message attachment colors (#2860) * Added convertStrToHex function and updated Reply component * Removed convertStrtToHex function and added attachmentBackground * Added color2k, removed transparent view and applied transparentize to backgroundColor * Added stories * Update Reply stories * Update Reply stories * Fix lint * Update Reply stories * Fix props * Move tests to Message stories Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] App forgetting workspace when server is not finished added (#2798) * [FIX] App forgetting workspace * Added e2e tests * Update login.js * Update logout.js * Reverted changes on login and share, updated init * Update 08-persistantworkspace.spec.js * Revert unnecessary changes * Revert line change * Update share.js * Tweak tests * Use wm shorthand * Remove irrelevant calls to RocketChat.TOKEN_KEY Co-authored-by: Diego Mello <diegolmello@gmail.com> * [TESTS] Add E2E tests to draft message (#2960) * [E2E TEST] Draft message * Fix tests Co-authored-by: Diego Mello <diegolmello@gmail.com> * [TESTS] Add E2E tests to group DM (#2961) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [TESTS] Add E2E tests to directory (#2964) * [E2E TEST] Directory * Fix tests Co-authored-by: Diego Mello <diegolmello@gmail.com> * [CHORE] Simplify server version comparison (#2922) * Simplify server version where needed * Added lte and gte functions and updated imports * Updated functions names * Update util functions * Update util function and added methods * Remove lt and coerce from getPermissions and mergeSubscriptionsRooms * Fix comparison * Update getPermissions.js * Remove unused import * Fix lint * Fix lint Co-authored-by: Diego Mello <diegolmello@gmail.com> * [TESTS] Add E2E tests to discussions (#2970) * [E2E TEST] Discussions * fix error Cannot find UI elemen * Fix tests Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Attachment not rendering markdown (#2924) * [FIX] Render markdown in Fields content * Added stories Co-authored-by: Diego Mello <diegolmello@gmail.com> * [TESTS] Add e2e tests for mark message as unread (#2953) * [E2E TEST] Add e2e tests for mark message as unread * fixed test for draft message * change test name * move test to other file * Remove unnecessary tests * Rename file * Update jest tests Co-authored-by: Diego Mello <diegolmello@gmail.com> * [TESTS] Add E2E tests to delete server (#2954) * [E2E TEST] Delete server * fixed test for delete server * fix tests * minor changes * Rename file Co-authored-by: Diego Mello <diegolmello@gmail.com> * [CHORE] Refactor RoomActionsView permissions (#2872) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [CHORE] Add status and teams icons (#2989) Co-authored-by: Gerzon Z <gerzonc@icloud.com> * [FIX] SSO not working with 2FA (TOTP) (#2978) * Update AuthenticationWebView.js * Updated loginTOTP * Added validation * Update rocketchat.js * Update rocketchat.js * Update rocketchat.js * Update rocketchat.js * Fix resolve * Remove incognito * Fix totp being requested on webview Co-authored-by: Diego Mello <diegolmello@gmail.com> * [IMPROVEMENT] User status icons (#2991) * Add status and teams * Update icons, icon size and getUsersPresence * Minor changes * Refactor RoomTypeIcon * Minor tweaks * Update unit tests * Minor fixes * Fix styles * Small refactor * Update jest Co-authored-by: Diego Mello <diegolmello@gmail.com> * [REGRESSION] Auth via deep linking not working (#3015) * Update rocketchat and add e2e test for deep linking * Update rocketchat and add e2e test for deep linking * Update deeplinking e2e * fix deep linking auth * Test deep linking auth * Fix deeplink to rid and add tests * Small refactor * Add non existing server test Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Create discussion request being sent with null value on encryption param (#3033) * [CHORE] Use JSON files for i18n (#3011) * [IMPROVEMENT] Load only i18n files needed (#3014) * Use json * Load only i18n files needed * [REGRESSION] Clear local server cache not loading rooms (#3007) * Fix clear cache * Write e2e tests * Fix lint * Fix isRTL * [FIX] Custom OAuth and iframe login attempts being called multiple times (#3020) * [FIX] App crashing when attachment color is an invalid HEX (#3021) * [IMPROVEMENT] Add "Message" option to Room Info (#3029) * [CHORE] Go to room from hashtag * Layout tweaks Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Can't change status (#3018) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Search input not using the whole header space (#3012) * [FIX] Search input not using the whole space * Fix on getHeaderTitlePosition Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] E2EE password hiding automatically (#2972) * [FIX] E2EE password hiding automatically * add e2e test * fixed hiding banner * move e2e tests to 01-e2eencryption * remove console.log * Fix tests Co-authored-by: Diego Mello <diegolmello@gmail.com> * [TESTS] Move threads tests to its own file (#2965) * [E2E TEST] Move threads test to another file * changed descirbe title * Rearrange files Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Regex typo on markdown (#2928) * [FIX] Fix Regex Typo * Add story for testing Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Make attachment validation compatible with web client (#2927) * [FIX] Make attachment validation compatible with web client * Added stories Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Non-reply attachments displaying time (#2902) * Remove time if no message_link * Fix message stories for replies * Final stories fix Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] i18n not being applied on login/register labels (#2930) * Use I18n translate in login text input label * Add to register and add missing strings Co-authored-by: Diego Mello <diegolmello@gmail.com> * Revert "[FIX] Make attachment validation compatible with web client (#2927)" (#3036) This reverts commitd6200745c0
. * Bump version to 4.16.0 (#3037) * [NEW] Basic support to Teams (#3016) * Database migration * RoomItem icon * Team icons * Teams group * Small tweak on RoomTypeIcon * RoomView Header * Add team's channels to RoomView header * Starting TeamChannelsView * Icon size * o data found * Update TeamChannelsView, add teams subscriptions and send params to TeamChannelsView * Use teams.ListRooms endpoint, render rooms list, remove unused functions * Show team main on TeamChannelsView * Disable swipe * Pagination working * Fix blinking no data found * Search working * Refactor to use BackgroundContainer while loading * Go to room * Cleanup * Go to actions * Events * Lint * Add debounce to go room * Fix for tablet * i18n * Small fix * Minor refactor * Use local data when it exists * Show last message * Force teams migration * Add stories to BackgroundContainer * Remove unused component * Move RoomViewHeader into containers folder * Refactoring * Testing RoomHeader * i18n * Fix server endpoint version * Fix events Co-authored-by: Gerzon Z <gerzonzcanario@gmail.com> * [CHORE] Refactor mention tracking logic (#2997) * [Improvement] Improve mentions This PR focuses on improving command, emoji, channel and user mentions. * [Tests] Added e2e tests for mention improvement * [Improvement] Modify slash command mention logic. Added slash command with argument preview Slash command should show only if the message bigins with / * Return data on search for empty text * Minor fixes * Update e2e tests * Minor fix * [FIX] allow command mentioning in between text Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Status text not being updated on sidebar (#3041) * Update StatusView.js * Minor tweak * Minor tweaks Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Unable to search non-latin alphabet names on members list (#3039) * Add search by name in members list * Update RoomMembersView search Co-authored-by: Diego Mello <diegolmello@gmail.com> * Search stops working after some time (#3044) * Bump version to 4.17.0 (#3058) * [CHORE] Add job to upload Experimental to Google Play production (#3050) * [REGRESSION] SAML stopped working after #2978 (#3060) * [REGRESSION] Room actions not loading on tablet (#3061) * Bump version to 4.16.1 (#3063) * [REGRESSION] Fallback language stopped working (#3072) * [CHORE] Update Detox to 18.10.0 (#3052) * Updated detox and 5 tests * Update e2e cases for Detox v18, update setUserStatus and added SET_STATUS_FAIL * Downgrade mocha * Exclude arm64 from building and update tests cases * Update more tests cases, add registeringUser4 * Update more test files and add room-actions-scrollview testID * Update package.json * Remove unused username from test file and update 08-roominfo test file * Fixing * Mark as unread * Fixing flaky tests * Minor fixes Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Message author touchable taking whole space available (#3048) Co-authored-by: Gerzon Z <gerzonc@icloud.com> * [CHORE] Improve stories (#3028) * [CHORE] Improve stories * Refactor Avatar and UIKitModal * fixed undefined 'name' * Remove commented stories * Remove Markdown from stories/index, update Markdown test file and remove markdown stories from Message stories * Remove StoriesSeparator * Refactor Markdown * Remove commented lines of code * Small refactor * Re-add stories Co-authored-by: Gerzon Z <gerzonzcanario@gmail.com> Co-authored-by: Gerzon Z <gerzonc@icloud.com> Co-authored-by: Diego Mello <diegolmello@gmail.com> * Bump version to 4.17.0 (#3083) * [REGRESSION] Fallback not working when device's language is available (#3091) * Always add 'en' i18n * Add tests * Bump version to 4.16.2 (#3092) * [FIX] Connecting stream listener not being cleared (#3008) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] App making calls to DDP after socket was killed by OS (#3062) Co-authored-by: Gerzon Z <gerzonc@icloud.com> * [NEW] Create Team (#3082) Co-authored-by: Diego Mello <diegolmello@gmail.com> * Language update from LingoHub 🤖 (#3139) Project Name: Rocket.Chat.ReactNative Project Link: https://translate.lingohub.com/rocketchat/dashboard/rocket-dot-chat-dot-reactnative User: Robot LingoHub Easy language translations with LingoHub 🚀 Co-authored-by: Robot LingoHub <robot@lingohub.com> * [NEW] Add/Create/Remove channel on a team (#3090) * Added Create Team * Added actionTypes, actions, ENG strings for Teams and updated NewMessageView * Added createTeam sagas, createTeam reducer, new Team string and update CreateChannelView * Remove unnecessary actionTypes, reducers and sagas, e2e tests and navigation to team view * Minor tweaks * Show TeamChannelsView only if joined the team * Minor tweak * Added AddChannelTeamView * Added permissions, translations strings for teams, deleteTeamRoom and addTeamRooms, AddExistingChannelView, updated CreateChannelView, TeamChannelsView * Refactor touch component and update removeRoom and deleteRoom methods * Minor tweaks * Minor tweaks for removing channels and addExistingChannelView * Added missing events and fixed channels list * Minor tweaks for refactored touch component * Minor tweaks * Remove unnecesary changes, update TeamChannelsView, AddExistingChannelView, AddChannelTeamView, createChannel, goRoom and Touchable * Add screens to ModalStack, events, autoJoin, update createChannel, addRoomsToTeam and Touchable * Minor tweak * Update loadMessagesForRoom.js * Updated schema, tag component, touch, AddChannelTeamView, AddExistingChannelView, ActionSheet Item * Fix unnecessary changes * Add i18n, update createChannel, AddExistingChannelTeamView, AddChannelTeamView, RightButton and TeamChannelsView * Updated styles, added tag story * Minor tweak * Minor tweaks * Auto-join tweak * Minor tweaks * Minor tweak on search * One way to refactor :P * Next level refactor :) * Fix create group dm * Refactor renderItem * Minor bug fixes * Fix stories Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] E2E Tests not working because of ES6 import (#3147) * Update ITeam.js * Minor tweak * [NEW] Leave Teams (#3116) * Added Create Team * Added actionTypes, actions, ENG strings for Teams and updated NewMessageView * Added createTeam sagas, createTeam reducer, new Team string and update CreateChannelView * Remove unnecessary actionTypes, reducers and sagas, e2e tests and navigation to team view * Minor tweaks * Show TeamChannelsView only if joined the team * Minor tweak * Added AddChannelTeamView * Added permissions, translations strings for teams, deleteTeamRoom and addTeamRooms, AddExistingChannelView, updated CreateChannelView, TeamChannelsView * Refactor touch component and update removeRoom and deleteRoom methods * Minor tweaks * Minor tweaks for removing channels and addExistingChannelView * Added missing events and fixed channels list * Minor tweaks for refactored touch component * Added SelectListView and logic for leaving team * Minor tweak * Minor tweak * Minor tweaks * Remove unnecesary changes, update TeamChannelsView, AddExistingChannelView, AddChannelTeamView, createChannel, goRoom and Touchable * Remove unnecesary prop * Add screens to ModalStack, events, autoJoin, update createChannel, addRoomsToTeam and Touchable * Minor tweak * Update loadMessagesForRoom.js * Updated schema, tag component, touch, AddChannelTeamView, AddExistingChannelView, ActionSheet Item * Fix unnecessary changes * Add i18n, update createChannel, AddExistingChannelTeamView, AddChannelTeamView, RightButton and TeamChannelsView * Updated styles, added tag story * Minor tweak * Minor tweaks * Auto-join tweak * Minor tweaks * Minor tweak on search * Minor refactor to ListItem, add SelectListView to ModalStack, update handleLeaveTeam * Minor tweaks * Update SelectListView * Update handleLeaveTeam, remove unnecessary method, add story * Minor tweak * Minor visual tweaks * Updated SelectListView, RoomActionsView, leaveTeam method and string translations * Update SelectListVIew * Minor tweak * Update SelectListView * Minor tweak * Fix for List.Item subtitles being pushed down by title's flex * Minor tweaks * Update RoomActionsView * Use showConfirmationAlert and showErrorAlert * Lint Co-authored-by: Diego Mello <diegolmello@gmail.com> * [NEW] Jump to message (#3099) * Scrolling * Add loadMore button at the end of loadMessagesForRoom * Delete dummy item on tap * Only insert loadMore dummy if there's more data * load surrounding messages * fixes and load next * First dummy and dummy-next * Save load next messages * Check if message exists before fetching surroundings * Refactoring List * Jumping to message :) * Showing blocking loader while scrolling/fetching message * Check if message exists on local db before inserting dummy * Delete dummies automatically when the message sent to updateMessages again * Minor cleanup * Fix scroll * Highlight message * Jump to bottom * Load more on scroll * Adding stories to LoadMore * Refactoring * Add loading indicator to LoadMore * Small refactor * Add LoadMore to threads * getMoreMessages * chat.getThreadMessages -> getThreadMessages * Start jumping to threads * Add jumpToMessageId on RoomView * Nav to correct channel * Fix PK issue on thread_messages * Disable jump to thread from another room * Fix nav to thread params * Add navToRoom * Refactor styles * Test notch * Fix Android border * Fix thread message on title * Fix NavBottomFAB on threads * Minor cleanup * Workaround for readThreads being called too often * Lint * Update tests * Jump from search * Go to threads from search * Remove getItemLayout and rely on viewable items * Fix load older * stash working * Fix infinite loading * Lower itemVisiblePercentThreshhold to 10, so very long messages behave as viewable * Add generateLoadMoreId util * Minor cleanup * Jump to message from notification/deep linking * Add getMessageInfo * Nav to threads from other rooms * getThreadName * Unnecessary logic * getRoomInfo * Colocate getMessageInfo closer to RoomView * Minor cleanup * Remove search from RoomActionsView * Minor fix for search on not joined public channels * Jump to any link * Fix tablets * Jump to message from MessagesView and other bug fixes * Fix issue on Urls * Adds race condition to cancel jump to message if it's stuck or after 5 seconds * Jump from message search quote * lint * Stop onPress * Small refactor on load methods * Minor fixes for loadThreadMessages * Minor typo * LoadMore i18n * Minor cleanup * [FIX] Method calls not sending date params as EJSON (#3159) * [FIX] Read receipt not displaying full date (#3133) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [NEW] Remove member from team (#3117) * Added Create Team * Added actionTypes, actions, ENG strings for Teams and updated NewMessageView * Added createTeam sagas, createTeam reducer, new Team string and update CreateChannelView * Remove unnecessary actionTypes, reducers and sagas, e2e tests and navigation to team view * Minor tweaks * Show TeamChannelsView only if joined the team * Minor tweak * Added AddChannelTeamView * Added permissions, translations strings for teams, deleteTeamRoom and addTeamRooms, AddExistingChannelView, updated CreateChannelView, TeamChannelsView * Refactor touch component and update removeRoom and deleteRoom methods * Minor tweaks * Minor tweaks for removing channels and addExistingChannelView * Added missing events and fixed channels list * Minor tweaks for refactored touch component * Added SelectListView and logic for leaving team * Added addTeamMember and removeTeamMember * Minor tweak * Minor tweak * Minor tweaks * Remove unnecesary changes, update TeamChannelsView, AddExistingChannelView, AddChannelTeamView, createChannel, goRoom and Touchable * Remove unnecesary prop * Add screens to ModalStack, events, autoJoin, update createChannel, addRoomsToTeam and Touchable * Minor tweak * Update loadMessagesForRoom.js * Updated schema, tag component, touch, AddChannelTeamView, AddExistingChannelView, ActionSheet Item * Fix unnecessary changes * Add i18n, update createChannel, AddExistingChannelTeamView, AddChannelTeamView, RightButton and TeamChannelsView * Updated styles, added tag story * Minor tweak * Minor tweaks * Auto-join tweak * Minor tweaks * Minor tweak on search * Minor refactor to ListItem, add SelectListView to ModalStack, update handleLeaveTeam * Minor tweaks * Update SelectListView * Update handleLeaveTeam, remove unnecessary method, add story * Minor tweak * Minor visual tweaks * Update SelectListView.js * Update RoomMembersView * Updated SelectListView, RoomActionsView, leaveTeam method and string translations * Update SelectListVIew * Minor tweak * Update SelectListView * Minor tweak * Minor tweaks * Fix for List.Item subtitles being pushed down by title's flex * Minor tweaks * Update RoomActionsView * Use showConfirmationAlert and showErrorAlert * Remove addTeamMember, update removeTeamMember * Update Alert * Minor tweaks * Minor tweaks * Minor tweak * Update showActionSheet on RoomMembersView * Remove team main from query and move code around * Fetch roles * Update RoomMembersView and SelectListView * Updated leaveTeam and handleRemoveFromTeam * Fix validation * Remove unnecessary function * Added confirmationAlert for missing permissions case Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Add Existing Channel screen showing discussions and channels without permission (#3151) * [Fix] the filter to show the existing channel * [Refactor] the function that filter to isolate it * Refactor how to wsearch properly Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Member search not trimming search text (#3129) * Fixed logout toast bug for the iOS * Removing callToAction and replacing with confirmationText * Handling member search with spaces to the left and right of name/username * Changing location of string trimmer Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Discussions not subscribing properly to messages when opened from inside the room (#3149) * [FIX] Promise at subscription Room * E2E - Update previous roomView count after send msg in discussion * Not needed rn Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Team creation not raising error if something unexpected happens (#3152) * [IMPROVEMENT] Add error to AddExistingChannel * Fix the alert error when create a channel * Fix the error alert box when create channel and teams Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Check permissions on team channels action sheet (#3155) * [IMPROVEMENT] Show only the option that user can manage in TeamChannelsView * Refactor the showActionSheet function * Added remove team channel permission * Cleanup Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Add channels to team's flow using different navigators (#3157) * [FIX] the navigation to AddChannelTeamView and next screens * Fix the order inside the NewMessageStackNavigator * Delete spaces after arrow function in onPress * Adjusted InsideStackNavigator to a conditional animation * Fixed route for iPad * Small change Co-authored-by: Diego Mello <diegolmello@gmail.com> * [IMPROVEMENT] Allow discussions to be edited (#3137) * Refactored the filter to work the edit for channel and discussion * Removed the filter which type of room can be edit Co-authored-by: Diego Mello <diegolmello@gmail.com> * Fix tests Co-authored-by: Diego Mello <diegolmello@gmail.com> * [NEW] Delete Teams (#3123) * Added Create Team * Added actionTypes, actions, ENG strings for Teams and updated NewMessageView * Added createTeam sagas, createTeam reducer, new Team string and update CreateChannelView * Remove unnecessary actionTypes, reducers and sagas, e2e tests and navigation to team view * Minor tweaks * Show TeamChannelsView only if joined the team * Minor tweak * Added AddChannelTeamView * Added permissions, translations strings for teams, deleteTeamRoom and addTeamRooms, AddExistingChannelView, updated CreateChannelView, TeamChannelsView * Refactor touch component and update removeRoom and deleteRoom methods * Minor tweaks * Minor tweaks for removing channels and addExistingChannelView * Added missing events and fixed channels list * Minor tweaks for refactored touch component * Added SelectListView and logic for leaving team * Added addTeamMember and removeTeamMember * Minor tweak * Added deleteTeam function * Minor tweak * Minor tweaks * Remove unnecesary changes, update TeamChannelsView, AddExistingChannelView, AddChannelTeamView, createChannel, goRoom and Touchable * Remove unnecesary prop * Add screens to ModalStack, events, autoJoin, update createChannel, addRoomsToTeam and Touchable * Minor tweak * Update loadMessagesForRoom.js * Updated schema, tag component, touch, AddChannelTeamView, AddExistingChannelView, ActionSheet Item * Fix unnecessary changes * Add i18n, update createChannel, AddExistingChannelTeamView, AddChannelTeamView, RightButton and TeamChannelsView * Updated styles, added tag story * Minor tweak * Minor tweaks * Auto-join tweak * Minor tweaks * Minor tweak on search * Minor refactor to ListItem, add SelectListView to ModalStack, update handleLeaveTeam * Minor tweaks * Update SelectListView * Update handleLeaveTeam, remove unnecessary method, add story * Minor tweak * Minor visual tweaks * Update SelectListView.js * Update index.js * Update RoomMembersView * Updated SelectListView, RoomActionsView, leaveTeam method and string translations * Update SelectListVIew * Minor tweak * Update SelectListView * Minor tweak * Minor tweaks * Fix for List.Item subtitles being pushed down by title's flex * Minor tweaks * Update RoomActionsView * Use showConfirmationAlert and showErrorAlert * Remove addTeamMember, update removeTeamMember * Update Alert * Minor tweaks * Minor tweaks * Minor tweak * Update showActionSheet on RoomMembersView * Remove team main from query and move code around * Fetch roles * Update RoomMembersView and SelectListView * Update rocketchat.js * Updated leaveTeam and handleRemoveFromTeam * Fix validation * Remove unnecessary function * Update RoomActionsView * Update en.json * updated deleteTeam function and permissions * Added showConfirmationAlert * Added string translations for teams * Fix permission * Minor tweaks * Typo Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Android navigation bar color when Loading modal appears (#3165) * [FIX] Modal appearance * Undo and only add android:navigationBarColor Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Check for old servers for Teams (#3171) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [NEW] Convert/Move Channel to Team (#3164) * Added Create Team * Added actionTypes, actions, ENG strings for Teams and updated NewMessageView * Added createTeam sagas, createTeam reducer, new Team string and update CreateChannelView * Remove unnecessary actionTypes, reducers and sagas, e2e tests and navigation to team view * Minor tweaks * Show TeamChannelsView only if joined the team * Minor tweak * Added AddChannelTeamView * Added permissions, translations strings for teams, deleteTeamRoom and addTeamRooms, AddExistingChannelView, updated CreateChannelView, TeamChannelsView * Refactor touch component and update removeRoom and deleteRoom methods * Minor tweaks * Minor tweaks for removing channels and addExistingChannelView * Added missing events and fixed channels list * Minor tweaks for refactored touch component * Added SelectListView and logic for leaving team * Added addTeamMember and removeTeamMember * Minor tweak * Added deleteTeam function * Minor tweak * Minor tweaks * Remove unnecesary changes, update TeamChannelsView, AddExistingChannelView, AddChannelTeamView, createChannel, goRoom and Touchable * Remove unnecesary prop * Add screens to ModalStack, events, autoJoin, update createChannel, addRoomsToTeam and Touchable * Minor tweak * Update loadMessagesForRoom.js * Updated schema, tag component, touch, AddChannelTeamView, AddExistingChannelView, ActionSheet Item * Fix unnecessary changes * Add i18n, update createChannel, AddExistingChannelTeamView, AddChannelTeamView, RightButton and TeamChannelsView * Updated styles, added tag story * Minor tweak * Minor tweaks * Auto-join tweak * Minor tweaks * Minor tweak on search * Minor refactor to ListItem, add SelectListView to ModalStack, update handleLeaveTeam * Minor tweaks * Update SelectListView * Update handleLeaveTeam, remove unnecessary method, add story * Minor tweak * Minor visual tweaks * Update SelectListView.js * Update index.js * Update RoomMembersView * Updated SelectListView, RoomActionsView, leaveTeam method and string translations * Update SelectListVIew * Minor tweak * Update SelectListView * Minor tweak * Minor tweaks * Fix for List.Item subtitles being pushed down by title's flex * Minor tweaks * Update RoomActionsView * Use showConfirmationAlert and showErrorAlert * Remove addTeamMember, update removeTeamMember * Update Alert * Minor tweaks * Minor tweaks * Minor tweak * Update showActionSheet on RoomMembersView * Remove team main from query and move code around * Fetch roles * Update RoomMembersView and SelectListView * Update rocketchat.js * Updated leaveTeam and handleRemoveFromTeam * Fix validation * Remove unnecessary function * Update RoomActionsView * Update en.json * updated deleteTeam function and permissions * Added showConfirmationAlert * Added string translations for teams * Fix permission * Added moveChannelToTeam and convertToTeam functionality * Fix SelectListView RadioButton * Fix moveToTeam * Added searchBar to SelectListVIew * Update RoomView , SelectListVIew and string translation for error Co-authored-by: Diego Mello <diegolmello@gmail.com> * [TEST] E2E Tests for Teams (#3178) * Added Create Team * Added actionTypes, actions, ENG strings for Teams and updated NewMessageView * Added createTeam sagas, createTeam reducer, new Team string and update CreateChannelView * Remove unnecessary actionTypes, reducers and sagas, e2e tests and navigation to team view * Minor tweaks * Show TeamChannelsView only if joined the team * Minor tweak * Added AddChannelTeamView * Added permissions, translations strings for teams, deleteTeamRoom and addTeamRooms, AddExistingChannelView, updated CreateChannelView, TeamChannelsView * Refactor touch component and update removeRoom and deleteRoom methods * Minor tweaks * Minor tweaks for removing channels and addExistingChannelView * Added missing events and fixed channels list * Minor tweaks for refactored touch component * Added SelectListView and logic for leaving team * Added addTeamMember and removeTeamMember * Minor tweak * Added deleteTeam function * Minor tweak * Minor tweaks * Remove unnecesary changes, update TeamChannelsView, AddExistingChannelView, AddChannelTeamView, createChannel, goRoom and Touchable * Remove unnecesary prop * Add screens to ModalStack, events, autoJoin, update createChannel, addRoomsToTeam and Touchable * Minor tweak * Update loadMessagesForRoom.js * Updated schema, tag component, touch, AddChannelTeamView, AddExistingChannelView, ActionSheet Item * Fix unnecessary changes * Add i18n, update createChannel, AddExistingChannelTeamView, AddChannelTeamView, RightButton and TeamChannelsView * Updated styles, added tag story * Minor tweak * Minor tweaks * Auto-join tweak * Minor tweaks * Minor tweak on search * Minor refactor to ListItem, add SelectListView to ModalStack, update handleLeaveTeam * Minor tweaks * Update SelectListView * Update handleLeaveTeam, remove unnecessary method, add story * Minor tweak * Minor visual tweaks * Update SelectListView.js * Update index.js * Update RoomMembersView * Updated SelectListView, RoomActionsView, leaveTeam method and string translations * Update SelectListVIew * Minor tweak * Update SelectListView * Minor tweak * Minor tweaks * Fix for List.Item subtitles being pushed down by title's flex * Minor tweaks * Update RoomActionsView * Use showConfirmationAlert and showErrorAlert * Remove addTeamMember, update removeTeamMember * Update Alert * Minor tweaks * Minor tweaks * Minor tweak * Update showActionSheet on RoomMembersView * Remove team main from query and move code around * Fetch roles * Update RoomMembersView and SelectListView * Update rocketchat.js * Updated leaveTeam and handleRemoveFromTeam * Fix validation * Remove unnecessary function * Update RoomActionsView * Update en.json * updated deleteTeam function and permissions * Added showConfirmationAlert * Added string translations for teams * Fix permission * Added moveChannelToTeam and convertToTeam functionality * Fix SelectListView RadioButton * Fix moveToTeam * Added searchBar to SelectListVIew * Update RoomView , SelectListVIew and string translation for error * E2E for Teams * Fix tests and cleanup * Minor refactor * Wrong label * Move/convert * Fix convert Co-authored-by: Diego Mello <diegolmello@gmail.com> * [NEW] Add Teams to Directory (#3181) * Added Teams to DirectoryView * Fix icon * Minor tweaks * add tests Co-authored-by: Diego Mello <diegolmello@gmail.com> * [CHORE] Add logEvents for Teams (#3182) * added events for team channels view and add existing channel view * add logevents for room actions view and room info edit view Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Disable jitsi call for teams (#3183) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Show alert `Not allowed` when click on a private channel that you don't be invited before (#3177) * [FIX] Showing only channel you joined * [FIX] How to get the params to mnavigation to other room from TeamChannelList * Show alert Not allowed when trying access private channel that you don't joined Co-authored-by: Diego Mello <diegolmello@gmail.com> * [IMPROVEMENT] Load team's rooms from local database on team leave (#3185) * [IMPROVEMENT] Search team list rooms of user in watermelon db * Minor nitpick Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Option to prevent users from using Invisible status (#3186) * [FIX] Option to prevent users from using Invisible status * Added error to pt-BR Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Item not animating on tap on team's channels view (#3187) * [FIX] Directory sending incorrect room type (#3188) Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] App not showing proper alert on team leave (#3161) * [IMPROVEMENT] refactoring how to leave team * Fix the data passed to leaveTeam * Fixed the lint error in i18n, the path of i18n, merged two ifs in one * Fixed the Saga's flow when try to leave a room * Fixed params passed to leaveRoom * Fix the function name of leaveTeam Co-authored-by: Diego Mello <diegolmello@gmail.com> * Language update from LingoHub 🤖 (#3192) Project Name: Rocket.Chat.ReactNative Project Link: https://translate.lingohub.com/rocketchat/dashboard/rocket-dot-chat-dot-reactnative User: Robot LingoHub Easy language translations with LingoHub 🚀 Co-authored-by: Robot LingoHub <robot@lingohub.com> Co-authored-by: Diego Mello <diegolmello@gmail.com> * [NEW] Support Google OAuth from external browser (#3134) * Deep linking to the app * Handle deep linking * Bump version to 4.17.0 (#3093) * Revert "[IMPROVEMENT] Load team's rooms from local database on team leave (#3185)" (#3194) This reverts commitfa00ef92ef
. * [FIX] Teams tests (#3196) * Make team_main not optional and fix tests * Undo isOptional and fix query * Comment * [FIX] Wrong system messages being passed as parameters to room save (#3197) * [FIX] RoomItem's long press crashing the app if prop is missing (#3199) * Check onLongPress prop * Add Touch stories * [FIX] Crashing on link press (#3204) * [FIX] Don't show Block Button inside Group DM Actions (#3195) * [FIX] Don't show Block Button inside Group DM Actions * Use RocketChat.isGroupChat instead of simple if condition * Add return Co-authored-by: Diego Mello <diegolmello@gmail.com> * [TEST] Fixed E2E tests (#3201) * [FIX] Test E2E i18n * 01-createroom and 02-room fixed * 03-roomactions and 04-discussions * 05-threads and 07-markasunread from room * Test 07-markasunread * Set notifications 'YES' and delete true in 03-forgotpassword and 04-createuser * Fixed the data that 02-team uses and changed the message in 07-markasunread * Added group.alternate to data.docker and commented the test for the fallback language Co-authored-by: Diego Mello <diegolmello@gmail.com> * [TEST] E2E for Jump to Message (#3202) * E2E tests for jump to message * Fix thread tests * Remove unnecessary function and uncomment tests * Minor tweak * Fix tests and minor tweaks * Minor tweaks * Update docker data * Fix docker * Fix duplicated testid * Minor refactor * Fix jump to old message test * Fix load on scroll * Add fab test * Minor addition * stash * almost there * Final changes Co-authored-by: Diego Mello <diegolmello@gmail.com> * [IMPROVE] Subscribe to permissions (#2993) * [CHORE] Subscribe to permissions * add redux action for update * Minor tweaks Co-authored-by: Gerzon Z <gerzonc@icloud.com> Co-authored-by: Gerzon Z <gerzonzcanario@gmail.com> Co-authored-by: Diego Mello <diegolmello@gmail.com> * [IMPROVE] Subscribe to roles (#2992) * [CHORE] Subscribe to Roles * subscribe to roles-change * add subscribe for stream-roles * fixed subscribe roles * Add componentDidUpdate to RoomMembersView and propType * Update componentDidUpdate in RoomMembersView, roles reducer, getRoles method and actionType * Minor tweaks * Remove componentDidUpdate * Fix add role * Fix initialState and remove role * Minor try/catch fix * Fix lint * Fix offline first Co-authored-by: Diego Mello <diegolmello@gmail.com> Co-authored-by: Gerzon Z <gerzonc@icloud.com> Co-authored-by: Gerzon Z <gerzonzcanario@gmail.com> * [IMPROVE] Subscribe to settings (#3222) * Add action and reducer * Add streamNotifyAll listener * Minor tweak * Minor tweak * Fix update not taking in consideration other type columnns Co-authored-by: Diego Mello <diegolmello@gmail.com> * Chore: Add Lint to E2E tests (#3217) * Added eslint plugin dependencie and fixed the eslint.js * E2E Tests folder Assorted * Linted all e2e, just e2e/docker that don't changed * Update 09-jumptomessage.spec.js * Removed async from describe function * Remove outdated detox linter lib * Add overrides to eslintrc Co-authored-by: Gerzon Z <gerzonc@icloud.com> Co-authored-by: Gerzon Z <gerzonzcanario@gmail.com> Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] App not showing proper alert on team delete (#3219) * [FIX] Rule to delete team's channel * Fixed Saga and flow to delete team and team's channel * Adjusted the warning alert as the Figma Co-authored-by: Gerzon Z <gerzonc@icloud.com> Co-authored-by: Diego Mello <diegolmello@gmail.com> * [IMPROVE] Add Jitsi button to Teams (#3223) * [IMPROVE] Add Jitsi button to teams * Added setting to check is Jitsi is Enable for Channel too * Fix typo Co-authored-by: Gerzon Z <gerzonc@icloud.com> Co-authored-by: Gerzon Z <gerzonzcanario@gmail.com> Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Jump to message from in-app notification (#3225) * [FIX] Jump to message by in-app notification * Bug fix to scroll proper the last message * Minor tweak Co-authored-by: Gerzon Z <gerzonc@icloud.com> Co-authored-by: Gerzon Z <gerzonzcanario@gmail.com> Co-authored-by: Diego Mello <diegolmello@gmail.com> * [FIX] Google OAuth triggering cookies logic (#3244) * Remove checkCookiesAndLogout * Add loginEmailPassword to loginOAuthOrSso * Add isFromWebView field * Fix migrations * Minor tweak * Fix OAuth for other services * Fix migrations * Stop persisting loginEmailPassword Co-authored-by: Diego Mello <diegolmello@gmail.com> * Language update from LingoHub 🤖 (#3251) Project Name: Rocket.Chat.ReactNative Project Link: https://translate.lingohub.com/rocketchat/dashboard/rocket-dot-chat-dot-reactnative User: Robot LingoHub Easy language translations with LingoHub 🚀 Co-authored-by: Robot LingoHub <robot@lingohub.com> Co-authored-by: Diego Mello <diegolmello@gmail.com> * [IMPROVE] Message body readability on dark themes (#2981) * [CHORE] Apply auxiliaryText on message body * change bodyText to uxiliaryText * Update tests * Update bodyText color and rollback PR changes * Update Storyshots.test.js.snap * Minor tweak Co-authored-by: Diego Mello <diegolmello@gmail.com> Co-authored-by: Gerzon Z <gerzonc@icloud.com> Co-authored-by: Gerzon Z <gerzonzcanario@gmail.com> * [FIX] Subscribe to settings making app to hang on login (#3254) * [FIX] Poor performance in messages list on Android 11 (#3260) * Bump version to 4.18.0 (#3252) * [FIX] Create team crashing the app (#3248) Co-authored-by: Gerzon Z <gerzonc@icloud.com> Co-authored-by: Gerzon Z <gerzonzcanario@gmail.com> Co-authored-by: Diego Mello <diegolmello@gmail.com> * [IMPROVE] Convert Team to Channel (#3249) * [IMPROVE] Add convert team to a channel * Action to SelectListView and new words to i18n * Implemented the post and it's working with selected channels or not * Fixed the Convert Team Warning at english i18n and changed the function name * E2E test completed in sequence the convert/move teams * [IMPROVE] Add convert team to a channel * Action to SelectListView and new words to i18n * Implemented the post and it's working with selected channels or not * Fixed the Convert Team Warning at english i18n and changed the function name * rebase develop into this branch * [IMPROVE] Add convert team to a channel * Action to SelectListView and new words to i18n * Implemented the post and it's working with selected channels or not * Fixed the Convert Team Warning at english i18n and changed the function name * rebase develop into this branch Co-authored-by: Diego Mello <diegolmello@gmail.com> * [IMPROVE] Set black as default dark theme (#3270) * Update default darkLevel * Minor tweak * [IMPROVE] Make `system default` the default browser (#3265) * [FIX] use systemdefault: as the default browser, not inApp * Fix Co-authored-by: Diego Mello <diegolmello@gmail.com> * Language update from LingoHub 🤖 (#3269) Project Name: Rocket.Chat.ReactNative Project Link: https://translate.lingohub.com/rocketchat/dashboard/rocket-dot-chat-dot-reactnative User: Robot LingoHub Easy language translations with LingoHub 🚀 Co-authored-by: Robot LingoHub <robot@lingohub.com> Co-authored-by: Diego Mello <diegolmello@gmail.com> * [IMPROVE] Remove difference between public/private on "Group by type" (#3271) * Merge channels and private groups * Remove i18n * Regression: Settings pagination not working (#3277) * Regression: Markdown handlePress not working properly (#3278) Co-authored-by: Diego Mello <diegolmello@gmail.com> Co-authored-by: Alexandru Naiman <alex.naiman.4@gmail.com> Co-authored-by: Djorkaeff Alexandre <djorkaeff.unb@gmail.com> Co-authored-by: Vincenzo Esposito <aenon.esposito@gmail.com> Co-authored-by: Dani <assgex@gmail.com> Co-authored-by: David-Tsui <st880221@gmail.com> Co-authored-by: Luis <ljcp28ljcp@gmail.com> Co-authored-by: phriedrich <info@phriedrich.de> Co-authored-by: zaphod534 <32894570+zaphod534@users.noreply.github.com> Co-authored-by: ankar84 <ankar84@gmail.com> Co-authored-by: Карлан Антон Андреевич <KarlanAA@global.bcs> Co-authored-by: Saket Mahajan <saketmahajan99@gmail.com> Co-authored-by: Guilherme Gazzo <guilhermegazzo@gmail.com> Co-authored-by: Prateek Jain <44807945+Prateek93a@users.noreply.github.com> Co-authored-by: Lucas Siqueira <lucassiqzro@gmail.com> Co-authored-by: Calebe Rios <calebersmendes@gmail.com> Co-authored-by: Pitstopper <18574776+Pitstopper@users.noreply.github.com> Co-authored-by: Guilherme Siqueira <guilhersiqueira@gmail.com> Co-authored-by: Prateek Jain <prateek93a@gmail.com> Co-authored-by: devyaniChoubey <52153085+devyaniChoubey@users.noreply.github.com> Co-authored-by: Bernard Seow <ssbing99@gmail.com> Co-authored-by: Hiroki Ishiura <ishiura@ja2.so-net.ne.jp> Co-authored-by: Exordian <jakob.englisch@gmail.com> Co-authored-by: Daanchaam <daanhendriks97@gmail.com> Co-authored-by: Youssef Muhamad <emaildeyoussefmuhamad@gmail.com> Co-authored-by: Iván Álvarez <ialvarezpereira@gmail.com> Co-authored-by: Sarthak Pranesh <41206172+sarthakpranesh@users.noreply.github.com> Co-authored-by: Michele Pellegrini <pellettiero@users.noreply.github.com> Co-authored-by: Tanmoy Bhowmik <tanmoy.openroot@gmail.com> Co-authored-by: Hibikine Kage <14365761+hibikine@users.noreply.github.com> Co-authored-by: Ezequiel de Oliveira <ezequiel1de1oliveira@gmail.com> Co-authored-by: Neil Agarwal <neil@neilagarwal.me> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Govind Dixit <GOVINDDIXIT93@GMAIL.COM> Co-authored-by: Zhaubassarova Aruzhan <49000079+azhaubassar@users.noreply.github.com> Co-authored-by: Aroo <azhaubassar@gmail.com> Co-authored-by: Sarthak Pranesh <sarthak.pranesh2018@vitstudent.ac.in> Co-authored-by: Siddharth Padhi <padhisiddharth31@gmail.com> Co-authored-by: Bruno Dantas <oliveiradantas96@gmail.com> Co-authored-by: devyaniChoubey <devyanichoubey16@gmail.com> Co-authored-by: Dan Caseley <dan@caseley.me.uk> Co-authored-by: Heng Sok <sokheng@idatahub.com> Co-authored-by: Snyk bot <snyk-bot@snyk.io> Co-authored-by: Rohit Verma <44283521+refactor-droidyy@users.noreply.github.com> Co-authored-by: Graham Smith <graham@wiseman-designs.com> Co-authored-by: Gabriel Henriques <gabriel.henriques@rocket.chat> Co-authored-by: Júlia Grala <30629556+juliagrala@users.noreply.github.com> Co-authored-by: nixxou <45721836+nixxou@users.noreply.github.com> Co-authored-by: Rishabh Gupta <38923768+imrishabh18@users.noreply.github.com> Co-authored-by: Marco Jakobs <mj@jacotec.de> Co-authored-by: Daniel Maike <danmke@hotmail.com> Co-authored-by: Vitor Leal <vitor_leal2201@hotmail.com> Co-authored-by: Fernando Aguilar <fernando.aguilar@hotmail.com.br> Co-authored-by: Abdullah Alhamoud <10301923+abalhamoud@users.noreply.github.com> Co-authored-by: Dave Koo <dkoo761@gmail.com> Co-authored-by: Fazil Boudjelal <fazildiablou@hotmail.fr> Co-authored-by: Lucas Dousse <Cormoran96@users.noreply.github.com> Co-authored-by: Sumukha Hegde <SUMUKHA214@GMAIL.COM> Co-authored-by: Gerzon Z <gerzonzcanario@gmail.com> Co-authored-by: Gerzon Z <gerzonc@icloud.com> Co-authored-by: yash-rajpal <58601732+yash-rajpal@users.noreply.github.com> Co-authored-by: Hakan YILMAZ <mukerrem.yilmaz@hotmail.com> Co-authored-by: Arkadyuti Bandyopadhyay <bandyopadhyayarkadyuti@gmail.com> Co-authored-by: Anant Bhasin <38764067+aKn1ghtOut@users.noreply.github.com> Co-authored-by: Gung Wah <41157464+kresnaputra@users.noreply.github.com> Co-authored-by: Billy Newman <newmanw10@gmail.com> Co-authored-by: Jan Garaj <jan.garaj@gmail.com> Co-authored-by: sadegh <sadeghmohamadnia@yahoo.com> Co-authored-by: Noach Magedman <nmagedman@gmail.com> Co-authored-by: lingohub[bot] <69908207+lingohub[bot]@users.noreply.github.com> Co-authored-by: Robot LingoHub <robot@lingohub.com> Co-authored-by: Reinaldo Neto <47038980+reinaldonetof@users.noreply.github.com>
This commit is contained in:
parent
b4c7870166
commit
0afba7fb96
|
@ -1,6 +1,6 @@
|
|||
__tests__
|
||||
node_modules
|
||||
coverage
|
||||
e2e
|
||||
e2e/docker
|
||||
android
|
||||
ios
|
23
.eslintrc.js
23
.eslintrc.js
|
@ -29,7 +29,8 @@ module.exports = {
|
|||
"commonjs": true,
|
||||
"es6": true,
|
||||
"node": true,
|
||||
"jquery": true
|
||||
"jquery": true,
|
||||
"mocha": true
|
||||
},
|
||||
"rules": {
|
||||
"react/jsx-filename-extension": [1, {
|
||||
|
@ -155,5 +156,23 @@ module.exports = {
|
|||
},
|
||||
"globals": {
|
||||
"__DEV__": true
|
||||
}
|
||||
},
|
||||
overrides: [
|
||||
{
|
||||
files: ['e2e/**'],
|
||||
globals: {
|
||||
by: true,
|
||||
detox: true,
|
||||
device: true,
|
||||
element: true,
|
||||
expect: true,
|
||||
waitFor: true
|
||||
},
|
||||
rules: {
|
||||
'import/no-extraneous-dependencies': 0,
|
||||
'no-await-in-loop': 0,
|
||||
'no-restricted-syntax': 0
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
|
|
@ -11490,7 +11490,7 @@ exports[`Storyshots LoadMore black theme 1`] = `
|
|||
},
|
||||
undefined,
|
||||
Object {
|
||||
"color": "#e8ebed",
|
||||
"color": "#cbced1",
|
||||
},
|
||||
]
|
||||
}
|
||||
|
@ -11593,7 +11593,7 @@ exports[`Storyshots LoadMore black theme 1`] = `
|
|||
},
|
||||
undefined,
|
||||
Object {
|
||||
"color": "#e8ebed",
|
||||
"color": "#cbced1",
|
||||
},
|
||||
]
|
||||
}
|
||||
|
@ -11696,7 +11696,7 @@ exports[`Storyshots LoadMore black theme 1`] = `
|
|||
},
|
||||
undefined,
|
||||
Object {
|
||||
"color": "#e8ebed",
|
||||
"color": "#cbced1",
|
||||
},
|
||||
]
|
||||
}
|
||||
|
@ -11973,7 +11973,7 @@ exports[`Storyshots LoadMore black theme 1`] = `
|
|||
},
|
||||
undefined,
|
||||
Object {
|
||||
"color": "#e8ebed",
|
||||
"color": "#cbced1",
|
||||
},
|
||||
]
|
||||
}
|
||||
|
@ -12076,7 +12076,7 @@ exports[`Storyshots LoadMore black theme 1`] = `
|
|||
},
|
||||
undefined,
|
||||
Object {
|
||||
"color": "#e8ebed",
|
||||
"color": "#cbced1",
|
||||
},
|
||||
]
|
||||
}
|
||||
|
@ -12179,7 +12179,7 @@ exports[`Storyshots LoadMore black theme 1`] = `
|
|||
},
|
||||
undefined,
|
||||
Object {
|
||||
"color": "#e8ebed",
|
||||
"color": "#cbced1",
|
||||
},
|
||||
]
|
||||
}
|
||||
|
@ -12420,7 +12420,7 @@ exports[`Storyshots LoadMore black theme 1`] = `
|
|||
},
|
||||
undefined,
|
||||
Object {
|
||||
"color": "#e8ebed",
|
||||
"color": "#cbced1",
|
||||
},
|
||||
]
|
||||
}
|
||||
|
@ -12692,7 +12692,7 @@ exports[`Storyshots LoadMore dark theme 1`] = `
|
|||
},
|
||||
undefined,
|
||||
Object {
|
||||
"color": "#e8ebed",
|
||||
"color": "#cbced1",
|
||||
},
|
||||
]
|
||||
}
|
||||
|
@ -12795,7 +12795,7 @@ exports[`Storyshots LoadMore dark theme 1`] = `
|
|||
},
|
||||
undefined,
|
||||
Object {
|
||||
"color": "#e8ebed",
|
||||
"color": "#cbced1",
|
||||
},
|
||||
]
|
||||
}
|
||||
|
@ -12898,7 +12898,7 @@ exports[`Storyshots LoadMore dark theme 1`] = `
|
|||
},
|
||||
undefined,
|
||||
Object {
|
||||
"color": "#e8ebed",
|
||||
"color": "#cbced1",
|
||||
},
|
||||
]
|
||||
}
|
||||
|
@ -13175,7 +13175,7 @@ exports[`Storyshots LoadMore dark theme 1`] = `
|
|||
},
|
||||
undefined,
|
||||
Object {
|
||||
"color": "#e8ebed",
|
||||
"color": "#cbced1",
|
||||
},
|
||||
]
|
||||
}
|
||||
|
@ -13278,7 +13278,7 @@ exports[`Storyshots LoadMore dark theme 1`] = `
|
|||
},
|
||||
undefined,
|
||||
Object {
|
||||
"color": "#e8ebed",
|
||||
"color": "#cbced1",
|
||||
},
|
||||
]
|
||||
}
|
||||
|
@ -13381,7 +13381,7 @@ exports[`Storyshots LoadMore dark theme 1`] = `
|
|||
},
|
||||
undefined,
|
||||
Object {
|
||||
"color": "#e8ebed",
|
||||
"color": "#cbced1",
|
||||
},
|
||||
]
|
||||
}
|
||||
|
@ -13622,7 +13622,7 @@ exports[`Storyshots LoadMore dark theme 1`] = `
|
|||
},
|
||||
undefined,
|
||||
Object {
|
||||
"color": "#e8ebed",
|
||||
"color": "#cbced1",
|
||||
},
|
||||
]
|
||||
}
|
||||
|
@ -67631,7 +67631,7 @@ Array [
|
|||
"textAlign": "left",
|
||||
},
|
||||
Object {
|
||||
"color": "#e8ebed",
|
||||
"color": "#cbced1",
|
||||
},
|
||||
Object {
|
||||
"backgroundColor": "transparent",
|
||||
|
@ -67791,7 +67791,7 @@ Array [
|
|||
"textAlign": "left",
|
||||
},
|
||||
Object {
|
||||
"color": "#e8ebed",
|
||||
"color": "#cbced1",
|
||||
},
|
||||
Object {
|
||||
"backgroundColor": "transparent",
|
||||
|
@ -74309,7 +74309,7 @@ exports[`Storyshots Thread Messages.Item themes 1`] = `
|
|||
"textAlign": "left",
|
||||
},
|
||||
Object {
|
||||
"color": "#e8ebed",
|
||||
"color": "#cbced1",
|
||||
},
|
||||
Object {
|
||||
"flex": 1,
|
||||
|
@ -74661,7 +74661,7 @@ exports[`Storyshots Thread Messages.Item themes 1`] = `
|
|||
"textAlign": "left",
|
||||
},
|
||||
Object {
|
||||
"color": "#e8ebed",
|
||||
"color": "#cbced1",
|
||||
},
|
||||
Object {
|
||||
"flex": 1,
|
||||
|
|
|
@ -144,7 +144,7 @@ android {
|
|||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode VERSIONCODE as Integer
|
||||
versionName "4.17.0"
|
||||
versionName "4.18.0"
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
if (!isFoss) {
|
||||
manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String]
|
||||
|
|
|
@ -66,9 +66,10 @@ export const INVITE_LINKS = createRequestTypes('INVITE_LINKS', [
|
|||
'CLEAR',
|
||||
...defaultTypes
|
||||
]);
|
||||
export const SETTINGS = createRequestTypes('SETTINGS', ['CLEAR', 'ADD']);
|
||||
export const SETTINGS = createRequestTypes('SETTINGS', ['CLEAR', 'ADD', 'UPDATE']);
|
||||
export const APP_STATE = createRequestTypes('APP_STATE', ['FOREGROUND', 'BACKGROUND']);
|
||||
export const ENTERPRISE_MODULES = createRequestTypes('ENTERPRISE_MODULES', ['CLEAR', 'SET']);
|
||||
export const ENCRYPTION = createRequestTypes('ENCRYPTION', ['INIT', 'STOP', 'DECODE_KEY', 'SET', 'SET_BANNER']);
|
||||
|
||||
export const PERMISSIONS = createRequestTypes('PERMISSIONS', ['SET']);
|
||||
export const PERMISSIONS = createRequestTypes('PERMISSIONS', ['SET', 'UPDATE']);
|
||||
export const ROLES = createRequestTypes('ROLES', ['SET', 'UPDATE', 'REMOVE']);
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
import * as types from './actionsTypes';
|
||||
|
||||
export function loginRequest(credentials, logoutOnError) {
|
||||
export function loginRequest(credentials, logoutOnError, isFromWebView) {
|
||||
return {
|
||||
type: types.LOGIN.REQUEST,
|
||||
credentials,
|
||||
logoutOnError
|
||||
logoutOnError,
|
||||
isFromWebView
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -6,3 +6,10 @@ export function setPermissions(permissions) {
|
|||
permissions
|
||||
};
|
||||
}
|
||||
|
||||
export function updatePermission(id, roles) {
|
||||
return {
|
||||
type: types.PERMISSIONS.UPDATE,
|
||||
payload: { id, roles }
|
||||
};
|
||||
}
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
import * as types from './actionsTypes';
|
||||
|
||||
export function setRoles(roles) {
|
||||
return {
|
||||
type: types.ROLES.SET,
|
||||
roles
|
||||
};
|
||||
}
|
||||
export function updateRoles(id, desc) {
|
||||
return {
|
||||
type: types.ROLES.UPDATE,
|
||||
payload: { id, desc }
|
||||
};
|
||||
}
|
||||
export function removeRoles(id) {
|
||||
return {
|
||||
type: types.ROLES.REMOVE,
|
||||
payload: { id }
|
||||
};
|
||||
}
|
|
@ -23,11 +23,12 @@ export function leaveRoom(roomType, room, selected) {
|
|||
};
|
||||
}
|
||||
|
||||
export function deleteRoom(rid, t) {
|
||||
export function deleteRoom(roomType, room, selected) {
|
||||
return {
|
||||
type: types.ROOM.DELETE,
|
||||
rid,
|
||||
t
|
||||
room,
|
||||
roomType,
|
||||
selected
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,13 @@ export function addSettings(settings) {
|
|||
};
|
||||
}
|
||||
|
||||
export function updateSettings(id, value) {
|
||||
return {
|
||||
type: SETTINGS.UPDATE,
|
||||
payload: { id, value }
|
||||
};
|
||||
}
|
||||
|
||||
export function clearSettings() {
|
||||
return {
|
||||
type: SETTINGS.CLEAR
|
||||
|
|
|
@ -74,7 +74,7 @@ export const themes = {
|
|||
auxiliaryBackground: '#07101e',
|
||||
bannerBackground: '#0e1f38',
|
||||
titleText: '#f9f9f9',
|
||||
bodyText: '#e8ebed',
|
||||
bodyText: '#cbced1',
|
||||
backdropColor: '#000000',
|
||||
dangerColor: '#f5455c',
|
||||
successColor: '#2de0a5',
|
||||
|
@ -121,7 +121,7 @@ export const themes = {
|
|||
auxiliaryBackground: '#080808',
|
||||
bannerBackground: '#1f2329',
|
||||
titleText: '#f9f9f9',
|
||||
bodyText: '#e8ebed',
|
||||
bodyText: '#cbced1',
|
||||
backdropColor: '#000000',
|
||||
dangerColor: '#f5455c',
|
||||
successColor: '#2de0a5',
|
||||
|
|
|
@ -196,5 +196,11 @@ export default {
|
|||
},
|
||||
Accounts_AllowInvisibleStatusOption: {
|
||||
type: 'valueAsString'
|
||||
},
|
||||
Jitsi_Enable_Teams: {
|
||||
type: 'valueAsBoolean'
|
||||
},
|
||||
Jitsi_Enable_Channels: {
|
||||
type: 'valuesAsBoolean'
|
||||
}
|
||||
};
|
||||
|
|
|
@ -76,7 +76,7 @@ const NotifierComponent = React.memo(({ notification, isMasterDetail }) => {
|
|||
const { title = name, avatar = name } = notification;
|
||||
|
||||
const onPress = () => {
|
||||
const { prid } = payload;
|
||||
const { prid, _id } = payload;
|
||||
if (!rid) {
|
||||
return;
|
||||
}
|
||||
|
@ -89,7 +89,7 @@ const NotifierComponent = React.memo(({ notification, isMasterDetail }) => {
|
|||
} else {
|
||||
Navigation.navigate('RoomsListView');
|
||||
}
|
||||
goRoom({ item, isMasterDetail });
|
||||
goRoom({ item, isMasterDetail, jumpToMessageId: _id });
|
||||
hideNotification();
|
||||
};
|
||||
|
||||
|
|
|
@ -103,7 +103,7 @@ export default class Loading extends React.PureComponent {
|
|||
transparent
|
||||
onRequestClose={() => {}}
|
||||
>
|
||||
<View style={styles.container}>
|
||||
<View style={styles.container} testID='loading'>
|
||||
<Animated.Image
|
||||
source={require('../static/images/logo.png')}
|
||||
style={[styles.image, {
|
||||
|
|
|
@ -7,15 +7,19 @@ import { themes } from '../../constants/colors';
|
|||
import { LISTENER } from '../Toast';
|
||||
import EventEmitter from '../../utils/events';
|
||||
import I18n from '../../i18n';
|
||||
import openLink from '../../utils/openLink';
|
||||
|
||||
const Link = React.memo(({
|
||||
children, link, theme, onLinkPress
|
||||
}) => {
|
||||
const handlePress = () => {
|
||||
if (!link || !onLinkPress) {
|
||||
if (!link) {
|
||||
return;
|
||||
}
|
||||
onLinkPress(link);
|
||||
if (onLinkPress) {
|
||||
return onLinkPress(link);
|
||||
}
|
||||
openLink(link, theme);
|
||||
};
|
||||
|
||||
const childLength = React.Children.toArray(children).filter(o => o).length;
|
||||
|
|
|
@ -387,7 +387,6 @@
|
|||
"Preferences_saved": "تم حفظ التفضيلات",
|
||||
"Privacy_Policy": "سياسة الخصوصية",
|
||||
"Private_Channel": "قناة خاصة",
|
||||
"Private_Groups": "مجموعات خاصة",
|
||||
"Private": "خاص",
|
||||
"Processing": "جار معالجة...",
|
||||
"Profile_saved_successfully": "تم حفظ الملف الشخصي بنجاح!",
|
||||
|
|
|
@ -400,7 +400,6 @@
|
|||
"Preferences_saved": "Einstellungen gespeichert!",
|
||||
"Privacy_Policy": " Datenschutzbestimmungen",
|
||||
"Private_Channel": "Privater Kanal",
|
||||
"Private_Groups": "Private Gruppen",
|
||||
"Private": "Privat",
|
||||
"Processing": "Bearbeite …",
|
||||
"Profile_saved_successfully": "Profil erfolgreich gespeichert!",
|
||||
|
@ -685,7 +684,7 @@
|
|||
"Following": "verfolgte",
|
||||
"Threads_displaying_all": "zeige alle",
|
||||
"Threads_displaying_following": "zeige gefolgte",
|
||||
"Threads_displaying_unread": "zeige ungelesene",
|
||||
"Threads_displaying_unread": "Zeige ungelesene",
|
||||
"No_threads": "Es gibt keine Threads",
|
||||
"No_threads_following": "Du folgst keinen Threads",
|
||||
"No_threads_unread": "Es gibt keine ungelesenen Threads",
|
||||
|
@ -724,6 +723,7 @@
|
|||
"creating_team": "Team erstellen",
|
||||
"team-name-already-exists": "Ein Team mit diesem Namen existiert bereits",
|
||||
"Add_Channel_to_Team": "Kanal zum Team hinzufügen",
|
||||
"Left_The_Team_Successfully": "Das Team erfolgreich verlassen",
|
||||
"Create_New": "Neu erstellen",
|
||||
"Add_Existing": "Vorhandenes hinzufügen",
|
||||
"Add_Existing_Channel": "Vorhandenen Kanal hinzufügen",
|
||||
|
|
|
@ -400,7 +400,6 @@
|
|||
"Preferences_saved": "Preferences saved!",
|
||||
"Privacy_Policy": " Privacy Policy",
|
||||
"Private_Channel": "Private Channel",
|
||||
"Private_Groups": "Private Groups",
|
||||
"Private": "Private",
|
||||
"Processing": "Processing...",
|
||||
"Profile_saved_successfully": "Profile saved successfully!",
|
||||
|
@ -756,11 +755,18 @@
|
|||
"member-does-not-exist": "Member does not exist",
|
||||
"Convert": "Convert",
|
||||
"Convert_to_Team": "Convert to Team",
|
||||
"Convert_to_Team_Warning": "This can't be undone. Once you convert a channel to a team, you can not turn it back to a channel.",
|
||||
"Convert_to_Team_Warning": "You are converting this Channel to a Team. All Members will be kept.",
|
||||
"Move_to_Team": "Move to Team",
|
||||
"Move_Channel_Paragraph": "Moving a channel inside a team means that this channel will be added in the team’s context, however, all channel’s members, which are not members of the respective team, will still have access to this channel, but will not be added as team’s members. \n\nAll channel’s management will still be made by the owners of this channel.\n\nTeam’s members and even team’s owners, if not a member of this channel, can not have access to the channel’s content. \n\nPlease notice that the Team’s owner will be able remove members from the Channel.",
|
||||
"Move_to_Team_Warning": "After reading the previous intructions about this behavior, do you still want to move this channel to the selected team?",
|
||||
"Load_More": "Load More",
|
||||
"Load_Newer": "Load Newer",
|
||||
"Load_Older": "Load Older"
|
||||
"Load_Older": "Load Older",
|
||||
"Left_The_Room_Successfully": "Left the room successfully",
|
||||
"Deleted_The_Team_Successfully": "Team deleted successfully",
|
||||
"Deleted_The_Room_Successfully": "Room deleted successfully",
|
||||
"Convert_to_Channel": "Convert to Channel",
|
||||
"Converting_Team_To_Channel": "Converting Team to Channel",
|
||||
"Select_Team_Channels_To_Delete": "Select the Team’s Channels you would like to delete, the ones you do not select will be moved to the Workspace. \n\nNotice that public Channels will be public and visible to everyone.",
|
||||
"You_are_converting_the_team": "You are converting this Team to a Channel"
|
||||
}
|
|
@ -280,7 +280,6 @@
|
|||
"Preferences_saved": "¡Preferencias guardadas!",
|
||||
"Privacy_Policy": "Política de privacidad",
|
||||
"Private_Channel": "Canal privado",
|
||||
"Private_Groups": "Grupos privados",
|
||||
"Private": "Privado",
|
||||
"Processing": "Procesando...",
|
||||
"Profile_saved_successfully": "¡Perfil guardado correctamente!",
|
||||
|
|
|
@ -400,7 +400,6 @@
|
|||
"Preferences_saved": "Préférences sauvegardées !",
|
||||
"Privacy_Policy": " Politique de confidentialité",
|
||||
"Private_Channel": "Canal privé",
|
||||
"Private_Groups": "Groupes privés",
|
||||
"Private": "Privé",
|
||||
"Processing": "Traitement...",
|
||||
"Profile_saved_successfully": "Profil enregistré avec succès !",
|
||||
|
@ -724,6 +723,7 @@
|
|||
"creating_team": "création de l'équipe",
|
||||
"team-name-already-exists": "Une équipe portant ce nom existe déjà",
|
||||
"Add_Channel_to_Team": "Ajouter un canal à l'équipe",
|
||||
"Left_The_Team_Successfully": "A quitté l'équipe avec succès",
|
||||
"Create_New": "Créer un nouveau",
|
||||
"Add_Existing": "Ajouter existant",
|
||||
"Add_Existing_Channel": "Ajouter un canal existant",
|
||||
|
@ -755,11 +755,18 @@
|
|||
"member-does-not-exist": "Le membre n'existe pas",
|
||||
"Convert": "Convertir",
|
||||
"Convert_to_Team": "Convertir en équipe",
|
||||
"Convert_to_Team_Warning": "Ceci ne peut pas être annulé. Une fois que vous avez converti un canal en équipe, vous ne pouvez pas le retransformer en canal.",
|
||||
"Convert_to_Team_Warning": "Vous convertissez ce canal en équipe. Tous les membres seront conservés.",
|
||||
"Move_to_Team": "Déplacer vers l'équipe",
|
||||
"Move_Channel_Paragraph": "Le déplacement d'un canal dans une équipe signifie que ce canal sera ajouté dans le contexte d'équipe. Cependant, tous les membres du canal, qui ne sont pas membres de l'équipe respective, auront toujours accès à ce canal, mais ne seront pas ajoutés comme membres de l'équipe.\n\nLa gestion de tout le canal sera toujours assurée par les propriétaires de ce canal.\n\nLes membres de l'équipe et même les propriétaires de l'équipe, s'ils ne sont pas membres de ce canal, ne peuvent pas avoir accès au contenu du canal.\n\nVeuillez noter que le propriétaire de l'équipe pourra supprimer des membres du canal.",
|
||||
"Move_to_Team_Warning": "Après avoir lu les instructions précédentes sur ce comportement, voulez-vous toujours déplacer ce canal vers l'équipe sélectionnée ?",
|
||||
"Load_More": "Charger plus",
|
||||
"Load_Newer": "Charger plus récent",
|
||||
"Load_Older": "Charger plus ancien"
|
||||
"Load_Older": "Charger plus ancien",
|
||||
"Left_The_Room_Successfully": "A quitté le salon avec succès",
|
||||
"Deleted_The_Team_Successfully": "Equipe supprimée avec succès",
|
||||
"Deleted_The_Room_Successfully": "Salon supprimé avec succès",
|
||||
"Convert_to_Channel": "Convertir en canal",
|
||||
"Converting_Team_To_Channel": "Conversion de l’équipe en canal",
|
||||
"Select_Team_Channels_To_Delete": "Sélectionnez les canaux de l'équipe que vous souhaitez supprimer, ceux que vous ne sélectionnez pas, seront déplacés vers l'espace de travail. \n\n\nNotez que les canaux publics seront publics et visibles par tous.",
|
||||
"You_are_converting_the_team": "Vous convertissez cette équipe en canal"
|
||||
}
|
|
@ -392,7 +392,6 @@
|
|||
"Preferences_saved": "Impostazioni salvate!",
|
||||
"Privacy_Policy": " Privacy Policy",
|
||||
"Private_Channel": "Canale privato",
|
||||
"Private_Groups": "Gruppi privati",
|
||||
"Private": "Privato",
|
||||
"Processing": "Elaborazione...",
|
||||
"Profile_saved_successfully": "Profilo salvato correttamente!",
|
||||
|
|
|
@ -296,7 +296,6 @@
|
|||
"Preferences_saved": "設定が保存されました。",
|
||||
"Privacy_Policy": " プライバシーポリシー",
|
||||
"Private_Channel": "プライベートチャンネル",
|
||||
"Private_Groups": "プライベートグループ",
|
||||
"Private": "プライベート",
|
||||
"Processing": "処理中...",
|
||||
"Profile_saved_successfully": "プロフィールが保存されました!",
|
||||
|
|
|
@ -400,7 +400,6 @@
|
|||
"Preferences_saved": "Voorkeuren opgeslagen!",
|
||||
"Privacy_Policy": " Privacybeleid",
|
||||
"Private_Channel": "Privékanaal",
|
||||
"Private_Groups": "Privé groepen",
|
||||
"Private": "Privé",
|
||||
"Processing": "Verwerking...",
|
||||
"Profile_saved_successfully": "Profiel succesvol opgeslagen!",
|
||||
|
@ -724,6 +723,7 @@
|
|||
"creating_team": "team maken",
|
||||
"team-name-already-exists": "Er bestaat al een team met die naam",
|
||||
"Add_Channel_to_Team": "Kanaal toevoegen aan team",
|
||||
"Left_The_Team_Successfully": "Het team met succes verlaten",
|
||||
"Create_New": "Maak nieuw",
|
||||
"Add_Existing": "Voeg bestaande",
|
||||
"Add_Existing_Channel": "Bestaand kanaal toevoegen",
|
||||
|
@ -755,11 +755,18 @@
|
|||
"member-does-not-exist": "Lid bestaat niet",
|
||||
"Convert": "Converteren",
|
||||
"Convert_to_Team": "Converteren naar team",
|
||||
"Convert_to_Team_Warning": "Dit kan niet ongedaan worden gemaakt. Eens je een kanaal naar een team hebt geconverteerd, kun je het niet meer naar een kanaal terugzetten.",
|
||||
"Convert_to_Team_Warning": "Je converteert dit kanaal naar een team. Alle leden blijven behouden.",
|
||||
"Move_to_Team": "Verplaats naar team",
|
||||
"Move_Channel_Paragraph": "Het verplaatsen van een kanaal binnen een team betekent dat dit kanaal wordt toegevoegd in de context van het team. Maar, alle leden van dit kanaal, die geen lid zijn van het respectieve team, zullen nog steeds toegang hebben tot dit kanaal, maar worden niet als teamleden toegevoegd.\n\nHet volledige beheer van dit kanaal wordt nog steeds door de eigenaren van dit kanaal gedaan.\n\nTeamleden en zelfs teameigenaren, wanneer ze geen lid zijn van dit kanaal, hebben geen toegang tot de content van het kanaal.\n\nHou er rekening mee dat de eigenaar van het team de leden uit het kanaal kan verwijderen.",
|
||||
"Move_to_Team_Warning": "Wil je na het lezen van de vorige instructies over dit gedrag, dit kanaal nog steeds naar het geselecteerde team verplaatsen?",
|
||||
"Load_More": "Meer laden",
|
||||
"Load_Newer": "Nieuwer laden",
|
||||
"Load_Older": "Ouder laden"
|
||||
"Load_Older": "Ouder laden",
|
||||
"Left_The_Room_Successfully": "Heeft kamer met succes verlaten",
|
||||
"Deleted_The_Team_Successfully": "Team succesvol verwijderd",
|
||||
"Deleted_The_Room_Successfully": "Kamer succesvol verwijderd",
|
||||
"Convert_to_Channel": "Converteren naar kanaal",
|
||||
"Converting_Team_To_Channel": "Team converteren naar kanaal",
|
||||
"Select_Team_Channels_To_Delete": "Selecteer de teamkanalen die je wilt verwijderen, de kanalen die u niet selecteert, worden naar de werkruimte verplaatst.\n\nMerk op dat openbare kanalen openbaar en voor iedereen zichtbaar zullen zijn.",
|
||||
"You_are_converting_the_team": "Je converteert dit team naar een kanaal"
|
||||
}
|
|
@ -370,7 +370,6 @@
|
|||
"Preferences_saved": "Preferências salvas!",
|
||||
"Privacy_Policy": " Política de Privacidade",
|
||||
"Private_Channel": "Canal Privado",
|
||||
"Private_Groups": "Grupo Privado",
|
||||
"Private": "Privado",
|
||||
"Processing": "Processando...",
|
||||
"Profile_saved_successfully": "Perfil salvo com sucesso!",
|
||||
|
@ -664,6 +663,11 @@
|
|||
"No_team_channels_found": "Nenhum canal encontrado",
|
||||
"Team_not_found": "Time não encontrado",
|
||||
"Private_Team": "Equipe Privada",
|
||||
"Left_The_Team_Successfully": "Saiu do time com sucesso",
|
||||
"Add_Existing_Channel": "Adicionar Canal Existente",
|
||||
"invalid-room": "Sala inválida"
|
||||
"invalid-room": "Sala inválida",
|
||||
"Left_The_Room_Successfully": "Saiu da sala com sucesso",
|
||||
"Deleted_The_Team_Successfully": "Time deletado com sucesso",
|
||||
"Deleted_The_Room_Successfully": "Sala deletada com sucesso",
|
||||
"Convert_to_Channel": "Converter para um Canal"
|
||||
}
|
|
@ -10,19 +10,22 @@
|
|||
"error-could-not-change-email": "Não foi possível alterar o e-mail",
|
||||
"error-could-not-change-name": "Não foi possível alterar o nome",
|
||||
"error-could-not-change-username": "Não foi possível alterar o nome de utilizador",
|
||||
"error-could-not-change-status": "Impossível mudar estado",
|
||||
"error-delete-protected-role": "Não é possível eliminar uma função protegida",
|
||||
"error-department-not-found": "Departamento não encontrado",
|
||||
"error-direct-message-file-upload-not-allowed": "Partilha de ficheiros não permitido em mensagens diretas",
|
||||
"error-duplicate-channel-name": "Um canal com o nome {{channel_name}} existe",
|
||||
"error-duplicate-channel-name": "Existe um canal com o nome {{room_name}}",
|
||||
"error-email-domain-blacklisted": "O domínio de e-mail está na lista negra",
|
||||
"error-email-send-failed": "Erro ao tentar enviar e-mail: {{message}}",
|
||||
"error-save-image": "Erro ao salvar imagem",
|
||||
"error-save-video": "Erro ao salvar vídeo",
|
||||
"error-field-unavailable": "{{field}} já está em uso :(",
|
||||
"error-file-too-large": "Ficheiro demasiado grande",
|
||||
"error-importer-not-defined": "O importador não foi definido correctamente, a classe Import está em falta.",
|
||||
"error-input-is-not-a-valid-field": "{{input}} não é um {{field}} válido",
|
||||
"error-invalid-actionlink": "Link de acção inválido",
|
||||
"error-invalid-arguments": "Argumentos inválidos",
|
||||
"error-invalid-asset": "Ficheiro inválida",
|
||||
"error-invalid-asset": "Ficheiro inválido",
|
||||
"error-invalid-channel": "Canal inválido.",
|
||||
"error-invalid-channel-start-with-chars": "Canal inválido. Começa por @ ou #",
|
||||
"error-invalid-custom-field": "Campo personalizado inválido",
|
||||
|
@ -58,6 +61,7 @@
|
|||
"error-message-editing-blocked": "A edição de mensagens está bloqueada",
|
||||
"error-message-size-exceeded": "O tamanho da mensagem excede Message_MaxAllowedSize",
|
||||
"error-missing-unsubscribe-link": "Você deve fornecer o link para cancelar a subscrição: [unsubscribe].",
|
||||
"error-no-owner-channel": "Você não é dono do canal",
|
||||
"error-no-tokens-for-this-user": "Não há tokens para este utilizador",
|
||||
"error-not-allowed": "Não permitido",
|
||||
"error-not-authorized": "Não autorizado",
|
||||
|
@ -75,33 +79,46 @@
|
|||
"error-user-registration-disabled": "O registo de utilizadores está desactivado",
|
||||
"error-user-registration-secret": "O registo de utilizadores só é permitido por meio de um URL secreto",
|
||||
"error-you-are-last-owner": "Você é o último proprietário. Por favor, defina novo proprietário antes de sair da sala.",
|
||||
"error-status-not-allowed": "O estado invisível está desactivado",
|
||||
"Actions": "Acções",
|
||||
"activity": "actividade",
|
||||
"Activity": "Actividade",
|
||||
"Add_Reaction": "Adicionar Reacção",
|
||||
"Add_Server": "Adicionar Servidor",
|
||||
"Add_users": "Adicionar utilizadores",
|
||||
"Admin_Panel": "Painel de Administração",
|
||||
"Agent": "Agente",
|
||||
"Alert": "Alerta",
|
||||
"alert": "alerta",
|
||||
"alerts": "alertas",
|
||||
"All_users_in_the_channel_can_write_new_messages": "Todos os utilizadores no canal podem escrever novas mensagens",
|
||||
"All_users_in_the_team_can_write_new_messages": "Todos os usuários da equipa podem escrever novas mensagens",
|
||||
"A_meaningful_name_for_the_discussion_room": "Um nome significativo para a sala de discussão",
|
||||
"All": "Todos",
|
||||
"All_Messages": "Todas as Mensagens",
|
||||
"Allow_Reactions": "Permitir Reacções",
|
||||
"Alphabetical": "Alfabética",
|
||||
"and_more": "e mais",
|
||||
"and": "e",
|
||||
"announcement": "anúncio",
|
||||
"Announcement": "Anúncio",
|
||||
"Apply_Your_Certificate": "Aplique o seu Certificado",
|
||||
"ARCHIVE": "ARQUIVAR",
|
||||
"archive": "arquivar",
|
||||
"are_typing": "estão a escrever",
|
||||
"Are_you_sure_question_mark": "Tem a certeza?",
|
||||
"Are_you_sure_you_want_to_leave_the_room": "Tem certeza de que quer sair da sala {{room}}?",
|
||||
"Audio": "Áudio",
|
||||
"Authenticating": "Autenticando",
|
||||
"Automatic": "Automático",
|
||||
"Auto_Translate": "Auto-Tradução",
|
||||
"Avatar_changed_successfully": "Avatar alterado com sucesso!",
|
||||
"Avatar_Url": "URL do Avatar",
|
||||
"Away": "Ausente",
|
||||
"Back": "Voltar",
|
||||
"Black": "Preto",
|
||||
"Block_user": "Bloquear utilizador",
|
||||
"Browser": "Navegador",
|
||||
"Broadcast_channel_Description": "Apenas utilizadores autorizados podem escrever novas mensagens, mas os outros utilizadores poderão responder",
|
||||
"Broadcast_Channel": "Canal de Transmissão",
|
||||
"Busy": "Ocupado",
|
||||
|
@ -111,80 +128,187 @@
|
|||
"Cancel": "Cancelar",
|
||||
"changing_avatar": "a alterar avatar",
|
||||
"creating_channel": "a criar canal",
|
||||
"creating_invite": "a criar convite",
|
||||
"Channel_Name": "Nome do Canal",
|
||||
"Channels": "Canais",
|
||||
"Chats": "Chats",
|
||||
"Call_already_ended": "Chamada já terminada!",
|
||||
"Clear_cookies_alert": "Quer limpar todas as cookies?",
|
||||
"Clear_cookies_desc": "Esta acção irá limpar todos os cookies de login, permitindo que você faça login em outras contas.",
|
||||
"Clear_cookies_yes": "Sim, limpar cookies",
|
||||
"Clear_cookies_no": "Não, guardar cookies",
|
||||
"Click_to_join": "Clique para Entrar!",
|
||||
"Close": "Fechar",
|
||||
"Close_emoji_selector": "Fechar selector de emoticons",
|
||||
"Closing_chat": "A fechar o chat",
|
||||
"Change_language_loading": "Mudança de idioma.",
|
||||
"Chat_closed_by_agent": "Chat fechado por agente",
|
||||
"Choose": "Escolher",
|
||||
"Choose_from_library": "Escolher da biblioteca",
|
||||
"Choose_file": "Escolher arquivo",
|
||||
"Choose_where_you_want_links_be_opened": "Escolha onde você quer que os links sejam abertos",
|
||||
"Code": "Código",
|
||||
"Code_or_password_invalid": "Código ou senha inválidos",
|
||||
"Collaborative": "Colaborativa",
|
||||
"Confirm": "Confirmar",
|
||||
"Connect": "Ligar",
|
||||
"Connected": "Ligado",
|
||||
"connecting_server": "conexão ao servidor",
|
||||
"Connecting": "A ligar...",
|
||||
"Contact_us": "Contacte-nos",
|
||||
"Contact_your_server_admin": "Contacte o administrador do seu servidor.",
|
||||
"Continue_with": "Continuar com",
|
||||
"Copied_to_clipboard": "Copiado para a área de transferência!",
|
||||
"Copy": "Copiar",
|
||||
"Conversation": "Conversa",
|
||||
"Permalink": "Link permanente",
|
||||
"Certificate_password": "Senha do Certificado",
|
||||
"Clear_cache": "Limpar a cache do servidor local",
|
||||
"Clear_cache_loading": "A limpar a cache.",
|
||||
"Whats_the_password_for_your_certificate": "Qual é a senha para o seu certificado?",
|
||||
"Create_account": "Criar uma conta",
|
||||
"Create_Channel": "Criar Canal",
|
||||
"Create_Direct_Messages": "Criar Mensagens Diretas",
|
||||
"Create_Discussion": "Criar Discussão",
|
||||
"Created_snippet": "criado um extracto",
|
||||
"Create_a_new_workspace": "Criar um novo espaço de trabalho",
|
||||
"Create": "Criar",
|
||||
"Custom_Status": "Status Personalizado",
|
||||
"Dark": "Escuro",
|
||||
"Dark_level": "Nível Escuro",
|
||||
"Default": "Predefinição",
|
||||
"Default_browser": "Navegador predefinido",
|
||||
"Delete_Room_Warning": "Apagar uma sala irá remover todas as mensagens contidas nela. Isto não pode ser desfeito.",
|
||||
"Department": "Departamento",
|
||||
"delete": "apagar",
|
||||
"Delete": "Apagar",
|
||||
"DELETE": "APAGAR",
|
||||
"move": "mover",
|
||||
"deleting_room": "apagando sala",
|
||||
"description": "descrição",
|
||||
"Description": "Descrição",
|
||||
"Desktop_Options": "Opções da área de trabalho",
|
||||
"Desktop_Notifications": "Notificações da área de trabalho",
|
||||
"Desktop_Alert_info": "Estas notificações são entregues na área de trabalho",
|
||||
"Directory": "Directório",
|
||||
"Direct_Messages": "Mensagens Directas",
|
||||
"Disable_notifications": "Desactivar notificações",
|
||||
"Discussions": "Discussões",
|
||||
"Discussion_Desc": "Ajude a manter uma visão geral sobre o que está acontecendo! Ao criar uma discussão, é criado um sub-canal do que você selecionou e ambos estão ligados.",
|
||||
"Discussion_name": "Nome da discussão",
|
||||
"Done": "Feito",
|
||||
"Dont_Have_An_Account": "Não tem uma conta?",
|
||||
"Do_you_have_an_account": "Você tem uma conta?",
|
||||
"Do_you_have_a_certificate": "Você tem um certificado?",
|
||||
"Do_you_really_want_to_key_this_room_question_mark": "Você quer mesmo {{key}} esta sala?",
|
||||
"E2E_Encryption": "Encriptação E2E",
|
||||
"E2E_How_It_Works_info1": "Agora você pode criar grupos privados criptografados e mensagens diretas. Você também pode alterar grupos privados existentes ou DMs para criptografados.",
|
||||
"E2E_How_It_Works_info2": "Isto é *criptografia ponto a ponto* portanto a chave para codificar/descodificar as suas mensagens não será salva no servidor. Por essa razão *você precisa armazenar esta senha em algum lugar seguro* que você posa aceder mais tarde, se precisar.",
|
||||
"E2E_How_It_Works_info3": "Se você prosseguir, uma senha E2E será gerada automaticamente.",
|
||||
"E2E_How_It_Works_info4": "Você também pode configurar uma nova senha para sua chave de criptografia a qualquer momento a partir de qualquer navegador que você tenha inserido a senha existente do E2E.",
|
||||
"edit": "editar",
|
||||
"edited": "editado",
|
||||
"Edit": "Editar",
|
||||
"Edit_Status": "Editar Status",
|
||||
"Edit_Invite": "Editar Convite",
|
||||
"End_to_end_encrypted_room": "Sala encriptada de ponta a ponta",
|
||||
"end_to_end_encryption": "encriptação de ponta a ponta",
|
||||
"Email_Notification_Mode_All": "Cada Menção/DM",
|
||||
"Email_Notification_Mode_Disabled": "Desactivado",
|
||||
"Email_or_password_field_is_empty": "O campo de e-mail ou palavra-passe está vazio",
|
||||
"Email": "E-mail",
|
||||
"email": "e-mail",
|
||||
"Empty_title": "Título vazio",
|
||||
"Enable_Auto_Translate": "Activar Auto-Tradução",
|
||||
"Enable_notifications": "Activar notificações",
|
||||
"Encrypted": "Encriptado",
|
||||
"Encrypted_message": "Mensagem encriptada",
|
||||
"Enter_Your_E2E_Password": "Digite a sua senha E2E",
|
||||
"Enter_Your_Encryption_Password_desc1": "Isto permitir-lhe-á aceder aos seus grupos privados encriptados e às suas mensagens directas.",
|
||||
"Enter_Your_Encryption_Password_desc2": "Você precisa digitar a senha para codificar/descodificar mensagens em cada lugar que você usar o chat.",
|
||||
"Encryption_error_title": "A sua senha de encriptação parece errada",
|
||||
"Encryption_error_desc": "Não foi possível descodificar a sua chave de encriptação para ser importada.",
|
||||
"Everyone_can_access_this_channel": "Todos podem aceder a este canal",
|
||||
"Everyone_can_access_this_team": "Todos podem aceder a esta equipa",
|
||||
"Error_uploading": "Erro ao fazer o envio",
|
||||
"Expiration_Days": "Validade (Dias)",
|
||||
"Favorite": "Favorito",
|
||||
"Favorites": "Favoritos",
|
||||
"Files": "Ficheiros",
|
||||
"File_description": "Descrição do ficheiro",
|
||||
"File_name": "Nome do ficheiro",
|
||||
"Finish_recording": "Terminar a gravação",
|
||||
"Following_thread": "Seguir discussão",
|
||||
"For_your_security_you_must_enter_your_current_password_to_continue": "Para sua segurança, você deve escrever a sua palavra-passe actual para continuar",
|
||||
"Forgot_password_If_this_email_is_registered": "Se este e-mail estiver registado, enviaremos instruções sobre como repor a sua palavra-passe. Se você não receber um e-mail em breve, volte e tente novamente.",
|
||||
"Forgot_password": "Esquecer palavra-passe",
|
||||
"Forgot_Password": "Esquecer Palavra-passe",
|
||||
"Forward": "Reencaminhar",
|
||||
"Forward_Chat": "Reencaminhar Chat",
|
||||
"Forward_to_department": "Reencaminhar para o departamento",
|
||||
"Forward_to_user": "Reencaminhar para o utilizador",
|
||||
"Full_table": "Clique para ver a tabela completa",
|
||||
"Generate_New_Link": "Gerar Novo Link",
|
||||
"Group_by_favorites": "Agrupar por favoritos",
|
||||
"Group_by_type": "Agrupar por tipo",
|
||||
"Hide": "Esconder",
|
||||
"Has_joined_the_channel": "entrou no canal",
|
||||
"Has_joined_the_conversation": "entrou na conversa",
|
||||
"Has_left_the_channel": "saiu do canal",
|
||||
"Hide_System_Messages": "Esconder mensagens do sistema",
|
||||
"Hide_type_messages": "Esconder mensagens \"{{type}}\"",
|
||||
"How_It_Works": "Como Funciona",
|
||||
"Message_HideType_uj": "Utilizador entrou",
|
||||
"Message_HideType_ul": "Utilizador saiu",
|
||||
"Message_HideType_ru": "Utilizador removido",
|
||||
"Message_HideType_au": "Utilizador adicionado",
|
||||
"Message_HideType_mute_unmute": "Utilizador silenciado/de-silenciado",
|
||||
"Message_HideType_r": "Nome da sala alterado",
|
||||
"Message_HideType_ut": "Utilizador entrou na conversação",
|
||||
"Message_HideType_wm": "Bem-vindo",
|
||||
"Message_HideType_rm": "Mensagem Removida",
|
||||
"Message_HideType_subscription_role_added": "Foi definido o estatuto",
|
||||
"Message_HideType_subscription_role_removed": "Definição de estatuto removida",
|
||||
"Message_HideType_room_archived": "Sala arquivada",
|
||||
"Message_HideType_room_unarchived": "Sala desarquivada",
|
||||
"I_Saved_My_E2E_Password": "Guardei a minha senha E2E",
|
||||
"IP": "IP",
|
||||
"In_app": "Na aplicação",
|
||||
"In_App_And_Desktop": "Na aplicação e área de trabalho",
|
||||
"In_App_and_Desktop_Alert_info": "Exibe um banner no topo da tela quando a aplicação está aberto, e exibe uma notificação na área de trabalho",
|
||||
"Invisible": "Invisível",
|
||||
"Invite": "Convidar",
|
||||
"is_a_valid_RocketChat_instance": "é uma instância válida do Rocket.Chat",
|
||||
"is_not_a_valid_RocketChat_instance": "is not a valid Rocket.Chat instance",
|
||||
"is_typing": "está a escrever",
|
||||
"Invalid_or_expired_invite_token": "Token de convite invalido ou expirado",
|
||||
"Invalid_server_version": "O servidor ao qual esta tentando ligar-se, utiliza uma versão que não é suporta pela aplicação: {{currentVersion}}.\n\nA versão mínima requerida é {{minVersion}}",
|
||||
"Invite_Link": "Link de convite",
|
||||
"Invite_users": "Convidar utilizadores",
|
||||
"Join": "Entrar",
|
||||
"Join_Code": "Código de entrada",
|
||||
"Insert_Join_Code": "Insira o código de entrada",
|
||||
"Join_our_open_workspace": "Junte-se ao nosso espaço de trabalho aberto",
|
||||
"Join_your_workspace": "Junte-se ao seu espaço de trabalho",
|
||||
"Just_invited_people_can_access_this_channel": "Apenas utilizadores convidados podem aceder a este canal",
|
||||
"Just_invited_people_can_access_this_team": "Apenas pessoas convidadas podem aceder a esta equipa",
|
||||
"Language": "Idioma",
|
||||
"last_message": "última mensagem",
|
||||
"Leave_channel": "Sair do canal",
|
||||
"leaving_room": "a sair da sala",
|
||||
"Leave": "Sair",
|
||||
"leave": "sair",
|
||||
"Legal": "Legal",
|
||||
"Light": "Luz",
|
||||
"License": "Licença",
|
||||
"Livechat": "Livechat",
|
||||
"Login": "Entrar",
|
||||
"Login_error": "As suas credenciais foram rejeitadas! Por favor, tente novamente.",
|
||||
"Login_with": "Entrar com",
|
||||
"Logging_out": "A terminar a sessão.",
|
||||
"Logout": "Sair",
|
||||
"Max_number_of_uses": "Número máximo de utilizações",
|
||||
"Max_number_of_users_allowed_is_number": "O número máximo de utilizadores permitido é {{maxUsers}}",
|
||||
"members": "membros",
|
||||
"Members": "Membros",
|
||||
"Mentioned_Messages": "Mensagens Mencionadas",
|
||||
|
@ -194,7 +318,13 @@
|
|||
"Message_actions": "Acções de mensagem",
|
||||
"Message_pinned": "Mensagem afixada",
|
||||
"Message_removed": "Mensagem removida",
|
||||
"Message_starred": "Mensagem estrelada",
|
||||
"Message_unstarred": "Mensagem não estrelada",
|
||||
"message": "mensagem",
|
||||
"messages": "mensagens",
|
||||
"Message": "Mensagem",
|
||||
"Messages": "Mensagens",
|
||||
"Message_Reported": "Mensagem reportada",
|
||||
"Microphone_Permission_Message": "O Rocket.Chat necessita de acesso ao seu microfone para que você possa enviar mensagens de áudio.",
|
||||
"Microphone_Permission": "Permissão de Microfone",
|
||||
"Mute": "Silenciar",
|
||||
|
@ -202,52 +332,91 @@
|
|||
"My_servers": "Meus servidores",
|
||||
"N_people_reacted": "{{n}} pessoas reagiram",
|
||||
"N_users": "{{n}} utilizadores",
|
||||
"N_channels": "{{n}} canais",
|
||||
"name": "nome",
|
||||
"Name": "Nome",
|
||||
"Navigation_history": "Histórico de navegação",
|
||||
"Never": "Nunca",
|
||||
"New_Message": "Nova Mensagem",
|
||||
"New_Password": "Nova Palavra-passe",
|
||||
"New_Server": "Novo Servidor",
|
||||
"Next": "Próximo",
|
||||
"No_files": "Nenhum ficheiro",
|
||||
"No_limit": "Sem limite",
|
||||
"No_mentioned_messages": "Nenhuma mensagem mencionada",
|
||||
"No_pinned_messages": "Nenhuma mensagem afixada",
|
||||
"No_results_found": "Nenhum resultado encontrado",
|
||||
"No_starred_messages": "Nenhuma mensagem marcada com estrela",
|
||||
"No_thread_messages": "Sem mensagens de discussão ",
|
||||
"No_label_provided": "{{label}} não fornecida/o",
|
||||
"No_Message": "Nenhuma mensagem",
|
||||
"No_messages_yet": "Ainda sem mensagens",
|
||||
"No_Reactions": "Nenhuma reação",
|
||||
"No_Read_Receipts": "Sem recibos de leitura",
|
||||
"Not_logged": "Não ligado",
|
||||
"Not_RC_Server": "Isto não é um servidor Rocket.Chat.\n{{contact}}",
|
||||
"Nothing": "Nada",
|
||||
"Nothing_to_save": "Nada para guardar!",
|
||||
"Notify_active_in_this_room": "Notifica utilizadores activos nesta sala",
|
||||
"Notify_all_in_this_room": "Notifica todos os utilizadores nesta sala",
|
||||
"Notifications": "Notificações",
|
||||
"Notification_Duration": "Duração da Notificação",
|
||||
"Notification_Preferences": "Preferências de Notificação",
|
||||
"No_available_agents_to_transfer": "Não há agentes disponíveis para transferir",
|
||||
"Offline": "Desligado",
|
||||
"Oops": "Oops!",
|
||||
"Omnichannel": "Omnichannel",
|
||||
"Open_Livechats": "Chats em andamento",
|
||||
"Omnichannel_enable_alert": "Você não está disponível no Omnichannel. Você gostaria de estar disponível?",
|
||||
"Onboarding_description": "Um espaço de trabalho é o espaço da sua equipa ou organização para colaborar. Peça ao administrador do espaço de trabalho um endereço para se juntar ou criar um para a sua equipa.",
|
||||
"Onboarding_join_workspace": "Junte-se a um espaço de trabalho",
|
||||
"Onboarding_subtitle": "Além da Colaboração da Equipe",
|
||||
"Onboarding_title": "Bem vindo(a) ao Rocket.Chat",
|
||||
"Onboarding_join_open_description": "Junte-se ao nosso espaço de trabalho aberto para conversar com a equipa e comunidade Rocket.Chat.",
|
||||
"Onboarding_agree_terms": "Ao continuar, você concorda com Rocket.Chat",
|
||||
"Onboarding_less_options": "Menos opções",
|
||||
"Onboarding_more_options": "Mais opções",
|
||||
"Online": "Ligado",
|
||||
"Only_authorized_users_can_write_new_messages": "Apenas utilizadores autorizados podem escrever novas mensagens",
|
||||
"Open_emoji_selector": "Abra o selector de emoticons",
|
||||
"Open_Source_Communication": "Comunicação Open Source",
|
||||
"Open_your_authentication_app_and_enter_the_code": "Abra o seu aplicativo de autenticação e digite o código.",
|
||||
"OR": "OU",
|
||||
"OS": "OS",
|
||||
"Overwrites_the_server_configuration_and_use_room_config": "Sobrescreve a configuração do servidor e a configuração da sala de uso",
|
||||
"Password": "Palavra-passe",
|
||||
"Parent_channel_or_group": "Canal de origem ou grupo",
|
||||
"Permalink_copied_to_clipboard": "Link permanente copiado para a área de transferência!",
|
||||
"Phone": "Telefone",
|
||||
"Pin": "Afixar",
|
||||
"Pinned_Messages": "Mensagens Afixadas",
|
||||
"pinned": "afixada",
|
||||
"Pinned": "Afixada",
|
||||
"Please_add_a_comment": "Por favor, acrescente um comentário",
|
||||
"Please_enter_your_password": "Por favor, introduza a sua palavra-passe",
|
||||
"Please_wait": "Por favor, espere.",
|
||||
"Preferences": "Preferências",
|
||||
"Preferences_saved": "Preferências guardadas!",
|
||||
"Privacy_Policy": " Política de Privacidade",
|
||||
"Private_Channel": "Canal Privado",
|
||||
"Private_Groups": "Grupos Privados",
|
||||
"Private": "Privado",
|
||||
"Processing": "A processar...",
|
||||
"Profile_saved_successfully": "Perfil actualizado com sucesso!",
|
||||
"Profile": "Perfil",
|
||||
"Public_Channel": "Canal Público",
|
||||
"Public": "Público",
|
||||
"Push_Notifications": "Notificações Push",
|
||||
"Push_Notifications_Alert_Info": "Estas notificações são entregues quando o aplicativo não está aberto",
|
||||
"Quote": "Citar",
|
||||
"Reactions_are_disabled": "Reacções desactivadas",
|
||||
"Reactions_are_enabled": "Reacções activadas",
|
||||
"Reactions": "Reacções",
|
||||
"Read": "Ler",
|
||||
"Read_External_Permission_Message": "Rocket.Chat precisa acessar fotos, média e arquivos em seu dispositivo",
|
||||
"Read_External_Permission": "Permissão de leitura da média",
|
||||
"Read_Only_Channel": "Canal só de leitura",
|
||||
"Read_Only": "Só de Leitura",
|
||||
"Read_Receipt": "Recibos de leitura",
|
||||
"Register": "Registar",
|
||||
"Repeat_Password": "Repita a palavra-passe",
|
||||
"Reply": "Responder",
|
||||
|
|
|
@ -400,7 +400,6 @@
|
|||
"Preferences_saved": "Настройки сохранены!",
|
||||
"Privacy_Policy": " Политика конфиденциальности",
|
||||
"Private_Channel": "Приватный канал",
|
||||
"Private_Groups": "Приватные группы",
|
||||
"Private": "Приватный",
|
||||
"Processing": "Обработка...",
|
||||
"Profile_saved_successfully": "Профиль успешно сохранен!",
|
||||
|
@ -724,6 +723,7 @@
|
|||
"creating_team": "создание Команды",
|
||||
"team-name-already-exists": "Команда с таким названием уже существует",
|
||||
"Add_Channel_to_Team": "Добавить канал в Команду",
|
||||
"Left_The_Team_Successfully": "Успешно покинул команду",
|
||||
"Create_New": "Создать",
|
||||
"Add_Existing": "Добавить существующее",
|
||||
"Add_Existing_Channel": "Добавить существующий канал",
|
||||
|
|
|
@ -393,7 +393,6 @@
|
|||
"Preferences_saved": "Tercihler kaydedildi!",
|
||||
"Privacy_Policy": " Privacy Policy",
|
||||
"Private_Channel": "Özel Kanal",
|
||||
"Private_Groups": "Özel Gruplar",
|
||||
"Private": "Özel",
|
||||
"Processing": "İşleniyor...",
|
||||
"Profile_saved_successfully": "Profil başarıyla kaydedildi!",
|
||||
|
|
|
@ -390,7 +390,6 @@
|
|||
"Preferences_saved": "偏好已保存!",
|
||||
"Privacy_Policy": "隐私政策",
|
||||
"Private_Channel": "私人频道",
|
||||
"Private_Groups": "私人群组",
|
||||
"Private": "私有的",
|
||||
"Processing": "处理中",
|
||||
"Profile_saved_successfully": "个人资料保存成功!",
|
||||
|
|
|
@ -391,7 +391,6 @@
|
|||
"Preferences_saved": "偏好設定已被儲存!",
|
||||
"Privacy_Policy": "隱私政策",
|
||||
"Private_Channel": "私人頻道",
|
||||
"Private_Groups": "私人群組",
|
||||
"Private": "私有的",
|
||||
"Processing": "處理中",
|
||||
"Profile_saved_successfully": "個人資料儲存成功!",
|
||||
|
|
|
@ -75,7 +75,7 @@ export default class Root extends React.Component {
|
|||
theme: defaultTheme(),
|
||||
themePreferences: {
|
||||
currentTheme: supportSystemTheme() ? 'automatic' : 'light',
|
||||
darkLevel: 'dark'
|
||||
darkLevel: 'black'
|
||||
},
|
||||
width,
|
||||
height,
|
||||
|
|
|
@ -22,7 +22,7 @@ export default class User extends Model {
|
|||
|
||||
@field('avatar_etag') avatarETag;
|
||||
|
||||
@field('login_email_password') loginEmailPassword;
|
||||
|
||||
@field('show_message_in_main_thread') showMessageInMainThread;
|
||||
|
||||
@field('is_from_webview') isFromWebView;
|
||||
}
|
||||
|
|
|
@ -95,6 +95,16 @@ export default schemaMigrations({
|
|||
]
|
||||
})
|
||||
]
|
||||
}, {
|
||||
toVersion: 11,
|
||||
steps: [
|
||||
addColumns({
|
||||
table: 'users',
|
||||
columns: [
|
||||
{ name: 'is_from_webview', type: 'boolean', isOptional: true }
|
||||
]
|
||||
})
|
||||
]
|
||||
}
|
||||
]
|
||||
});
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { appSchema, tableSchema } from '@nozbe/watermelondb';
|
||||
|
||||
export default appSchema({
|
||||
version: 10,
|
||||
version: 11,
|
||||
tables: [
|
||||
tableSchema({
|
||||
name: 'users',
|
||||
|
@ -15,7 +15,8 @@ export default appSchema({
|
|||
{ name: 'roles', type: 'string', isOptional: true },
|
||||
{ name: 'login_email_password', type: 'boolean', isOptional: true },
|
||||
{ name: 'show_message_in_main_thread', type: 'boolean', isOptional: true },
|
||||
{ name: 'avatar_etag', type: 'string', isOptional: true }
|
||||
{ name: 'avatar_etag', type: 'string', isOptional: true },
|
||||
{ name: 'is_from_webview', type: 'boolean', isOptional: true }
|
||||
]
|
||||
}),
|
||||
tableSchema({
|
||||
|
|
|
@ -6,6 +6,7 @@ import { compareServerVersion, methods } from '../utils';
|
|||
import database from '../database';
|
||||
import log from '../../utils/log';
|
||||
import reduxStore from '../createStore';
|
||||
import RocketChat from '../rocketchat';
|
||||
import protectedFunction from './helpers/protectedFunction';
|
||||
import { setPermissions as setPermissionsAction } from '../../actions/permissions';
|
||||
|
||||
|
@ -46,7 +47,8 @@ const PERMISSIONS = [
|
|||
'view-statistics',
|
||||
'view-user-administration',
|
||||
'view-all-teams',
|
||||
'view-all-team-channels'
|
||||
'view-all-team-channels',
|
||||
'convert-team'
|
||||
];
|
||||
|
||||
export async function setPermissions() {
|
||||
|
@ -128,7 +130,7 @@ export function getPermissions() {
|
|||
const db = database.active;
|
||||
const permissionsCollection = db.get('permissions');
|
||||
const allRecords = await permissionsCollection.query().fetch();
|
||||
|
||||
RocketChat.subscribe('stream-notify-logged', 'permissions-changed');
|
||||
// if server version is lower than 0.73.0, fetches from old api
|
||||
if (compareServerVersion(serverVersion, '0.73.0', methods.lowerThan)) {
|
||||
// RC 0.66.0
|
||||
|
|
|
@ -2,9 +2,66 @@ import { sanitizedRaw } from '@nozbe/watermelondb/RawRecord';
|
|||
|
||||
import database from '../database';
|
||||
import log from '../../utils/log';
|
||||
import reduxStore from '../createStore';
|
||||
import protectedFunction from './helpers/protectedFunction';
|
||||
import {
|
||||
removeRoles, setRoles as setRolesAction, updateRoles
|
||||
} from '../../actions/roles';
|
||||
|
||||
export default function() {
|
||||
export async function setRoles() {
|
||||
const db = database.active;
|
||||
const rolesCollection = db.collections.get('roles');
|
||||
const allRoles = await rolesCollection.query().fetch();
|
||||
const parsed = allRoles.reduce((acc, item) => ({ ...acc, [item.id]: item.description || item.id }), {});
|
||||
reduxStore.dispatch(setRolesAction(parsed));
|
||||
}
|
||||
|
||||
export async function onRolesChanged(ddpMessage) {
|
||||
const { type, _id, description } = ddpMessage.fields.args[0];
|
||||
if (/changed/.test(type)) {
|
||||
const db = database.active;
|
||||
const rolesCollection = db.get('roles');
|
||||
try {
|
||||
const rolesRecord = await rolesCollection.find(_id);
|
||||
try {
|
||||
await db.action(async() => {
|
||||
await rolesRecord.update((u) => {
|
||||
u.description = description;
|
||||
});
|
||||
});
|
||||
} catch (e) {
|
||||
log(e);
|
||||
}
|
||||
reduxStore.dispatch(updateRoles(_id, description));
|
||||
} catch (err) {
|
||||
try {
|
||||
await db.action(async() => {
|
||||
await rolesCollection.create((post) => {
|
||||
post._raw = sanitizedRaw({ id: _id, description }, rolesCollection.schema);
|
||||
});
|
||||
});
|
||||
} catch (e) {
|
||||
log(e);
|
||||
}
|
||||
reduxStore.dispatch(updateRoles(_id, description || _id));
|
||||
}
|
||||
}
|
||||
if (/removed/.test(type)) {
|
||||
const db = database.active;
|
||||
const rolesCollection = db.get('roles');
|
||||
try {
|
||||
const rolesRecord = await rolesCollection.find(_id);
|
||||
await db.action(async() => {
|
||||
await rolesRecord.destroyPermanently();
|
||||
});
|
||||
reduxStore.dispatch(removeRoles(_id));
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function getRoles() {
|
||||
const db = database.active;
|
||||
return new Promise(async(resolve) => {
|
||||
try {
|
||||
|
@ -50,6 +107,7 @@ export default function() {
|
|||
} catch (e) {
|
||||
log(e);
|
||||
}
|
||||
setRoles();
|
||||
return allRecords.length;
|
||||
});
|
||||
return resolve();
|
||||
|
|
|
@ -131,12 +131,17 @@ export async function setSettings() {
|
|||
reduxStore.dispatch(addSettings(RocketChat.parseSettings(parsed.slice(0, parsed.length))));
|
||||
}
|
||||
|
||||
export function subscribeSettings() {
|
||||
return RocketChat.subscribe('stream-notify-all', 'public-settings-changed');
|
||||
}
|
||||
|
||||
export default async function() {
|
||||
try {
|
||||
const db = database.active;
|
||||
const settingsParams = JSON.stringify(Object.keys(settings).filter(key => !loginSettings.includes(key)));
|
||||
const settingsParams = Object.keys(settings).filter(key => !loginSettings.includes(key));
|
||||
// RC 0.60.0
|
||||
const result = await fetch(`${ this.sdk.client.host }/api/v1/settings.public?query={"_id":{"$in":${ settingsParams }}}`).then(response => response.json());
|
||||
const result = await fetch(`${ this.sdk.client.host }/api/v1/settings.public?query={"_id":{"$in":${ JSON.stringify(settingsParams) }}}&count=${ settingsParams.length }`)
|
||||
.then(response => response.json());
|
||||
|
||||
if (!result.success) {
|
||||
return;
|
||||
|
|
|
@ -28,7 +28,7 @@ import getUsersPresence, { getUserPresence, subscribeUsersPresence } from './met
|
|||
|
||||
import protectedFunction from './methods/helpers/protectedFunction';
|
||||
import readMessages from './methods/readMessages';
|
||||
import getSettings, { getLoginSettings, setSettings } from './methods/getSettings';
|
||||
import getSettings, { getLoginSettings, setSettings, subscribeSettings } from './methods/getSettings';
|
||||
|
||||
import getRooms from './methods/getRooms';
|
||||
import { setPermissions, getPermissions } from './methods/getPermissions';
|
||||
|
@ -37,7 +37,7 @@ import {
|
|||
getEnterpriseModules, setEnterpriseModules, hasLicense, isOmnichannelModuleAvailable
|
||||
} from './methods/enterpriseModules';
|
||||
import getSlashCommands from './methods/getSlashCommands';
|
||||
import getRoles from './methods/getRoles';
|
||||
import { getRoles, setRoles, onRolesChanged } from './methods/getRoles';
|
||||
import canOpenRoom from './methods/canOpenRoom';
|
||||
import triggerBlockAction, { triggerSubmitView, triggerCancel } from './methods/actions';
|
||||
|
||||
|
@ -63,7 +63,9 @@ import UserPreferences from './userPreferences';
|
|||
import { Encryption } from './encryption';
|
||||
import EventEmitter from '../utils/events';
|
||||
import { sanitizeLikeString } from './database/utils';
|
||||
import { updatePermission } from '../actions/permissions';
|
||||
import { TEAM_TYPE } from '../definition/ITeam';
|
||||
import { updateSettings } from '../actions/settings';
|
||||
|
||||
const TOKEN_KEY = 'reactnativemeteor_usertoken';
|
||||
const CURRENT_SERVER = 'currentServer';
|
||||
|
@ -225,6 +227,14 @@ const RocketChat = {
|
|||
this.usersListener.then(this.stopListener);
|
||||
}
|
||||
|
||||
if (this.notifyAllListener) {
|
||||
this.notifyAllListener.then(this.stopListener);
|
||||
}
|
||||
|
||||
if (this.rolesListener) {
|
||||
this.rolesListener.then(this.stopListener);
|
||||
}
|
||||
|
||||
if (this.notifyLoggedListener) {
|
||||
this.notifyLoggedListener.then(this.stopListener);
|
||||
}
|
||||
|
@ -274,6 +284,31 @@ const RocketChat = {
|
|||
|
||||
this.usersListener = this.sdk.onStreamData('users', protectedFunction(ddpMessage => RocketChat._setUser(ddpMessage)));
|
||||
|
||||
this.notifyAllListener = this.sdk.onStreamData('stream-notify-all', protectedFunction(async(ddpMessage) => {
|
||||
const { eventName } = ddpMessage.fields;
|
||||
if (/public-settings-changed/.test(eventName)) {
|
||||
const { _id, value } = ddpMessage.fields.args[1];
|
||||
const db = database.active;
|
||||
const settingsCollection = db.get('settings');
|
||||
try {
|
||||
const settingsRecord = await settingsCollection.find(_id);
|
||||
const { type } = defaultSettings[_id];
|
||||
if (type) {
|
||||
await db.action(async() => {
|
||||
await settingsRecord.update((u) => {
|
||||
u[type] = value;
|
||||
});
|
||||
});
|
||||
}
|
||||
reduxStore.dispatch(updateSettings(_id, value));
|
||||
} catch (e) {
|
||||
log(e);
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
this.rolesListener = this.sdk.onStreamData('stream-roles', protectedFunction(ddpMessage => onRolesChanged(ddpMessage)));
|
||||
|
||||
this.notifyLoggedListener = this.sdk.onStreamData('stream-notify-logged', protectedFunction(async(ddpMessage) => {
|
||||
const { eventName } = ddpMessage.fields;
|
||||
if (/user-status/.test(eventName)) {
|
||||
|
@ -310,6 +345,21 @@ const RocketChat = {
|
|||
} catch {
|
||||
// We can't create a new record since we don't receive the user._id
|
||||
}
|
||||
} else if (/permissions-changed/.test(eventName)) {
|
||||
const { _id, roles } = ddpMessage.fields.args[1];
|
||||
const db = database.active;
|
||||
const permissionsCollection = db.get('permissions');
|
||||
try {
|
||||
const permissionsRecord = await permissionsCollection.find(_id);
|
||||
await db.action(async() => {
|
||||
await permissionsRecord.update((u) => {
|
||||
u.roles = roles;
|
||||
});
|
||||
});
|
||||
reduxStore.dispatch(updatePermission(_id, roles));
|
||||
} catch (err) {
|
||||
//
|
||||
}
|
||||
} else if (/Users:NameChanged/.test(eventName)) {
|
||||
const userNameChanged = ddpMessage.fields.args[0];
|
||||
const db = database.active;
|
||||
|
@ -476,10 +526,10 @@ const RocketChat = {
|
|||
return this.post('users.forgotPassword', { email }, false);
|
||||
},
|
||||
|
||||
loginTOTP(params, loginEmailPassword) {
|
||||
loginTOTP(params, loginEmailPassword, isFromWebView = false) {
|
||||
return new Promise(async(resolve, reject) => {
|
||||
try {
|
||||
const result = await this.login(params, loginEmailPassword);
|
||||
const result = await this.login(params, isFromWebView);
|
||||
return resolve(result);
|
||||
} catch (e) {
|
||||
if (e.data?.error && (e.data.error === 'totp-required' || e.data.error === 'totp-invalid')) {
|
||||
|
@ -542,15 +592,15 @@ const RocketChat = {
|
|||
return this.loginTOTP(params, true);
|
||||
},
|
||||
|
||||
async loginOAuthOrSso(params) {
|
||||
const result = await this.loginTOTP(params);
|
||||
reduxStore.dispatch(loginRequest({ resume: result.token }));
|
||||
async loginOAuthOrSso(params, isFromWebView = true) {
|
||||
const result = await this.loginTOTP(params, false, isFromWebView);
|
||||
reduxStore.dispatch(loginRequest({ resume: result.token }, false, isFromWebView));
|
||||
},
|
||||
|
||||
async login(params, loginEmailPassword) {
|
||||
async login(credentials, isFromWebView = false) {
|
||||
const sdk = this.shareSDK || this.sdk;
|
||||
// RC 0.64.0
|
||||
await sdk.login(params);
|
||||
await sdk.login(credentials);
|
||||
const { result } = sdk.currentLogin;
|
||||
const user = {
|
||||
id: result.userId,
|
||||
|
@ -565,7 +615,7 @@ const RocketChat = {
|
|||
emails: result.me.emails,
|
||||
roles: result.me.roles,
|
||||
avatarETag: result.me.avatarETag,
|
||||
loginEmailPassword,
|
||||
isFromWebView,
|
||||
showMessageInMainThread: result.me.settings?.preferences?.showMessageInMainThread ?? true
|
||||
};
|
||||
return user;
|
||||
|
@ -816,6 +866,13 @@ const RocketChat = {
|
|||
};
|
||||
return this.sdk.post(type === 'c' ? 'channels.convertToTeam' : 'groups.convertToTeam', params);
|
||||
},
|
||||
convertTeamToChannel({ teamId, selected }) {
|
||||
const params = {
|
||||
teamId,
|
||||
...(selected.length && { roomsToRemove: selected })
|
||||
};
|
||||
return this.sdk.post('teams.convertToChannel', params);
|
||||
},
|
||||
joinRoom(roomId, joinCode, type) {
|
||||
// TODO: join code
|
||||
// RC 0.48.0
|
||||
|
@ -833,6 +890,7 @@ const RocketChat = {
|
|||
getSettings,
|
||||
getLoginSettings,
|
||||
setSettings,
|
||||
subscribeSettings,
|
||||
getPermissions,
|
||||
setPermissions,
|
||||
getCustomEmojis,
|
||||
|
@ -843,6 +901,7 @@ const RocketChat = {
|
|||
isOmnichannelModuleAvailable,
|
||||
getSlashCommands,
|
||||
getRoles,
|
||||
setRoles,
|
||||
parseSettings: settings => settings.reduce((ret, item) => {
|
||||
ret[item._id] = defaultSettings[item._id] && item[defaultSettings[item._id].type];
|
||||
if (item._id === 'Hide_System_Messages') {
|
||||
|
|
|
@ -19,6 +19,7 @@ import createDiscussion from './createDiscussion';
|
|||
import enterpriseModules from './enterpriseModules';
|
||||
import encryption from './encryption';
|
||||
import permissions from './permissions';
|
||||
import roles from './roles';
|
||||
|
||||
import inquiry from '../ee/omnichannel/reducers/inquiry';
|
||||
|
||||
|
@ -43,5 +44,6 @@ export default combineReducers({
|
|||
inquiry,
|
||||
enterpriseModules,
|
||||
encryption,
|
||||
permissions
|
||||
permissions,
|
||||
roles
|
||||
});
|
||||
|
|
|
@ -1,13 +1,16 @@
|
|||
import { PERMISSIONS } from '../actions/actionsTypes';
|
||||
|
||||
const initialState = {
|
||||
permissions: {}
|
||||
};
|
||||
const initialState = {};
|
||||
|
||||
export default function permissions(state = initialState, action) {
|
||||
switch (action.type) {
|
||||
case PERMISSIONS.SET:
|
||||
return action.permissions;
|
||||
case PERMISSIONS.UPDATE:
|
||||
return {
|
||||
...state,
|
||||
[action.payload.id]: action.payload.roles
|
||||
};
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
import { ROLES } from '../actions/actionsTypes';
|
||||
|
||||
const initialState = {};
|
||||
|
||||
export default function permissions(state = initialState, action) {
|
||||
switch (action.type) {
|
||||
case ROLES.SET:
|
||||
return action.roles;
|
||||
case ROLES.UPDATE:
|
||||
return {
|
||||
...state,
|
||||
[action.payload.id]: action.payload.desc || action.payload.id
|
||||
};
|
||||
case ROLES.REMOVE: {
|
||||
const newState = { ...state };
|
||||
delete newState[action.payload.id];
|
||||
return newState;
|
||||
}
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
}
|
|
@ -28,7 +28,7 @@ export default function(state = initialState, action) {
|
|||
case ROOM.DELETE:
|
||||
return {
|
||||
...state,
|
||||
rid: action.rid,
|
||||
rid: action.room.rid,
|
||||
isDeleting: true
|
||||
};
|
||||
case ROOM.CLOSE:
|
||||
|
|
|
@ -9,6 +9,11 @@ export default (state = initialState, action) => {
|
|||
...state,
|
||||
...action.payload
|
||||
};
|
||||
case SETTINGS.UPDATE:
|
||||
return {
|
||||
...state,
|
||||
[action.payload.id]: action.payload.value
|
||||
};
|
||||
case SETTINGS.CLEAR:
|
||||
return initialState;
|
||||
default:
|
||||
|
|
|
@ -41,10 +41,10 @@ const handleRequest = function* handleRequest({ data }) {
|
|||
encrypted
|
||||
} = data;
|
||||
logEvent(events.CT_CREATE, {
|
||||
type,
|
||||
readOnly,
|
||||
broadcast,
|
||||
encrypted
|
||||
type: `${ type }`,
|
||||
readOnly: `${ readOnly }`,
|
||||
broadcast: `${ broadcast }`,
|
||||
encrypted: `${ encrypted }`
|
||||
});
|
||||
const result = yield call(createTeam, data);
|
||||
sub = {
|
||||
|
|
|
@ -97,7 +97,7 @@ const fallbackNavigation = function* fallbackNavigation() {
|
|||
const handleOAuth = function* handleOAuth({ params }) {
|
||||
const { credentialToken, credentialSecret } = params;
|
||||
try {
|
||||
yield RocketChat.loginOAuthOrSso({ oauth: { credentialToken, credentialSecret } });
|
||||
yield RocketChat.loginOAuthOrSso({ oauth: { credentialToken, credentialSecret } }, false);
|
||||
} catch (e) {
|
||||
log(e);
|
||||
}
|
||||
|
|
|
@ -30,15 +30,15 @@ import Navigation from '../lib/Navigation';
|
|||
|
||||
const getServer = state => state.server.server;
|
||||
const loginWithPasswordCall = args => RocketChat.loginWithPassword(args);
|
||||
const loginCall = args => RocketChat.login(args);
|
||||
const loginCall = (credentials, isFromWebView) => RocketChat.login(credentials, isFromWebView);
|
||||
const logoutCall = args => RocketChat.logout(args);
|
||||
|
||||
const handleLoginRequest = function* handleLoginRequest({ credentials, logoutOnError = false }) {
|
||||
const handleLoginRequest = function* handleLoginRequest({ credentials, logoutOnError = false, isFromWebView = false }) {
|
||||
logEvent(events.LOGIN_DEFAULT_LOGIN);
|
||||
try {
|
||||
let result;
|
||||
if (credentials.resume) {
|
||||
result = yield call(loginCall, credentials);
|
||||
result = yield loginCall(credentials, isFromWebView);
|
||||
} else {
|
||||
result = yield call(loginWithPasswordCall, credentials);
|
||||
}
|
||||
|
@ -68,7 +68,6 @@ const handleLoginRequest = function* handleLoginRequest({ credentials, logoutOnE
|
|||
log(e);
|
||||
}
|
||||
});
|
||||
|
||||
yield put(loginSuccess(result));
|
||||
}
|
||||
} catch (e) {
|
||||
|
@ -81,6 +80,10 @@ const handleLoginRequest = function* handleLoginRequest({ credentials, logoutOnE
|
|||
}
|
||||
};
|
||||
|
||||
const subscribeSettings = function* subscribeSettings() {
|
||||
yield RocketChat.subscribeSettings();
|
||||
};
|
||||
|
||||
const fetchPermissions = function* fetchPermissions() {
|
||||
yield RocketChat.getPermissions();
|
||||
};
|
||||
|
@ -90,6 +93,7 @@ const fetchCustomEmojis = function* fetchCustomEmojis() {
|
|||
};
|
||||
|
||||
const fetchRoles = function* fetchRoles() {
|
||||
RocketChat.subscribe('stream-roles', 'roles');
|
||||
yield RocketChat.getRoles();
|
||||
};
|
||||
|
||||
|
@ -133,6 +137,7 @@ const handleLoginSuccess = function* handleLoginSuccess({ user }) {
|
|||
yield fork(registerPushToken);
|
||||
yield fork(fetchUsersPresence);
|
||||
yield fork(fetchEnterpriseModules, { user });
|
||||
yield fork(subscribeSettings);
|
||||
yield put(encryptionInit());
|
||||
|
||||
setLanguage(user?.language);
|
||||
|
@ -147,14 +152,13 @@ const handleLoginSuccess = function* handleLoginSuccess({ user }) {
|
|||
status: user.status,
|
||||
statusText: user.statusText,
|
||||
roles: user.roles,
|
||||
loginEmailPassword: user.loginEmailPassword,
|
||||
isFromWebView: user.isFromWebView,
|
||||
showMessageInMainThread: user.showMessageInMainThread,
|
||||
avatarETag: user.avatarETag
|
||||
};
|
||||
yield serversDB.action(async() => {
|
||||
try {
|
||||
const userRecord = await usersCollection.find(user.id);
|
||||
u.loginEmailPassword = userRecord?.loginEmailPassword;
|
||||
await userRecord.update((record) => {
|
||||
record._raw = sanitizedRaw({ id: user.id, ...record._raw }, usersCollection.schema);
|
||||
Object.assign(record, u);
|
||||
|
|
|
@ -32,7 +32,7 @@ const watchUserTyping = function* watchUserTyping({ rid, status }) {
|
|||
}
|
||||
};
|
||||
|
||||
const handleRemovedRoom = function* handleRemovedRoom(roomType) {
|
||||
const handleRemovedRoom = function* handleRemovedRoom(roomType, actionType) {
|
||||
const isMasterDetail = yield select(state => state.app.isMasterDetail);
|
||||
if (isMasterDetail) {
|
||||
yield Navigation.navigate('DrawerNavigator');
|
||||
|
@ -40,9 +40,13 @@ const handleRemovedRoom = function* handleRemovedRoom(roomType) {
|
|||
yield Navigation.navigate('RoomsListView');
|
||||
}
|
||||
|
||||
if (roomType === 'team') {
|
||||
EventEmitter.emit(LISTENER, { message: I18n.t('Left_The_Team_Successfully') });
|
||||
if (actionType === 'leave') {
|
||||
EventEmitter.emit(LISTENER, { message: roomType === 'team' ? I18n.t('Left_The_Team_Successfully') : I18n.t('Left_The_Room_Successfully') });
|
||||
}
|
||||
if (actionType === 'delete') {
|
||||
EventEmitter.emit(LISTENER, { message: roomType === 'team' ? I18n.t('Deleted_The_Team_Successfully') : I18n.t('Deleted_The_Room_Successfully') });
|
||||
}
|
||||
|
||||
|
||||
// types.ROOM.REMOVE is triggered by `subscriptions-changed` with `removed` arg
|
||||
const { timeout } = yield race({
|
||||
|
@ -66,7 +70,7 @@ const handleLeaveRoom = function* handleLeaveRoom({ room, roomType, selected })
|
|||
}
|
||||
|
||||
if (result?.success) {
|
||||
yield handleRemovedRoom(roomType);
|
||||
yield handleRemovedRoom(roomType, 'leave');
|
||||
}
|
||||
} catch (e) {
|
||||
logEvent(events.RA_LEAVE_F);
|
||||
|
@ -80,16 +84,23 @@ const handleLeaveRoom = function* handleLeaveRoom({ room, roomType, selected })
|
|||
}
|
||||
};
|
||||
|
||||
const handleDeleteRoom = function* handleDeleteRoom({ rid, t }) {
|
||||
const handleDeleteRoom = function* handleDeleteRoom({ room, roomType, selected }) {
|
||||
logEvent(events.RI_EDIT_DELETE);
|
||||
try {
|
||||
const result = yield RocketChat.deleteRoom(rid, t);
|
||||
if (result.success) {
|
||||
yield handleRemovedRoom();
|
||||
let result = {};
|
||||
|
||||
if (roomType === 'channel') {
|
||||
result = yield RocketChat.deleteRoom(room.rid, room.t);
|
||||
} else if (roomType === 'team') {
|
||||
result = yield RocketChat.deleteTeam({ teamId: room.teamId, ...(selected && { roomsToRemove: selected }) });
|
||||
}
|
||||
|
||||
if (result?.success) {
|
||||
yield handleRemovedRoom(roomType, 'delete');
|
||||
}
|
||||
} catch (e) {
|
||||
logEvent(events.RI_EDIT_DELETE_F);
|
||||
Alert.alert(I18n.t('Oops'), I18n.t('There_was_an_error_while_action', { action: I18n.t('deleting_room') }));
|
||||
Alert.alert(I18n.t('Oops'), I18n.t('There_was_an_error_while_action', { action: roomType === 'team' ? I18n.t('deleting_team') : I18n.t('deleting_room') }));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -125,6 +125,7 @@ const handleSelectServer = function* handleSelectServer({ server, version, fetch
|
|||
RocketChat.setSettings();
|
||||
RocketChat.setCustomEmojis();
|
||||
RocketChat.setPermissions();
|
||||
RocketChat.setRoles();
|
||||
RocketChat.setEnterpriseModules();
|
||||
|
||||
let serverInfo;
|
||||
|
|
|
@ -124,7 +124,7 @@ class Root extends React.Component {
|
|||
theme: defaultTheme(),
|
||||
themePreferences: {
|
||||
currentTheme: supportSystemTheme() ? 'automatic' : 'light',
|
||||
darkLevel: 'dark'
|
||||
darkLevel: 'black'
|
||||
},
|
||||
root: '',
|
||||
width,
|
||||
|
|
|
@ -259,6 +259,8 @@ export default {
|
|||
RA_LEAVE_TEAM_F: 'ra_leave_team_f',
|
||||
RA_CONVERT_TO_TEAM: 'ra_convert_to_team',
|
||||
RA_CONVERT_TO_TEAM_F: 'ra_convert_to_team_f',
|
||||
RA_CONVERT_TEAM_TO_CHANNEL: 'ra_convert_team_to_channel',
|
||||
RA_CONVERT_TEAM_TO_CHANNEL_F: 'ra_convert_team_to_channel_f',
|
||||
RA_MOVE_TO_TEAM: 'ra_move_to_team',
|
||||
RA_MOVE_TO_TEAM_F: 'ra_move_to_team_f',
|
||||
RA_SEARCH_TEAM: 'ra_search_team',
|
||||
|
|
|
@ -39,16 +39,16 @@ const openLink = async(url, theme = 'light') => {
|
|||
try {
|
||||
const browser = await UserPreferences.getStringAsync(DEFAULT_BROWSER_KEY);
|
||||
|
||||
if (browser) {
|
||||
const schemeUrl = appSchemeURL(url, browser.replace(':', ''));
|
||||
await Linking.openURL(schemeUrl);
|
||||
} else {
|
||||
if (browser === 'inApp') {
|
||||
await WebBrowser.openBrowserAsync(url, {
|
||||
toolbarColor: themes[theme].headerBackground,
|
||||
controlsColor: themes[theme].headerTintColor,
|
||||
collapseToolbar: true,
|
||||
showTitle: true
|
||||
});
|
||||
} else {
|
||||
const schemeUrl = appSchemeURL(url, browser.replace(':', ''));
|
||||
await Linking.openURL(schemeUrl);
|
||||
}
|
||||
} catch {
|
||||
try {
|
||||
|
|
|
@ -83,7 +83,7 @@ class DefaultBrowserView extends React.Component {
|
|||
|
||||
isSelected = (value) => {
|
||||
const { browser } = this.state;
|
||||
if (!browser && value === 'inApp') {
|
||||
if (!browser && value === 'systemDefault:') {
|
||||
return true;
|
||||
}
|
||||
return browser === value;
|
||||
|
@ -92,7 +92,7 @@ class DefaultBrowserView extends React.Component {
|
|||
changeDefaultBrowser = async(newBrowser) => {
|
||||
logEvent(events.DB_CHANGE_DEFAULT_BROWSER, { browser: newBrowser });
|
||||
try {
|
||||
const browser = newBrowser !== 'inApp' ? newBrowser : null;
|
||||
const browser = newBrowser !== 'systemDefault:' ? newBrowser : null;
|
||||
await UserPreferences.setStringAsync(DEFAULT_BROWSER_KEY, browser);
|
||||
this.setState({ browser });
|
||||
} catch {
|
||||
|
|
|
@ -50,6 +50,8 @@ class RoomActionsView extends React.Component {
|
|||
route: PropTypes.object,
|
||||
leaveRoom: PropTypes.func,
|
||||
jitsiEnabled: PropTypes.bool,
|
||||
jitsiEnableTeams: PropTypes.bool,
|
||||
jitsiEnableChannels: PropTypes.bool,
|
||||
encryptionEnabled: PropTypes.bool,
|
||||
setLoadingInvite: PropTypes.func,
|
||||
closeRoom: PropTypes.func,
|
||||
|
@ -65,7 +67,8 @@ class RoomActionsView extends React.Component {
|
|||
viewBroadcastMemberListPermission: PropTypes.array,
|
||||
transferLivechatGuestPermission: PropTypes.array,
|
||||
createTeamPermission: PropTypes.array,
|
||||
addTeamChannelPermission: PropTypes.array
|
||||
addTeamChannelPermission: PropTypes.array,
|
||||
convertTeamPermission: PropTypes.array
|
||||
}
|
||||
|
||||
constructor(props) {
|
||||
|
@ -89,7 +92,8 @@ class RoomActionsView extends React.Component {
|
|||
canEdit: false,
|
||||
canToggleEncryption: false,
|
||||
canCreateTeam: false,
|
||||
canAddChannelToTeam: false
|
||||
canAddChannelToTeam: false,
|
||||
canConvertTeam: false
|
||||
};
|
||||
if (room && room.observe && room.rid) {
|
||||
this.roomObservable = room.observe();
|
||||
|
@ -140,9 +144,10 @@ class RoomActionsView extends React.Component {
|
|||
const canViewMembers = await this.canViewMembers();
|
||||
const canCreateTeam = await this.canCreateTeam();
|
||||
const canAddChannelToTeam = await this.canAddChannelToTeam();
|
||||
const canConvertTeam = await this.canConvertTeam();
|
||||
|
||||
this.setState({
|
||||
canAutoTranslate, canAddUser, canInviteUser, canEdit, canToggleEncryption, canViewMembers, canCreateTeam, canAddChannelToTeam
|
||||
canAutoTranslate, canAddUser, canInviteUser, canEdit, canToggleEncryption, canViewMembers, canCreateTeam, canAddChannelToTeam, canConvertTeam
|
||||
});
|
||||
|
||||
// livechat permissions
|
||||
|
@ -238,6 +243,16 @@ class RoomActionsView extends React.Component {
|
|||
return canAddChannelToTeam;
|
||||
}
|
||||
|
||||
canConvertTeam = async() => {
|
||||
const { room } = this.state;
|
||||
const { convertTeamPermission } = this.props;
|
||||
const { rid } = room;
|
||||
const permissions = await RocketChat.hasPermission([convertTeamPermission], rid);
|
||||
|
||||
const canConvertTeam = permissions[0];
|
||||
return canConvertTeam;
|
||||
}
|
||||
|
||||
canToggleEncryption = async() => {
|
||||
const { room } = this.state;
|
||||
const { toggleRoomE2EEncryptionPermission } = this.props;
|
||||
|
@ -431,6 +446,59 @@ class RoomActionsView extends React.Component {
|
|||
});
|
||||
}
|
||||
|
||||
convertTeamToChannel = async() => {
|
||||
const { room } = this.state;
|
||||
const { navigation } = this.props;
|
||||
|
||||
try {
|
||||
const result = await RocketChat.teamListRoomsOfUser({ teamId: room.teamId, userId: room.u._id });
|
||||
|
||||
if (result.rooms?.length) {
|
||||
const teamChannels = result.rooms.map(r => ({
|
||||
rid: r._id,
|
||||
name: r.name,
|
||||
teamId: r.teamId
|
||||
}));
|
||||
navigation.navigate('SelectListView', {
|
||||
title: 'Converting_Team_To_Channel',
|
||||
data: teamChannels,
|
||||
infoText: 'Select_Team_Channels_To_Delete',
|
||||
nextAction: data => this.convertTeamToChannelConfirmation(data)
|
||||
});
|
||||
} else {
|
||||
this.convertTeamToChannelConfirmation();
|
||||
}
|
||||
} catch (e) {
|
||||
this.convertTeamToChannelConfirmation();
|
||||
}
|
||||
}
|
||||
|
||||
handleConvertTeamToChannel = async(selected) => {
|
||||
logEvent(events.RA_CONVERT_TEAM_TO_CHANNEL);
|
||||
try {
|
||||
const { room } = this.state;
|
||||
const { navigation } = this.props;
|
||||
|
||||
const result = await RocketChat.convertTeamToChannel({ teamId: room.teamId, selected });
|
||||
|
||||
if (result.success) {
|
||||
navigation.navigate('RoomView');
|
||||
}
|
||||
} catch (e) {
|
||||
logEvent(events.RA_CONVERT_TEAM_TO_CHANNEL_F);
|
||||
log(e);
|
||||
}
|
||||
}
|
||||
|
||||
convertTeamToChannelConfirmation = (selected = []) => {
|
||||
showConfirmationAlert({
|
||||
title: I18n.t('Confirmation'),
|
||||
message: I18n.t('You_are_converting_the_team'),
|
||||
confirmationText: I18n.t('Convert'),
|
||||
onPress: () => this.handleConvertTeamToChannel(selected)
|
||||
});
|
||||
}
|
||||
|
||||
leaveTeam = async() => {
|
||||
const { room } = this.state;
|
||||
const { navigation, leaveRoom } = this.props;
|
||||
|
@ -655,10 +723,15 @@ class RoomActionsView extends React.Component {
|
|||
|
||||
renderJitsi = () => {
|
||||
const { room } = this.state;
|
||||
const { jitsiEnabled } = this.props;
|
||||
if (!jitsiEnabled || room.teamMain) {
|
||||
const { jitsiEnabled, jitsiEnableTeams, jitsiEnableChannels } = this.props;
|
||||
|
||||
const isJitsiDisabledForTeams = room.teamMain && !jitsiEnableTeams;
|
||||
const isJitsiDisabledForChannels = !room.teamMain && (room.t === 'p' || room.t === 'c') && !jitsiEnableChannels;
|
||||
|
||||
if (!jitsiEnabled || isJitsiDisabledForTeams || isJitsiDisabledForChannels) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<List.Section>
|
||||
<List.Separator />
|
||||
|
@ -799,6 +872,32 @@ class RoomActionsView extends React.Component {
|
|||
);
|
||||
}
|
||||
|
||||
teamToChannelActions = (t, room) => {
|
||||
const { canEdit, canConvertTeam } = this.state;
|
||||
const canConvertTeamToChannel = canEdit && canConvertTeam && !!room?.teamMain;
|
||||
|
||||
return (
|
||||
<>
|
||||
{['c', 'p'].includes(t) && canConvertTeamToChannel
|
||||
? (
|
||||
<>
|
||||
<List.Item
|
||||
title='Convert_to_Channel'
|
||||
onPress={() => this.onPressTouchable({
|
||||
event: this.convertTeamToChannel
|
||||
})}
|
||||
testID='room-actions-convert-channel-to-team'
|
||||
left={() => <List.Icon name='channel-public' />}
|
||||
showActionIndicator
|
||||
/>
|
||||
<List.Separator />
|
||||
</>
|
||||
)
|
||||
: null}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
render() {
|
||||
const {
|
||||
room, membersCount, canViewMembers, canAddUser, canInviteUser, joined, canAutoTranslate, canForwardGuest, canReturnQueue
|
||||
|
@ -1000,7 +1099,9 @@ class RoomActionsView extends React.Component {
|
|||
)
|
||||
: null}
|
||||
|
||||
|
||||
{ this.teamChannelActions(t, room) }
|
||||
{this.teamToChannelActions(t, room)}
|
||||
|
||||
{['l'].includes(t) && !this.isOmnichannelPreview
|
||||
? (
|
||||
|
@ -1078,6 +1179,8 @@ class RoomActionsView extends React.Component {
|
|||
|
||||
const mapStateToProps = state => ({
|
||||
jitsiEnabled: state.settings.Jitsi_Enabled || false,
|
||||
jitsiEnableTeams: state.settings.Jitsi_Enable_Teams || false,
|
||||
jitsiEnableChannels: state.settings.Jitsi_Enable_Channels || false,
|
||||
encryptionEnabled: state.encryption.enabled,
|
||||
serverVersion: state.server.version,
|
||||
isMasterDetail: state.app.isMasterDetail,
|
||||
|
@ -1090,7 +1193,8 @@ const mapStateToProps = state => ({
|
|||
viewBroadcastMemberListPermission: state.permissions['view-broadcast-member-list'],
|
||||
transferLivechatGuestPermission: state.permissions['transfer-livechat-guest'],
|
||||
createTeamPermission: state.permissions['create-team'],
|
||||
addTeamChannelPermission: state.permissions['add-team-channel']
|
||||
addTeamChannelPermission: state.permissions['add-team-channel'],
|
||||
convertTeamPermission: state.permissions['convert-team']
|
||||
});
|
||||
|
||||
const mapDispatchToProps = dispatch => ({
|
||||
|
|
|
@ -292,34 +292,11 @@ class RoomInfoEditView extends React.Component {
|
|||
}, 100);
|
||||
}
|
||||
|
||||
handleDeleteTeam = async(selected) => {
|
||||
logEvent(events.RI_EDIT_DELETE_TEAM);
|
||||
const { navigation, isMasterDetail } = this.props;
|
||||
const { room } = this.state;
|
||||
try {
|
||||
const result = await RocketChat.deleteTeam({ teamId: room.teamId, ...(selected && { roomsToRemove: selected }) });
|
||||
if (result.success) {
|
||||
if (isMasterDetail) {
|
||||
navigation.navigate('DrawerNavigator');
|
||||
} else {
|
||||
navigation.navigate('RoomsListView');
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
logEvent(events.RI_EDIT_DELETE_TEAM_F);
|
||||
log(e);
|
||||
showErrorAlert(
|
||||
e.data.error
|
||||
? I18n.t(e.data.error)
|
||||
: I18n.t('There_was_an_error_while_action', { action: I18n.t('deleting_team') }),
|
||||
I18n.t('Cannot_delete')
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
deleteTeam = async() => {
|
||||
const { room } = this.state;
|
||||
const { navigation } = this.props;
|
||||
const {
|
||||
navigation, deleteCPermission, deletePPermission, deleteRoom
|
||||
} = this.props;
|
||||
|
||||
try {
|
||||
const db = database.active;
|
||||
|
@ -329,16 +306,27 @@ class RoomInfoEditView extends React.Component {
|
|||
Q.where('team_main', Q.notEq(true))
|
||||
);
|
||||
|
||||
if (teamChannels.length) {
|
||||
const teamChannelOwner = [];
|
||||
for (let i = 0; i < teamChannels.length; i += 1) {
|
||||
const permissionType = teamChannels[i].t === 'c' ? deleteCPermission : deletePPermission;
|
||||
// eslint-disable-next-line no-await-in-loop
|
||||
const permissions = await RocketChat.hasPermission([
|
||||
permissionType
|
||||
], teamChannels[i].rid);
|
||||
|
||||
if (permissions[0]) { teamChannelOwner.push(teamChannels[i]); }
|
||||
}
|
||||
|
||||
if (teamChannelOwner.length) {
|
||||
navigation.navigate('SelectListView', {
|
||||
title: 'Delete_Team',
|
||||
data: teamChannels,
|
||||
data: teamChannelOwner,
|
||||
infoText: 'Select_channels_to_delete',
|
||||
nextAction: (selected) => {
|
||||
showConfirmationAlert({
|
||||
message: I18n.t('You_are_deleting_the_team', { team: RocketChat.getRoomTitle(room) }),
|
||||
confirmationText: I18n.t('Yes_action_it', { action: I18n.t('delete') }),
|
||||
onPress: () => this.handleDeleteTeam(selected)
|
||||
onPress: () => deleteRoom('team', room, selected)
|
||||
});
|
||||
}
|
||||
});
|
||||
|
@ -346,7 +334,7 @@ class RoomInfoEditView extends React.Component {
|
|||
showConfirmationAlert({
|
||||
message: I18n.t('You_are_deleting_the_team', { team: RocketChat.getRoomTitle(room) }),
|
||||
confirmationText: I18n.t('Yes_action_it', { action: I18n.t('delete') }),
|
||||
onPress: () => this.handleDeleteTeam()
|
||||
onPress: () => deleteRoom('team', room)
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
|
@ -375,7 +363,7 @@ class RoomInfoEditView extends React.Component {
|
|||
{
|
||||
text: I18n.t('Yes_action_it', { action: I18n.t('delete') }),
|
||||
style: 'destructive',
|
||||
onPress: () => deleteRoom(room.rid, room.t)
|
||||
onPress: () => deleteRoom('channel', room)
|
||||
}
|
||||
],
|
||||
{ cancelable: false }
|
||||
|
@ -767,7 +755,7 @@ const mapStateToProps = state => ({
|
|||
});
|
||||
|
||||
const mapDispatchToProps = dispatch => ({
|
||||
deleteRoom: (rid, t) => dispatch(deleteRoomAction(rid, t))
|
||||
deleteRoom: (roomType, room, selected) => dispatch(deleteRoomAction(roomType, room, selected))
|
||||
});
|
||||
|
||||
export default connect(mapStateToProps, mapDispatchToProps)(withTheme(RoomInfoEditView));
|
||||
|
|
|
@ -6,7 +6,6 @@ import { connect } from 'react-redux';
|
|||
import UAParser from 'ua-parser-js';
|
||||
import isEmpty from 'lodash/isEmpty';
|
||||
|
||||
import database from '../../lib/database';
|
||||
import { CustomIcon } from '../../lib/Icons';
|
||||
import Status from '../../containers/Status';
|
||||
import Avatar from '../../containers/Avatar';
|
||||
|
@ -55,7 +54,8 @@ class RoomInfoView extends React.Component {
|
|||
theme: PropTypes.string,
|
||||
isMasterDetail: PropTypes.bool,
|
||||
jitsiEnabled: PropTypes.bool,
|
||||
editRoomPermission: PropTypes.array
|
||||
editRoomPermission: PropTypes.array,
|
||||
roles: PropTypes.array
|
||||
}
|
||||
|
||||
constructor(props) {
|
||||
|
@ -133,18 +133,9 @@ class RoomInfoView extends React.Component {
|
|||
return room.t === 'l';
|
||||
}
|
||||
|
||||
getRoleDescription = async(id) => {
|
||||
const db = database.active;
|
||||
try {
|
||||
const rolesCollection = db.get('roles');
|
||||
const role = await rolesCollection.find(id);
|
||||
if (role) {
|
||||
return role.description;
|
||||
}
|
||||
return null;
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
getRoleDescription = (id) => {
|
||||
const { roles } = this.props;
|
||||
return roles[id];
|
||||
};
|
||||
|
||||
loadVisitor = async() => {
|
||||
|
@ -378,7 +369,8 @@ const mapStateToProps = state => ({
|
|||
rooms: state.room.rooms,
|
||||
isMasterDetail: state.app.isMasterDetail,
|
||||
jitsiEnabled: state.settings.Jitsi_Enabled || false,
|
||||
editRoomPermission: state.permissions['edit-room']
|
||||
editRoomPermission: state.permissions['edit-room'],
|
||||
roles: state.roles
|
||||
});
|
||||
|
||||
export default connect(mapStateToProps)(withTheme(RoomInfoView));
|
||||
|
|
|
@ -49,7 +49,8 @@ class RoomMembersView extends React.Component {
|
|||
room: PropTypes.object,
|
||||
user: PropTypes.shape({
|
||||
id: PropTypes.string,
|
||||
token: PropTypes.string
|
||||
token: PropTypes.string,
|
||||
roles: PropTypes.array
|
||||
}),
|
||||
showActionSheet: PropTypes.func,
|
||||
theme: PropTypes.string,
|
||||
|
|
|
@ -52,7 +52,7 @@ const NavBottomFAB = ({ y, onPress, isThread }) => {
|
|||
bottom += SEND_TO_CHANNEL_HEIGHT;
|
||||
}
|
||||
return (
|
||||
<Animated.View style={[styles.container, { bottom }]}>
|
||||
<Animated.View style={[styles.container, { bottom }]} testID='nav-jump-to-bottom'>
|
||||
<Touch
|
||||
onPress={handleOnPress}
|
||||
theme={theme}
|
||||
|
|
|
@ -269,7 +269,7 @@ class ListContainer extends React.Component {
|
|||
const { listRef } = this.props;
|
||||
const index = messages.findIndex(item => item.id === messageId);
|
||||
if (index > -1) {
|
||||
listRef.current.getNode().scrollToIndex({ index, viewPosition: 0.5 });
|
||||
listRef.current.getNode().scrollToIndex({ index, viewPosition: 0.5, viewOffset: 100 });
|
||||
await new Promise(res => setTimeout(res, 300));
|
||||
if (!this.viewableItems.map(vi => vi.key).includes(messageId)) {
|
||||
if (!this.jumping) {
|
||||
|
|
|
@ -71,7 +71,6 @@ const DISCUSSIONS_HEADER = 'Discussions';
|
|||
const TEAMS_HEADER = 'Teams';
|
||||
const CHANNELS_HEADER = 'Channels';
|
||||
const DM_HEADER = 'Direct_Messages';
|
||||
const GROUPS_HEADER = 'Private_Groups';
|
||||
const OMNICHANNEL_HEADER = 'Open_Livechats';
|
||||
const QUERY_SIZE = 20;
|
||||
|
||||
|
@ -480,13 +479,11 @@ class RoomsListView extends React.Component {
|
|||
if (groupByType) {
|
||||
const teams = chats.filter(s => filterIsTeam(s));
|
||||
const discussions = chats.filter(s => filterIsDiscussion(s));
|
||||
const channels = chats.filter(s => s.t === 'c' && !filterIsDiscussion(s) && !filterIsTeam(s));
|
||||
const privateGroup = chats.filter(s => s.t === 'p' && !filterIsDiscussion(s) && !filterIsTeam(s));
|
||||
const channels = chats.filter(s => (s.t === 'c' || s.t === 'p') && !filterIsDiscussion(s) && !filterIsTeam(s));
|
||||
const direct = chats.filter(s => s.t === 'd' && !filterIsDiscussion(s) && !filterIsTeam(s));
|
||||
tempChats = this.addRoomsGroup(teams, TEAMS_HEADER, tempChats);
|
||||
tempChats = this.addRoomsGroup(discussions, DISCUSSIONS_HEADER, tempChats);
|
||||
tempChats = this.addRoomsGroup(channels, CHANNELS_HEADER, tempChats);
|
||||
tempChats = this.addRoomsGroup(privateGroup, GROUPS_HEADER, tempChats);
|
||||
tempChats = this.addRoomsGroup(direct, DM_HEADER, tempChats);
|
||||
} else if (showUnread || showFavorites || isOmnichannelAgent) {
|
||||
tempChats = this.addRoomsGroup(chats, CHATS_HEADER, tempChats);
|
||||
|
|
|
@ -65,7 +65,7 @@ class SettingsView extends React.Component {
|
|||
const usersCollection = db.get('users');
|
||||
try {
|
||||
const userRecord = await usersCollection.find(user.id);
|
||||
if (!userRecord.loginEmailPassword) {
|
||||
if (userRecord.isFromWebView) {
|
||||
showConfirmationAlert({
|
||||
title: I18n.t('Clear_cookies_alert'),
|
||||
message: I18n.t('Clear_cookies_desc'),
|
||||
|
|
|
@ -154,7 +154,7 @@ class Sidebar extends Component {
|
|||
text={I18n.t('Admin_Panel')}
|
||||
left={<CustomIcon name='settings' size={20} color={themes[theme].titleText} />}
|
||||
onPress={() => this.sidebarNavigate(routeName)}
|
||||
testID='sidebar-settings'
|
||||
testID='sidebar-admin'
|
||||
current={this.currentItemKey === routeName}
|
||||
/>
|
||||
</>
|
||||
|
|
|
@ -30,14 +30,14 @@ const THEMES = [
|
|||
label: 'Dark',
|
||||
value: 'dark',
|
||||
group: THEME_GROUP
|
||||
}, {
|
||||
label: 'Dark',
|
||||
value: 'dark',
|
||||
group: DARK_GROUP
|
||||
}, {
|
||||
label: 'Black',
|
||||
value: 'black',
|
||||
group: DARK_GROUP
|
||||
}, {
|
||||
label: 'Dark',
|
||||
value: 'dark',
|
||||
group: DARK_GROUP
|
||||
}
|
||||
];
|
||||
|
||||
|
|
143
e2e/data.js
143
e2e/data.js
|
@ -1,75 +1,76 @@
|
|||
const random = require('./helpers/random');
|
||||
|
||||
const value = random(20);
|
||||
const data = {
|
||||
server: 'https://mobile.rocket.chat',
|
||||
adminUser: 'e2e_admin',
|
||||
adminPassword: 'p7mFh4yLwCRXSnMvG',
|
||||
alternateServer: 'https://stable.rocket.chat',
|
||||
users: {
|
||||
regular: {
|
||||
username: `userone${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+regular${ value }@rocket.chat`
|
||||
},
|
||||
alternate: {
|
||||
username: `usertwo${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+alternate${ value }@rocket.chat`,
|
||||
totpSecret: 'NA4GOMZGHBQSK6KEFRVT62DMGJJGSYZJFZIHO3ZOGVXWCYZ6MMZQ'
|
||||
},
|
||||
profileChanges: {
|
||||
username: `userthree${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+profileChanges${ value }@rocket.chat`
|
||||
},
|
||||
existing: {
|
||||
username: `existinguser${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+existing${ value }@rocket.chat`
|
||||
}
|
||||
},
|
||||
channels: {
|
||||
detoxpublic: {
|
||||
name: 'detox-public'
|
||||
},
|
||||
detoxpublicprotected: {
|
||||
name: 'detox-public-protected',
|
||||
joinCode: '123'
|
||||
}
|
||||
},
|
||||
groups: {
|
||||
private: {
|
||||
name: `detox-private-${ value }`
|
||||
},
|
||||
alternate: {
|
||||
name: `detox-alternate-${ value }`
|
||||
}
|
||||
},
|
||||
teams: {
|
||||
private: {
|
||||
name: `detox-team-${ value }`
|
||||
}
|
||||
},
|
||||
registeringUser: {
|
||||
username: `newuser${ value }`,
|
||||
password: `password${ value }`,
|
||||
email: `mobile+registering${ value }@rocket.chat`
|
||||
},
|
||||
registeringUser2: {
|
||||
username: `newusertwo${ value }`,
|
||||
password: `passwordtwo${ value }`,
|
||||
email: `mobile+registeringtwo${ value }@rocket.chat`
|
||||
},
|
||||
registeringUser3: {
|
||||
username: `newuserthree${ value }`,
|
||||
password: `passwordthree${ value }`,
|
||||
email: `mobile+registeringthree${ value }@rocket.chat`
|
||||
},
|
||||
registeringUser4: {
|
||||
username: `newuserfour${ value }`,
|
||||
password: `passwordfour${ value }`,
|
||||
email: `mobile+registeringfour${ value }@rocket.chat`
|
||||
},
|
||||
random: value
|
||||
}
|
||||
server: 'https://mobile.rocket.chat',
|
||||
adminUser: 'e2e_admin',
|
||||
adminPassword: 'p7mFh4yLwCRXSnMvG',
|
||||
alternateServer: 'https://stable.rocket.chat',
|
||||
users: {
|
||||
regular: {
|
||||
username: `userone${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+regular${ value }@rocket.chat`
|
||||
},
|
||||
alternate: {
|
||||
username: `usertwo${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+alternate${ value }@rocket.chat`,
|
||||
totpSecret: 'NA4GOMZGHBQSK6KEFRVT62DMGJJGSYZJFZIHO3ZOGVXWCYZ6MMZQ'
|
||||
},
|
||||
profileChanges: {
|
||||
username: `userthree${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+profileChanges${ value }@rocket.chat`
|
||||
},
|
||||
existing: {
|
||||
username: `existinguser${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+existing${ value }@rocket.chat`
|
||||
}
|
||||
},
|
||||
channels: {
|
||||
detoxpublic: {
|
||||
name: 'detox-public'
|
||||
},
|
||||
detoxpublicprotected: {
|
||||
name: 'detox-public-protected',
|
||||
joinCode: '123'
|
||||
}
|
||||
},
|
||||
groups: {
|
||||
private: {
|
||||
name: `detox-private-${ value }`
|
||||
},
|
||||
alternate: {
|
||||
name: `detox-alternate-${ value }`
|
||||
}
|
||||
},
|
||||
teams: {
|
||||
private: {
|
||||
name: `detox-team-${ value }`
|
||||
}
|
||||
},
|
||||
registeringUser: {
|
||||
username: `newuser${ value }`,
|
||||
password: `password${ value }`,
|
||||
email: `mobile+registering${ value }@rocket.chat`
|
||||
},
|
||||
registeringUser2: {
|
||||
username: `newusertwo${ value }`,
|
||||
password: `passwordtwo${ value }`,
|
||||
email: `mobile+registeringtwo${ value }@rocket.chat`
|
||||
},
|
||||
registeringUser3: {
|
||||
username: `newuserthree${ value }`,
|
||||
password: `passwordthree${ value }`,
|
||||
email: `mobile+registeringthree${ value }@rocket.chat`
|
||||
},
|
||||
registeringUser4: {
|
||||
username: `newuserfour${ value }`,
|
||||
password: `passwordfour${ value }`,
|
||||
email: `mobile+registeringfour${ value }@rocket.chat`
|
||||
},
|
||||
random: value
|
||||
};
|
||||
module.exports = data;
|
||||
|
|
|
@ -1,72 +1,74 @@
|
|||
// eslint-disable-next-line import/no-unresolved
|
||||
const random = require('./helpers/random');
|
||||
|
||||
const value = random(20);
|
||||
const data = {
|
||||
server: 'https://mobile.rocket.chat',
|
||||
adminUser: 'e2e_admin',
|
||||
adminPassword: 'p7mFh4yLwCRXSnMvG',
|
||||
alternateServer: 'https://stable.rocket.chat',
|
||||
users: {
|
||||
regular: {
|
||||
username: `userone${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+regular${ value }@rocket.chat`
|
||||
},
|
||||
alternate: {
|
||||
username: `usertwo${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+alternate${ value }@rocket.chat`,
|
||||
totpSecret: 'NA4GOMZGHBQSK6KEFRVT62DMGJJGSYZJFZIHO3ZOGVXWCYZ6MMZQ'
|
||||
},
|
||||
profileChanges: {
|
||||
username: `userthree${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+profileChanges${ value }@rocket.chat`
|
||||
},
|
||||
existing: {
|
||||
username: `existinguser${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+existing${ value }@rocket.chat`
|
||||
}
|
||||
},
|
||||
channels: {
|
||||
detoxpublic: {
|
||||
name: 'detox-public'
|
||||
},
|
||||
detoxpublicprotected: {
|
||||
name: 'detox-public-protected',
|
||||
joinCode: '123'
|
||||
}
|
||||
},
|
||||
groups: {
|
||||
private: {
|
||||
name: `detox-private-${ value }`
|
||||
}
|
||||
},
|
||||
teams: {
|
||||
private: {
|
||||
name: `detox-team-${ value }`
|
||||
}
|
||||
},
|
||||
registeringUser: {
|
||||
username: `newuser${ value }`,
|
||||
password: `password${ value }`,
|
||||
email: `mobile+registering${ value }@rocket.chat`
|
||||
},
|
||||
registeringUser2: {
|
||||
username: `newusertwo${ value }`,
|
||||
password: `passwordtwo${ value }`,
|
||||
email: `mobile+registeringtwo${ value }@rocket.chat`
|
||||
},
|
||||
registeringUser3: {
|
||||
username: `newuserthree${ value }`,
|
||||
password: `passwordthree${ value }`,
|
||||
email: `mobile+registeringthree${ value }@rocket.chat`
|
||||
},
|
||||
registeringUser4: {
|
||||
username: `newuserfour${ value }`,
|
||||
password: `passwordfour${ value }`,
|
||||
email: `mobile+registeringfour${ value }@rocket.chat`
|
||||
},
|
||||
random: value
|
||||
}
|
||||
server: 'https://mobile.rocket.chat',
|
||||
adminUser: 'e2e_admin',
|
||||
adminPassword: 'p7mFh4yLwCRXSnMvG',
|
||||
alternateServer: 'https://stable.rocket.chat',
|
||||
users: {
|
||||
regular: {
|
||||
username: `userone${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+regular${ value }@rocket.chat`
|
||||
},
|
||||
alternate: {
|
||||
username: `usertwo${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+alternate${ value }@rocket.chat`,
|
||||
totpSecret: 'NA4GOMZGHBQSK6KEFRVT62DMGJJGSYZJFZIHO3ZOGVXWCYZ6MMZQ'
|
||||
},
|
||||
profileChanges: {
|
||||
username: `userthree${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+profileChanges${ value }@rocket.chat`
|
||||
},
|
||||
existing: {
|
||||
username: `existinguser${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+existing${ value }@rocket.chat`
|
||||
}
|
||||
},
|
||||
channels: {
|
||||
detoxpublic: {
|
||||
name: 'detox-public'
|
||||
},
|
||||
detoxpublicprotected: {
|
||||
name: 'detox-public-protected',
|
||||
joinCode: '123'
|
||||
}
|
||||
},
|
||||
groups: {
|
||||
private: {
|
||||
name: `detox-private-${ value }`
|
||||
}
|
||||
},
|
||||
teams: {
|
||||
private: {
|
||||
name: `detox-team-${ value }`
|
||||
}
|
||||
},
|
||||
registeringUser: {
|
||||
username: `newuser${ value }`,
|
||||
password: `password${ value }`,
|
||||
email: `mobile+registering${ value }@rocket.chat`
|
||||
},
|
||||
registeringUser2: {
|
||||
username: `newusertwo${ value }`,
|
||||
password: `passwordtwo${ value }`,
|
||||
email: `mobile+registeringtwo${ value }@rocket.chat`
|
||||
},
|
||||
registeringUser3: {
|
||||
username: `newuserthree${ value }`,
|
||||
password: `passwordthree${ value }`,
|
||||
email: `mobile+registeringthree${ value }@rocket.chat`
|
||||
},
|
||||
registeringUser4: {
|
||||
username: `newuserfour${ value }`,
|
||||
password: `passwordfour${ value }`,
|
||||
email: `mobile+registeringfour${ value }@rocket.chat`
|
||||
},
|
||||
random: value
|
||||
};
|
||||
module.exports = data;
|
||||
|
|
|
@ -1,75 +1,77 @@
|
|||
// eslint-disable-next-line import/no-unresolved
|
||||
const random = require('./helpers/random');
|
||||
|
||||
const value = random(20);
|
||||
const data = {
|
||||
server: 'http://localhost:3000',
|
||||
adminUser: 'admin',
|
||||
adminPassword: 'password',
|
||||
alternateServer: 'https://stable.rocket.chat',
|
||||
users: {
|
||||
regular: {
|
||||
username: `userone${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+regular${ value }@rocket.chat`
|
||||
},
|
||||
alternate: {
|
||||
username: `usertwo${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+alternate${ value }@rocket.chat`,
|
||||
totpSecret: 'NA4GOMZGHBQSK6KEFRVT62DMGJJGSYZJFZIHO3ZOGVXWCYZ6MMZQ'
|
||||
},
|
||||
profileChanges: {
|
||||
username: `userthree${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+profileChanges${ value }@rocket.chat`
|
||||
},
|
||||
existing: {
|
||||
username: `existinguser${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+existing${ value }@rocket.chat`
|
||||
}
|
||||
},
|
||||
channels: {
|
||||
detoxpublic: {
|
||||
name: 'detox-public'
|
||||
},
|
||||
detoxpublicprotected: {
|
||||
name: 'detox-public-protected',
|
||||
joinCode: '123'
|
||||
}
|
||||
},
|
||||
groups: {
|
||||
private: {
|
||||
name: `detox-private-${ value }`
|
||||
},
|
||||
alternate: {
|
||||
name: `detox-alternate-${ value }`
|
||||
}
|
||||
},
|
||||
teams: {
|
||||
private: {
|
||||
name: `detox-team-${ value }`
|
||||
}
|
||||
},
|
||||
registeringUser: {
|
||||
username: `newuser${ value }`,
|
||||
password: `password${ value }`,
|
||||
email: `mobile+registering${ value }@rocket.chat`
|
||||
},
|
||||
registeringUser2: {
|
||||
username: `newusertwo${ value }`,
|
||||
password: `passwordtwo${ value }`,
|
||||
email: `mobile+registeringtwo${ value }@rocket.chat`
|
||||
},
|
||||
registeringUser3: {
|
||||
username: `newuserthree${ value }`,
|
||||
password: `passwordthree${ value }`,
|
||||
email: `mobile+registeringthree${ value }@rocket.chat`
|
||||
},
|
||||
registeringUser4: {
|
||||
username: `newuserfour${ value }`,
|
||||
password: `passwordfour${ value }`,
|
||||
email: `mobile+registeringfour${ value }@rocket.chat`
|
||||
},
|
||||
random: value
|
||||
}
|
||||
server: 'http://localhost:3000',
|
||||
adminUser: 'admin',
|
||||
adminPassword: 'password',
|
||||
alternateServer: 'https://stable.rocket.chat',
|
||||
users: {
|
||||
regular: {
|
||||
username: `userone${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+regular${ value }@rocket.chat`
|
||||
},
|
||||
alternate: {
|
||||
username: `usertwo${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+alternate${ value }@rocket.chat`,
|
||||
totpSecret: 'NA4GOMZGHBQSK6KEFRVT62DMGJJGSYZJFZIHO3ZOGVXWCYZ6MMZQ'
|
||||
},
|
||||
profileChanges: {
|
||||
username: `userthree${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+profileChanges${ value }@rocket.chat`
|
||||
},
|
||||
existing: {
|
||||
username: `existinguser${ value }`,
|
||||
password: '123',
|
||||
email: `mobile+existing${ value }@rocket.chat`
|
||||
}
|
||||
},
|
||||
channels: {
|
||||
detoxpublic: {
|
||||
name: 'detox-public'
|
||||
},
|
||||
detoxpublicprotected: {
|
||||
name: 'detox-public-protected',
|
||||
joinCode: '123'
|
||||
}
|
||||
},
|
||||
groups: {
|
||||
private: {
|
||||
name: `detox-private-${ value }`
|
||||
},
|
||||
alternate: {
|
||||
name: `detox-alternate-${ value }`
|
||||
}
|
||||
},
|
||||
teams: {
|
||||
private: {
|
||||
name: `detox-team-${ value }`
|
||||
}
|
||||
},
|
||||
registeringUser: {
|
||||
username: `newuser${ value }`,
|
||||
password: `password${ value }`,
|
||||
email: `mobile+registering${ value }@rocket.chat`
|
||||
},
|
||||
registeringUser2: {
|
||||
username: `newusertwo${ value }`,
|
||||
password: `passwordtwo${ value }`,
|
||||
email: `mobile+registeringtwo${ value }@rocket.chat`
|
||||
},
|
||||
registeringUser3: {
|
||||
username: `newuserthree${ value }`,
|
||||
password: `passwordthree${ value }`,
|
||||
email: `mobile+registeringthree${ value }@rocket.chat`
|
||||
},
|
||||
registeringUser4: {
|
||||
username: `newuserfour${ value }`,
|
||||
password: `passwordfour${ value }`,
|
||||
email: `mobile+registeringfour${ value }@rocket.chat`
|
||||
},
|
||||
random: value
|
||||
};
|
||||
module.exports = data;
|
||||
|
|
|
@ -1 +1,336 @@
|
|||
db.getCollection("rocketchat_message").insert({"_id":"fsy2dZJgmmboowJ8N","t":"uj","rid":"GENERAL","ts":new Date(1584022608462),"msg":"admin","u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin"},"groupable":false,"_updatedAt":new Date(1584022608462)});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"25g4bk7cQTqeyW9xX","alias":"","msg":"269","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:44.857Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:44.877Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"269"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"27T4qRvruK3gEjecs","alias":"","msg":"65","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:26.854Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:26.877Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"65"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"28TThiTu5Zg8wQY9v","alias":"","msg":"140","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:56.012Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:56.077Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"140"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"2DgDaqyxjmY4svGae","alias":"","msg":"6","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:06.180Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:06.216Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"6"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"2SFwgauKjRMRR7xAw","alias":"","msg":"69","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:28.291Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:28.313Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"69"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"3G7XJ6EEy3vQdBQeh","alias":"","msg":"14","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:09.074Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:09.095Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"14"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"3T5juo5b4Co7uApwW","alias":"","msg":"277","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:47.697Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:47.749Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"277"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"3bMfuSmJ3iunG2kWG","alias":"","msg":"156","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:02.432Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:02.450Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"156"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"4AcYis8t69TC9hxJp","alias":"","msg":"7","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:06.556Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:06.581Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"7"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"4FiDijAfM3ANmQrkz","alias":"","msg":"141","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:56.415Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:56.436Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"141"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"4S9c9YvEogNtfNH4c","alias":"","msg":"119","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:46.073Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:46.091Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"119"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"4SzoQmu5hrY4a3M33","alias":"","msg":"252","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:38.832Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:38.859Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"252"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"4fmsF37sxqF3LaKg8","alias":"","msg":"158","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:03.277Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:03.310Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"158"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"4jZn8QgT2zggqpbtK","alias":"","msg":"230","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:30.893Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:30.929Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"230"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"4mGv8Pz8o4CDdN2oC","alias":"","msg":"264","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:43.105Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:43.131Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"264"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"5JuWjrs4ZgYa3CXxk","alias":"","msg":"49","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:21.227Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:21.244Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"49"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"5W9TAvaKJQfoFnftA","alias":"","msg":"37","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:17.145Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:17.159Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"37"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"5bqiprtBR4RAxWAcL","alias":"","msg":"43","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:19.185Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:19.198Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"43"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"5nCCCn7KHyca899Lj","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"23","ts":new Date("2021-06-14T21:27:07.177Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:07.273Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"23"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"6HicGvqNRy6dsDehP","alias":"","msg":"240","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:34.481Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:34.519Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"240"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"6oNMwTjCXmcXTWeLj","alias":"","msg":"279","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:48.701Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:48.797Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"279"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"6tHmYHoJAZqKSP7uw","alias":"","msg":"176","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:10.472Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:10.490Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"176"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"7QNXvEFxMPLDtemuA","alias":"","msg":"223","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:28.287Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:28.311Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"223"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"7f3WTwk9pZkbjDrZG","alias":"","msg":"52","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:22.277Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:22.290Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"52"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"7gkmpM68YanWe3JP2","alias":"","msg":"287","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:51.637Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:51.660Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"287"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"7mSpBnb8Bdt2aZoWL","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"19","ts":new Date("2021-06-14T21:27:02.653Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:02.754Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"19"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"7r8wpE8yzyiZEgpcw","alias":"","msg":"28","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:14.018Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:14.042Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"28"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"8KnWQxmRM5NGYt97J","alias":"","msg":"33","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:15.789Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:15.808Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"33"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"8vPWvDmtXEzEFwg4d","alias":"","msg":"96","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:37.960Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:37.980Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"96"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"9DR7WEyTEAR6ExK4n","alias":"","msg":"19","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:10.849Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:10.868Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"19"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"9FSFRTmi68FXt8xdT","alias":"","msg":"185","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:14.428Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:14.457Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"185"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"9Nc4sS2DozyAiH8is","alias":"","msg":"13","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:08.724Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:08.740Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"13"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"9R36G3Pe8yhFxWzar","alias":"","msg":"3","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:25:53.009Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:25:53.045Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"3"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"9S5QEDoXxXZbf9Fsw","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"15","ts":new Date("2021-06-14T21:26:57.249Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:57.352Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"15"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"9TXDBQRA375tcDAJG","alias":"","msg":"108","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:42.213Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:42.225Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"108"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"9WvB32ZFdk7v7yrNb","alias":"","msg":"53","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:22.619Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:22.646Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"53"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"9x8puw8kLeqXxajNW","alias":"","msg":"293","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:53.759Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:53.787Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"293"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"9xfhY2uCdwbGALd49","alias":"","msg":"91","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:36.152Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:36.169Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"91"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"AmnEoreNR26FcXbnh","alias":"","msg":"130","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:51.034Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:51.171Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"130"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"ApW3E6fzGtuQLfvSX","alias":"","msg":"282","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:49.845Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:49.862Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"282"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"AqMwxaxRzT5neeEfe","alias":"","msg":"187","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:15.298Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:15.331Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"187"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"BE8zexooqkDwuKcu4","alias":"","msg":"56","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:23.666Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:23.691Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"56"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"BFMr3FJ9NNLP5wESf","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"27","ts":new Date("2021-06-14T21:27:11.827Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:11.887Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"27"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"BXRu9xh39qwHnEXka","alias":"","msg":"94","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:37.229Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:37.275Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"94"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Bs8ReZaE4SiwXH49J","alias":"","msg":"300","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:56.256Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:56.274Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"300"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Bsb2nDT8oPwFvj9gN","alias":"","msg":"217","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:26.154Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:26.179Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"217"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"BvrzmaZKFccyhkrf3","alias":"","msg":"296","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:54.842Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:54.879Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"296"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"C89pRcerYNnApXwKZ","rid":"GFR2xxircSsyJxx9F","msg":"http://localhost:3000/group/jumping-thread?msg=rMbGKvG834q8EeNGs Go to a thread from another room","ts":new Date("2021-06-14T21:28:09.973Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:28:10.019Z"),"attachments":[{"text":"Go to jumping-thread's thread","author_name":"admin","author_icon":"/avatar/admin","message_link":"http://localhost:3000/group/jumping-thread?msg=rMbGKvG834q8EeNGs","attachments":[],"ts":new Date("2021-06-14T21:26:48.151Z")}],"urls":[{"url":"http://localhost:3000/group/jumping-thread?msg=rMbGKvG834q8EeNGs","ignoreParse":true}],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"LINK","value":{"src":{"type":"PLAIN_TEXT","value":"http://localhost:3000/group/jumping-thread?msg=rMbGKvG834q8EeNGs"},"label":{"type":"PLAIN_TEXT","value":"http://localhost:3000/group/jumping-thread?msg=rMbGKvG834q8EeNGs"}}},{"type":"PLAIN_TEXT","value":" Go to a thread from another room"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"CRefYtg5f6n2oZhJx","alias":"","msg":"274","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:46.586Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:46.637Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"274"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"CpMDo5fbb9Np54Xr7","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"30","ts":new Date("2021-06-14T21:27:14.710Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:14.781Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"30"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"CwHLm3reBwwttySP4","alias":"","msg":"117","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:45.367Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:45.387Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"117"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"D7kQQ9vtmq7LfJdFk","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"18","ts":new Date("2021-06-14T21:27:01.154Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:01.218Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"18"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"DR2ZakcJvyi3BTJLR","alias":"","msg":"54","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:22.975Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:22.992Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"54"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"DRAftv7fhYwBSF98P","alias":"","msg":"24","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:12.620Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:12.640Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"24"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"DuShMW4P9kiXnzMr4","alias":"","msg":"239","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:34.091Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:34.112Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"239"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"DvKX5qbzg8CWE3oNC","alias":"","msg":"1","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:24:50.182Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:24:50.225Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"1"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"DyAyQRLtPHqKwRYZb","alias":"","msg":"235","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:32.703Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:32.719Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"235"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"E5ntzuwrjmcGiyQFd","alias":"","msg":"299","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:55.903Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:55.925Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"299"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"EamwALjFX46fhnDC6","alias":"","msg":"268","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:44.506Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:44.520Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"268"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"EiMDrXBS86EqZGZhs","alias":"","msg":"234","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:32.356Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:32.376Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"234"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"EvEcMv66r75xb8FjX","alias":"","msg":"266","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:43.803Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:43.823Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"266"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"FAzwPcfoLftoNXBLQ","alias":"","msg":"257","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:40.641Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:40.661Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"257"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"FHdJd7cStGBRp6cRv","alias":"","msg":"215","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:25.459Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:25.478Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"215"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"FKR35Rpc8zFnMAmSg","alias":"","msg":"160","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:04.127Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:04.167Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"160"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"FKT9KKE4u8gW2jpSL","alias":"","msg":"281","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:49.486Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:49.509Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"281"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"FLtBpqa6bPBqSYPMA","alias":"","msg":"100","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:39.373Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:39.392Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"100"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"FcTYu6fzMbb28M75G","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"24","ts":new Date("2021-06-14T21:27:08.255Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:08.360Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"24"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"FhcwPfvAtFQ5D8MYQ","alias":"","msg":"22","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:11.904Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:11.922Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"22"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"G7zgSoyJuWhax8P3x","alias":"","msg":"95","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:37.608Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:37.628Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"95"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"GBzrEAwBbEPPXD3M9","alias":"","msg":"74","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:30.074Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:30.091Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"74"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"GEWmTKitDazAuaz6h","alias":"","msg":"86","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:34.353Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:34.369Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"86"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"GJ4jWiCxgcJMapHTY","alias":"","msg":"61","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:25.432Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:25.457Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"61"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"GKHJ9YE9P7CcpdzPZ","alias":"","msg":"213","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:24.750Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:24.766Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"213"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"GXBzQmJ8FcBoC3gtP","alias":"","msg":"137","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:54.514Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:54.776Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"137"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"GmEYWjr2Cxg59Cdy6","alias":"","msg":"275","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:46.972Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:46.993Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"275"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"GswMnTC73YmpAopoB","alias":"","msg":"165","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:06.067Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:06.088Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"165"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"H2Y7vC4CYLZHzrQCQ","alias":"","msg":"265","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:43.461Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:43.476Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"265"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"H2qrRsJ7B5iQb3nYa","alias":"","msg":"189","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:16.042Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:16.082Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"189"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"HEjouKohtxTSr4vYE","alias":"","msg":"232","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:31.648Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:31.668Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"232"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"HMe5BrNi5PYH4ydur","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"11","ts":new Date("2021-06-14T21:26:54.204Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:54.376Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"11"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"HP2vqtXk7H2kgopxM","alias":"","msg":"237","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:33.393Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:33.408Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"237"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"HZDTBZWzTtZG2wPYj","alias":"","msg":"162","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:04.922Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:05.009Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"162"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"HkveojpNbg6rkWrqJ","alias":"","msg":"284","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:50.555Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:50.573Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"284"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"HnZLZeDDsgF858kRx","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"9","ts":new Date("2021-06-14T21:26:52.386Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:52.531Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"9"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Hyt6k5bYadfc9sKJW","alias":"","msg":"89","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:35.380Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:35.400Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"89"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"J49cDnpaGPvuzf5s6","alias":"","msg":"124","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:47.930Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:47.947Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"124"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"J5ae5apoN8LZFyXiW","alias":"","msg":"199","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:19.666Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:19.685Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"199"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"J8jTENXHvWn4DCgcq","alias":"","msg":"88","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:35.036Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:35.050Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"88"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"JTQ4hu7SXXW24gRG9","alias":"","msg":"283","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:50.193Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:50.223Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"283"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"JZsxce8XjmNihE7AY","alias":"","msg":"168","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:07.339Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:07.432Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"168"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"K3twE3RhK3bskvP88","alias":"","msg":"258","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:40.989Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:41.008Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"258"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"K5tSCpctfdcB3Po9S","alias":"","msg":"63","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:26.138Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:26.168Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"63"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"KAZ24unKt2SzLiTwn","alias":"","msg":"34","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:16.140Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:16.160Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"34"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"KCGD75Dzg9sneF3yo","alias":"","msg":"29","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:14.372Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:14.395Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"29"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"KH2djT7TBQfnZtXzf","rid":"5iyMRT843rNn4wwHv","msg":"thread 2","ts":new Date("2021-06-14T21:26:44.015Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:44.085Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"thread 2"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"KZzFpygiB2sWXp7hd","alias":"","msg":"188","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:15.676Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:15.702Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"188"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"KuqHjst7QmS4s8qYX","alias":"","msg":"15","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:09.425Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:09.445Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"15"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"L2S3YC4AfW4SQaybC","alias":"","msg":"196","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:18.574Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:18.597Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"196"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"L4GFcEyoia8E9kkLb","alias":"","msg":"253","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:39.187Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:39.204Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"253"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"L8K2rLSpBbN3QQrXq","alias":"","msg":"38","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:17.484Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:17.498Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"38"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"LH6qPBWWfhotNdvW6","alias":"","msg":"194","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:17.860Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:17.886Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"194"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"LJudSHZjgvj3PYwPW","alias":"","msg":"229","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:30.535Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:30.556Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"229"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"LLQXCB4WnyHNwJRK4","alias":"","msg":"145","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:58.133Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:58.159Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"145"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"LLiby3sDRkQNKjG5w","alias":"","msg":"198","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:19.306Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:19.332Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"198"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"LQKgYipeHNG9wERPP","alias":"","msg":"2","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:25:52.639Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:25:52.672Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"2"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Lnpro7sThoN89jGbo","alias":"","msg":"8","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:06.915Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:06.936Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"8"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"LwAqBPzLDJmaRnSmr","alias":"","msg":"139","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:55.592Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:55.656Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"139"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"M6xT2Lxh7tFvARmRS","alias":"","msg":"236","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:33.048Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:33.064Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"236"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"MMYNkEdFcb42hwrob","alias":"","msg":"102","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:40.065Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:40.081Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"102"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"MbgeBDDrSfztwgFT3","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"10","ts":new Date("2021-06-14T21:26:53.404Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:53.517Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"10"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Mg4dY3XbRuokCL4mA","alias":"","msg":"111","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:43.254Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:43.282Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"111"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Mmxr3AgSkc9ZeCqfc","alias":"","msg":"180","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:12.402Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:12.438Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"180"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"MzTnyD7bHLQpDaDkt","alias":"","msg":"90","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:35.784Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:35.818Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"90"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"N6ADgwTr3cAkfAYr6","alias":"","msg":"173","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:09.323Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:09.397Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"173"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"NAXDFHoxA44rsyujh","rid":"5iyMRT843rNn4wwHv","msg":"thread 1","ts":new Date("2021-06-14T21:26:41.349Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:14.845Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"thread 1"}]}],"replies":["nM6vXyDLGGzSPsLNy"],"tcount":30,"tlm":new Date("2021-06-14T21:27:14.710Z")});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"NopPvF5ocTcK9YWyY","alias":"","msg":"97","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:38.310Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:38.334Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"97"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"NqRvSpT6vWpaMyenq","alias":"","msg":"276","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:47.330Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:47.347Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"276"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"PAz8BppytThsiyaSv","alias":"","msg":"116","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:45.010Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:45.034Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"116"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Pi8mzMSsneD9Bku9d","alias":"","msg":"218","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:26.512Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:26.535Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"218"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Px7brmeNGnYiDZN48","alias":"","msg":"167","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:06.866Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:06.899Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"167"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Q9JZLA5uaiwvknQFL","alias":"","msg":"151","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:00.560Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:00.584Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"151"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Q9LHyGvCWj8TT26jj","alias":"","msg":"193","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:17.502Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:17.528Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"193"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Q9NgS9QRojajftfj6","alias":"","msg":"120","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:46.422Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:46.442Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"120"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"QEp4mdsvN7tATTTif","alias":"","msg":"105","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:41.105Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:41.123Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"105"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"QZncZeyQk4ach7TyF","alias":"","msg":"55","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:23.324Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:23.339Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"55"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"R7iDtoqMcP8iH9AZi","rid":"5iyMRT843rNn4wwHv","msg":"http://localhost:3000/group/jumping-thread?msg=wXb2eMCF5em722dSG Go to quoted","ts":new Date("2021-06-14T21:27:34.440Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:34.517Z"),"attachments":[{"text":"quoted","author_name":"admin","author_icon":"/avatar/admin","message_link":"http://localhost:3000/group/jumping-thread?msg=wXb2eMCF5em722dSG","attachments":[],"ts":new Date("2021-06-14T21:26:48.151Z")}],"urls":[{"url":"http://localhost:3000/group/jumping-thread?msg=5iyMRT843rNn4wwHv","ignoreParse":true}],"mentions":[],"channels":[]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"REFdN433cQ4knn4hY","alias":"","msg":"99","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:39.014Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:39.034Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"99"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"RKHTvjSKiGAPRRZfc","alias":"","msg":"251","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:38.455Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:38.495Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"251"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"RSEww3hBWuHhCkeeR","alias":"","msg":"211","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:24.027Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:24.064Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"211"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"RSJ2S4QoYYKTqcebb","alias":"","msg":"79","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:31.818Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:31.846Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"79"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"RWqSS9eFRtsW8kAxv","alias":"","msg":"260","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:41.693Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:41.717Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"260"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"RZ9tvpoxLm4chpayJ","alias":"","msg":"51","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:21.922Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:21.944Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"51"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"RcBwAoQHPodNp5urE","alias":"","msg":"16","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:09.778Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:09.797Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"16"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Rj5xni8Hj9RazWE3L","alias":"","msg":"87","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:34.695Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:34.711Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"87"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"S7KPMtHTniMLbnMRw","alias":"","msg":"220","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:27.214Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:27.239Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"220"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"S7pzSFnpoEi5Fc52S","alias":"","msg":"195","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:18.218Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:18.244Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"195"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"S8ZtZfXYdgHnbGDeh","alias":"","msg":"132","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:52.135Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:52.224Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"132"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"SAn6je34GPkDiyNEh","alias":"","msg":"221","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:27.574Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:27.601Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"221"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"SLEJ4mvSD3xh7Gaby","alias":"","msg":"224","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:28.711Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:28.736Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"224"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"SQM5sg8wKFyuiFp6N","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"16","ts":new Date("2021-06-14T21:26:58.848Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:58.998Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"16"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"SXzXF6bN4g3soN7nv","alias":"","msg":"183","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:13.641Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:13.663Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"183"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"ScCeKQunf9XP85PvK","alias":"","msg":"226","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:29.429Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:29.453Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"226"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Sh8HLTpuRhE9bxd6w","alias":"","msg":"127","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:49.417Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:49.526Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"127"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Sj74bsHaXr7RKdf3g","alias":"","msg":"206","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:22.236Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:22.259Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"206"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"SpDjvPCCuhDKwqRjb","alias":"","msg":"186","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:14.868Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:14.949Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"186"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"TChAZirf4q3ZwgsAp","alias":"","msg":"84","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:33.613Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:33.665Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"84"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"TFA29pKXYWkNYPfF3","alias":"","msg":"177","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:10.883Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:11.172Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"177"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"TPyLu2TTXuLBM4Kmc","alias":"","msg":"154","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:01.709Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:01.728Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"154"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"TXcETF7ftNrki3ALu","alias":"","msg":"201","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:20.446Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:20.478Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"201"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"W2gRc5ajwmYrYYiBq","alias":"","msg":"290","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:52.687Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:52.715Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"290"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"W5wrodggp3Hwe2urC","alias":"","msg":"164","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:05.709Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:05.729Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"164"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"W6JAFqquRcwbTZqBS","alias":"","msg":"228","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:30.167Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:30.196Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"228"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"WDZP2fFGfQNB9pLBt","alias":"","msg":"171","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:08.525Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:08.585Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"171"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"WNjmDuKBtvdTk2sPo","alias":"","msg":"126","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:48.839Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:48.992Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"126"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"WW3jiRvwAZiAvFa8a","alias":"","msg":"64","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:26.499Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:26.518Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"64"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"WgjPSsi6ZJhgGZ9Yy","alias":"","msg":"294","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:54.118Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:54.138Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"294"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Wu6Q4rKfhqWgxqTwe","alias":"","msg":"85","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:34.009Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:34.028Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"85"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"X3d6dRXShATdWTAZQ","alias":"","msg":"216","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:25.808Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:25.826Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"216"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"X49ws5jXcMpaq7ywA","alias":"","msg":"238","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:33.738Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:33.759Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"238"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"XF32syPxCRi36aejC","alias":"","msg":"125","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:48.340Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:48.433Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"125"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Xvkhsa6ysfMZkehLF","alias":"","msg":"248","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:37.356Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:37.374Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"248"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Y8XHkq3WpexeY7Brw","alias":"","msg":"77","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:31.125Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:31.144Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"77"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"YEn2SpZ6QgeGjurvd","alias":"","msg":"208","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:22.955Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:22.973Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"208"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"YGkkNtQbXe9JbwnXn","alias":"","msg":"110","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:42.894Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:42.921Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"110"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Ymg9aMZH5u8cPQdye","alias":"","msg":"138","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:55.162Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:55.238Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"138"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"YuHwpNgMRje5MsQJG","alias":"","msg":"47","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:20.543Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:20.557Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"47"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Z7fqoZYFgA7TnNomA","alias":"","msg":"179","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:11.977Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:12.063Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"179"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Z9E3BZWejTKiSvaKE","alias":"","msg":"107","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:41.868Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:41.886Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"107"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"ZFuEA3XmwGu3PAzv9","alias":"","msg":"20","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:11.198Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:11.217Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"20"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"ZHpwo4dzEjJS4sSmG","alias":"","msg":"25","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:12.970Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:12.988Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"25"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"ZJQe834wHqGsHqoYL","alias":"","msg":"209","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:23.306Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:23.327Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"209"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"ZKSaW8vspoojf6bM2","alias":"","msg":"181","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:12.827Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:12.896Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"181"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"ZP8duwLKiLaGaaW5J","alias":"","msg":"60","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:25.068Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:25.095Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"60"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Zaoa684RSi7Rs7Rid","alias":"","msg":"192","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:17.144Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:17.170Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"192"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"ZgGv86jmZ2zFT2bHE","alias":"","msg":"76","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:30.767Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:30.799Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"76"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"ZgWXaPAjiYxNzCyYC","alias":"","msg":"203","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:21.193Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:21.209Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"203"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Zhq9AmbzgGFiWJDyd","alias":"","msg":"256","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:40.251Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:40.302Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"256"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"Zpscdpv4Mf99uczkH","alias":"","msg":"66","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:27.214Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:27.238Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"66"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"ZsRjyeDqxgQSXsb5G","alias":"","msg":"159","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:03.702Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:03.778Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"159"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"ZzTWmQnPiHLCArw7s","alias":"","msg":"26","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:13.315Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:13.336Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"26"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"a82cWhkFEeCXEMxmP","alias":"","msg":"35","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:16.466Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:16.481Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"35"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"aFMhY68mGFMPD5eHM","alias":"","msg":"135","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:53.554Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:53.698Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"135"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"aqXfs7SvG4knixCE3","alias":"","msg":"259","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:41.335Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:41.353Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"259"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"asNxLidHfTi7E3rri","rid":"GFR2xxircSsyJxx9F","msg":"[ ](http://localhost:3000/group/jumping?msg=DvKX5qbzg8CWE3oNC) Quote first message","ts":new Date("2021-06-14T21:28:50.477Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:28:50.537Z"),"attachments":[{"text":"1","author_name":"admin","author_icon":"/avatar/admin","message_link":"http://localhost:3000/group/jumping?msg=DvKX5qbzg8CWE3oNC","attachments":[],"ts":new Date("2021-06-14T21:24:50.182Z")}],"urls":[{"url":"http://localhost:3000/group/jumping?msg=DvKX5qbzg8CWE3oNC","ignoreParse":true}],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"LINK","value":{"src":{"type":"PLAIN_TEXT","value":"http://localhost:3000/group/jumping?msg=DvKX5qbzg8CWE3oNC"},"label":{"type":"PLAIN_TEXT","value":" "}}},{"type":"PLAIN_TEXT","value":" Quote first message"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"axvp8s25ARwDpfzmh","alias":"","msg":"136","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:54.051Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:54.108Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"136"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"b4mfvGcu54E5fZcFT","alias":"","msg":"175","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:10.090Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:10.139Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"175"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"b5E537jXp9K4oN4Wi","alias":"","msg":"246","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:36.635Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:36.664Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"246"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"bKGeCjGTDGxqEZ6hm","alias":"","msg":"161","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:04.498Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:04.522Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"161"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"bQvAAAGyDWfFF6Y7A","alias":"","msg":"163","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:05.358Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:05.380Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"163"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"bTNtxyTgianagFSNx","alias":"","msg":"112","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:43.614Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:43.632Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"112"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"bYJ54jdELZ3QdHHas","alias":"","msg":"244","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:35.923Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:35.944Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"244"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"baWZ2thegi7MzuqdG","alias":"","msg":"254","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:39.537Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:39.557Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"254"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"bjJtt5nXd9WNgyFfH","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"21","ts":new Date("2021-06-14T21:27:04.747Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:04.852Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"21"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"bsefeQWb2q2TbtMw7","alias":"","msg":"242","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:35.213Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:35.231Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"242"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"btXJwZ48vySPKm53G","alias":"","msg":"40","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:18.166Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:18.181Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"40"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"c2iHGieZ8bpnt35rF","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"28","ts":new Date("2021-06-14T21:27:12.665Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:12.718Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"28"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"c3pTEP9xYmiMRbPZ4","alias":"","msg":"249","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:37.704Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:37.738Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"249"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"cFFH3n7Rt2ycvJyuj","alias":"","msg":"270","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:45.206Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:45.223Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"270"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"cZw93Xs7hCywM22rw","alias":"","msg":"101","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:39.717Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:39.736Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"101"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"coBfxKdjuMdr6nAo9","alias":"","msg":"115","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:44.656Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:44.677Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"115"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"ctJwtBmsAragPidYK","alias":"","msg":"214","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:25.103Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:25.122Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"214"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"cu7CR5vzM7zhHcyxp","alias":"","msg":"155","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:02.072Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:02.101Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"155"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"czpi4xpGasv7qLEDG","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"5","ts":new Date("2021-06-14T21:26:50.306Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:50.415Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"5"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"dA923aH8Pum3yaGFH","alias":"","msg":"170","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:08.150Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:08.174Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"170"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"dADdCiC86XSM6x3H5","alias":"","msg":"113","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:43.956Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:43.974Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"113"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"dJ4RcvX7WP8xBjh3x","alias":"","msg":"57","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:24.020Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:24.043Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"57"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"dcYJDKLis496fq37P","alias":"","msg":"30","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:14.728Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:14.748Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"30"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"dsNcCY6TFcR8DJdhh","alias":"","msg":"45","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:19.860Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:19.874Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"45"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"duF48GeHr6JXE627H","alias":"","msg":"121","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:46.816Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:46.900Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"121"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"eCXzwsPZN4aC9oasY","alias":"","msg":"142","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:56.815Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:56.895Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"142"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"ebRbDWuZ7HCgzAdnB","alias":"","msg":"288","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:51.990Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:52.012Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"288"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"etXetwZLWJ8quLbXY","alias":"","msg":"152","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:00.916Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:00.935Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"152"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"f2PJHaeQhN38ZWYPc","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"20","ts":new Date("2021-06-14T21:27:03.534Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:03.605Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"20"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"f36eGwj5ZXT3FzXsQ","alias":"","msg":"122","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:47.241Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:47.260Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"122"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"f3QBqS3TRsfQknctT","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"29","ts":new Date("2021-06-14T21:27:13.767Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:13.882Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"29"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"f5mHjp7PgC4oxKxWB","alias":"","msg":"233","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:31.997Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:32.023Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"233"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"fH5EArKGppbm5fu4H","alias":"","msg":"207","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:22.600Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:22.624Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"207"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"fWxDpwWjLtDiWaGNh","alias":"","msg":"298","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:55.560Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:55.576Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"298"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"fjw4BsPLrxN8wRw9P","alias":"","msg":"123","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:47.587Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:47.603Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"123"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"fmxCFF5urELfPt5o4","alias":"","msg":"210","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:23.661Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:23.687Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"210"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"fpgKLzsGpj6YwX6nj","alias":"","msg":"247","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:36.999Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:37.026Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"247"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"fsy2dZJgmmboowJ8N","t":"uj","rid":"GENERAL","ts":new Date("2020-03-12T14:16:48.462Z"),"msg":"admin","u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin"},"groupable":false,"_updatedAt":new Date("2020-03-12T14:16:48.462Z")});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"fuaaSP7JwX7tBoQKf","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"22","ts":new Date("2021-06-14T21:27:06.201Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:06.309Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"22"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"fwdGhi3DjYRPCvK9a","alias":"","msg":"39","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:17.823Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:17.837Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"39"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"gMCRJXDfAz6iCz36n","alias":"","msg":"166","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:06.445Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:06.528Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"166"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"gSek3hYhat9HZgxZn","alias":"","msg":"263","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:42.744Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:42.769Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"263"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"gmNPD2NzrYTcL4vbi","alias":"","msg":"114","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:44.305Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:44.325Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"114"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"gqvXKFvaHviN6WT6d","alias":"","msg":"36","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:16.807Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:16.820Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"36"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"hADa3458ZBWoA2vis","alias":"","msg":"297","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:55.211Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:55.229Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"297"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"hWGecLQ9J3QmPb5tZ","alias":"","msg":"42","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:18.847Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:18.862Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"42"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"he7eJ5uQkavMG2pRw","alias":"","msg":"291","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:53.044Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:53.064Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"291"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"i5v8nqpENnELkuKKK","alias":"","msg":"98","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:38.669Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:38.686Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"98"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"iAHZaZtecC9DTPh5M","alias":"","msg":"118","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:45.719Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:45.741Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"118"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"iDhXx9AMwdGn6eA8g","alias":"","msg":"72","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:29.378Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:29.399Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"72"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"iEbZ89N6nn7BrNJjb","alias":"","msg":"143","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:57.291Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:57.428Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"143"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"iTD6csdpfXsBjw2Cm","alias":"","msg":"271","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:45.550Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:45.562Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"271"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"iXLFap36XtvBEFN5v","alias":"","msg":"10","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:07.627Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:07.651Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"10"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"ind3Datf2D7PaZzFZ","alias":"","msg":"73","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:29.726Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:29.745Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"73"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"iuBBQN8GYYnzreXGr","alias":"","msg":"289","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:52.341Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:52.356Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"289"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"ivZn9uDwQc5gQJM34","alias":"","msg":"93","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:36.852Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:36.882Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"93"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"j54HwbxYvXjRjMadK","alias":"","msg":"150","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:00.149Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:00.221Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"150"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"j9PSMJej8Wcpa4Ytx","alias":"","msg":"44","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:19.522Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:19.535Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"44"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"jLfKGGCYNK53XHSTL","alias":"","msg":"103","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:40.408Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:40.429Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"103"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"jPniEqszEwDwuaiuj","alias":"","msg":"21","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:11.551Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:11.571Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"21"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"jb9wEPkba3zpPEtmJ","alias":"","msg":"68","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:27.931Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:27.953Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"68"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"jvtiBQASkTzCAQbDR","alias":"","msg":"157","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:02.837Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:02.916Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"157"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"k4cpqEJdJswa9Gi5Y","alias":"","msg":"261","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:42.048Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:42.062Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"261"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"kDetPPBzhWn93cxRF","alias":"","msg":"225","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:29.069Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:29.093Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"225"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"kFSqxJp5KZvQ7D8aE","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"26","ts":new Date("2021-06-14T21:27:10.751Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:11.061Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"26"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"kS8jZdggkfgsTsZG5","alias":"","msg":"174","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:09.739Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:09.758Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"174"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"m7tDWPnGNRnGCue75","alias":"","msg":"280","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:49.134Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:49.157Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"280"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"mf4JSThGWDcKcMHpg","alias":"","msg":"227","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:29.784Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:29.833Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"227"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"mkh7E9F6DsZ4Tcdup","alias":"","msg":"295","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:54.475Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:54.502Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"295"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"n26SaSKE9K5om8yLj","alias":"","msg":"50","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:21.571Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:21.590Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"50"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"nCRBdtauhxPqBtg4g","alias":"","msg":"272","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:45.899Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:45.920Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"272"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"nHzxrRo6tBHscDDje","alias":"","msg":"17","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:10.137Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:10.157Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"17"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"nL6KxYJnhqiAnf6pH","alias":"","msg":"144","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:57.777Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:57.798Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"144"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"o5a6HfkxwT56K4jPQ","alias":"","msg":"292","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:53.406Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:53.431Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"292"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"o7ASiN5h6rWf5R6Zn","alias":"","msg":"71","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:29.010Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:29.045Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"71"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"oBai683KWMkxTbrXm","alias":"","msg":"109","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:42.551Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:42.565Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"109"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"oP4SBAiREiHxsCKuJ","alias":"","msg":"11","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:07.981Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:08.003Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"11"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"oR4yJeKsiAdbi2J3o","alias":"","msg":"31","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:15.084Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:15.105Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"31"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"oRgEHMjJwkK3QMPH6","alias":"","msg":"285","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:50.910Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:50.932Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"285"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"oamqgrpKs75TAzRDn","alias":"","msg":"182","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:13.249Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:13.302Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"182"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"ooG2D2kA9XKEYfLxy","alias":"","msg":"184","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:14.009Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:14.085Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"184"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"owsKBceEBzCRenLf5","alias":"","msg":"128","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:49.939Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:50.099Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"128"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"pXkDBj6n8zs5QwgoP","alias":"","msg":"219","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:26.867Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:26.884Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"219"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"phg34vrw6zgeXNM4S","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"14","ts":new Date("2021-06-14T21:26:56.534Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:56.629Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"14"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"pobCPg2DEvSthxSms","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"17","ts":new Date("2021-06-14T21:26:59.957Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:00.029Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"17"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"pq95BBkovDfF9QXBz","alias":"","msg":"104","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:40.758Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:40.779Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"104"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"prLoRs2LovJ2ZwB69","alias":"","msg":"23","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:12.255Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:12.282Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"23"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"q9hHwTBcNAWHJTogx","alias":"","msg":"241","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:34.868Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:34.886Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"241"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"q9vSCngMpjFmJGYKD","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"to be searched","ts":new Date("2021-06-14T21:26:48.735Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:48.875Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"2"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"qS4Rk23v3makbdfbH","alias":"","msg":"131","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:51.580Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:51.717Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"131"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"qX4SgeQLSAkYM96JS","alias":"","msg":"46","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:20.199Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:20.217Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"46"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"qx3fGuWDaYM2KTP7b","alias":"","msg":"18","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:10.488Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:10.514Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"18"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"r3otdRoyGLyWE3QXt","alias":"","msg":"106","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:41.477Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:41.537Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"106"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"rFyiPh4ieazJ5Xujx","alias":"","msg":"212","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:24.396Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:24.419Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"212"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"rMbGKvG834q8EeNGs","rid":"5iyMRT843rNn4wwHv","tshow":false,"tmid":"NAXDFHoxA44rsyujh","msg":"Go to jumping-thread\'s thread","ts":new Date("2021-06-14T21:26:48.151Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:48.219Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"1"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"rRnLnmDmiEuAdCCxc","alias":"","msg":"27","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:13.667Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:13.686Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"27"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"rYdDqTMqdZc6iDfkR","alias":"","msg":"146","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:58.496Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:58.512Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"146"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"rzhvoTuvciCYKuWaz","alias":"","msg":"149","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:59.761Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:59.791Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"149"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"s6uQ9PgRQTj8eHcXd","alias":"","msg":"32","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:15.434Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:15.458Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"32"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"sEFhTtHAnByAuhm9L","alias":"","msg":"250","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:38.081Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:38.113Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"250"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"sL2q79eQMszvrndN4","alias":"","msg":"169","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:07.775Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:07.810Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"169"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"sMNLLsoDjghCTvmwc","alias":"","msg":"273","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:46.242Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:46.269Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"273"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"sPoHne32K2pdrqhmY","alias":"","msg":"80","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:32.181Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:32.203Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"80"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"sQksqnBfdfuvvFTtZ","alias":"","msg":"204","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:21.538Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:21.555Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"204"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"sYp5F5WSFBWP6dy4L","alias":"","msg":"4","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:05.437Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:05.484Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"4"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"sarBNn8KXCDibD26Z","alias":"","msg":"133","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:52.631Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:52.716Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"133"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"seqFxn6iMnefCk4oL","alias":"","msg":"286","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:51.271Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:51.305Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"286"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"sjpPh6jnmQ9cT2XtA","alias":"","msg":"245","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:36.278Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:36.307Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"245"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"skTHqNq9QnaL6odE4","alias":"","msg":"62","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:25.787Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:25.808Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"62"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"syv4LYPK7pGwH6gMR","alias":"","msg":"205","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:21.886Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:21.905Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"205"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"tA26DWrEE44d2rrQF","alias":"","msg":"59","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:24.717Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:24.737Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"59"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"tLKnMvEAK7ELxqN9m","alias":"","msg":"190","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:16.420Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:16.423Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"190"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"tm9kzLG57tmTGuDga","alias":"","msg":"5","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:05.820Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:05.848Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"5"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"tpJ6jPcf8hTE6Y9my","alias":"","msg":"231","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:31.261Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:31.305Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"231"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"ttcshiSSJSknTmXhN","alias":"","msg":"255","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:39.886Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:39.905Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"255"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"txf4Dih43e23ezkm6","alias":"","msg":"200","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:20.035Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:20.095Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"200"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"tyxqHBNYJpBs2DreP","alias":"","msg":"172","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:08.927Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:08.946Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"172"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"u3BjoxuA4pzjPGzyS","alias":"","msg":"9","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:07.267Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:07.295Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"9"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"uHwBGqbXsLWuQ4CP3","alias":"","msg":"262","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:42.389Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:42.409Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"262"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"uNzeBDetJgn9wEaQ4","alias":"","msg":"191","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:16.773Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:16.808Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"191"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"uqJDykHAvpnBrGMNF","alias":"","msg":"243","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:35.562Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:35.582Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"243"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"utqDfyM45QuRLzK3o","alias":"","msg":"78","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:31.473Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:31.491Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"78"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"v5upv7DR4BHbCwBEX","alias":"","msg":"48","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:20.883Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:20.899Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"48"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"v7HSMTfRa68Suh8at","alias":"","msg":"153","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:01.296Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:01.364Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"153"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"vYYLKrHc8yDr9AZC7","alias":"","msg":"178","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:11.540Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:11.576Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"178"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"vn9Qp6fC5s2cEKt3a","alias":"","msg":"267","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:44.152Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:44.176Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"267"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"voqrApbpcnuGtkLMp","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"7","ts":new Date("2021-06-14T21:26:51.398Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:51.520Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"7"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"vsYTFFAkiGKsWKPdz","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"thread message sent to main room","tshow":true,"ts":new Date("2021-06-14T21:26:49.776Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:49.935Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"4"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"vvEjAvsntsAuuPTKF","alias":"","msg":"83","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:33.249Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:33.276Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"83"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"w6HMBqLX9eYHvmZzD","alias":"","msg":"70","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:28.656Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:28.679Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"70"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"w7hroywNx2tecwn2b","alias":"","msg":"129","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:50.523Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:50.618Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"129"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"wDgerDqxzMCmqSYKz","alias":"","msg":"58","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:24.376Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:24.390Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"58"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"wSYKDGziubGABmmNb","alias":"","msg":"82","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:32.885Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:32.917Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"82"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"wXScdaF6cs3tBLbvg","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"6","ts":new Date("2021-06-14T21:26:50.887Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:50.998Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"6"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"wXb2eMCF5em722dSG","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"quoted","ts":new Date("2021-06-14T21:26:49.220Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:49.341Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"quoted"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"wZ2FMa6d2zMFwZwjL","alias":"","msg":"12","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:08.336Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:08.359Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"12"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"wg5oydMJc8fp5wgoR","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"8","ts":new Date("2021-06-14T21:26:51.875Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:52.025Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"8"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"wr9zgcFELuZGzo2Xe","alias":"","msg":"147","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:58.876Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:58.991Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"147"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"xXXexskd39XS4tfXE","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"25","ts":new Date("2021-06-14T21:27:09.149Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:09.219Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"25"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"xhCSEvqZjmWP8XCzv","alias":"","msg":"41","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:18.504Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:18.518Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"41"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"y4XkigXMgv6ACLd9R","alias":"","msg":"92","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:36.500Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:36.519Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"92"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"y8QHZid5pNvXyg9fX","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"13","ts":new Date("2021-06-14T21:26:55.736Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:55.823Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"13"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"yKoyhAhYETLv6kXdf","alias":"","msg":"81","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:32.531Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:32.554Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"81"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"ygZKFw8DnQFhjxEnn","alias":"","msg":"148","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:59.377Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:59.427Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"148"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"zApewG2ppDrjPqwHz","alias":"","msg":"278","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:48.137Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:48.298Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"278"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"zAvAphoMoaS4m5z2s","alias":"","msg":"134","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:53.078Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:53.151Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"134"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"zGMAPTHCPwt3jBCkm","alias":"","msg":"202","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:20.825Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:20.863Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"202"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"zPfgHYTQeskiL8Jp6","alias":"","msg":"222","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:27.932Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:27.952Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"222"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"zQu55sCe6sQaPwBHJ","alias":"","msg":"67","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:27.571Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:27.596Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"67"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"zSZSann7XBW5672HA","rid":"5iyMRT843rNn4wwHv","tmid":"NAXDFHoxA44rsyujh","msg":"12","ts":new Date("2021-06-14T21:26:54.930Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:26:55.046Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"12"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"zjeYZ7WrpmJWwkuqB","alias":"","msg":"75","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:26:30.421Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:26:30.439Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"75"}]}]});
|
||||
db.getCollection("rocketchat_message").insert({"_id":"ztdbnfLLo6f6hnRMo","alias":"","msg":"197","attachments":[],"parseUrls":true,"groupable":false,"ts":new Date("2021-06-14T21:27:18.946Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"rid":"GFR2xxircSsyJxx9F","_updatedAt":new Date("2021-06-14T21:27:18.970Z"),"urls":[],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"PLAIN_TEXT","value":"197"}]}]});
|
||||
|
|
|
@ -1 +1,3 @@
|
|||
db.getCollection("rocketchat_room").insert({"_id":"GENERAL","ts":new Date(1584022382998),"t":"c","name":"general","usernames":[],"msgs":NumberInt(3),"usersCount":NumberInt(3),"default":true,"_updatedAt":new Date(1589465366516),"lastMessage":{"_id":"fsy2dZJgmmboowJ8N","t":"uj","rid":"GENERAL","ts":new Date(1584022608462),"msg":"admin","u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin"},"groupable":false,"_updatedAt":new Date(1584022608462)},"lm":new Date(1584022608462)});
|
||||
db.getCollection("rocketchat_room").insert({"_id":"5iyMRT843rNn4wwHv","fname":"jumping-thread","customFields":{},"description":"","broadcast":false,"encrypted":false,"name":"jumping-thread","t":"p","msgs":33,"usersCount":1,"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin"},"ts":new Date("2021-06-14T21:26:33.120Z"),"ro":false,"default":false,"sysMes":true,"_updatedAt":new Date("2021-06-14T21:27:34.527Z"),"lastMessage":{"_id":"R7iDtoqMcP8iH9AZi","rid":"5iyMRT843rNn4wwHv","msg":"http://localhost:3000/group/jumping-thread?msg=rMbGKvG834q8EeNGs Go to 1","ts":new Date("2021-06-14T21:27:34.440Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:27:34.517Z"),"attachments":[{"text":"1","author_name":"admin","author_icon":"/avatar/admin","message_link":"http://localhost:3000/group/jumping-thread?msg=rMbGKvG834q8EeNGs","attachments":[],"ts":new Date("2021-06-14T21:26:48.151Z")}],"urls":[{"url":"http://localhost:3000/group/jumping-thread?msg=rMbGKvG834q8EeNGs","ignoreParse":true}],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"LINK","value":{"src":{"type":"PLAIN_TEXT","value":"http://localhost:3000/group/jumping-thread?msg=rMbGKvG834q8EeNGs"},"label":{"type":"PLAIN_TEXT","value":"http://localhost:3000/group/jumping-thread?msg=rMbGKvG834q8EeNGs"}}},{"type":"PLAIN_TEXT","value":" Go to 1"}]}]},"lm":new Date("2021-06-14T21:27:34.440Z")});
|
||||
db.getCollection("rocketchat_room").insert({"_id":"GENERAL","ts":new Date("2020-03-12T14:13:02.998Z"),"t":"c","name":"general","usernames":[],"msgs":3,"usersCount":3,"default":true,"_updatedAt":new Date("2020-05-14T14:09:26.516Z"),"lastMessage":{"_id":"fsy2dZJgmmboowJ8N","t":"uj","rid":"GENERAL","ts":new Date("2020-03-12T14:16:48.462Z"),"msg":"admin","u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin"},"groupable":false,"_updatedAt":new Date("2020-03-12T14:16:48.462Z")},"lm":new Date("2020-03-12T14:16:48.462Z")});
|
||||
db.getCollection("rocketchat_room").insert({"_id":"GFR2xxircSsyJxx9F","fname":"jumping","customFields":{},"description":"","broadcast":false,"encrypted":false,"name":"jumping","t":"p","msgs":302,"usersCount":1,"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin"},"ts":new Date("2021-06-14T21:23:44.808Z"),"ro":false,"default":false,"sysMes":true,"_updatedAt":new Date("2021-06-14T21:28:50.547Z"),"lastMessage":{"_id":"asNxLidHfTi7E3rri","rid":"GFR2xxircSsyJxx9F","msg":"[ ](http://localhost:3000/group/jumping?msg=DvKX5qbzg8CWE3oNC) Quote first message","ts":new Date("2021-06-14T21:28:50.477Z"),"u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2021-06-14T21:28:50.537Z"),"attachments":[{"text":"1","author_name":"admin","author_icon":"/avatar/admin","message_link":"http://localhost:3000/group/jumping?msg=DvKX5qbzg8CWE3oNC","attachments":[],"ts":new Date("2021-06-14T21:24:50.182Z")}],"urls":[{"url":"http://localhost:3000/group/jumping?msg=DvKX5qbzg8CWE3oNC","ignoreParse":true}],"mentions":[],"channels":[],"md":[{"type":"PARAGRAPH","value":[{"type":"LINK","value":{"src":{"type":"PLAIN_TEXT","value":"http://localhost:3000/group/jumping?msg=DvKX5qbzg8CWE3oNC"},"label":{"type":"PLAIN_TEXT","value":" "}}},{"type":"PLAIN_TEXT","value":" Quote first message"}]}]},"lm":new Date("2021-06-14T21:28:50.477Z")});
|
||||
|
|
|
@ -333,7 +333,7 @@ db.getCollection("rocketchat_settings").insert({"_id":"Discussion","_updatedAt":
|
|||
db.getCollection("rocketchat_settings").insert({"_id":"Discussion_enabled","_updatedAt":new Date(1591734399894),"autocomplete":true,"blocked":false,"createdAt":new Date(1584022382543),"group":"Discussion","hidden":false,"i18nDescription":"Discussion_enabled_Description","i18nLabel":"Enable","packageValue":true,"public":true,"secret":false,"sorter":NumberInt(0),"ts":new Date(1587032125124),"type":"boolean","value":true,"valueSource":"meteorSettingsValue","meteorSettingsValue":true});
|
||||
db.getCollection("rocketchat_settings").insert({"_id":"Document_Domain","_updatedAt":new Date(1591734378033),"autocomplete":true,"blocked":false,"createdAt":new Date(1584022363283),"group":"General","hidden":false,"i18nDescription":"Document_Domain_Description","i18nLabel":"Document_Domain","packageValue":"","public":true,"secret":false,"sorter":NumberInt(13),"ts":new Date(1589465206477),"type":"string","value":"","valueSource":"packageValue"});
|
||||
db.getCollection("rocketchat_settings").insert({"_id":"E2E Encryption","_updatedAt":new Date(1591734392055),"blocked":false,"createdAt":new Date(1584022376881),"hidden":false,"i18nDescription":"E2E Encryption_Description","i18nLabel":"E2E Encryption","ts":new Date(1591734392055),"type":"group"});
|
||||
db.getCollection("rocketchat_settings").insert({"_id":"E2E_Enable","_updatedAt":new Date(1591734392060),"alert":"E2E_Enable_alert","autocomplete":true,"blocked":false,"createdAt":new Date(1584022376886),"group":"E2E Encryption","hidden":false,"i18nDescription":"E2E_Enable_description","i18nLabel":"Enabled","packageValue":false,"public":true,"secret":false,"sorter":NumberInt(0),"ts":new Date(1587032118031),"type":"boolean","value":false,"valueSource":"meteorSettingsValue","meteorSettingsValue":false});
|
||||
db.getCollection("rocketchat_settings").insert({"_id":"E2E_Enable","_updatedAt":new Date(1591734392060),"alert":"E2E_Enable_alert","autocomplete":true,"blocked":false,"createdAt":new Date(1584022376886),"group":"E2E Encryption","hidden":false,"i18nDescription":"E2E_Enable_description","i18nLabel":"Enabled","packageValue":false,"public":true,"secret":false,"sorter":NumberInt(0),"ts":new Date(1587032118031),"type":"boolean","value":true,"valueSource":"meteorSettingsValue","meteorSettingsValue":false});
|
||||
db.getCollection("rocketchat_settings").insert({"_id":"E2E_Enabled_Default_DirectRooms","_updatedAt":new Date(1591734392064),"autocomplete":true,"blocked":false,"createdAt":new Date(1589465219630),"enableQuery":"{\"_id\":\"E2E_Enable\",\"value\":true}","group":"E2E Encryption","hidden":false,"i18nDescription":"E2E_Enabled_Default_DirectRooms_Description","i18nLabel":"E2E_Enabled_Default_DirectRooms","packageValue":false,"secret":false,"sorter":NumberInt(1),"ts":new Date(1591648586549),"type":"boolean","value":false,"valueSource":"meteorSettingsValue","meteorSettingsValue":false});
|
||||
db.getCollection("rocketchat_settings").insert({"_id":"E2E_Enabled_Default_PrivateRooms","_updatedAt":new Date(1591734392068),"autocomplete":true,"blocked":false,"createdAt":new Date(1589465219635),"enableQuery":"{\"_id\":\"E2E_Enable\",\"value\":true}","group":"E2E Encryption","hidden":false,"i18nDescription":"E2E_Enabled_Default_PrivateRooms_Description","i18nLabel":"E2E_Enabled_Default_PrivateRooms","packageValue":false,"secret":false,"sorter":NumberInt(2),"ts":new Date(1591648586557),"type":"boolean","value":false,"valueSource":"meteorSettingsValue","meteorSettingsValue":false});
|
||||
db.getCollection("rocketchat_settings").insert({"_id":"Email","_updatedAt":new Date(1591734377231),"blocked":false,"createdAt":new Date(1584022362339),"hidden":false,"i18nDescription":"Email_Description","i18nLabel":"Email","ts":new Date(1591734377231),"type":"group"});
|
||||
|
|
|
@ -1 +1,3 @@
|
|||
db.getCollection("rocketchat_subscription").insert({"_id":"KRktZiYdT9DK3dZgJ","open":true,"alert":false,"unread":NumberInt(0),"userMentions":NumberInt(0),"groupMentions":NumberInt(0),"ts":new Date(1584022608447),"rid":"GENERAL","name":"general","t":"c","u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date(1589465366503),"ls":new Date(1589465366503)});
|
||||
db.getCollection("rocketchat_subscription").insert({"_id":"KRktZiYdT9DK3dZgJ","open":true,"alert":false,"unread":0,"userMentions":0,"groupMentions":0,"ts":new Date("2020-03-12T14:16:48.447Z"),"rid":"GENERAL","name":"general","t":"c","u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin","name":"Admin"},"_updatedAt":new Date("2020-05-14T14:09:26.503Z"),"ls":new Date("2020-05-14T14:09:26.503Z")});
|
||||
db.getCollection("rocketchat_subscription").insert({"_id":"MMF5fwJkT8zrTjX9b","open":true,"alert":false,"unread":0,"userMentions":0,"groupMentions":0,"ts":new Date("2021-06-14T21:26:33.120Z"),"rid":"5iyMRT843rNn4wwHv","name":"jumping-thread","fname":"jumping-thread","customFields":{},"t":"p","u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin"},"ls":new Date("2021-06-14T21:27:34.525Z"),"_updatedAt":new Date("2021-06-14T21:27:34.525Z"),"roles":["owner"],"lr":new Date("2021-06-14T21:27:14.840Z")});
|
||||
db.getCollection("rocketchat_subscription").insert({"_id":"o3jB8uKAC2cBkYhcL","open":true,"alert":false,"unread":0,"userMentions":0,"groupMentions":0,"ts":new Date("2021-06-14T21:23:44.808Z"),"rid":"GFR2xxircSsyJxx9F","name":"jumping","fname":"jumping","customFields":{},"t":"p","u":{"_id":"nM6vXyDLGGzSPsLNy","username":"admin"},"ls":new Date("2021-06-14T21:28:50.546Z"),"_updatedAt":new Date("2021-06-14T21:28:50.546Z"),"roles":["owner"]});
|
||||
|
|
|
@ -1,122 +1,119 @@
|
|||
const {
|
||||
device, expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const data = require('../data');
|
||||
|
||||
async function navigateToWorkspace(server = data.server) {
|
||||
await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(10000);
|
||||
await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(10000);
|
||||
await element(by.id('join-workspace')).tap();
|
||||
await waitFor(element(by.id('new-server-view'))).toBeVisible().withTimeout(60000);
|
||||
await element(by.id('new-server-view-input')).typeText(`${server}\n`);
|
||||
await element(by.id('new-server-view-input')).typeText(`${ server }\n`);
|
||||
await waitFor(element(by.id('workspace-view'))).toBeVisible().withTimeout(60000);
|
||||
await expect(element(by.id('workspace-view'))).toBeVisible();
|
||||
}
|
||||
|
||||
async function navigateToLogin(server) {
|
||||
await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(20000);
|
||||
await navigateToWorkspace(server);
|
||||
await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(20000);
|
||||
await navigateToWorkspace(server);
|
||||
await element(by.id('workspace-view-login')).tap();
|
||||
await waitFor(element(by.id('login-view'))).toBeVisible().withTimeout(2000);
|
||||
await expect(element(by.id('login-view'))).toBeVisible();
|
||||
await waitFor(element(by.id('login-view'))).toBeVisible().withTimeout(2000);
|
||||
await expect(element(by.id('login-view'))).toBeVisible();
|
||||
}
|
||||
|
||||
async function navigateToRegister(server) {
|
||||
await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(20000);
|
||||
await navigateToWorkspace(server);
|
||||
await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(20000);
|
||||
await navigateToWorkspace(server);
|
||||
await element(by.id('workspace-view-register')).tap();
|
||||
await waitFor(element(by.id('register-view'))).toBeVisible().withTimeout(2000);
|
||||
await waitFor(element(by.id('register-view'))).toBeVisible().withTimeout(2000);
|
||||
}
|
||||
|
||||
async function login(username, password) {
|
||||
await waitFor(element(by.id('login-view'))).toBeVisible().withTimeout(2000);
|
||||
await element(by.id('login-view-email')).replaceText(username);
|
||||
await element(by.id('login-view-password')).replaceText(password);
|
||||
await element(by.id('login-view-submit')).tap();
|
||||
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(30000);
|
||||
await waitFor(element(by.id('login-view'))).toBeVisible().withTimeout(2000);
|
||||
await element(by.id('login-view-email')).replaceText(username);
|
||||
await element(by.id('login-view-password')).replaceText(password);
|
||||
await element(by.id('login-view-submit')).tap();
|
||||
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(30000);
|
||||
}
|
||||
|
||||
async function logout() {
|
||||
await element(by.id('rooms-list-view-sidebar')).tap();
|
||||
await waitFor(element(by.id('sidebar-view'))).toBeVisible().withTimeout(2000);
|
||||
await element(by.id('rooms-list-view-sidebar')).tap();
|
||||
await waitFor(element(by.id('sidebar-view'))).toBeVisible().withTimeout(2000);
|
||||
await waitFor(element(by.id('sidebar-settings'))).toBeVisible().withTimeout(2000);
|
||||
await element(by.id('sidebar-settings')).tap();
|
||||
await waitFor(element(by.id('settings-view'))).toBeVisible().withTimeout(2000);
|
||||
await element(by.type('UIScrollView')).atIndex(1).scrollTo('bottom');
|
||||
await element(by.id('settings-logout')).tap();
|
||||
const logoutAlertMessage = 'You will be logged out of this application.';
|
||||
await waitFor(element(by.text(logoutAlertMessage)).atIndex(0)).toExist().withTimeout(10000);
|
||||
await expect(element(by.text(logoutAlertMessage)).atIndex(0)).toExist();
|
||||
await element(by.text('Logout')).tap();
|
||||
await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(10000);
|
||||
await expect(element(by.id('onboarding-view'))).toBeVisible();
|
||||
await element(by.id('sidebar-settings')).tap();
|
||||
await waitFor(element(by.id('settings-view'))).toBeVisible().withTimeout(2000);
|
||||
await element(by.type('UIScrollView')).atIndex(1).scrollTo('bottom');
|
||||
await element(by.id('settings-logout')).tap();
|
||||
const logoutAlertMessage = 'You will be logged out of this application.';
|
||||
await waitFor(element(by.text(logoutAlertMessage)).atIndex(0)).toExist().withTimeout(10000);
|
||||
await expect(element(by.text(logoutAlertMessage)).atIndex(0)).toExist();
|
||||
await element(by.text('Logout')).tap();
|
||||
await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(10000);
|
||||
await expect(element(by.id('onboarding-view'))).toBeVisible();
|
||||
}
|
||||
|
||||
async function mockMessage(message, isThread = false) {
|
||||
let input = isThread ? 'messagebox-input-thread' : 'messagebox-input';
|
||||
const input = isThread ? 'messagebox-input-thread' : 'messagebox-input';
|
||||
await element(by.id(input)).tap();
|
||||
await element(by.id(input)).typeText(`${ data.random }${ message }`);
|
||||
await element(by.id('messagebox-send-message')).tap();
|
||||
await waitFor(element(by.label(`${ data.random }${ message }`))).toExist().withTimeout(60000);
|
||||
await expect(element(by.label(`${ data.random }${ message }`))).toExist();
|
||||
await element(by.label(`${ data.random }${ message }`)).atIndex(0).tap();
|
||||
};
|
||||
|
||||
async function starMessage(message){
|
||||
const messageLabel = `${ data.random }${ message }`
|
||||
await element(by.label(messageLabel)).atIndex(0).longPress();
|
||||
await expect(element(by.id('action-sheet'))).toExist();
|
||||
await expect(element(by.id('action-sheet-handle'))).toBeVisible();
|
||||
await element(by.id('action-sheet-handle')).swipe('up', 'fast', 0.5);
|
||||
await element(by.label('Star')).atIndex(0).tap();
|
||||
await waitFor(element(by.id('action-sheet'))).not.toExist().withTimeout(5000);
|
||||
};
|
||||
|
||||
async function pinMessage(message){
|
||||
const messageLabel = `${ data.random }${ message }`
|
||||
await waitFor(element(by.label(messageLabel)).atIndex(0)).toExist();
|
||||
await element(by.label(messageLabel)).atIndex(0).longPress();
|
||||
await expect(element(by.id('action-sheet'))).toExist();
|
||||
await expect(element(by.id('action-sheet-handle'))).toBeVisible();
|
||||
await element(by.id('action-sheet-handle')).swipe('up', 'fast', 0.5);
|
||||
await element(by.label('Pin')).atIndex(0).tap();
|
||||
await waitFor(element(by.id('action-sheet'))).not.toExist().withTimeout(5000);
|
||||
await expect(element(by.label(`${ data.random }${ message }`))).toExist();
|
||||
await element(by.label(`${ data.random }${ message }`)).atIndex(0).tap();
|
||||
}
|
||||
|
||||
async function dismissReviewNag(){
|
||||
await waitFor(element(by.text('Are you enjoying this app?'))).toExist().withTimeout(60000);
|
||||
await element(by.label('No').and(by.type('_UIAlertControllerActionView'))).tap(); // Tap `no` on ask for review alert
|
||||
async function starMessage(message) {
|
||||
const messageLabel = `${ data.random }${ message }`;
|
||||
await element(by.label(messageLabel)).atIndex(0).longPress();
|
||||
await expect(element(by.id('action-sheet'))).toExist();
|
||||
await expect(element(by.id('action-sheet-handle'))).toBeVisible();
|
||||
await element(by.id('action-sheet-handle')).swipe('up', 'fast', 0.5);
|
||||
await element(by.label('Star')).atIndex(0).tap();
|
||||
await waitFor(element(by.id('action-sheet'))).not.toExist().withTimeout(5000);
|
||||
}
|
||||
|
||||
async function pinMessage(message) {
|
||||
const messageLabel = `${ data.random }${ message }`;
|
||||
await waitFor(element(by.label(messageLabel)).atIndex(0)).toExist();
|
||||
await element(by.label(messageLabel)).atIndex(0).longPress();
|
||||
await expect(element(by.id('action-sheet'))).toExist();
|
||||
await expect(element(by.id('action-sheet-handle'))).toBeVisible();
|
||||
await element(by.id('action-sheet-handle')).swipe('up', 'fast', 0.5);
|
||||
await element(by.label('Pin')).atIndex(0).tap();
|
||||
await waitFor(element(by.id('action-sheet'))).not.toExist().withTimeout(5000);
|
||||
}
|
||||
|
||||
async function dismissReviewNag() {
|
||||
await waitFor(element(by.text('Are you enjoying this app?'))).toExist().withTimeout(60000);
|
||||
await element(by.label('No').and(by.type('_UIAlertControllerActionView'))).tap(); // Tap `no` on ask for review alert
|
||||
}
|
||||
|
||||
async function tapBack() {
|
||||
await element(by.id('header-back')).atIndex(0).tap();
|
||||
await element(by.id('header-back')).atIndex(0).tap();
|
||||
}
|
||||
|
||||
async function sleep(ms) {
|
||||
return new Promise(res => setTimeout(res, ms));
|
||||
function sleep(ms) {
|
||||
return new Promise(res => setTimeout(res, ms));
|
||||
}
|
||||
|
||||
async function searchRoom(room) {
|
||||
await element(by.id('rooms-list-view-search')).tap();
|
||||
await element(by.id('rooms-list-view-search')).tap();
|
||||
await expect(element(by.id('rooms-list-view-search-input'))).toExist();
|
||||
await waitFor(element(by.id('rooms-list-view-search-input'))).toExist().withTimeout(5000);
|
||||
await element(by.id('rooms-list-view-search-input')).typeText(room);
|
||||
await sleep(300);
|
||||
await element(by.id('rooms-list-view-search-input')).typeText(room);
|
||||
await sleep(300);
|
||||
await waitFor(element(by.id(`rooms-list-view-item-${ room }`))).toBeVisible().withTimeout(60000);
|
||||
}
|
||||
|
||||
async function tryTapping(theElement, timeout, longtap = false){
|
||||
async function tryTapping(theElement, timeout, longtap = false) {
|
||||
try {
|
||||
if(longtap){
|
||||
await theElement.longPress()
|
||||
} else {
|
||||
await theElement.tap()
|
||||
}
|
||||
} catch(e) {
|
||||
if(timeout <= 0){ //TODO: Maths. How closely has the timeout been honoured here?
|
||||
throw e
|
||||
if (longtap) {
|
||||
await theElement.longPress();
|
||||
} else {
|
||||
await theElement.tap();
|
||||
}
|
||||
await sleep(100)
|
||||
await tryTapping(theElement, timeout - 100)
|
||||
} catch (e) {
|
||||
if (timeout <= 0) { // TODO: Maths. How closely has the timeout been honoured here?
|
||||
throw e;
|
||||
}
|
||||
await sleep(100);
|
||||
await tryTapping(theElement, timeout - 100);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -126,21 +123,21 @@ const checkServer = async(server) => {
|
|||
await waitFor(element(by.id('sidebar-view'))).toBeVisible().withTimeout(2000);
|
||||
await waitFor(element(by.label(label))).toBeVisible().withTimeout(10000);
|
||||
await element(by.id('sidebar-close-drawer')).tap();
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
navigateToWorkspace,
|
||||
navigateToLogin,
|
||||
navigateToRegister,
|
||||
login,
|
||||
logout,
|
||||
mockMessage,
|
||||
starMessage,
|
||||
pinMessage,
|
||||
dismissReviewNag,
|
||||
tapBack,
|
||||
sleep,
|
||||
searchRoom,
|
||||
tryTapping,
|
||||
checkServer
|
||||
};
|
||||
navigateToWorkspace,
|
||||
navigateToLogin,
|
||||
navigateToRegister,
|
||||
login,
|
||||
logout,
|
||||
mockMessage,
|
||||
starMessage,
|
||||
pinMessage,
|
||||
dismissReviewNag,
|
||||
tapBack,
|
||||
sleep,
|
||||
searchRoom,
|
||||
tryTapping,
|
||||
checkServer
|
||||
};
|
||||
|
|
|
@ -6,176 +6,174 @@ const TEAM_TYPE = {
|
|||
PRIVATE: 1
|
||||
};
|
||||
|
||||
let server = data.server
|
||||
const { server } = data;
|
||||
|
||||
const rocketchat = axios.create({
|
||||
baseURL: `${server}/api/v1/`,
|
||||
headers: {
|
||||
'Content-Type': 'application/json;charset=UTF-8',
|
||||
}
|
||||
})
|
||||
baseURL: `${ server }/api/v1/`,
|
||||
headers: {
|
||||
'Content-Type': 'application/json;charset=UTF-8'
|
||||
}
|
||||
});
|
||||
|
||||
const login = async (username, password) => {
|
||||
console.log(`Logging in as user ${username}`)
|
||||
const response = await rocketchat.post('login', {
|
||||
"user": username,
|
||||
"password": password
|
||||
})
|
||||
const userId = response.data.data.userId
|
||||
const authToken = response.data.data.authToken
|
||||
rocketchat.defaults.headers.common['X-User-Id'] = userId
|
||||
rocketchat.defaults.headers.common['X-Auth-Token'] = authToken
|
||||
return { authToken, userId };
|
||||
}
|
||||
const login = async(username, password) => {
|
||||
console.log(`Logging in as user ${ username }`);
|
||||
const response = await rocketchat.post('login', {
|
||||
user: username,
|
||||
password
|
||||
});
|
||||
const { userId } = response.data.data;
|
||||
const { authToken } = response.data.data;
|
||||
rocketchat.defaults.headers.common['X-User-Id'] = userId;
|
||||
rocketchat.defaults.headers.common['X-Auth-Token'] = authToken;
|
||||
return { authToken, userId };
|
||||
};
|
||||
|
||||
const createUser = async (username, password, name, email) => {
|
||||
console.log(`Creating user ${username}`)
|
||||
try {
|
||||
await rocketchat.post('users.create', {
|
||||
"username": username,
|
||||
"password": password,
|
||||
"name": name,
|
||||
"email": email
|
||||
})
|
||||
} catch (error) {
|
||||
console.log(JSON.stringify(error))
|
||||
throw "Failed to create user"
|
||||
}
|
||||
}
|
||||
const createUser = async(username, password, name, email) => {
|
||||
console.log(`Creating user ${ username }`);
|
||||
try {
|
||||
await rocketchat.post('users.create', {
|
||||
username,
|
||||
password,
|
||||
name,
|
||||
email
|
||||
});
|
||||
} catch (error) {
|
||||
console.log(JSON.stringify(error));
|
||||
throw new Error('Failed to create user');
|
||||
}
|
||||
};
|
||||
|
||||
const createChannelIfNotExists = async (channelname) => {
|
||||
console.log(`Creating public channel ${channelname}`)
|
||||
try {
|
||||
const room = await rocketchat.post('channels.create', {
|
||||
"name": channelname
|
||||
})
|
||||
return room
|
||||
} catch (createError) {
|
||||
try { //Maybe it exists already?
|
||||
const room = rocketchat.get(`channels.info?roomName=${channelname}`)
|
||||
return room
|
||||
} catch (infoError) {
|
||||
console.log(JSON.stringify(createError))
|
||||
console.log(JSON.stringify(infoError))
|
||||
throw "Failed to find or create public channel"
|
||||
}
|
||||
}
|
||||
}
|
||||
const createChannelIfNotExists = async(channelname) => {
|
||||
console.log(`Creating public channel ${ channelname }`);
|
||||
try {
|
||||
const room = await rocketchat.post('channels.create', {
|
||||
name: channelname
|
||||
});
|
||||
return room;
|
||||
} catch (createError) {
|
||||
try { // Maybe it exists already?
|
||||
const room = rocketchat.get(`channels.info?roomName=${ channelname }`);
|
||||
return room;
|
||||
} catch (infoError) {
|
||||
console.log(JSON.stringify(createError));
|
||||
console.log(JSON.stringify(infoError));
|
||||
throw new Error('Failed to find or create public channel');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const createTeamIfNotExists = async (teamname) => {
|
||||
console.log(`Creating private team ${teamname}`)
|
||||
try {
|
||||
await rocketchat.post('teams.create', {
|
||||
"name": teamname,
|
||||
"type": TEAM_TYPE.PRIVATE
|
||||
})
|
||||
} catch (createError) {
|
||||
try { //Maybe it exists already?
|
||||
await rocketchat.get(`teams.info?teamName=${teamname}`)
|
||||
} catch (infoError) {
|
||||
console.log(JSON.stringify(createError))
|
||||
console.log(JSON.stringify(infoError))
|
||||
throw "Failed to find or create private team"
|
||||
}
|
||||
}
|
||||
}
|
||||
const createTeamIfNotExists = async(teamname) => {
|
||||
console.log(`Creating private team ${ teamname }`);
|
||||
try {
|
||||
await rocketchat.post('teams.create', {
|
||||
name: teamname,
|
||||
type: TEAM_TYPE.PRIVATE
|
||||
});
|
||||
} catch (createError) {
|
||||
try { // Maybe it exists already?
|
||||
await rocketchat.get(`teams.info?teamName=${ teamname }`);
|
||||
} catch (infoError) {
|
||||
console.log(JSON.stringify(createError));
|
||||
console.log(JSON.stringify(infoError));
|
||||
throw new Error('Failed to find or create private team');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const createGroupIfNotExists = async (groupname) => {
|
||||
console.log(`Creating private group ${groupname}`)
|
||||
try {
|
||||
await rocketchat.post('groups.create', {
|
||||
"name": groupname
|
||||
})
|
||||
} catch (createError) {
|
||||
try { //Maybe it exists already?
|
||||
await rocketchat.get(`groups.info?roomName=${groupname}`)
|
||||
} catch (infoError) {
|
||||
console.log(JSON.stringify(createError))
|
||||
console.log(JSON.stringify(infoError))
|
||||
throw "Failed to find or create private group"
|
||||
}
|
||||
}
|
||||
}
|
||||
const createGroupIfNotExists = async(groupname) => {
|
||||
console.log(`Creating private group ${ groupname }`);
|
||||
try {
|
||||
await rocketchat.post('groups.create', {
|
||||
name: groupname
|
||||
});
|
||||
} catch (createError) {
|
||||
try { // Maybe it exists already?
|
||||
await rocketchat.get(`groups.info?roomName=${ groupname }`);
|
||||
} catch (infoError) {
|
||||
console.log(JSON.stringify(createError));
|
||||
console.log(JSON.stringify(infoError));
|
||||
throw new Error('Failed to find or create private group');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const changeChannelJoinCode = async (roomId, joinCode) => {
|
||||
console.log(`Changing channel Join Code ${roomId}`)
|
||||
try {
|
||||
await rocketchat.post('method.call/saveRoomSettings', {
|
||||
message: JSON.stringify({
|
||||
method: 'saveRoomSettings',
|
||||
params: [
|
||||
roomId,
|
||||
{ joinCode }
|
||||
]
|
||||
})
|
||||
})
|
||||
} catch (createError) {
|
||||
console.log(JSON.stringify(createError))
|
||||
throw "Failed to create protected channel"
|
||||
}
|
||||
}
|
||||
const changeChannelJoinCode = async(roomId, joinCode) => {
|
||||
console.log(`Changing channel Join Code ${ roomId }`);
|
||||
try {
|
||||
await rocketchat.post('method.call/saveRoomSettings', {
|
||||
message: JSON.stringify({
|
||||
method: 'saveRoomSettings',
|
||||
params: [
|
||||
roomId,
|
||||
{ joinCode }
|
||||
]
|
||||
})
|
||||
});
|
||||
} catch (createError) {
|
||||
console.log(JSON.stringify(createError));
|
||||
throw new Error('Failed to create protected channel');
|
||||
}
|
||||
};
|
||||
|
||||
const sendMessage = async (user, channel, msg) => {
|
||||
console.log(`Sending message to ${channel}`)
|
||||
try {
|
||||
await login(user.username, user.password);
|
||||
await rocketchat.post('chat.postMessage', { channel, msg });
|
||||
} catch (infoError) {
|
||||
console.log(JSON.stringify(infoError))
|
||||
throw "Failed to find or create private group"
|
||||
}
|
||||
}
|
||||
const sendMessage = async(user, channel, msg) => {
|
||||
console.log(`Sending message to ${ channel }`);
|
||||
try {
|
||||
await login(user.username, user.password);
|
||||
await rocketchat.post('chat.postMessage', { channel, msg });
|
||||
} catch (infoError) {
|
||||
console.log(JSON.stringify(infoError));
|
||||
throw new Error('Failed to find or create private group');
|
||||
}
|
||||
};
|
||||
|
||||
const setup = async () => {
|
||||
await login(data.adminUser, data.adminPassword)
|
||||
|
||||
for (var userKey in data.users) {
|
||||
if (data.users.hasOwnProperty(userKey)) {
|
||||
const user = data.users[userKey]
|
||||
await createUser(user.username, user.password, user.username, user.email)
|
||||
}
|
||||
}
|
||||
const setup = async() => {
|
||||
await login(data.adminUser, data.adminPassword);
|
||||
|
||||
for (var channelKey in data.channels) {
|
||||
if (data.channels.hasOwnProperty(channelKey)) {
|
||||
const channel = data.channels[channelKey]
|
||||
const { data: { channel: { _id } } } = await createChannelIfNotExists(channel.name)
|
||||
for (const userKey in data.users) {
|
||||
if (Object.prototype.hasOwnProperty.call(data.users, userKey)) {
|
||||
const user = data.users[userKey];
|
||||
await createUser(user.username, user.password, user.username, user.email);
|
||||
}
|
||||
}
|
||||
|
||||
if (channel.joinCode) {
|
||||
await changeChannelJoinCode(_id, channel.joinCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (const channelKey in data.channels) {
|
||||
if (Object.prototype.hasOwnProperty.call(data.channels, channelKey)) {
|
||||
const channel = data.channels[channelKey];
|
||||
const { data: { channel: { _id } } } = await createChannelIfNotExists(channel.name);
|
||||
|
||||
await login(data.users.regular.username, data.users.regular.password)
|
||||
if (channel.joinCode) {
|
||||
await changeChannelJoinCode(_id, channel.joinCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (var groupKey in data.groups) {
|
||||
if (data.groups.hasOwnProperty(groupKey)) {
|
||||
const group = data.groups[groupKey]
|
||||
await createGroupIfNotExists(group.name)
|
||||
}
|
||||
}
|
||||
await login(data.users.regular.username, data.users.regular.password);
|
||||
|
||||
for (var teamKey in data.teams) {
|
||||
if (data.teams.hasOwnProperty(teamKey)) {
|
||||
const team = data.teams[teamKey]
|
||||
await createTeamIfNotExists(team.name)
|
||||
}
|
||||
}
|
||||
for (const groupKey in data.groups) {
|
||||
if (Object.prototype.hasOwnProperty.call(data.groups, groupKey)) {
|
||||
const group = data.groups[groupKey];
|
||||
await createGroupIfNotExists(group.name);
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
for (const teamKey in data.teams) {
|
||||
if (Object.prototype.hasOwnProperty.call(data.teams, teamKey)) {
|
||||
const team = data.teams[teamKey];
|
||||
await createTeamIfNotExists(team.name);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const get = (endpoint) => {
|
||||
console.log(`GET /${ endpoint }`)
|
||||
return rocketchat.get(endpoint);
|
||||
}
|
||||
console.log(`GET /${ endpoint }`);
|
||||
return rocketchat.get(endpoint);
|
||||
};
|
||||
|
||||
const post = (endpoint, body) => {
|
||||
console.log(`POST /${ endpoint } ${ JSON.stringify(body) }`)
|
||||
return rocketchat.post(endpoint, body);
|
||||
}
|
||||
console.log(`POST /${ endpoint } ${ JSON.stringify(body) }`);
|
||||
return rocketchat.post(endpoint, body);
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
setup, sendMessage, get, post, login
|
||||
}
|
||||
setup, sendMessage, get, post, login
|
||||
};
|
||||
|
|
|
@ -6,4 +6,4 @@ function random(length) {
|
|||
}
|
||||
return text;
|
||||
}
|
||||
module.exports = random;
|
||||
module.exports = random;
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
const {
|
||||
expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const { navigateToLogin, login, sleep, tapBack, mockMessage, searchRoom, logout } = require('../../helpers/app');
|
||||
navigateToLogin, login, sleep, tapBack, mockMessage, searchRoom, logout
|
||||
} = require('../../helpers/app');
|
||||
|
||||
const data = require('../../data');
|
||||
|
||||
const testuser = data.users.regular
|
||||
const otheruser = data.users.alternate
|
||||
const testuser = data.users.regular;
|
||||
const otheruser = data.users.alternate;
|
||||
|
||||
const checkServer = async(server) => {
|
||||
const label = `Connected to ${ server }`;
|
||||
|
@ -14,11 +13,11 @@ const checkServer = async(server) => {
|
|||
await waitFor(element(by.id('sidebar-view'))).toBeVisible().withTimeout(2000);
|
||||
await waitFor(element(by.label(label))).toBeVisible().withTimeout(60000);
|
||||
await element(by.id('sidebar-close-drawer')).tap();
|
||||
}
|
||||
};
|
||||
|
||||
const checkBanner = async() => {
|
||||
await waitFor(element(by.id('listheader-encryption').withDescendant(by.label('Save Your Encryption Password')))).toBeVisible().withTimeout(10000);
|
||||
}
|
||||
};
|
||||
|
||||
async function navigateToRoom(roomName) {
|
||||
await searchRoom(`${ roomName }`);
|
||||
|
@ -45,36 +44,36 @@ describe('E2E Encryption', () => {
|
|||
const room = `encrypted${ data.random }`;
|
||||
const newPassword = 'abc';
|
||||
|
||||
before(async () => {
|
||||
before(async() => {
|
||||
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
|
||||
await navigateToLogin();
|
||||
await login(testuser.username, testuser.password);
|
||||
});
|
||||
|
||||
describe('Banner', async() => {
|
||||
describe('Render', async () => {
|
||||
it('should have encryption badge', async () => {
|
||||
describe('Banner', () => {
|
||||
describe('Render', () => {
|
||||
it('should have encryption badge', async() => {
|
||||
await checkBanner();
|
||||
});
|
||||
});
|
||||
|
||||
describe('Usage', async () => {
|
||||
|
||||
describe('Usage', () => {
|
||||
it('should tap encryption badge and open save password modal', async() => {
|
||||
await element(by.id('listheader-encryption')).tap();
|
||||
await waitFor(element(by.id('e2e-save-password-view'))).toBeVisible().withTimeout(2000);
|
||||
});
|
||||
|
||||
|
||||
it('should tap "How it works" and navigate', async() => {
|
||||
await element(by.id('e2e-save-password-view-how-it-works').and(by.label('How It Works'))).tap();
|
||||
await waitFor(element(by.id('e2e-how-it-works-view'))).toBeVisible().withTimeout(2000);
|
||||
await tapBack();
|
||||
});
|
||||
|
||||
|
||||
it('should tap "Save my password" and close modal', async() => {
|
||||
await element(by.id('e2e-save-password-view-saved-password').and(by.label('I Saved My E2E Password'))).tap();
|
||||
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(2000);
|
||||
});
|
||||
|
||||
|
||||
it('should create encrypted room', async() => {
|
||||
await element(by.id('rooms-list-view-create-channel')).tap();
|
||||
await waitFor(element(by.id('new-message-view'))).toBeVisible().withTimeout(2000);
|
||||
|
@ -92,15 +91,15 @@ describe('E2E Encryption', () => {
|
|||
await waitFor(element(by.id('room-view'))).toBeVisible().withTimeout(60000);
|
||||
await waitFor(element(by.id(`room-view-title-${ room }`))).toBeVisible().withTimeout(60000);
|
||||
});
|
||||
|
||||
|
||||
it('should send message and be able to read it', async() => {
|
||||
await mockMessage('message');
|
||||
await tapBack();
|
||||
});
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
describe('Security and Privacy', async() => {
|
||||
describe('Security and Privacy', () => {
|
||||
it('should navigate to security privacy', async() => {
|
||||
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(2000);
|
||||
await element(by.id('rooms-list-view-sidebar')).tap();
|
||||
|
@ -120,7 +119,7 @@ describe('E2E Encryption', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('E2E Encryption Security', async() => {
|
||||
describe('E2E Encryption Security', () => {
|
||||
it('should navigate to e2e encryption security', async() => {
|
||||
await element(by.id('security-privacy-view-e2e-encryption')).tap();
|
||||
await waitFor(element(by.id('e2e-encryption-security-view'))).toBeVisible().withTimeout(2000);
|
||||
|
@ -133,9 +132,9 @@ describe('E2E Encryption', () => {
|
|||
await expect(element(by.id('e2e-encryption-security-view-change-password').and(by.label('Save Changes')))).toExist();
|
||||
await expect(element(by.id('e2e-encryption-security-view-reset-key').and(by.label('Reset E2E Key')))).toExist();
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
describe('Change password', async() => {
|
||||
describe('Change password', () => {
|
||||
it('should change password', async() => {
|
||||
await element(by.id('e2e-encryption-security-view-password')).typeText(newPassword);
|
||||
await element(by.id('e2e-encryption-security-view-change-password')).tap();
|
||||
|
@ -184,7 +183,7 @@ describe('E2E Encryption', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('Reset E2E key', async() => {
|
||||
describe('Reset E2E key', () => {
|
||||
it('should reset e2e key', async() => {
|
||||
await tapBack();
|
||||
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(2000);
|
||||
|
@ -195,7 +194,7 @@ describe('E2E Encryption', () => {
|
|||
await waitFor(element(by.text('Are you sure?'))).toExist().withTimeout(2000);
|
||||
await expect(element(by.text('You\'re going to be logged out.'))).toExist();
|
||||
await element(by.label('Yes, reset it').and(by.type('UILabel'))).tap();
|
||||
await sleep(2000)
|
||||
await sleep(2000);
|
||||
await waitFor(element(by.id('workspace-view'))).toBeVisible().withTimeout(10000);
|
||||
await waitFor(element(by.text('You\'ve been logged out by the server. Please log in again.'))).toExist().withTimeout(2000);
|
||||
await element(by.label('OK').and(by.type('_UIAlertControllerActionView'))).tap();
|
||||
|
@ -203,7 +202,7 @@ describe('E2E Encryption', () => {
|
|||
await waitFor(element(by.id('login-view'))).toBeVisible().withTimeout(2000);
|
||||
await login(testuser.username, testuser.password);
|
||||
await waitFor(element(by.id('listheader-encryption').withDescendant(by.label('Save Your Encryption Password')))).toBeVisible().withTimeout(2000);
|
||||
})
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -211,21 +210,21 @@ describe('E2E Encryption', () => {
|
|||
it('check save banner', async() => {
|
||||
await checkServer(data.server);
|
||||
await checkBanner();
|
||||
})
|
||||
|
||||
});
|
||||
|
||||
it('should add server and create new user', async() => {
|
||||
await sleep(5000);
|
||||
await element(by.id('rooms-list-header-server-dropdown-button')).tap();
|
||||
await waitFor(element(by.id('rooms-list-header-server-dropdown'))).toBeVisible().withTimeout(5000);
|
||||
await element(by.id('rooms-list-header-server-add')).tap();
|
||||
|
||||
|
||||
// TODO: refactor
|
||||
await waitFor(element(by.id('new-server-view'))).toBeVisible().withTimeout(60000);
|
||||
await element(by.id('new-server-view-input')).typeText(`${data.alternateServer}\n`);
|
||||
await element(by.id('new-server-view-input')).typeText(`${ data.alternateServer }\n`);
|
||||
await waitFor(element(by.id('workspace-view'))).toBeVisible().withTimeout(60000);
|
||||
await element(by.id('workspace-view-register')).tap();
|
||||
await waitFor(element(by.id('register-view'))).toBeVisible().withTimeout(2000);
|
||||
|
||||
|
||||
// Register new user
|
||||
await element(by.id('register-view-name')).replaceText(data.registeringUser.username);
|
||||
await element(by.id('register-view-username')).replaceText(data.registeringUser.username);
|
||||
|
@ -233,10 +232,10 @@ describe('E2E Encryption', () => {
|
|||
await element(by.id('register-view-password')).typeText(data.registeringUser.password);
|
||||
await element(by.id('register-view-submit')).tap();
|
||||
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(60000);
|
||||
|
||||
|
||||
await checkServer(data.alternateServer);
|
||||
});
|
||||
|
||||
|
||||
it('should change back', async() => {
|
||||
await element(by.id('rooms-list-header-server-dropdown-button')).tap();
|
||||
await waitFor(element(by.id('rooms-list-header-server-dropdown'))).toBeVisible().withTimeout(5000);
|
||||
|
@ -255,4 +254,4 @@ describe('E2E Encryption', () => {
|
|||
await checkBanner();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
// const OTP = require('otp.js');
|
||||
// const GA = OTP.googleAuthenticator;
|
||||
|
||||
const {
|
||||
device, expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const OTP = require('otp.js');
|
||||
const GA = OTP.googleAuthenticator;
|
||||
const { navigateToLogin, login, mockMessage, tapBack, sleep, searchRoom } = require('../../helpers/app');
|
||||
navigateToLogin, login, mockMessage, tapBack, searchRoom
|
||||
} = require('../../helpers/app');
|
||||
const data = require('../../data');
|
||||
|
||||
const testuser = data.users.regular
|
||||
const otheruser = data.users.alternate
|
||||
const testuser = data.users.regular;
|
||||
const otheruser = data.users.alternate;
|
||||
|
||||
describe('Broadcast room', () => {
|
||||
before(async() => {
|
||||
|
@ -28,7 +28,7 @@ describe('Broadcast room', () => {
|
|||
await element(by.id('selected-users-view-submit')).tap();
|
||||
await waitFor(element(by.id('create-channel-view'))).toExist().withTimeout(5000);
|
||||
await element(by.id('create-channel-name')).replaceText(`broadcast${ data.random }`);
|
||||
await element(by.id('create-channel-broadcast')).longPress(); //https://github.com/facebook/react-native/issues/28032
|
||||
await element(by.id('create-channel-broadcast')).longPress(); // https://github.com/facebook/react-native/issues/28032
|
||||
await element(by.id('create-channel-submit')).tap();
|
||||
await waitFor(element(by.id('room-view'))).toBeVisible().withTimeout(60000);
|
||||
await waitFor(element(by.id(`room-view-title-broadcast${ data.random }`))).toBeVisible().withTimeout(60000);
|
||||
|
@ -54,11 +54,11 @@ describe('Broadcast room', () => {
|
|||
await navigateToLogin();
|
||||
await login(otheruser.username, otheruser.password);
|
||||
|
||||
//await waitFor(element(by.id('two-factor'))).toBeVisible().withTimeout(5000);
|
||||
//await expect(element(by.id('two-factor'))).toBeVisible();
|
||||
//const code = GA.gen(data.alternateUserTOTPSecret);
|
||||
//await element(by.id('two-factor-input')).replaceText(code);
|
||||
//await element(by.id('two-factor-send')).tap();
|
||||
// await waitFor(element(by.id('two-factor'))).toBeVisible().withTimeout(5000);
|
||||
// await expect(element(by.id('two-factor'))).toBeVisible();
|
||||
// const code = GA.gen(data.alternateUserTOTPSecret);
|
||||
// await element(by.id('two-factor-input')).replaceText(code);
|
||||
// await element(by.id('two-factor-send')).tap();
|
||||
|
||||
await searchRoom(`broadcast${ data.random }`);
|
||||
await element(by.id(`rooms-list-view-item-broadcast${ data.random }`)).tap();
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
const {
|
||||
device, expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const { navigateToLogin, login, sleep } = require('../../helpers/app');
|
||||
const data = require('../../data');
|
||||
|
||||
const profileChangeUser = data.users.profileChanges
|
||||
const profileChangeUser = data.users.profileChanges;
|
||||
|
||||
const scrollDown = 200;
|
||||
|
||||
|
@ -28,7 +25,7 @@ describe('Profile screen', () => {
|
|||
await waitFor(element(by.id('profile-view'))).toBeVisible().withTimeout(2000);
|
||||
});
|
||||
|
||||
describe('Render', async() => {
|
||||
describe('Render', () => {
|
||||
it('should have profile view', async() => {
|
||||
await expect(element(by.id('profile-view'))).toBeVisible();
|
||||
});
|
||||
|
@ -56,7 +53,7 @@ describe('Profile screen', () => {
|
|||
it('should have avatar url', async() => {
|
||||
await expect(element(by.id('profile-view-avatar-url'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have reset avatar button', async() => {
|
||||
await waitFor(element(by.id('profile-view-reset-avatar'))).toExist().whileElement(by.id('profile-view-list')).scroll(scrollDown, 'down');
|
||||
});
|
||||
|
@ -74,7 +71,7 @@ describe('Profile screen', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('Usage', async() => {
|
||||
describe('Usage', () => {
|
||||
it('should change name and username', async() => {
|
||||
await element(by.id('profile-view-name')).replaceText(`${ profileChangeUser.username }new`);
|
||||
await element(by.id('profile-view-username')).typeText(`${ profileChangeUser.username }new`);
|
||||
|
@ -87,7 +84,7 @@ describe('Profile screen', () => {
|
|||
await element(by.id('profile-view-email')).replaceText(`mobile+profileChangesNew${ data.random }@rocket.chat`);
|
||||
await element(by.id('profile-view-new-password')).replaceText(`${ profileChangeUser.password }new`);
|
||||
await element(by.id('profile-view-submit')).tap();
|
||||
await element(by.type('_UIAlertControllerTextField')).typeText(`${ profileChangeUser.password }\n`)
|
||||
await element(by.type('_UIAlertControllerTextField')).typeText(`${ profileChangeUser.password }\n`);
|
||||
await waitForToast();
|
||||
});
|
||||
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
const {
|
||||
device, expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const { navigateToLogin, login, tapBack } = require('../../helpers/app');
|
||||
const { navigateToLogin, login } = require('../../helpers/app');
|
||||
|
||||
const data = require('../../data');
|
||||
|
||||
const testuser = data.users.regular
|
||||
const testuser = data.users.regular;
|
||||
|
||||
describe('Settings screen', () => {
|
||||
before(async() => {
|
||||
|
@ -20,7 +17,7 @@ describe('Settings screen', () => {
|
|||
await waitFor(element(by.id('settings-view'))).toBeVisible().withTimeout(2000);
|
||||
});
|
||||
|
||||
describe('Render', async() => {
|
||||
describe('Render', () => {
|
||||
it('should have settings view', async() => {
|
||||
await expect(element(by.id('settings-view'))).toBeVisible();
|
||||
});
|
||||
|
@ -62,14 +59,14 @@ describe('Settings screen', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('Usage', async() => {
|
||||
describe('Usage', () => {
|
||||
it('should tap clear cache and navigate to roomslistview', async() => {
|
||||
await waitFor(element(by.id('settings-view'))).toBeVisible().withTimeout(2000);
|
||||
await element(by.id('settings-view-clear-cache')).tap();
|
||||
await waitFor(element(by.text('This will clear all your offline data.'))).toExist().withTimeout(2000);
|
||||
await element(by.label('Clear').and(by.type('_UIAlertControllerActionView'))).tap();
|
||||
await element(by.label('Clear').and(by.type('_UIAlertControllerActionView'))).tap();
|
||||
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(5000);
|
||||
await waitFor(element(by.id(`rooms-list-view-item-${ data.groups.private.name }`))).toExist().withTimeout(10000);
|
||||
})
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
const {
|
||||
device, expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const data = require('../../data');
|
||||
const { navigateToLogin, login, mockMessage, tapBack, sleep, searchRoom } = require('../../helpers/app');
|
||||
const {
|
||||
navigateToLogin, login, mockMessage, tapBack, searchRoom
|
||||
} = require('../../helpers/app');
|
||||
|
||||
const testuser = data.users.regular
|
||||
const testuser = data.users.regular;
|
||||
const room = data.channels.detoxpublic.name;
|
||||
|
||||
async function navigateToRoom() {
|
||||
|
@ -26,7 +25,7 @@ describe('Join public room', () => {
|
|||
await navigateToRoom();
|
||||
});
|
||||
|
||||
describe('Render', async() => {
|
||||
describe('Render', () => {
|
||||
it('should have room screen', async() => {
|
||||
await expect(element(by.id('room-view'))).toBeVisible();
|
||||
});
|
||||
|
@ -36,14 +35,14 @@ describe('Join public room', () => {
|
|||
// });
|
||||
|
||||
// Render - Header
|
||||
describe('Header', async() => {
|
||||
describe('Header', () => {
|
||||
it('should have actions button ', async() => {
|
||||
await expect(element(by.id('room-header'))).toBeVisible();
|
||||
});
|
||||
});
|
||||
|
||||
// Render - Join
|
||||
describe('Join', async() => {
|
||||
describe('Join', () => {
|
||||
it('should have join', async() => {
|
||||
await expect(element(by.id('room-view-join'))).toBeVisible();
|
||||
});
|
||||
|
@ -61,7 +60,7 @@ describe('Join public room', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('Room Actions', async() => {
|
||||
describe('Room Actions', () => {
|
||||
before(async() => {
|
||||
await navigateToRoomActions();
|
||||
});
|
||||
|
@ -117,11 +116,11 @@ describe('Join public room', () => {
|
|||
after(async() => {
|
||||
await tapBack();
|
||||
await waitFor(element(by.id('room-view'))).toBeVisible().withTimeout(2000);
|
||||
})
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('Usage', async() => {
|
||||
describe('Usage', () => {
|
||||
it('should join room', async() => {
|
||||
await element(by.id('room-view-join-button')).tap();
|
||||
await tapBack();
|
||||
|
|
|
@ -1,17 +1,15 @@
|
|||
const {
|
||||
expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const { navigateToLogin, login, sleep } = require('../../helpers/app');
|
||||
|
||||
const data = require('../../data');
|
||||
const testuser = data.users.regular
|
||||
|
||||
const testuser = data.users.regular;
|
||||
|
||||
async function waitForToast() {
|
||||
await sleep(300);
|
||||
}
|
||||
|
||||
describe('Status screen', () => {
|
||||
before(async () => {
|
||||
before(async() => {
|
||||
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
|
||||
await navigateToLogin();
|
||||
await login(testuser.username, testuser.password);
|
||||
|
@ -24,8 +22,8 @@ describe('Status screen', () => {
|
|||
await waitFor(element(by.id('status-view'))).toBeVisible().withTimeout(2000);
|
||||
});
|
||||
|
||||
describe('Render', async () => {
|
||||
it('should have status input', async () => {
|
||||
describe('Render', () => {
|
||||
it('should have status input', async() => {
|
||||
await expect(element(by.id('status-view-input'))).toBeVisible();
|
||||
await expect(element(by.id('status-view-online'))).toExist();
|
||||
await expect(element(by.id('status-view-busy'))).toExist();
|
||||
|
@ -34,17 +32,17 @@ describe('Status screen', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('Usage', async () => {
|
||||
it('should change status', async () => {
|
||||
describe('Usage', () => {
|
||||
it('should change status', async() => {
|
||||
await element(by.id('status-view-busy')).tap();
|
||||
await waitFor(element(by.id('status-view-current-busy'))).toExist().withTimeout(2000);
|
||||
});
|
||||
|
||||
it('should change status text', async () => {
|
||||
it('should change status text', async() => {
|
||||
await element(by.id('status-view-input')).typeText('status-text-new');
|
||||
await element(by.id('status-view-submit')).tap();
|
||||
await waitForToast();
|
||||
await waitFor(element(by.label('status-text-new').withAncestor(by.id('sidebar-custom-status')))).toExist().withTimeout(2000);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
const {
|
||||
device, expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const data = require('../../data');
|
||||
const { navigateToLogin, login, checkServer } = require('../../helpers/app');
|
||||
|
||||
|
@ -8,7 +5,7 @@ const reopenAndCheckServer = async(server) => {
|
|||
await device.launchApp({ permissions: { notifications: 'YES' } });
|
||||
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(6000);
|
||||
await checkServer(server);
|
||||
}
|
||||
};
|
||||
|
||||
describe('Change server', () => {
|
||||
before(async() => {
|
||||
|
@ -24,7 +21,7 @@ describe('Change server', () => {
|
|||
await element(by.id('rooms-list-header-server-add')).tap();
|
||||
|
||||
await waitFor(element(by.id('new-server-view'))).toBeVisible().withTimeout(6000);
|
||||
await element(by.id('new-server-view-input')).typeText(`${data.alternateServer}\n`);
|
||||
await element(by.id('new-server-view-input')).typeText(`${ data.alternateServer }\n`);
|
||||
await waitFor(element(by.id('workspace-view'))).toBeVisible().withTimeout(10000);
|
||||
await reopenAndCheckServer(data.server);
|
||||
});
|
||||
|
@ -64,5 +61,5 @@ describe('Change server', () => {
|
|||
|
||||
it('should reopen the app and show main server', async() => {
|
||||
await reopenAndCheckServer(data.server);
|
||||
})
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
const {
|
||||
device, expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const data = require('../../data');
|
||||
const { navigateToLogin, login, mockMessage, tapBack, sleep, searchRoom } = require('../../helpers/app');
|
||||
const {
|
||||
navigateToLogin, login, mockMessage, searchRoom
|
||||
} = require('../../helpers/app');
|
||||
|
||||
const testuser = data.users.regular
|
||||
const room = data.channels.detoxpublicprotected.name
|
||||
const joinCode = data.channels.detoxpublicprotected.joinCode
|
||||
const testuser = data.users.regular;
|
||||
const room = data.channels.detoxpublicprotected.name;
|
||||
const { joinCode } = data.channels.detoxpublicprotected;
|
||||
|
||||
async function navigateToRoom() {
|
||||
await searchRoom(room);
|
||||
|
@ -27,10 +26,10 @@ describe('Join protected room', () => {
|
|||
await navigateToRoom();
|
||||
});
|
||||
|
||||
describe('Usage', async() => {
|
||||
describe('Usage', () => {
|
||||
it('should tap join and ask for join code', async() => {
|
||||
await openJoinCode();
|
||||
})
|
||||
});
|
||||
|
||||
it('should cancel join room', async() => {
|
||||
await element(by.id('join-code-cancel')).tap();
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
const {
|
||||
device, expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const data = require('../../data');
|
||||
const { navigateToLogin, login, tapBack, sleep } = require('../../helpers/app');
|
||||
const {
|
||||
navigateToLogin, login, tapBack, sleep
|
||||
} = require('../../helpers/app');
|
||||
|
||||
const testuser = data.users.regular
|
||||
const testuser = data.users.regular;
|
||||
|
||||
async function navigateToRoom(search) {
|
||||
await element(by.id('directory-view-search')).replaceText(search);
|
||||
await element(by.id('directory-view-search')).replaceText(search);
|
||||
await waitFor(element(by.id(`directory-view-item-${ search }`))).toBeVisible().withTimeout(10000);
|
||||
await sleep(300); // app takes some time to animate
|
||||
await element(by.id(`directory-view-item-${ search }`)).tap();
|
||||
|
@ -22,34 +21,34 @@ describe('Join room from directory', () => {
|
|||
await login(testuser.username, testuser.password);
|
||||
});
|
||||
|
||||
describe('Usage', async() => {
|
||||
describe('Usage', () => {
|
||||
it('should tap directory', async() => {
|
||||
await element(by.id('rooms-list-view-directory')).tap();
|
||||
await element(by.id('rooms-list-view-directory')).tap();
|
||||
await waitFor(element(by.id('directory-view'))).toExist().withTimeout(2000);
|
||||
})
|
||||
});
|
||||
|
||||
it('should search public channel and navigate', async() => {
|
||||
await navigateToRoom(data.channels.detoxpublic.name);
|
||||
})
|
||||
|
||||
it('should search user and navigate', async() => {
|
||||
await tapBack();
|
||||
await element(by.id('rooms-list-view-directory')).tap();
|
||||
await waitFor(element(by.id('directory-view'))).toExist().withTimeout(2000);
|
||||
await element(by.id('directory-view-dropdown')).tap();
|
||||
await element(by.label('Users')).tap();
|
||||
await element(by.label('Search by')).tap();
|
||||
await navigateToRoom(data.users.alternate.username);
|
||||
})
|
||||
});
|
||||
|
||||
it('should search user and navigate', async() => {
|
||||
await tapBack();
|
||||
await element(by.id('rooms-list-view-directory')).tap();
|
||||
await waitFor(element(by.id('directory-view'))).toExist().withTimeout(2000);
|
||||
await element(by.id('directory-view-dropdown')).tap();
|
||||
await element(by.id('directory-view-dropdown')).tap();
|
||||
await element(by.label('Users')).tap();
|
||||
await element(by.label('Search by')).tap();
|
||||
await navigateToRoom(data.users.alternate.username);
|
||||
});
|
||||
|
||||
it('should search user and navigate', async() => {
|
||||
await tapBack();
|
||||
await element(by.id('rooms-list-view-directory')).tap();
|
||||
await waitFor(element(by.id('directory-view'))).toExist().withTimeout(2000);
|
||||
await element(by.id('directory-view-dropdown')).tap();
|
||||
await element(by.label('Teams')).tap();
|
||||
await element(by.label('Search by')).tap();
|
||||
await element(by.label('Search by')).tap();
|
||||
await navigateToRoom(data.teams.private.name);
|
||||
})
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
const {
|
||||
device, element, by, waitFor
|
||||
} = require('detox');
|
||||
const data = require('../../data');
|
||||
const { sleep, navigateToLogin, login, checkServer } = require('../../helpers/app');
|
||||
const {
|
||||
sleep, navigateToLogin, login, checkServer
|
||||
} = require('../../helpers/app');
|
||||
|
||||
describe('Delete server', () => {
|
||||
before(async() => {
|
||||
|
@ -13,7 +12,7 @@ describe('Delete server', () => {
|
|||
|
||||
it('should be logged in main server', async() => {
|
||||
await checkServer(data.server);
|
||||
})
|
||||
});
|
||||
|
||||
it('should add server', async() => {
|
||||
await sleep(5000);
|
||||
|
@ -22,7 +21,7 @@ describe('Delete server', () => {
|
|||
await element(by.id('rooms-list-header-server-add')).tap();
|
||||
|
||||
await waitFor(element(by.id('new-server-view'))).toBeVisible().withTimeout(10000);
|
||||
await element(by.id('new-server-view-input')).typeText(`${data.alternateServer}\n`);
|
||||
await element(by.id('new-server-view-input')).typeText(`${ data.alternateServer }\n`);
|
||||
await waitFor(element(by.id('workspace-view'))).toBeVisible().withTimeout(10000);
|
||||
await element(by.id('workspace-view-register')).tap();
|
||||
await waitFor(element(by.id('register-view'))).toBeVisible().withTimeout(2000);
|
||||
|
@ -42,7 +41,7 @@ describe('Delete server', () => {
|
|||
await element(by.id('rooms-list-header-server-dropdown-button')).tap();
|
||||
await waitFor(element(by.id('rooms-list-header-server-dropdown'))).toBeVisible().withTimeout(5000);
|
||||
await element(by.id(`rooms-list-header-server-${ data.server }`)).longPress(1500);
|
||||
await element(by.label('Delete').and(by.type('_UIAlertControllerActionView'))).tap();
|
||||
await element(by.label('Delete').and(by.type('_UIAlertControllerActionView'))).tap();
|
||||
await element(by.id('rooms-list-header-server-dropdown-button')).tap();
|
||||
await waitFor(element(by.id('rooms-list-header-server-dropdown'))).toBeVisible().withTimeout(5000);
|
||||
await waitFor(element(by.id(`rooms-list-header-server-${ data.server }`))).toBeNotVisible().withTimeout(10000);
|
||||
|
|
|
@ -1,13 +1,10 @@
|
|||
const {
|
||||
device, element, by, waitFor
|
||||
} = require('detox');
|
||||
const data = require('../../data');
|
||||
const { tapBack, checkServer, navigateToRegister } = require('../../helpers/app');
|
||||
const { post, get, login } = require('../../helpers/data_setup');
|
||||
const { get, login } = require('../../helpers/data_setup');
|
||||
|
||||
const DEEPLINK_METHODS = { AUTH: 'auth', ROOM: 'room' };
|
||||
const getDeepLink = (method, server, params) => {
|
||||
const deeplink = `rocketchat://${ method }?host=${ server.replace(/^(http:\/\/|https:\/\/)/, '') }&${params}`;
|
||||
const deeplink = `rocketchat://${ method }?host=${ server.replace(/^(http:\/\/|https:\/\/)/, '') }&${ params }`;
|
||||
console.log(`Deeplinking to: ${ deeplink }`);
|
||||
return deeplink;
|
||||
};
|
||||
|
@ -43,7 +40,7 @@ describe('Deep linking', () => {
|
|||
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(10000);
|
||||
await checkServer(data.server);
|
||||
await waitFor(element(by.id(`rooms-list-view-item-${ data.groups.private.name }`))).toBeVisible().withTimeout(2000);
|
||||
}
|
||||
};
|
||||
|
||||
it('should authenticate and navigate', async() => {
|
||||
await authAndNavigate();
|
||||
|
@ -63,7 +60,7 @@ describe('Deep linking', () => {
|
|||
});
|
||||
|
||||
describe('Room', () => {
|
||||
describe('While logged in', async() => {
|
||||
describe('While logged in', () => {
|
||||
it('should navigate to the room using path', async() => {
|
||||
await device.launchApp({
|
||||
permissions: { notifications: 'YES' },
|
||||
|
@ -75,7 +72,7 @@ describe('Deep linking', () => {
|
|||
});
|
||||
|
||||
it('should navigate to the room using rid', async() => {
|
||||
const roomResult = await get(`groups.info?roomName=${ data.groups.private.name }`)
|
||||
const roomResult = await get(`groups.info?roomName=${ data.groups.private.name }`);
|
||||
await device.launchApp({
|
||||
permissions: { notifications: 'YES' },
|
||||
newInstance: true,
|
||||
|
@ -87,7 +84,7 @@ describe('Deep linking', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('Others', async() => {
|
||||
describe('Others', () => {
|
||||
it('should change server', async() => {
|
||||
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(2000);
|
||||
await element(by.id('rooms-list-header-server-dropdown-button')).tap();
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
const {
|
||||
device, element, by, waitFor
|
||||
} = require('detox');
|
||||
const { navigateToLogin, login, sleep } = require('../../helpers/app');
|
||||
const { post } = require('../../helpers/data_setup');
|
||||
|
||||
const data = require('../../data');
|
||||
const testuser = data.users.regular
|
||||
|
||||
const testuser = data.users.regular;
|
||||
const defaultLaunchArgs = { permissions: { notifications: 'YES' } };
|
||||
|
||||
const navToLanguage = async() => {
|
||||
|
@ -25,8 +23,8 @@ describe('i18n', () => {
|
|||
await device.launchApp({
|
||||
...defaultLaunchArgs,
|
||||
languageAndLocale: {
|
||||
language: "en",
|
||||
locale: "en"
|
||||
language: 'en',
|
||||
locale: 'en'
|
||||
},
|
||||
delete: true
|
||||
});
|
||||
|
@ -34,20 +32,20 @@ describe('i18n', () => {
|
|||
await expect(element(by.id('join-workspace').and(by.label('Join a workspace')))).toBeVisible();
|
||||
await expect(element(by.id('create-workspace-button').and(by.label('Create a new workspace')))).toBeVisible();
|
||||
});
|
||||
|
||||
|
||||
it('OS set to unavailable language and fallback to \'en\'', async() => {
|
||||
await device.launchApp({
|
||||
...defaultLaunchArgs,
|
||||
languageAndLocale: {
|
||||
language: "es-MX",
|
||||
locale: "es-MX"
|
||||
language: 'es-MX',
|
||||
locale: 'es-MX'
|
||||
}
|
||||
});
|
||||
await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(20000);
|
||||
await expect(element(by.id('join-workspace').and(by.label('Join a workspace')))).toBeVisible();
|
||||
await expect(element(by.id('create-workspace-button').and(by.label('Create a new workspace')))).toBeVisible();
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* This test might become outdated as soon as we support the language
|
||||
* Although this seems to be a bad approach, that's the intention for having fallback enabled
|
||||
|
@ -110,5 +108,5 @@ describe('i18n', () => {
|
|||
await expect(element(by.id('sidebar-settings').withDescendant(by.label('Settings')))).toBeVisible();
|
||||
await post('users.setPreferences', { data: { language: 'en' } }); // Set back to english
|
||||
});
|
||||
})
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
const detox = require('detox');
|
||||
const config = require('../../package.json').detox;
|
||||
const { setup } = require('../helpers/data_setup')
|
||||
const adapter = require('detox/runners/mocha/adapter');
|
||||
const config = require('../../package.json').detox;
|
||||
const { setup } = require('../helpers/data_setup');
|
||||
|
||||
before(async() => {
|
||||
await Promise.all([setup(), detox.init(config, { launchApp: false })])
|
||||
//await dataSetup()
|
||||
//await detox.init(config, { launchApp: false });
|
||||
//await device.launchApp({ permissions: { notifications: 'YES' } });
|
||||
await Promise.all([setup(), detox.init(config, { launchApp: false })]);
|
||||
// await dataSetup()
|
||||
// await detox.init(config, { launchApp: false });
|
||||
// await device.launchApp({ permissions: { notifications: 'YES' } });
|
||||
});
|
||||
|
||||
beforeEach(async function() {
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
const {
|
||||
device, expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const data = require('../../data');
|
||||
|
||||
describe('Onboarding', () => {
|
||||
|
@ -12,10 +9,10 @@ describe('Onboarding', () => {
|
|||
describe('Render', () => {
|
||||
it('should have onboarding screen', async() => {
|
||||
await expect(element(by.id('onboarding-view'))).toBeVisible();
|
||||
});
|
||||
});
|
||||
|
||||
it('should have "Join a workspace"', async() => {
|
||||
await expect(element(by.id('join-workspace'))).toBeVisible();
|
||||
await expect(element(by.id('join-workspace'))).toBeVisible();
|
||||
});
|
||||
|
||||
it('should have "Create a new workspace"', async() => {
|
||||
|
@ -27,7 +24,7 @@ describe('Onboarding', () => {
|
|||
// it('should navigate to create new workspace', async() => {
|
||||
// // webviews are not supported by detox: https://github.com/wix/detox/issues/136#issuecomment-306591554
|
||||
// });
|
||||
|
||||
|
||||
it('should navigate to join a workspace', async() => {
|
||||
await element(by.id('join-workspace')).tap();
|
||||
await waitFor(element(by.id('new-server-view'))).toBeVisible().withTimeout(60000);
|
||||
|
@ -50,7 +47,7 @@ describe('Onboarding', () => {
|
|||
await waitFor(element(by.id('onboarding-view'))).toBeVisible().withTimeout(2000);
|
||||
await element(by.id('join-workspace')).tap();
|
||||
await waitFor(element(by.id('new-server-view'))).toBeVisible().withTimeout(60000);
|
||||
await element(by.id('new-server-view-input')).typeText(`${data.server}\n`);
|
||||
await element(by.id('new-server-view-input')).typeText(`${ data.server }\n`);
|
||||
await waitFor(element(by.id('workspace-view'))).toBeVisible().withTimeout(60000);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,24 +1,20 @@
|
|||
const {
|
||||
device, expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const { navigateToRegister, navigateToLogin } = require('../../helpers/app');
|
||||
|
||||
describe('Legal screen', () => {
|
||||
|
||||
describe('From Login', () => {
|
||||
before(async() => {
|
||||
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
|
||||
await navigateToLogin();
|
||||
});
|
||||
|
||||
it('should have legal button on login', async() => {
|
||||
|
||||
it('should have legal button on login', async() => {
|
||||
await waitFor(element(by.id('login-view-more'))).toBeVisible().withTimeout(60000);
|
||||
});
|
||||
|
||||
|
||||
it('should navigate to legal from login', async() => {
|
||||
await expect(element(by.id('login-view-more'))).toBeVisible();
|
||||
await element(by.id('login-view-more')).tap();
|
||||
await waitFor(element(by.id('legal-view'))).toBeVisible().withTimeout(4000)
|
||||
await waitFor(element(by.id('legal-view'))).toBeVisible().withTimeout(4000);
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -28,32 +24,32 @@ describe('Legal screen', () => {
|
|||
await navigateToRegister();
|
||||
});
|
||||
|
||||
it('should have legal button on register', async() => {
|
||||
it('should have legal button on register', async() => {
|
||||
await waitFor(element(by.id('register-view-more'))).toBeVisible().withTimeout(60000);
|
||||
});
|
||||
|
||||
|
||||
it('should navigate to legal from register', async() => {
|
||||
await expect(element(by.id('register-view-more'))).toBeVisible();
|
||||
await element(by.id('register-view-more')).tap();
|
||||
await waitFor(element(by.id('legal-view'))).toBeVisible().withTimeout(4000);
|
||||
});
|
||||
|
||||
|
||||
it('should have terms of service button', async() => {
|
||||
await expect(element(by.id('legal-terms-button'))).toBeVisible();
|
||||
});
|
||||
|
||||
|
||||
it('should have privacy policy button', async() => {
|
||||
await expect(element(by.id('legal-privacy-button'))).toBeVisible();
|
||||
});
|
||||
|
||||
// We can't simulate how webview behaves, so I had to disable :(
|
||||
/*
|
||||
/*
|
||||
it('should navigate to terms', async() => {
|
||||
await element(by.id('legal-terms-button')).tap();
|
||||
await waitFor(element(by.id('terms-view'))).toBeVisible().withTimeout(2000);
|
||||
await expect(element(by.id('terms-view'))).toBeVisible();
|
||||
});
|
||||
|
||||
|
||||
it('should navigate to privacy', async() => {
|
||||
await tapBack();
|
||||
await element(by.id('legal-privacy-button')).tap();
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
const {
|
||||
device, expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const data = require('../../data');
|
||||
const { navigateToLogin } = require('../../helpers/app');
|
||||
|
||||
|
@ -12,7 +9,7 @@ describe('Forgot password screen', () => {
|
|||
await waitFor(element(by.id('forgot-password-view'))).toExist().withTimeout(2000);
|
||||
});
|
||||
|
||||
describe('Render', async() => {
|
||||
describe('Render', () => {
|
||||
it('should have forgot password screen', async() => {
|
||||
await expect(element(by.id('forgot-password-view'))).toExist();
|
||||
});
|
||||
|
@ -26,7 +23,7 @@ describe('Forgot password screen', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('Usage', async() => {
|
||||
describe('Usage', () => {
|
||||
it('should reset password and navigate to login', async() => {
|
||||
await element(by.id('forgot-password-view-email')).replaceText(data.users.existing.email);
|
||||
await element(by.id('forgot-password-view-submit')).tap();
|
||||
|
|
|
@ -1,7 +1,4 @@
|
|||
const {
|
||||
device, expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const { navigateToRegister, sleep } = require('../../helpers/app');
|
||||
const { navigateToRegister } = require('../../helpers/app');
|
||||
const data = require('../../data');
|
||||
|
||||
describe('Create user screen', () => {
|
||||
|
@ -37,7 +34,6 @@ describe('Create user screen', () => {
|
|||
});
|
||||
|
||||
describe('Usage', () => {
|
||||
|
||||
// FIXME: Detox isn't able to check if it's tappable: https://github.com/wix/Detox/issues/246
|
||||
// it('should submit invalid email and do nothing', async() => {
|
||||
// const invalidEmail = 'invalidemail';
|
||||
|
|
|
@ -1,7 +1,4 @@
|
|||
const {
|
||||
expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const { navigateToLogin, tapBack, sleep } = require('../../helpers/app');
|
||||
const { navigateToLogin, tapBack } = require('../../helpers/app');
|
||||
const data = require('../../data');
|
||||
|
||||
describe('Login screen', () => {
|
||||
|
@ -46,13 +43,13 @@ describe('Login screen', () => {
|
|||
await waitFor(element(by.id('register-view'))).toBeVisible().withTimeout(2000);
|
||||
await tapBack();
|
||||
});
|
||||
|
||||
|
||||
it('should navigate to forgot password', async() => {
|
||||
await element(by.id('login-view-forgot-password')).tap();
|
||||
await waitFor(element(by.id('forgot-password-view'))).toExist().withTimeout(2000);
|
||||
await tapBack();
|
||||
});
|
||||
|
||||
|
||||
it('should insert wrong password and get error', async() => {
|
||||
await element(by.id('login-view-email')).replaceText(data.users.regular.username);
|
||||
await element(by.id('login-view-password')).replaceText('NotMyActualPassword');
|
||||
|
@ -60,7 +57,7 @@ describe('Login screen', () => {
|
|||
await waitFor(element(by.text('Your credentials were rejected! Please try again.'))).toBeVisible().withTimeout(10000);
|
||||
await element(by.text('OK')).tap();
|
||||
});
|
||||
|
||||
|
||||
it('should login with success', async() => {
|
||||
await element(by.id('login-view-password')).replaceText(data.users.regular.password);
|
||||
await element(by.id('login-view-submit')).tap();
|
||||
|
|
|
@ -1,15 +1,13 @@
|
|||
const {
|
||||
device, expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const { login, navigateToLogin, logout, tapBack, sleep, searchRoom } = require('../../helpers/app');
|
||||
login, navigateToLogin, logout, tapBack, searchRoom
|
||||
} = require('../../helpers/app');
|
||||
const data = require('../../data');
|
||||
|
||||
describe('Rooms list screen', () => {
|
||||
|
||||
before(async() => {
|
||||
await device.launchApp({ permissions: { notifications: 'YES' }, newInstance: true, delete: true });
|
||||
await navigateToLogin();
|
||||
await login(data.users.regular.username, data.users.regular.password)
|
||||
await login(data.users.regular.username, data.users.regular.password);
|
||||
});
|
||||
|
||||
describe('Render', () => {
|
||||
|
@ -20,13 +18,13 @@ describe('Rooms list screen', () => {
|
|||
it('should have room item', async() => {
|
||||
await expect(element(by.id('rooms-list-view-item-general'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
// Render - Header
|
||||
describe('Header', () => {
|
||||
it('should have create channel button', async() => {
|
||||
await expect(element(by.id('rooms-list-view-create-channel'))).toBeVisible();
|
||||
});
|
||||
|
||||
|
||||
it('should have sidebar button', async() => {
|
||||
await expect(element(by.id('rooms-list-view-sidebar'))).toBeVisible();
|
||||
});
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
const {
|
||||
device, expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const { login, navigateToLogin, logout, tapBack } = require('../../helpers/app');
|
||||
login, navigateToLogin, logout, tapBack
|
||||
} = require('../../helpers/app');
|
||||
const data = require('../../data');
|
||||
|
||||
describe('Server history', () => {
|
||||
|
@ -16,7 +15,7 @@ describe('Server history', () => {
|
|||
await logout();
|
||||
await element(by.id('join-workspace')).tap();
|
||||
await waitFor(element(by.id('new-server-view'))).toBeVisible().withTimeout(60000);
|
||||
})
|
||||
});
|
||||
|
||||
it('should show servers history', async() => {
|
||||
await element(by.id('new-server-view-input')).tap();
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
const {
|
||||
device, expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const data = require('../../data');
|
||||
const { tapBack, sleep, navigateToLogin, login, tryTapping } = require('../../helpers/app');
|
||||
|
||||
|
||||
const {
|
||||
tapBack, navigateToLogin, login, tryTapping
|
||||
} = require('../../helpers/app');
|
||||
|
||||
describe('Create room screen', () => {
|
||||
before(async() => {
|
||||
|
@ -13,30 +10,30 @@ describe('Create room screen', () => {
|
|||
await login(data.users.regular.username, data.users.regular.password);
|
||||
});
|
||||
|
||||
describe('New Message', async() => {
|
||||
describe('New Message', () => {
|
||||
before(async() => {
|
||||
await element(by.id('rooms-list-view-create-channel')).tap();
|
||||
});
|
||||
|
||||
describe('Render', async() => {
|
||||
describe('Render', () => {
|
||||
it('should have new message screen', async() => {
|
||||
await waitFor(element(by.id('new-message-view'))).toBeVisible().withTimeout(2000);
|
||||
});
|
||||
|
||||
|
||||
it('should have search input', async() => {
|
||||
await waitFor(element(by.id('new-message-view-search'))).toBeVisible().withTimeout(2000);
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
describe('Usage', async() => {
|
||||
describe('Usage', () => {
|
||||
it('should back to rooms list', async() => {
|
||||
await waitFor(element(by.id('new-message-view-close'))).toBeVisible().withTimeout(5000);
|
||||
await element(by.id('new-message-view-close')).tap();
|
||||
|
||||
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(5000);
|
||||
|
||||
|
||||
await tryTapping(element(by.id('rooms-list-view-create-channel')), 3000);
|
||||
//await element(by.id('rooms-list-view-create-channel')).tap();
|
||||
// await element(by.id('rooms-list-view-create-channel')).tap();
|
||||
await waitFor(element(by.id('new-message-view'))).toExist().withTimeout(5000);
|
||||
});
|
||||
|
||||
|
@ -56,13 +53,13 @@ describe('Create room screen', () => {
|
|||
await element(by.id('new-message-view-create-channel')).tap();
|
||||
await waitFor(element(by.id('select-users-view'))).toExist().withTimeout(5000);
|
||||
});
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
describe('Select Users', async() => {
|
||||
describe('Select Users', () => {
|
||||
it('should search users', async() => {
|
||||
await element(by.id('select-users-view-search')).replaceText('rocket.cat');
|
||||
await waitFor(element(by.id(`select-users-view-item-rocket.cat`))).toBeVisible().withTimeout(10000);
|
||||
await waitFor(element(by.id('select-users-view-item-rocket.cat'))).toBeVisible().withTimeout(10000);
|
||||
});
|
||||
|
||||
it('should select/unselect user', async() => {
|
||||
|
@ -80,27 +77,27 @@ describe('Create room screen', () => {
|
|||
await element(by.id('selected-users-view-submit')).tap();
|
||||
await waitFor(element(by.id('create-channel-view'))).toExist().withTimeout(10000);
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
describe('Create Channel', async() => {
|
||||
describe('Render', async() => {
|
||||
describe('Create Channel', () => {
|
||||
describe('Render', () => {
|
||||
it('should render all fields', async() => {
|
||||
await expect(element(by.id('create-channel-name'))).toBeVisible();
|
||||
await expect(element(by.id('create-channel-type'))).toBeVisible();
|
||||
await expect(element(by.id('create-channel-readonly'))).toBeVisible();
|
||||
await expect(element(by.id('create-channel-broadcast'))).toBeVisible();
|
||||
})
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
describe('Usage', async() => {
|
||||
describe('Usage', () => {
|
||||
it('should get invalid room', async() => {
|
||||
await element(by.id('create-channel-name')).typeText('general');
|
||||
await element(by.id('create-channel-submit')).tap();
|
||||
await waitFor(element(by.text(`A channel with name general exists`))).toExist().withTimeout(60000);
|
||||
await expect(element(by.text(`A channel with name general exists`))).toExist();
|
||||
await waitFor(element(by.text('A channel with name general exists'))).toExist().withTimeout(60000);
|
||||
await expect(element(by.text('A channel with name general exists'))).toExist();
|
||||
await element(by.text('OK')).tap();
|
||||
});
|
||||
|
||||
|
||||
it('should create public room', async() => {
|
||||
const room = `public${ data.random }`;
|
||||
await element(by.id('create-channel-name')).replaceText('');
|
||||
|
@ -116,7 +113,7 @@ describe('Create room screen', () => {
|
|||
await waitFor(element(by.id(`rooms-list-view-item-${ room }`))).toExist().withTimeout(6000);
|
||||
await expect(element(by.id(`rooms-list-view-item-${ room }`))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should create private room', async() => {
|
||||
const room = `private${ data.random }`;
|
||||
await waitFor(element(by.id('rooms-list-view'))).toExist().withTimeout(5000);
|
||||
|
@ -161,6 +158,6 @@ describe('Create room screen', () => {
|
|||
await waitFor(element(by.id(`rooms-list-view-item-${ room }`))).toExist().withTimeout(60000);
|
||||
await expect(element(by.id(`rooms-list-view-item-${ room }`))).toExist();
|
||||
});
|
||||
})
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
const {
|
||||
device, expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const data = require('../../data');
|
||||
const { navigateToLogin, login, mockMessage, tapBack, sleep, searchRoom, starMessage, pinMessage, dismissReviewNag, tryTapping, logout } = require('../../helpers/app');
|
||||
const {
|
||||
navigateToLogin, login, mockMessage, tapBack, sleep, searchRoom, starMessage, pinMessage, dismissReviewNag, tryTapping
|
||||
} = require('../../helpers/app');
|
||||
|
||||
async function navigateToRoom(roomName) {
|
||||
await searchRoom(`${ roomName }`);
|
||||
|
@ -20,14 +19,14 @@ describe('Room screen', () => {
|
|||
await navigateToRoom(mainRoom);
|
||||
});
|
||||
|
||||
describe('Render', async() => {
|
||||
describe('Render', () => {
|
||||
it('should have room screen', async() => {
|
||||
await expect(element(by.id('room-view'))).toExist();
|
||||
await waitFor(element(by.id(`room-view-title-${ mainRoom }`))).toExist().withTimeout(5000);
|
||||
});
|
||||
|
||||
// Render - Header
|
||||
describe('Header', async() => {
|
||||
describe('Header', () => {
|
||||
it('should have actions button ', async() => {
|
||||
await expect(element(by.id('room-header'))).toExist();
|
||||
});
|
||||
|
@ -38,7 +37,7 @@ describe('Room screen', () => {
|
|||
});
|
||||
|
||||
// Render - Messagebox
|
||||
describe('Messagebox', async() => {
|
||||
describe('Messagebox', () => {
|
||||
it('should have messagebox', async() => {
|
||||
await expect(element(by.id('messagebox'))).toExist();
|
||||
});
|
||||
|
@ -63,15 +62,15 @@ describe('Room screen', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('Usage', async() => {
|
||||
describe('Messagebox', async() => {
|
||||
describe('Usage', () => {
|
||||
describe('Messagebox', () => {
|
||||
it('should send message', async() => {
|
||||
await mockMessage('message')
|
||||
await mockMessage('message');
|
||||
await expect(element(by.label(`${ data.random }message`)).atIndex(0)).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should show/hide emoji keyboard', async () => {
|
||||
it('should show/hide emoji keyboard', async() => {
|
||||
if (device.getPlatform() === 'android') {
|
||||
await element(by.id('messagebox-open-emoji')).tap();
|
||||
await waitFor(element(by.id('messagebox-keyboard-emoji'))).toExist().withTimeout(10000);
|
||||
|
@ -105,20 +104,20 @@ describe('Room screen', () => {
|
|||
it('should not show emoji autocomplete on semicolon in middle of a string', async() => {
|
||||
await element(by.id('messagebox-input')).tap();
|
||||
// await element(by.id('messagebox-input')).replaceText(':');
|
||||
await element(by.id('messagebox-input')).typeText('name:is');
|
||||
await element(by.id('messagebox-input')).typeText('name:is');
|
||||
await waitFor(element(by.id('messagebox-container'))).toNotExist().withTimeout(20000);
|
||||
await element(by.id('messagebox-input')).clearText();
|
||||
});
|
||||
|
||||
it('should show and tap on user autocomplete and send mention', async() => {
|
||||
const username = data.users.regular.username
|
||||
const { username } = data.users.regular;
|
||||
await element(by.id('messagebox-input')).tap();
|
||||
await element(by.id('messagebox-input')).typeText(`@${ username }`);
|
||||
await waitFor(element(by.id('messagebox-container'))).toExist().withTimeout(4000);
|
||||
await waitFor(element(by.id(`mention-item-${ username }`))).toBeVisible().withTimeout(4000)
|
||||
await waitFor(element(by.id(`mention-item-${ username }`))).toBeVisible().withTimeout(4000);
|
||||
await tryTapping(element(by.id(`mention-item-${ username }`)), 2000, true);
|
||||
await expect(element(by.id('messagebox-input'))).toHaveText(`@${ username } `);
|
||||
await tryTapping(element(by.id('messagebox-input')), 2000)
|
||||
await tryTapping(element(by.id('messagebox-input')), 2000);
|
||||
await element(by.id('messagebox-input')).typeText(`${ data.random }mention`);
|
||||
await element(by.id('messagebox-send-message')).tap();
|
||||
// await waitFor(element(by.label(`@${ data.user } ${ data.random }mention`)).atIndex(0)).toExist().withTimeout(60000);
|
||||
|
@ -126,7 +125,7 @@ describe('Room screen', () => {
|
|||
|
||||
it('should not show user autocomplete on @ in the middle of a string', async() => {
|
||||
await element(by.id('messagebox-input')).tap();
|
||||
await element(by.id('messagebox-input')).typeText(`email@gmail`);
|
||||
await element(by.id('messagebox-input')).typeText('email@gmail');
|
||||
await waitFor(element(by.id('messagebox-container'))).toNotExist().withTimeout(4000);
|
||||
await element(by.id('messagebox-input')).clearText();
|
||||
});
|
||||
|
@ -134,9 +133,9 @@ describe('Room screen', () => {
|
|||
it('should show and tap on room autocomplete', async() => {
|
||||
await element(by.id('messagebox-input')).tap();
|
||||
await element(by.id('messagebox-input')).typeText('#general');
|
||||
//await waitFor(element(by.id('messagebox-container'))).toExist().withTimeout(4000);
|
||||
// await waitFor(element(by.id('messagebox-container'))).toExist().withTimeout(4000);
|
||||
await waitFor(element(by.id('mention-item-general'))).toBeVisible().withTimeout(4000);
|
||||
await tryTapping(element(by.id('mention-item-general')), 2000, true)
|
||||
await tryTapping(element(by.id('mention-item-general')), 2000, true);
|
||||
await expect(element(by.id('messagebox-input'))).toHaveText('#general ');
|
||||
await element(by.id('messagebox-input')).clearText();
|
||||
});
|
||||
|
@ -147,7 +146,7 @@ describe('Room screen', () => {
|
|||
await waitFor(element(by.id('messagebox-container'))).toNotExist().withTimeout(4000);
|
||||
await element(by.id('messagebox-input')).clearText();
|
||||
});
|
||||
it('should draft message', async () => {
|
||||
it('should draft message', async() => {
|
||||
await element(by.id('messagebox-input')).tap();
|
||||
await element(by.id('messagebox-input')).typeText(`${ data.random }draft`);
|
||||
await tapBack();
|
||||
|
@ -159,10 +158,10 @@ describe('Room screen', () => {
|
|||
|
||||
await navigateToRoom(mainRoom);
|
||||
await expect(element(by.id('messagebox-input'))).toHaveText('');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('Message', async() => {
|
||||
describe('Message', () => {
|
||||
it('should copy permalink', async() => {
|
||||
await element(by.label(`${ data.random }message`)).atIndex(0).longPress();
|
||||
await expect(element(by.id('action-sheet'))).toExist();
|
||||
|
@ -184,9 +183,9 @@ describe('Room screen', () => {
|
|||
});
|
||||
|
||||
it('should star message', async() => {
|
||||
await starMessage('message')
|
||||
await starMessage('message');
|
||||
|
||||
await sleep(1000) //https://github.com/RocketChat/Rocket.Chat.ReactNative/issues/2324
|
||||
await sleep(1000); // https://github.com/RocketChat/Rocket.Chat.ReactNative/issues/2324
|
||||
await element(by.label(`${ data.random }message`)).atIndex(0).longPress();
|
||||
await expect(element(by.id('action-sheet'))).toExist();
|
||||
await expect(element(by.id('action-sheet-handle'))).toBeVisible();
|
||||
|
@ -229,8 +228,8 @@ describe('Room screen', () => {
|
|||
});
|
||||
|
||||
it('should ask for review', async() => {
|
||||
await dismissReviewNag() //TODO: Create a proper test for this elsewhere.
|
||||
})
|
||||
await dismissReviewNag(); // TODO: Create a proper test for this elsewhere.
|
||||
});
|
||||
|
||||
it('should remove reaction', async() => {
|
||||
await element(by.id('message-reaction-:grinning:')).tap();
|
||||
|
@ -263,8 +262,8 @@ describe('Room screen', () => {
|
|||
});
|
||||
|
||||
it('should pin message', async() => {
|
||||
await mockMessage('pin')
|
||||
await pinMessage('pin')
|
||||
await mockMessage('pin');
|
||||
await pinMessage('pin');
|
||||
|
||||
await waitFor(element(by.label(`${ data.random }pin`)).atIndex(0)).toExist().withTimeout(5000);
|
||||
await waitFor(element(by.label(`${ data.users.regular.username } Message pinned`)).atIndex(0)).toExist().withTimeout(5000);
|
||||
|
@ -277,7 +276,7 @@ describe('Room screen', () => {
|
|||
});
|
||||
|
||||
it('should delete message', async() => {
|
||||
await mockMessage('delete')
|
||||
await mockMessage('delete');
|
||||
|
||||
await waitFor(element(by.label(`${ data.random }delete`)).atIndex(0)).toBeVisible();
|
||||
await element(by.label(`${ data.random }delete`)).atIndex(0).longPress();
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
const {
|
||||
device, expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const data = require('../../data');
|
||||
const { navigateToLogin, login, tapBack, sleep, searchRoom, mockMessage, starMessage, pinMessage } = require('../../helpers/app');
|
||||
const { sendMessage } = require('../../helpers/data_setup')
|
||||
const {
|
||||
navigateToLogin, login, tapBack, sleep, searchRoom, mockMessage, starMessage, pinMessage
|
||||
} = require('../../helpers/app');
|
||||
const { sendMessage } = require('../../helpers/data_setup');
|
||||
|
||||
async function navigateToRoomActions(type) {
|
||||
let room;
|
||||
|
@ -36,15 +35,14 @@ async function waitForToast() {
|
|||
}
|
||||
|
||||
describe('Room actions screen', () => {
|
||||
|
||||
before(async() => {
|
||||
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
|
||||
await navigateToLogin();
|
||||
await login(data.users.regular.username, data.users.regular.password);
|
||||
});
|
||||
|
||||
describe('Render', async() => {
|
||||
describe('Direct', async() => {
|
||||
|
||||
describe('Render', () => {
|
||||
describe('Direct', () => {
|
||||
before(async() => {
|
||||
await navigateToRoomActions('d');
|
||||
});
|
||||
|
@ -52,41 +50,41 @@ describe('Room actions screen', () => {
|
|||
it('should have room actions screen', async() => {
|
||||
await expect(element(by.id('room-actions-view'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have info', async() => {
|
||||
await expect(element(by.id('room-actions-info'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
// it('should have voice', async() => {
|
||||
// await expect(element(by.id('room-actions-voice'))).toExist();
|
||||
// });
|
||||
|
||||
|
||||
// it('should have video', async() => {
|
||||
// await expect(element(by.id('room-actions-video'))).toExist();
|
||||
// });
|
||||
|
||||
|
||||
it('should have files', async() => {
|
||||
await expect(element(by.id('room-actions-files'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have mentions', async() => {
|
||||
await expect(element(by.id('room-actions-mentioned'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have starred', async() => {
|
||||
await expect(element(by.id('room-actions-starred'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have share', async() => {
|
||||
await waitFor(element(by.id('room-actions-share'))).toExist();
|
||||
await expect(element(by.id('room-actions-share'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have pinned', async() => {
|
||||
await waitFor(element(by.id('room-actions-pinned'))).toExist();
|
||||
await expect(element(by.id('room-actions-pinned'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have notifications', async() => {
|
||||
await waitFor(element(by.id('room-actions-notifications'))).toExist();
|
||||
await expect(element(by.id('room-actions-notifications'))).toExist();
|
||||
|
@ -102,7 +100,7 @@ describe('Room actions screen', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('Channel/Group', async() => {
|
||||
describe('Channel/Group', () => {
|
||||
before(async() => {
|
||||
await navigateToRoomActions('c');
|
||||
});
|
||||
|
@ -110,15 +108,15 @@ describe('Room actions screen', () => {
|
|||
it('should have room actions screen', async() => {
|
||||
await expect(element(by.id('room-actions-view'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have info', async() => {
|
||||
await expect(element(by.id('room-actions-info'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
// it('should have voice', async() => {
|
||||
// await expect(element(by.id('room-actions-voice'))).toExist();
|
||||
// });
|
||||
|
||||
|
||||
// it('should have video', async() => {
|
||||
// await expect(element(by.id('room-actions-video'))).toExist();
|
||||
// });
|
||||
|
@ -130,34 +128,34 @@ describe('Room actions screen', () => {
|
|||
it('should have add user', async() => {
|
||||
await expect(element(by.id('room-actions-add-user'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have files', async() => {
|
||||
await expect(element(by.id('room-actions-files'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have mentions', async() => {
|
||||
await expect(element(by.id('room-actions-mentioned'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have starred', async() => {
|
||||
await expect(element(by.id('room-actions-starred'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have share', async() => {
|
||||
await waitFor(element(by.id('room-actions-share'))).toExist();
|
||||
await expect(element(by.id('room-actions-share'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have pinned', async() => {
|
||||
await waitFor(element(by.id('room-actions-pinned'))).toExist();
|
||||
await expect(element(by.id('room-actions-pinned'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have notifications', async() => {
|
||||
await waitFor(element(by.id('room-actions-notifications'))).toExist();
|
||||
await expect(element(by.id('room-actions-notifications'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have leave channel', async() => {
|
||||
await waitFor(element(by.id('room-actions-leave-channel'))).toExist();
|
||||
await expect(element(by.id('room-actions-leave-channel'))).toExist();
|
||||
|
@ -165,7 +163,7 @@ describe('Room actions screen', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('Usage', async() => {
|
||||
describe('Usage', () => {
|
||||
describe('TDB', async() => {
|
||||
// TODO: test into a jitsi call
|
||||
// it('should NOT navigate to voice call', async() => {
|
||||
|
@ -191,7 +189,7 @@ describe('Room actions screen', () => {
|
|||
// });
|
||||
});
|
||||
|
||||
describe('Common', async() => {
|
||||
describe('Common', () => {
|
||||
it('should show mentioned messages', async() => {
|
||||
await element(by.id('room-actions-mentioned')).tap();
|
||||
await waitFor(element(by.id('mentioned-messages-view'))).toExist().withTimeout(2000);
|
||||
|
@ -200,24 +198,23 @@ describe('Room actions screen', () => {
|
|||
});
|
||||
|
||||
it('should show starred message and unstar it', async() => {
|
||||
|
||||
//Go back to room and send a message
|
||||
// Go back to room and send a message
|
||||
await tapBack();
|
||||
await mockMessage('messageToStar');
|
||||
|
||||
//Star the message
|
||||
await starMessage('messageToStar')
|
||||
// Star the message
|
||||
await starMessage('messageToStar');
|
||||
|
||||
//Back into Room Actions
|
||||
// Back into Room Actions
|
||||
await element(by.id('room-header')).tap();
|
||||
await waitFor(element(by.id('room-actions-view'))).toExist().withTimeout(5000);
|
||||
|
||||
//Go to starred messages
|
||||
// Go to starred messages
|
||||
await element(by.id('room-actions-starred')).tap();
|
||||
await waitFor(element(by.id('starred-messages-view'))).toExist().withTimeout(2000);
|
||||
await waitFor(element(by.label(`${ data.random }messageToStar`).withAncestor(by.id('starred-messages-view')))).toExist().withTimeout(60000);
|
||||
|
||||
//Unstar message
|
||||
|
||||
// Unstar message
|
||||
await element(by.label(`${ data.random }messageToStar`)).atIndex(0).longPress();
|
||||
await expect(element(by.id('action-sheet'))).toExist();
|
||||
await expect(element(by.id('action-sheet-handle'))).toBeVisible();
|
||||
|
@ -228,15 +225,14 @@ describe('Room actions screen', () => {
|
|||
});
|
||||
|
||||
it('should show pinned message and unpin it', async() => {
|
||||
|
||||
//Go back to room and send a message
|
||||
// Go back to room and send a message
|
||||
await tapBack();
|
||||
await mockMessage('messageToPin');
|
||||
|
||||
//Pin the message
|
||||
await pinMessage('messageToPin')
|
||||
// Pin the message
|
||||
await pinMessage('messageToPin');
|
||||
|
||||
//Back into Room Actions
|
||||
// Back into Room Actions
|
||||
await element(by.id('room-header')).tap();
|
||||
await waitFor(element(by.id('room-actions-view'))).toExist().withTimeout(5000);
|
||||
await element(by.id('room-actions-scrollview')).scrollTo('bottom');
|
||||
|
@ -273,7 +269,7 @@ describe('Room actions screen', () => {
|
|||
// });
|
||||
});
|
||||
|
||||
describe('Notification', async() => {
|
||||
describe('Notification', () => {
|
||||
it('should navigate to notification preference view', async() => {
|
||||
await element(by.id('room-actions-scrollview')).scrollTo('bottom');
|
||||
await waitFor(element(by.id('room-actions-notifications'))).toExist().withTimeout(2000);
|
||||
|
@ -318,13 +314,13 @@ describe('Room actions screen', () => {
|
|||
after(async() => {
|
||||
await backToActions();
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
describe('Channel/Group', async() => {
|
||||
describe('Channel/Group', () => {
|
||||
// Currently, there's no way to add more owners to the room
|
||||
// So we test only for the 'You are the last owner...' message
|
||||
|
||||
const user = data.users.alternate
|
||||
const user = data.users.alternate;
|
||||
|
||||
it('should tap on leave channel and raise alert', async() => {
|
||||
await element(by.id('room-actions-scrollview')).scrollTo('bottom');
|
||||
|
@ -363,12 +359,24 @@ describe('Room actions screen', () => {
|
|||
await backToActions();
|
||||
});
|
||||
|
||||
describe('Room Members', async() => {
|
||||
describe('Room Members', () => {
|
||||
before(async() => {
|
||||
await element(by.id('room-actions-members')).tap();
|
||||
await waitFor(element(by.id('room-members-view'))).toExist().withTimeout(2000);
|
||||
});
|
||||
|
||||
const openActionSheet = async(username) => {
|
||||
await waitFor(element(by.id(`room-members-view-item-${ username }`))).toExist().withTimeout(5000);
|
||||
await element(by.id(`room-members-view-item-${ username }`)).tap();
|
||||
await sleep(300);
|
||||
await expect(element(by.id('action-sheet'))).toExist();
|
||||
await expect(element(by.id('action-sheet-handle'))).toBeVisible();
|
||||
};
|
||||
|
||||
const closeActionSheet = async() => {
|
||||
await element(by.id('action-sheet-handle')).swipe('down', 'fast', 0.6);
|
||||
};
|
||||
|
||||
it('should show all users', async() => {
|
||||
await element(by.id('room-members-view-toggle-status')).tap();
|
||||
await waitFor(element(by.id(`room-members-view-item-${ user.username }`))).toExist().withTimeout(60000);
|
||||
|
@ -397,18 +405,6 @@ describe('Room actions screen', () => {
|
|||
await waitFor(element(by.id(`room-members-view-item-${ user.username }`))).toExist().withTimeout(60000);
|
||||
});
|
||||
|
||||
const openActionSheet = async(username) => {
|
||||
await waitFor(element(by.id(`room-members-view-item-${ username }`))).toExist().withTimeout(5000);
|
||||
await element(by.id(`room-members-view-item-${ username }`)).tap();
|
||||
await sleep(300);
|
||||
await expect(element(by.id('action-sheet'))).toExist();
|
||||
await expect(element(by.id('action-sheet-handle'))).toBeVisible();
|
||||
}
|
||||
|
||||
const closeActionSheet = async() => {
|
||||
await element(by.id('action-sheet-handle')).swipe('down', 'fast', 0.6);
|
||||
}
|
||||
|
||||
it('should set/remove as owner', async() => {
|
||||
await openActionSheet(user.username);
|
||||
await element(by.id('action-sheet-set-owner')).tap();
|
||||
|
@ -504,9 +500,9 @@ describe('Room actions screen', () => {
|
|||
await waitFor(element(by.id('rooms-list-view'))).toExist().withTimeout(2000);
|
||||
});
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
describe('Direct', async() => {
|
||||
describe('Direct', () => {
|
||||
before(async() => {
|
||||
await navigateToRoomActions('d');
|
||||
});
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
const {
|
||||
expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const { navigateToLogin, login, mockMessage, tapBack, searchRoom } = require('../../helpers/app');
|
||||
navigateToLogin, login, mockMessage, tapBack, searchRoom
|
||||
} = require('../../helpers/app');
|
||||
const data = require('../../data');
|
||||
|
||||
const channel = data.groups.private.name;
|
||||
|
@ -10,28 +9,28 @@ const navigateToRoom = async() => {
|
|||
await searchRoom(channel);
|
||||
await element(by.id(`rooms-list-view-item-${ channel }`)).tap();
|
||||
await waitFor(element(by.id('room-view'))).toBeVisible().withTimeout(5000);
|
||||
}
|
||||
};
|
||||
|
||||
describe('Discussion', () => {
|
||||
before(async() => {
|
||||
await device.launchApp({ permissions: { notifications: 'YES' }, newInstance: true, delete: true });
|
||||
await navigateToLogin();
|
||||
await login(data.users.regular.username, data.users.regular.password)
|
||||
await login(data.users.regular.username, data.users.regular.password);
|
||||
});
|
||||
|
||||
it('should create discussion from NewMessageView', async() => {
|
||||
const discussionName = `${data.random} Discussion NewMessageView`;
|
||||
const discussionName = `${ data.random } Discussion NewMessageView`;
|
||||
await element(by.id('rooms-list-view-create-channel')).tap();
|
||||
await waitFor(element(by.id('new-message-view'))).toExist().withTimeout(2000);
|
||||
await element(by.label('Create Discussion')).atIndex(0).tap();
|
||||
await waitFor(element(by.id('create-discussion-view'))).toExist().withTimeout(60000);
|
||||
await expect(element(by.id('create-discussion-view'))).toExist();
|
||||
await element(by.label('Select a Channel...')).tap();
|
||||
await element(by.id('multi-select-search')).replaceText(`${channel}`);
|
||||
await waitFor(element(by.id(`multi-select-item-${channel}`))).toExist().withTimeout(10000);
|
||||
await element(by.id(`multi-select-item-${channel}`)).tap();
|
||||
await element(by.id('multi-select-search')).replaceText(`${ channel }`);
|
||||
await waitFor(element(by.id(`multi-select-item-${ channel }`))).toExist().withTimeout(10000);
|
||||
await element(by.id(`multi-select-item-${ channel }`)).tap();
|
||||
await element(by.id('multi-select-discussion-name')).replaceText(discussionName);
|
||||
await waitFor(element(by.id(`create-discussion-submit`))).toExist().withTimeout(10000);
|
||||
await waitFor(element(by.id('create-discussion-submit'))).toExist().withTimeout(10000);
|
||||
await element(by.id('create-discussion-submit')).tap();
|
||||
await waitFor(element(by.id('room-view'))).toExist().withTimeout(10000);
|
||||
await waitFor(element(by.id(`room-view-title-${ discussionName }`))).toExist().withTimeout(5000);
|
||||
|
@ -40,20 +39,20 @@ describe('Discussion', () => {
|
|||
});
|
||||
|
||||
it('should create discussion from action button', async() => {
|
||||
const discussionName = `${data.random} Discussion Action Button`;
|
||||
const discussionName = `${ data.random } Discussion Action Button`;
|
||||
await navigateToRoom();
|
||||
await element(by.id('messagebox-actions')).tap();
|
||||
await waitFor(element(by.id('action-sheet'))).toExist().withTimeout(2000);
|
||||
await element(by.label('Create Discussion')).atIndex(0).tap();
|
||||
await waitFor(element(by.id('create-discussion-view'))).toExist().withTimeout(2000);
|
||||
await element(by.id('multi-select-discussion-name')).replaceText(discussionName);
|
||||
await waitFor(element(by.id(`create-discussion-submit`))).toExist().withTimeout(10000);
|
||||
await waitFor(element(by.id('create-discussion-submit'))).toExist().withTimeout(10000);
|
||||
await element(by.id('create-discussion-submit')).tap();
|
||||
await waitFor(element(by.id('room-view'))).toExist().withTimeout(10000);
|
||||
await waitFor(element(by.id(`room-view-title-${ discussionName }`))).toExist().withTimeout(5000);
|
||||
});
|
||||
|
||||
describe('Create Discussion from action sheet', async() => {
|
||||
describe('Create Discussion from action sheet', () => {
|
||||
it('should send a message', async() => {
|
||||
await waitFor(element(by.id('messagebox'))).toBeVisible().withTimeout(60000);
|
||||
await mockMessage('message');
|
||||
|
@ -63,15 +62,15 @@ describe('Discussion', () => {
|
|||
const discussionName = `${ data.random }message`;
|
||||
await element(by.label(discussionName)).atIndex(0).longPress();
|
||||
await waitFor(element(by.id('action-sheet'))).toExist().withTimeout(2000);
|
||||
await element(by.label(`Start a Discussion`)).atIndex(0).tap();
|
||||
await element(by.label('Start a Discussion')).atIndex(0).tap();
|
||||
await waitFor(element(by.id('create-discussion-view'))).toExist().withTimeout(2000);
|
||||
await element(by.id('create-discussion-submit')).tap();
|
||||
await waitFor(element(by.id('room-view'))).toExist().withTimeout(10000);
|
||||
await waitFor(element(by.id(`room-view-title-${ discussionName }`))).toExist().withTimeout(5000);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Check RoomActionsView render', async() => {
|
||||
|
||||
describe('Check RoomActionsView render', () => {
|
||||
it('should navigete to RoomActionsView', async() => {
|
||||
await waitFor(element(by.id('room-header'))).toBeVisible().withTimeout(5000);
|
||||
await element(by.id('room-header')).tap();
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
const {
|
||||
device, expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const data = require('../../data');
|
||||
const { navigateToLogin, login, mockMessage, tapBack, sleep, searchRoom, starMessage, pinMessage, dismissReviewNag, tryTapping } = require('../../helpers/app');
|
||||
const {
|
||||
navigateToLogin, login, mockMessage, tapBack, sleep, searchRoom, dismissReviewNag
|
||||
} = require('../../helpers/app');
|
||||
|
||||
async function navigateToRoom(roomName) {
|
||||
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
|
||||
|
@ -20,14 +19,14 @@ describe('Threads', () => {
|
|||
await navigateToRoom(mainRoom);
|
||||
});
|
||||
|
||||
describe('Render', async() => {
|
||||
describe('Render', () => {
|
||||
it('should have room screen', async() => {
|
||||
await expect(element(by.id('room-view'))).toExist();
|
||||
await waitFor(element(by.id(`room-view-title-${ mainRoom }`))).toExist().withTimeout(5000);
|
||||
});
|
||||
|
||||
// Render - Header
|
||||
describe('Header', async() => {
|
||||
describe('Header', () => {
|
||||
it('should have actions button ', async() => {
|
||||
await expect(element(by.id('room-header'))).toExist();
|
||||
});
|
||||
|
@ -38,7 +37,7 @@ describe('Threads', () => {
|
|||
});
|
||||
|
||||
// Render - Messagebox
|
||||
describe('Messagebox', async() => {
|
||||
describe('Messagebox', () => {
|
||||
it('should have messagebox', async() => {
|
||||
await expect(element(by.id('messagebox'))).toExist();
|
||||
});
|
||||
|
@ -63,8 +62,8 @@ describe('Threads', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('Usage', async() => {
|
||||
describe('Thread', async() => {
|
||||
describe('Usage', () => {
|
||||
describe('Thread', () => {
|
||||
const thread = `${ data.random }thread`;
|
||||
it('should create thread', async() => {
|
||||
await mockMessage('thread');
|
||||
|
@ -104,9 +103,9 @@ describe('Threads', () => {
|
|||
const messageText = 'threadonly';
|
||||
await mockMessage(messageText, true);
|
||||
await tapBack();
|
||||
await waitFor(element(by.id('room-header').and(by.label(`${ mainRoom }`)))).toBeVisible().withTimeout(2000);
|
||||
await waitFor(element(by.id('room-header').and(by.label(`${ data.random }thread`)))).toBeNotVisible().withTimeout(2000);
|
||||
await sleep(500) //TODO: Find a better way to wait for the animation to finish and the messagebox-input to be available and usable :(
|
||||
await waitFor(element(by.id('room-header').and(by.label(`${ mainRoom }`)))).toBeVisible().withTimeout(2000);
|
||||
await waitFor(element(by.id('room-header').and(by.label(`${ data.random }thread`)))).toBeNotVisible().withTimeout(2000);
|
||||
await sleep(500); // TODO: Find a better way to wait for the animation to finish and the messagebox-input to be available and usable :(
|
||||
await waitFor(element(by.label(`${ data.random }${ messageText }`)).atIndex(0)).toNotExist().withTimeout(2000);
|
||||
});
|
||||
|
||||
|
@ -117,24 +116,24 @@ describe('Threads', () => {
|
|||
await element(by.id('messagebox-send-to-channel')).tap();
|
||||
await element(by.id('messagebox-send-message')).tap();
|
||||
await tapBack();
|
||||
await waitFor(element(by.id('room-header').and(by.label(`${ mainRoom }`)))).toBeVisible().withTimeout(2000);
|
||||
await waitFor(element(by.id('room-header').and(by.label(`${ data.random }thread`)))).toBeNotVisible().withTimeout(2000);
|
||||
await sleep(500) //TODO: Find a better way to wait for the animation to finish and the messagebox-input to be available and usable :(
|
||||
await waitFor(element(by.id('room-header').and(by.label(`${ mainRoom }`)))).toBeVisible().withTimeout(2000);
|
||||
await waitFor(element(by.id('room-header').and(by.label(`${ data.random }thread`)))).toBeNotVisible().withTimeout(2000);
|
||||
await sleep(500); // TODO: Find a better way to wait for the animation to finish and the messagebox-input to be available and usable :(
|
||||
await waitFor(element(by.label(messageText)).atIndex(0)).toExist().withTimeout(2000);
|
||||
});
|
||||
|
||||
it('should navigate to thread from thread name', async() => {
|
||||
const messageText = 'navthreadname';
|
||||
await mockMessage('dummymessagebetweenthethread');
|
||||
await dismissReviewNag() //TODO: Create a proper test for this elsewhere.
|
||||
await dismissReviewNag(); // TODO: Create a proper test for this elsewhere.
|
||||
await element(by.id(`message-thread-button-${ thread }`)).tap();
|
||||
await element(by.id('messagebox-input-thread')).typeText(messageText);
|
||||
await element(by.id('messagebox-send-to-channel')).tap();
|
||||
await element(by.id('messagebox-send-message')).tap();
|
||||
await tapBack();
|
||||
await waitFor(element(by.id('room-header').and(by.label(`${ mainRoom }`)))).toBeVisible().withTimeout(2000);
|
||||
await waitFor(element(by.id('room-header').and(by.label(`${ data.random }thread`)))).toBeNotVisible().withTimeout(2000);
|
||||
await waitFor(element(by.id(`message-thread-replied-on-${ thread }`))).toBeVisible().withTimeout(2000);
|
||||
await waitFor(element(by.id('room-header').and(by.label(`${ mainRoom }`)))).toBeVisible().withTimeout(2000);
|
||||
await waitFor(element(by.id('room-header').and(by.label(`${ data.random }thread`)))).toBeNotVisible().withTimeout(2000);
|
||||
await waitFor(element(by.id(`message-thread-replied-on-${ thread }`))).toBeVisible().withTimeout(2000);
|
||||
await element(by.id(`message-thread-replied-on-${ thread }`)).tap();
|
||||
await waitFor(element(by.id(`room-view-title-${ thread }`))).toExist().withTimeout(5000);
|
||||
await expect(element(by.id(`room-view-title-${ thread }`))).toExist();
|
||||
|
@ -155,7 +154,7 @@ describe('Threads', () => {
|
|||
await tapBack();
|
||||
});
|
||||
|
||||
it('should draft thread message', async () => {
|
||||
it('should draft thread message', async() => {
|
||||
await element(by.id(`message-thread-button-${ thread }`)).tap();
|
||||
await waitFor(element(by.id(`room-view-title-${ thread }`))).toExist().withTimeout(5000);
|
||||
await element(by.id('messagebox-input-thread')).typeText(`${ thread }draft`);
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
const {
|
||||
device, expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const data = require('../../data');
|
||||
const { tapBack, sleep, navigateToLogin, login, tryTapping } = require('../../helpers/app');
|
||||
const {
|
||||
navigateToLogin, login
|
||||
} = require('../../helpers/app');
|
||||
|
||||
|
||||
|
||||
|
@ -13,41 +12,39 @@ describe('Group DM', () => {
|
|||
await login(data.users.regular.username, data.users.regular.password);
|
||||
});
|
||||
|
||||
describe('Create Group DM', async() => {
|
||||
describe('Create Group DM', () => {
|
||||
before(async() => {
|
||||
await element(by.id('rooms-list-view-create-channel')).tap();
|
||||
});
|
||||
|
||||
describe('Render', async() => {
|
||||
describe('Render', () => {
|
||||
it('should have new message screen', async() => {
|
||||
await waitFor(element(by.id('new-message-view'))).toBeVisible().withTimeout(2000);
|
||||
});
|
||||
|
||||
|
||||
it('should have search input', async() => {
|
||||
await waitFor(element(by.id('new-message-view-search'))).toBeVisible().withTimeout(2000);
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
describe('Usage', async() => {
|
||||
describe('Usage', () => {
|
||||
it('should navigate to create DM', async() => {
|
||||
await element(by.label('Create Direct Messages')).tap();
|
||||
});
|
||||
|
||||
it('should add users', async() => {
|
||||
await element(by.id('select-users-view-search')).replaceText('rocket.cat');
|
||||
await waitFor(element(by.id(`select-users-view-item-rocket.cat`))).toBeVisible().withTimeout(10000);
|
||||
await waitFor(element(by.id('select-users-view-item-rocket.cat'))).toBeVisible().withTimeout(10000);
|
||||
await element(by.id('select-users-view-item-rocket.cat')).tap();
|
||||
await element(by.id('select-users-view-search')).replaceText(data.users.existing.username);
|
||||
await waitFor(element(by.id(`select-users-view-item-${data.users.existing.username}`))).toBeVisible().withTimeout(10000);
|
||||
await element(by.id(`select-users-view-item-${data.users.existing.username}`)).tap();
|
||||
await waitFor(element(by.id(`select-users-view-item-${ data.users.existing.username }`))).toBeVisible().withTimeout(10000);
|
||||
await element(by.id(`select-users-view-item-${ data.users.existing.username }`)).tap();
|
||||
await element(by.id('selected-users-view-submit')).tap();
|
||||
});
|
||||
|
||||
it('check Group DM exist', async() => {
|
||||
await waitFor(element(by.id(`room-view-title-${data.users.existing.username}, rocket.cat`))).toExist().withTimeout(10000);
|
||||
await waitFor(element(by.id(`room-view-title-${ data.users.existing.username }, rocket.cat`))).toExist().withTimeout(10000);
|
||||
});
|
||||
|
||||
|
||||
})
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
const {
|
||||
device, expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const data = require('../../data');
|
||||
const { navigateToLogin, login, searchRoom, sleep } = require('../../helpers/app');
|
||||
const { sendMessage } = require('../../helpers/data_setup')
|
||||
const {
|
||||
navigateToLogin, login, searchRoom, sleep
|
||||
} = require('../../helpers/app');
|
||||
const { sendMessage } = require('../../helpers/data_setup');
|
||||
|
||||
async function navigateToRoom(user) {
|
||||
await searchRoom(`${ user }`);
|
||||
|
@ -12,7 +11,7 @@ async function navigateToRoom(user) {
|
|||
}
|
||||
|
||||
describe('Mark as unread', () => {
|
||||
const user = data.users.alternate.username
|
||||
const user = data.users.alternate.username;
|
||||
|
||||
before(async() => {
|
||||
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
|
||||
|
@ -21,9 +20,8 @@ describe('Mark as unread', () => {
|
|||
await navigateToRoom(user);
|
||||
});
|
||||
|
||||
// TODO: Fix flakiness. If it fails, run it solo.
|
||||
describe('Usage', async() => {
|
||||
describe('Mark message as unread', async() => {
|
||||
describe('Usage', () => {
|
||||
describe('Mark message as unread', () => {
|
||||
it('should mark message as unread', async() => {
|
||||
const message = `${ data.random }message-mark-as-unread`;
|
||||
const channelName = `@${ data.users.regular.username }`;
|
||||
|
@ -35,7 +33,7 @@ describe('Mark as unread', () => {
|
|||
await element(by.id('action-sheet-handle')).swipe('up', 'fast', 0.5);
|
||||
await element(by.label('Mark Unread')).atIndex(0).tap();
|
||||
await waitFor(element(by.id('rooms-list-view'))).toExist().withTimeout(5000);
|
||||
await expect(element(by.id(`rooms-list-view-item-${data.users.alternate.username}`))).toExist();
|
||||
await expect(element(by.id(`rooms-list-view-item-${ data.users.alternate.username }`))).toExist();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
const {
|
||||
device, expect, element, by, waitFor
|
||||
} = require('detox');
|
||||
const data = require('../../data');
|
||||
const { navigateToLogin, login, tapBack, sleep, searchRoom } = require('../../helpers/app');
|
||||
const {
|
||||
navigateToLogin, login, tapBack, sleep, searchRoom
|
||||
} = require('../../helpers/app');
|
||||
|
||||
const privateRoomName = data.groups.private.name
|
||||
const privateRoomName = data.groups.private.name;
|
||||
|
||||
async function navigateToRoomInfo(type) {
|
||||
let room;
|
||||
|
@ -31,14 +30,13 @@ async function waitForToast() {
|
|||
}
|
||||
|
||||
describe('Room info screen', () => {
|
||||
|
||||
before(async() => {
|
||||
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
|
||||
await navigateToLogin();
|
||||
await login(data.users.regular.username, data.users.regular.password);
|
||||
});
|
||||
|
||||
describe('Direct', async() => {
|
||||
describe('Direct', () => {
|
||||
before(async() => {
|
||||
await navigateToRoomInfo('d');
|
||||
});
|
||||
|
@ -49,107 +47,107 @@ describe('Room info screen', () => {
|
|||
});
|
||||
|
||||
after(async() => {
|
||||
await tapBack()
|
||||
await tapBack()
|
||||
await tapBack()
|
||||
})
|
||||
await tapBack();
|
||||
await tapBack();
|
||||
await tapBack();
|
||||
});
|
||||
});
|
||||
|
||||
describe('Channel/Group', async() => {
|
||||
describe('Channel/Group', () => {
|
||||
before(async() => {
|
||||
await navigateToRoomInfo('c');
|
||||
});
|
||||
|
||||
describe('Render', async() => {
|
||||
describe('Render', () => {
|
||||
it('should have room info view', async() => {
|
||||
await expect(element(by.id('room-info-view'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have name', async() => {
|
||||
await expect(element(by.id('room-info-view-name'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have description', async() => {
|
||||
await expect(element(by.label('Description'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have topic', async() => {
|
||||
await expect(element(by.label('Topic'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have announcement', async() => {
|
||||
await expect(element(by.label('Announcement'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have edit button', async() => {
|
||||
await expect(element(by.id('room-info-view-edit-button'))).toExist();
|
||||
});
|
||||
});
|
||||
|
||||
describe('Render Edit', async() => {
|
||||
describe('Render Edit', () => {
|
||||
before(async() => {
|
||||
await waitFor(element(by.id('room-info-view-edit-button'))).toExist().withTimeout(10000);
|
||||
await element(by.id('room-info-view-edit-button')).tap();
|
||||
await waitFor(element(by.id('room-info-edit-view'))).toExist().withTimeout(2000);
|
||||
});
|
||||
|
||||
|
||||
it('should have room info edit view', async() => {
|
||||
await expect(element(by.id('room-info-edit-view'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have name input', async() => {
|
||||
await expect(element(by.id('room-info-edit-view-name'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have description input', async() => {
|
||||
await expect(element(by.id('room-info-edit-view-description'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have topic input', async() => {
|
||||
await expect(element(by.id('room-info-edit-view-topic'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have announcement input', async() => {
|
||||
await expect(element(by.id('room-info-edit-view-announcement'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have password input', async() => {
|
||||
await expect(element(by.id('room-info-edit-view-password'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have type switch', async() => {
|
||||
// Ugly hack to scroll on detox
|
||||
await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.8);
|
||||
await expect(element(by.id('room-info-edit-view-t'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have ready only switch', async() => {
|
||||
await expect(element(by.id('room-info-edit-view-ro'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have submit button', async() => {
|
||||
await expect(element(by.id('room-info-edit-view-submit'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have reset button', async() => {
|
||||
await expect(element(by.id('room-info-edit-view-reset'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have archive button', async() => {
|
||||
await expect(element(by.id('room-info-edit-view-archive'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should have delete button', async() => {
|
||||
await expect(element(by.id('room-info-edit-view-delete'))).toExist();
|
||||
});
|
||||
|
||||
|
||||
after(async() => {
|
||||
// Ugly hack to scroll on detox
|
||||
await element(by.id('room-info-edit-view-list')).swipe('down', 'fast', 0.8);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Usage', async() => {
|
||||
|
||||
describe('Usage', () => {
|
||||
// it('should enter "invalid name" and get error', async() => {
|
||||
// await element(by.type('UIScrollView')).atIndex(1).swipe('down');
|
||||
// await element(by.id('room-info-edit-view-name')).replaceText('invalid name');
|
||||
|
@ -161,7 +159,7 @@ describe('Room info screen', () => {
|
|||
// await waitFor(element(by.text('There was an error while saving settings!'))).toBeNotVisible().withTimeout(10000);
|
||||
// await element(by.type('UIScrollView')).atIndex(1).swipe('down');
|
||||
// });
|
||||
|
||||
|
||||
it('should change room name', async() => {
|
||||
await element(by.id('room-info-edit-view-name')).replaceText(`${ privateRoomName }new`);
|
||||
await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.5);
|
||||
|
@ -179,7 +177,7 @@ describe('Room info screen', () => {
|
|||
await waitForToast();
|
||||
await element(by.id('room-info-edit-view-list')).swipe('down', 'fast', 0.8);
|
||||
});
|
||||
|
||||
|
||||
it('should reset form', async() => {
|
||||
await element(by.id('room-info-edit-view-name')).replaceText('abc');
|
||||
await element(by.id('room-info-edit-view-description')).replaceText('abc');
|
||||
|
@ -188,7 +186,7 @@ describe('Room info screen', () => {
|
|||
await element(by.id('room-info-edit-view-password')).replaceText('abc');
|
||||
await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.5);
|
||||
await element(by.id('room-info-edit-view-t')).tap();
|
||||
await element(by.id('room-info-edit-view-ro')).longPress(); //https://github.com/facebook/react-native/issues/28032
|
||||
await element(by.id('room-info-edit-view-ro')).longPress(); // https://github.com/facebook/react-native/issues/28032
|
||||
await element(by.id('room-info-edit-view-react-when-ro')).tap();
|
||||
await element(by.id('room-info-edit-view-reset')).tap();
|
||||
// after reset
|
||||
|
@ -202,7 +200,7 @@ describe('Room info screen', () => {
|
|||
await expect(element(by.id('room-info-edit-view-react-when-ro'))).toBeNotVisible();
|
||||
await element(by.id('room-info-edit-view-list')).swipe('down', 'fast', 0.8);
|
||||
});
|
||||
|
||||
|
||||
it('should change room description', async() => {
|
||||
await element(by.id('room-info-edit-view-description')).replaceText('new description');
|
||||
await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.5);
|
||||
|
@ -212,7 +210,7 @@ describe('Room info screen', () => {
|
|||
await waitFor(element(by.id('room-info-view'))).toExist().withTimeout(2000);
|
||||
await expect(element(by.label('new description').withAncestor(by.id('room-info-view-description')))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should change room topic', async() => {
|
||||
await waitFor(element(by.id('room-info-view-edit-button'))).toExist().withTimeout(10000);
|
||||
await element(by.id('room-info-view-edit-button')).tap();
|
||||
|
@ -225,7 +223,7 @@ describe('Room info screen', () => {
|
|||
await waitFor(element(by.id('room-info-view'))).toExist().withTimeout(2000);
|
||||
await expect(element(by.label('new topic').withAncestor(by.id('room-info-view-topic')))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should change room announcement', async() => {
|
||||
await waitFor(element(by.id('room-info-view-edit-button'))).toExist().withTimeout(10000);
|
||||
await element(by.id('room-info-view-edit-button')).tap();
|
||||
|
@ -238,7 +236,7 @@ describe('Room info screen', () => {
|
|||
await waitFor(element(by.id('room-info-view'))).toExist().withTimeout(2000);
|
||||
await expect(element(by.label('new announcement').withAncestor(by.id('room-info-view-announcement')))).toExist();
|
||||
});
|
||||
|
||||
|
||||
it('should change room password', async() => {
|
||||
await waitFor(element(by.id('room-info-view-edit-button'))).toExist().withTimeout(10000);
|
||||
await element(by.id('room-info-view-edit-button')).tap();
|
||||
|
@ -248,7 +246,7 @@ describe('Room info screen', () => {
|
|||
await element(by.id('room-info-edit-view-submit')).tap();
|
||||
await waitForToast();
|
||||
});
|
||||
|
||||
|
||||
it('should change room type', async() => {
|
||||
await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.5);
|
||||
await element(by.id('room-info-edit-view-t')).tap();
|
||||
|
@ -258,7 +256,7 @@ describe('Room info screen', () => {
|
|||
await element(by.id('room-info-edit-view-submit')).tap();
|
||||
await waitForToast();
|
||||
});
|
||||
|
||||
|
||||
// it('should change room read only and allow reactions', async() => {
|
||||
// await sleep(1000);
|
||||
// await element(by.type('UIScrollView')).atIndex(1).swipe('up');
|
||||
|
@ -270,7 +268,7 @@ describe('Room info screen', () => {
|
|||
// await waitForToast();
|
||||
// // TODO: test if it's possible to react
|
||||
// });
|
||||
|
||||
|
||||
it('should archive room', async() => {
|
||||
await element(by.id('room-info-edit-view-list')).swipe('up', 'fast', 0.5);
|
||||
await element(by.id('room-info-edit-view-archive')).tap();
|
||||
|
|
|
@ -0,0 +1,154 @@
|
|||
const data = require('../../data');
|
||||
const {
|
||||
navigateToLogin, tapBack, login, searchRoom
|
||||
} = require('../../helpers/app');
|
||||
|
||||
async function navigateToRoom(roomName) {
|
||||
await searchRoom(`${ roomName }`);
|
||||
await element(by.id(`rooms-list-view-item-${ roomName }`)).tap();
|
||||
await waitFor(element(by.id('room-view'))).toBeVisible().withTimeout(5000);
|
||||
}
|
||||
|
||||
async function clearCache() {
|
||||
await waitFor(element(by.id('room-view'))).toBeVisible().withTimeout(5000);
|
||||
await tapBack();
|
||||
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(10000);
|
||||
await element(by.id('rooms-list-view-sidebar')).tap();
|
||||
await waitFor(element(by.id('sidebar-view'))).toBeVisible().withTimeout(2000);
|
||||
await element(by.id('sidebar-settings')).tap();
|
||||
await waitFor(element(by.id('settings-view'))).toBeVisible().withTimeout(2000);
|
||||
await element(by.id('settings-view-clear-cache')).tap();
|
||||
await waitFor(element(by.text('This will clear all your offline data.'))).toExist().withTimeout(2000);
|
||||
await element(by.label('Clear').and(by.type('_UIAlertControllerActionView'))).tap();
|
||||
await waitFor(element(by.id('rooms-list-view'))).toBeVisible().withTimeout(5000);
|
||||
await waitFor(element(by.id('rooms-list-view-item-jumping'))).toExist().withTimeout(10000);
|
||||
}
|
||||
|
||||
async function waitForLoading() {
|
||||
await waitFor(element(by.id('loading'))).toBeVisible().withTimeout(5000);
|
||||
await waitFor(element(by.id('loading'))).toBeNotVisible().withTimeout(5000);
|
||||
}
|
||||
|
||||
describe('Room', () => {
|
||||
before(async() => {
|
||||
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
|
||||
await navigateToLogin();
|
||||
await login(data.adminUser, data.adminPassword);
|
||||
});
|
||||
|
||||
it('should jump to an old message and load its surroundings', async() => {
|
||||
await navigateToRoom('jumping');
|
||||
await waitFor(element(by.label('Quote first message'))).toExist().withTimeout(5000);
|
||||
await element(by.label('1')).atIndex(0).tap();
|
||||
await waitForLoading();
|
||||
await expect(element(by.label('1')).atIndex(0)).toExist();
|
||||
await expect(element(by.label('2'))).toExist();
|
||||
});
|
||||
|
||||
it('should tap FAB and scroll to bottom', async() => {
|
||||
await waitFor(element(by.id('nav-jump-to-bottom'))).toExist().withTimeout(5000);
|
||||
await element(by.id('nav-jump-to-bottom')).tap();
|
||||
await waitFor(element(by.label('Quote first message'))).toExist().withTimeout(5000);
|
||||
await clearCache();
|
||||
});
|
||||
|
||||
it('should load messages on scroll', async() => {
|
||||
await navigateToRoom('jumping');
|
||||
await waitFor(element(by.id('room-view-messages'))).toExist().withTimeout(5000);
|
||||
await waitFor(element(by.label('300'))).toExist().withTimeout(5000);
|
||||
let found = false;
|
||||
while (!found) {
|
||||
await element(by.id('room-view-messages')).atIndex(0).scroll(500, 'up');
|
||||
try {
|
||||
await expect(element(by.label('249'))).toExist();
|
||||
found = true;
|
||||
} catch {
|
||||
//
|
||||
}
|
||||
}
|
||||
await clearCache();
|
||||
});
|
||||
|
||||
it('should search for old message and load its surroundings', async() => {
|
||||
await navigateToRoom('jumping');
|
||||
await element(by.id('room-view-search')).tap();
|
||||
await waitFor(element(by.id('search-messages-view'))).toExist().withTimeout(5000);
|
||||
await element(by.id('search-message-view-input')).typeText('30\n');
|
||||
await waitFor(element(by.label('30')).atIndex(0)).toExist().withTimeout(5000);
|
||||
await element(by.label('30')).atIndex(0).tap();
|
||||
await waitForLoading();
|
||||
await expect(element(by.label('30'))).toExist();
|
||||
await expect(element(by.label('31'))).toExist();
|
||||
await expect(element(by.label('32'))).toExist();
|
||||
});
|
||||
|
||||
it('should load newer and older messages', async() => {
|
||||
await element(by.id('room-view-messages')).atIndex(0).swipe('down', 'fast', 0.8);
|
||||
await waitFor(element(by.label('5'))).toExist().withTimeout(5000);
|
||||
await waitFor(element(by.label('Load Older'))).toExist().withTimeout(5000);
|
||||
await element(by.label('Load Older')).atIndex(0).tap();
|
||||
await waitFor(element(by.label('4'))).toExist().withTimeout(5000);
|
||||
await element(by.id('room-view-messages')).atIndex(0).swipe('down', 'fast', 0.5);
|
||||
await waitFor(element(by.label('1'))).toExist().withTimeout(5000);
|
||||
await element(by.id('room-view-messages')).atIndex(0).swipe('up', 'fast', 0.5);
|
||||
await waitFor(element(by.label('25'))).toExist().withTimeout(5000);
|
||||
await element(by.id('room-view-messages')).atIndex(0).swipe('up', 'fast', 0.5);
|
||||
await waitFor(element(by.label('50'))).toExist().withTimeout(5000);
|
||||
await element(by.id('room-view-messages')).atIndex(0).swipe('up', 'slow', 0.5);
|
||||
await waitFor(element(by.label('Load Newer'))).toExist().withTimeout(5000);
|
||||
await element(by.label('Load Newer')).atIndex(0).tap();
|
||||
await waitFor(element(by.label('104'))).toExist().withTimeout(5000);
|
||||
await waitFor(element(by.label('Load Newer'))).toExist().withTimeout(5000);
|
||||
await element(by.label('Load Newer')).atIndex(0).tap();
|
||||
await waitFor(element(by.label('154'))).toExist().withTimeout(5000);
|
||||
await waitFor(element(by.label('Load Newer'))).toExist().withTimeout(5000);
|
||||
await element(by.label('Load Newer')).atIndex(0).tap();
|
||||
await waitFor(element(by.label('Load Newer'))).toNotExist().withTimeout(5000);
|
||||
await expect(element(by.label('Load More'))).toNotExist();
|
||||
await expect(element(by.label('201'))).toExist();
|
||||
await expect(element(by.label('202'))).toExist();
|
||||
await tapBack();
|
||||
});
|
||||
});
|
||||
|
||||
const expectThreadMessages = async(message) => {
|
||||
await waitFor(element(by.id('room-view-title-jumping-thread'))).toExist().withTimeout(5000);
|
||||
await expect(element(by.label(message))).toExist();
|
||||
};
|
||||
|
||||
describe('Threads', () => {
|
||||
it('should navigate to a thread from another room', async() => {
|
||||
await navigateToRoom('jumping');
|
||||
await waitFor(element(by.label('Go to jumping-thread\'s thread')).atIndex(0)).toExist().withTimeout(5000);
|
||||
await element(by.label('Go to jumping-thread\'s thread')).atIndex(0).tap();
|
||||
await waitForLoading();
|
||||
await expectThreadMessages('Go to jumping-thread\'s thread');
|
||||
await tapBack();
|
||||
});
|
||||
|
||||
it('should tap on thread message from main room', async() => {
|
||||
await waitFor(element(by.label('thread message sent to main room')).atIndex(0)).toExist().withTimeout(5000);
|
||||
await element(by.label('thread message sent to main room')).atIndex(0).tap();
|
||||
await expectThreadMessages('thread message sent to main room');
|
||||
await tapBack();
|
||||
});
|
||||
|
||||
it('should tap on quote', async() => {
|
||||
await waitFor(element(by.label('quoted'))).toExist().withTimeout(5000);
|
||||
await element(by.label('quoted')).atIndex(0).tap();
|
||||
await expectThreadMessages('quoted');
|
||||
await tapBack();
|
||||
});
|
||||
|
||||
it('should jump from search message', async() => {
|
||||
await waitFor(element(by.id('room-view-title-jumping-thread'))).toExist().withTimeout(5000);
|
||||
await element(by.id('room-view-search')).atIndex(0).tap();
|
||||
await waitFor(element(by.id('search-messages-view'))).toExist().withTimeout(5000);
|
||||
await element(by.id('search-message-view-input')).typeText('to be searched\n');
|
||||
await waitFor(element(by.label('to be searched'))).toExist().withTimeout(5000);
|
||||
await element(by.label('to be searched')).atIndex(1).tap();
|
||||
await expectThreadMessages('to be searched');
|
||||
});
|
||||
|
||||
// TODO: Threads pagination
|
||||
});
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue