From 13da75ea443e6eae43338476b78f91945c05d3d1 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Wed, 11 Dec 2019 20:01:12 -0300 Subject: [PATCH] Merge beta into master (#1461) --- .circleci/config.yml | 12 +- .eslintrc.js | 2 +- README.md | 6 +- __mocks__/react-native-device-info.js | 3 +- .../__snapshots__/Storyshots.test.js.snap | 6975 ++-- android/app/_BUCK | 55 + android/app/build.gradle | 2 +- android/app/src/debug/AndroidManifest.xml | 2 +- .../src/debug/res/xml/react_native_config.xml | 8 - android/app/src/main/AndroidManifest.xml | 1 + .../res/drawable-xxxhdpi/message_empty.png | Bin 77516 -> 0 bytes .../drawable-xxxhdpi/message_empty_black.png | Bin 0 -> 71461 bytes .../drawable-xxxhdpi/message_empty_dark.png | Bin 0 -> 503864 bytes .../drawable-xxxhdpi/message_empty_light.png | Bin 0 -> 114991 bytes .../app/src/main/res/layout/launch_screen.xml | 11 +- .../main/res/xml/network_security_config.xml | 9 + app/actions/actionsTypes.js | 2 +- app/actions/index.js | 6 + app/actions/login.js | 5 +- app/commands.js | 187 + app/constants/colors.js | 133 +- app/constants/tablet.js | 4 + app/containers/ActivityIndicator.js | 32 +- app/containers/Avatar.js | 17 +- app/containers/Button/index.js | 54 +- app/containers/Check.js | 12 +- app/containers/DisclosureIndicator.js | 20 +- app/containers/EmojiPicker/EmojiCategory.js | 53 +- app/containers/EmojiPicker/TabBar.js | 13 +- app/containers/EmojiPicker/index.js | 96 +- app/containers/EmojiPicker/styles.js | 8 +- app/containers/FileModal.js | 46 +- app/containers/HeaderButton.js | 24 +- app/containers/ListItem.js | 38 +- app/containers/MessageBox/CommandPreview.js | 47 - .../MessageBox/CommandsPreview/Item.js | 46 + .../MessageBox/CommandsPreview/index.js | 46 + app/containers/MessageBox/Context.js | 4 + app/containers/MessageBox/EmojiKeyboard.js | 14 +- .../MessageBox/LeftButtons.android.js | 6 +- app/containers/MessageBox/LeftButtons.ios.js | 7 +- .../MessageBox/Mentions/FixedMentionItem.js | 33 + .../MessageBox/Mentions/MentionEmoji.js | 34 + .../MessageBox/Mentions/MentionItem.js | 95 + app/containers/MessageBox/Mentions/index.js | 44 + app/containers/MessageBox/Recording.js | 18 +- app/containers/MessageBox/ReplyPreview.js | 90 +- .../MessageBox/RightButtons.android.js | 9 +- app/containers/MessageBox/RightButtons.ios.js | 7 +- app/containers/MessageBox/UploadModal.js | 78 +- .../MessageBox/buttons/AudioButton.js | 4 +- .../MessageBox/buttons/BaseButton.js | 7 +- .../MessageBox/buttons/CancelEditingButton.js | 4 +- .../MessageBox/buttons/FileButton.js | 4 +- .../MessageBox/buttons/SendButton.js | 4 +- .../MessageBox/buttons/ToggleEmojiButton.js | 7 +- app/containers/MessageBox/constants.js | 4 + app/containers/MessageBox/index.js | 279 +- app/containers/MessageBox/styles.js | 38 +- app/containers/MessageErrorActions.js | 71 +- app/containers/ReactionsModal.js | 42 +- app/containers/RoomTypeIcon.js | 23 +- app/containers/SearchBox.js | 39 +- app/containers/Separator.js | 18 +- app/containers/StatusBar.js | 22 +- app/containers/TextInput.js | 85 +- app/containers/Toast.js | 25 +- app/containers/markdown/AtMention.js | 16 +- app/containers/markdown/BlockQuote.js | 9 +- app/containers/markdown/Emoji.js | 7 +- app/containers/markdown/Hashtag.js | 13 +- app/containers/markdown/Link.js | 12 +- app/containers/markdown/ListItem.js | 7 +- app/containers/markdown/Table.js | 12 +- app/containers/markdown/TableCell.js | 11 +- app/containers/markdown/TableRow.js | 9 +- app/containers/markdown/index.js | 128 +- app/containers/markdown/styles.js | 21 - app/containers/message/Attachments.js | 15 +- app/containers/message/Audio.js | 49 +- app/containers/message/Broadcast.js | 14 +- app/containers/message/CallButton.js | 14 +- app/containers/message/Content.js | 9 +- app/containers/message/Discussion.js | 21 +- app/containers/message/Image.js | 42 +- app/containers/message/Message.js | 9 +- app/containers/message/MessageError.js | 11 +- app/containers/message/Reactions.js | 38 +- app/containers/message/ReadReceipt.js | 9 +- app/containers/message/RepliedThread.js | 15 +- app/containers/message/Reply.js | 71 +- app/containers/message/Thread.js | 15 +- app/containers/message/Urls.js | 61 +- app/containers/message/User.js | 20 +- app/containers/message/Video.js | 29 +- app/containers/message/index.js | 20 +- app/containers/message/styles.js | 32 +- app/i18n/locales/en.js | 28 +- app/i18n/locales/pt-BR.js | 30 +- app/i18n/locales/ru.js | 176 +- app/index.js | 408 +- app/lib/ModalNavigation.js | 21 + app/lib/database/index.js | 35 +- app/lib/database/model/Subscription.js | 2 + app/lib/database/model/migrations.js | 11 + app/lib/database/schema/app.js | 5 +- app/lib/methods/getCustomEmojis.js | 2 +- app/lib/methods/getPermissions.js | 2 +- app/lib/methods/getSettings.js | 16 + app/lib/methods/helpers/parseUrls.js | 7 + app/lib/methods/readMessages.js | 9 +- app/lib/methods/sendFileMessage.js | 2 + app/lib/methods/sendMessage.js | 179 +- app/lib/methods/subscriptions/room.js | 61 +- app/lib/methods/subscriptions/rooms.js | 74 +- app/lib/methods/updateMessages.js | 4 +- app/lib/rocketchat.js | 140 +- app/notifications/inApp/index.js | 64 +- app/presentation/DirectoryItem/index.js | 32 +- app/presentation/DirectoryItem/styles.js | 13 +- app/presentation/RoomItem/Actions.js | 29 +- app/presentation/RoomItem/LastMessage.js | 7 +- app/presentation/RoomItem/Touchable.js | 219 + app/presentation/RoomItem/TypeIcon.js | 7 +- app/presentation/RoomItem/UnreadBadge.js | 21 +- app/presentation/RoomItem/index.js | 468 +- app/presentation/RoomItem/styles.js | 32 +- app/presentation/ServerItem/index.js | 23 +- app/presentation/ServerItem/styles.js | 4 - app/presentation/TextInput.js | 22 + app/presentation/UserItem.js | 64 +- app/sagas/deepLinking.js | 26 +- app/sagas/init.js | 19 +- app/sagas/login.js | 26 +- app/sagas/messages.js | 16 +- app/sagas/rooms.js | 24 +- app/sagas/selectServer.js | 26 +- app/share.js | 78 +- app/split.js | 19 + app/tablet.js | 202 + app/theme.js | 14 + app/utils/deviceInfo.js | 18 + app/utils/fetch.js | 12 + app/utils/layoutAnimation.js | 38 +- app/utils/navigation.js | 31 +- app/utils/openLink.js | 8 +- app/utils/scaling.js | 6 +- app/utils/theme.js | 65 + app/utils/touch.js | 42 + app/utils/touch/index.android.js | 24 - app/utils/touch/index.ios.js | 22 - app/views/AdminPanelView/index.js | 17 +- app/views/AuthLoadingView.js | 21 +- app/views/AuthenticationWebView.js | 31 +- app/views/AutoTranslateView/index.js | 77 +- app/views/CreateChannelView.js | 97 +- app/views/DirectoryView/Options.js | 46 +- app/views/DirectoryView/index.js | 71 +- app/views/DirectoryView/styles.js | 28 +- app/views/ForgotPasswordView.js | 27 +- app/views/JitsiMeetView.js | 9 +- app/views/LanguageView/index.js | 47 +- app/views/LegalView.js | 76 +- app/views/LoginSignupView.js | 67 +- app/views/LoginView.js | 82 +- app/views/MarkdownTableView.js | 45 + app/views/MessagesView/index.js | 61 +- app/views/MessagesView/styles.js | 10 +- app/views/NewMessageView.js | 90 +- app/views/NewServerView.js | 126 +- .../NotificationPreferencesView/index.js | 153 +- .../NotificationPreferencesView/styles.js | 17 +- app/views/OnboardingView/Button.js | 17 +- app/views/OnboardingView/index.js | 51 +- app/views/OnboardingView/styles.js | 31 +- app/views/ProfileView/index.js | 92 +- app/views/ReadReceiptView/index.js | 68 +- app/views/ReadReceiptView/styles.js | 20 +- app/views/RegisterView.js | 37 +- app/views/RoomActionsView/index.js | 101 +- app/views/RoomActionsView/styles.js | 30 +- app/views/RoomInfoEditView/SwitchContainer.js | 18 +- app/views/RoomInfoEditView/index.js | 91 +- app/views/RoomInfoEditView/styles.js | 41 +- app/views/RoomInfoView/index.js | 64 +- app/views/RoomInfoView/styles.js | 10 +- app/views/RoomMembersView/index.js | 32 +- app/views/RoomMembersView/styles.js | 8 +- app/views/RoomView/EmptyRoom.js | 17 +- app/views/RoomView/Header/Header.js | 52 +- app/views/RoomView/Header/Icon.js | 21 +- app/views/RoomView/Header/RightButtons.js | 56 +- app/views/RoomView/Header/RoomHeaderLeft.js | 62 + app/views/RoomView/Header/index.js | 23 +- app/views/RoomView/List.js | 106 +- app/views/RoomView/ReactionPicker.js | 36 +- app/views/RoomView/Separator.js | 33 +- app/views/RoomView/UploadProgress.js | 56 +- app/views/RoomView/index.js | 203 +- app/views/RoomView/styles.js | 26 +- .../RoomsListView/Header/Header.android.js | 32 +- app/views/RoomsListView/Header/Header.ios.js | 18 +- app/views/RoomsListView/Header/index.js | 28 +- .../RoomsListView/ListHeader/Directory.js | 46 +- .../RoomsListView/ListHeader/SearchBar.js | 16 +- app/views/RoomsListView/ListHeader/Sort.js | 28 +- app/views/RoomsListView/ListHeader/index.js | 7 +- app/views/RoomsListView/ServerDropdown.js | 94 +- app/views/RoomsListView/SortDropdown.js | 4 +- app/views/RoomsListView/SortDropdown/Item.js | 46 + app/views/RoomsListView/SortDropdown/index.js | 200 + app/views/RoomsListView/index.js | 406 +- app/views/RoomsListView/styles.js | 67 +- app/views/SearchMessagesView/index.js | 52 +- app/views/SearchMessagesView/styles.js | 14 +- app/views/SelectServerView.js | 31 +- app/views/SelectedUsersView.js | 70 +- app/views/SetUsernameView.js | 51 +- app/views/SettingsView/index.js | 165 +- app/views/SettingsView/styles.js | 8 +- .../ShareListView/Header/Header.android.js | 22 +- app/views/ShareListView/Header/Header.ios.js | 18 +- app/views/ShareListView/Header/index.js | 6 +- app/views/ShareListView/index.js | 106 +- app/views/ShareListView/styles.js | 21 +- app/views/ShareView/Loading.js | 23 - app/views/ShareView/index.js | 99 +- app/views/ShareView/styles.js | 60 +- app/views/SidebarView/SidebarItem.js | 23 +- app/views/SidebarView/index.js | 75 +- app/views/SidebarView/styles.js | 14 +- app/views/Styles.js | 113 +- app/views/TableView.js | 38 - app/views/ThemeView.js | 196 + app/views/ThreadMessagesView/index.js | 62 +- app/views/ThreadMessagesView/styles.js | 13 +- app/views/WithoutServersView.js | 28 +- icons/20x20/at.svg | 17 - icons/20x20/image.svg | 17 - icons/20x20/location.svg | 14 - icons/20x20/video.svg | 16 - icons/20x20/volume.svg | 20 - ios/Gemfile.lock | 50 +- ios/LaunchScreen.storyboard | 47 + ios/Podfile | 1 + ios/Podfile.lock | 372 +- .../BSG_KSCrashIdentifier.h | 1 + .../KeyCommands/RCTKeyCommandConstants.h | 1 + .../KeyCommands/RCTKeyCommandsManager.h | 1 + .../Headers/Private/RNRootView/RootView.h | 1 + ios/Pods/Headers/Private/Yoga/yoga/Bitfield.h | 1 + .../Headers/Private/Yoga/yoga/CompactValue.h | 1 + ios/Pods/Headers/Private/Yoga/yoga/Utils.h | 1 + ios/Pods/Headers/Private/Yoga/yoga/YGConfig.h | 1 + ios/Pods/Headers/Private/Yoga/yoga/YGEnums.h | 1 + .../Private/Yoga/yoga/YGFloatOptional.h | 1 + ios/Pods/Headers/Private/Yoga/yoga/YGLayout.h | 1 + ios/Pods/Headers/Private/Yoga/yoga/YGMacros.h | 1 + ios/Pods/Headers/Private/Yoga/yoga/YGNode.h | 1 + .../Headers/Private/Yoga/yoga/YGNodePrint.h | 1 + ios/Pods/Headers/Private/Yoga/yoga/YGStyle.h | 1 + ios/Pods/Headers/Private/Yoga/yoga/YGValue.h | 1 + .../Headers/Private/Yoga/yoga/Yoga-internal.h | 1 + ios/Pods/Headers/Private/Yoga/yoga/Yoga.h | 1 + ios/Pods/Headers/Private/Yoga/yoga/event.h | 1 + .../Private/Yoga/yoga/experiments-inl.h | 1 + .../Headers/Private/Yoga/yoga/experiments.h | 1 + ios/Pods/Headers/Private/Yoga/yoga/log.h | 1 + .../react-native-appearance/RNCAppearance.h | 1 + .../RNCAppearanceProvider.h | 1 + .../RNCAppearanceProviderManager.h | 1 + .../react-native-webview/RNCUIWebView.h | 1 - .../RNCUIWebViewManager.h | 1 - .../react-native-webview/RNCWKWebView.h | 1 - .../RNCWKWebViewManager.h | 1 - .../Private/react-native-webview/RNCWebView.h | 1 + .../react-native-webview/RNCWebViewManager.h | 1 + .../KeyCommands/RCTKeyCommandConstants.h | 1 + .../KeyCommands/RCTKeyCommandsManager.h | 1 + ios/Pods/Headers/Public/RNRootView/RootView.h | 1 + ios/Pods/Headers/Public/Yoga/yoga/YGEnums.h | 1 + ios/Pods/Headers/Public/Yoga/yoga/YGMacros.h | 1 + ios/Pods/Headers/Public/Yoga/yoga/YGValue.h | 1 + ios/Pods/Headers/Public/Yoga/yoga/Yoga.h | 1 + .../react-native-appearance/RNCAppearance.h | 1 + .../RNCAppearanceProvider.h | 1 + .../RNCAppearanceProviderManager.h | 1 + .../react-native-webview/RNCUIWebView.h | 1 - .../RNCUIWebViewManager.h | 1 - .../react-native-webview/RNCWKWebView.h | 1 - .../RNCWKWebViewManager.h | 1 - .../Public/react-native-webview/RNCWebView.h | 1 + .../react-native-webview/RNCWebViewManager.h | 1 + .../BugsnagReactNative.podspec.json | 4 +- .../Local Podspecs/FBLazyVector.podspec.json | 4 +- .../FBReactNativeSpec.podspec.json | 14 +- .../Local Podspecs/KeyCommands.podspec.json | 21 + .../Local Podspecs/RCTRequired.podspec.json | 4 +- .../Local Podspecs/RCTTypeSafety.podspec.json | 10 +- .../RNGestureHandler.podspec.json | 4 +- .../RNImageCropPicker.podspec.json | 2 +- .../Local Podspecs/RNLocalize.podspec.json | 9 +- .../Local Podspecs/RNReanimated.podspec.json | 7 +- .../Local Podspecs/RNRootView.podspec.json | 31 + .../Local Podspecs/React-Core.podspec.json | 18 +- .../React-CoreModules.podspec.json | 14 +- .../React-RCTActionSheet.podspec.json | 6 +- .../React-RCTAnimation.podspec.json | 6 +- .../Local Podspecs/React-RCTBlob.podspec.json | 12 +- .../React-RCTImage.podspec.json | 8 +- .../React-RCTLinking.podspec.json | 6 +- .../React-RCTNetwork.podspec.json | 6 +- .../React-RCTSettings.podspec.json | 6 +- .../Local Podspecs/React-RCTText.podspec.json | 6 +- .../React-RCTVibration.podspec.json | 6 +- .../React-cxxreact.podspec.json | 6 +- .../Local Podspecs/React-jsi.podspec.json | 4 +- .../React-jsiexecutor.podspec.json | 8 +- .../React-jsinspector.podspec.json | 4 +- ios/Pods/Local Podspecs/React.podspec.json | 28 +- .../Local Podspecs/ReactCommon.podspec.json | 16 +- ios/Pods/Local Podspecs/Yoga.podspec.json | 33 + .../react-native-appearance.podspec.json | 22 + .../react-native-slider.podspec.json | 4 +- .../react-native-video.podspec.json | 4 +- .../react-native-webview.podspec.json | 4 +- .../Local Podspecs/rn-fetch-blob.podspec.json | 7 +- ios/Pods/Local Podspecs/yoga.podspec.json | 2 +- ios/Pods/Manifest.lock | 372 +- ios/Pods/Pods.xcodeproj/project.pbxproj | 28434 ++++++++-------- .../BugsnagReactNative.xcconfig | 2 + .../Crashlytics/Crashlytics.xcconfig | 2 + .../DoubleConversion.xcconfig | 2 + .../Target Support Files/EXAV/EXAV.xcconfig | 1 + .../EXAppLoaderProvider.xcconfig | 1 + .../EXConstants/EXConstants.xcconfig | 1 + .../EXFileSystem/EXFileSystem.xcconfig | 1 + .../EXHaptics/EXHaptics.xcconfig | 1 + .../EXPermissions/EXPermissions.xcconfig | 1 + .../EXWebBrowser/EXWebBrowser.xcconfig | 1 + .../FBLazyVector/FBLazyVector.xcconfig | 2 + .../FBReactNativeSpec.xcconfig | 2 + .../Fabric/Fabric.xcconfig | 2 + .../Firebase/Firebase.xcconfig | 2 + .../FirebaseAnalytics.xcconfig | 2 + .../FirebaseCore/FirebaseCore.xcconfig | 4 +- .../FirebaseCoreDiagnostics.xcconfig | 2 + .../FirebaseCoreDiagnosticsInterop.xcconfig | 2 + .../FirebaseInstanceID.xcconfig | 2 + .../Target Support Files/Folly/Folly.xcconfig | 2 + .../GoogleAppMeasurement.xcconfig | 2 + .../GoogleDataTransport.xcconfig | 2 + .../GoogleDataTransportCCTSupport.xcconfig | 2 + .../GoogleUtilities/GoogleUtilities.xcconfig | 2 + .../JitsiMeetSDK/JitsiMeetSDK.xcconfig | 2 + .../KeyCommands/KeyCommands-dummy.m | 5 + .../KeyCommands-prefix.pch} | 0 .../KeyCommands/KeyCommands.xcconfig | 11 + ...ods-RocketChatRN-acknowledgements.markdown | 74 +- .../Pods-RocketChatRN-acknowledgements.plist | 92 +- .../Pods-RocketChatRN-frameworks.sh | 10 +- .../Pods-RocketChatRN.debug.xcconfig | 7 +- .../Pods-RocketChatRN.release.xcconfig | 7 +- ...hareRocketChatRN-acknowledgements.markdown | 74 +- ...s-ShareRocketChatRN-acknowledgements.plist | 92 +- .../Pods-ShareRocketChatRN.debug.xcconfig | 7 +- .../Pods-ShareRocketChatRN.release.xcconfig | 7 +- .../QBImagePickerController.xcconfig | 2 + .../RCTRequired/RCTRequired.xcconfig | 2 + .../RCTTypeSafety/RCTTypeSafety.xcconfig | 2 + .../RNAudio/RNAudio.xcconfig | 2 + .../RNDeviceInfo/RNDeviceInfo.xcconfig | 2 + .../RNFastImage/RNFastImage.xcconfig | 2 + .../RNFirebase/RNFirebase.xcconfig | 2 + .../RNGestureHandler.xcconfig | 2 + .../RNImageCropPicker.xcconfig | 2 + .../RNLocalize/RNLocalize.xcconfig | 2 + .../RNReanimated/RNReanimated.xcconfig | 2 + .../RNRootView/RNRootView-dummy.m | 5 + .../RNRootView/RNRootView-prefix.pch | 12 + .../RNRootView/RNRootView.xcconfig | 11 + .../RNScreens/RNScreens.xcconfig | 2 + .../RNUserDefaults/RNUserDefaults.xcconfig | 2 + .../RNVectorIcons/RNVectorIcons.xcconfig | 2 + .../RSKImageCropper/RSKImageCropper.xcconfig | 2 + .../React-Core/React-Core.xcconfig | 2 + .../React-CoreModules.xcconfig | 2 + .../React-RCTActionSheet.xcconfig | 2 + .../React-RCTAnimation.xcconfig | 2 + .../React-RCTBlob/React-RCTBlob.xcconfig | 2 + .../React-RCTImage/React-RCTImage.xcconfig | 2 + .../React-RCTLinking.xcconfig | 2 + .../React-RCTNetwork.xcconfig | 2 + .../React-RCTSettings.xcconfig | 2 + .../React-RCTText/React-RCTText.xcconfig | 2 + .../React-RCTVibration.xcconfig | 2 + .../React-cxxreact/React-cxxreact.xcconfig | 2 + .../React-jsi/React-jsi.xcconfig | 2 + .../React-jsiexecutor.xcconfig | 2 + .../React-jsinspector.xcconfig | 2 + .../Target Support Files/React/React.xcconfig | 2 + .../ReactCommon/ReactCommon.xcconfig | 2 + .../SDWebImage/SDWebImage.xcconfig | 2 + .../SDWebImageWebPCoder.xcconfig | 2 + .../UMBarCodeScannerInterface.xcconfig | 1 + .../UMCameraInterface.xcconfig | 1 + .../UMConstantsInterface.xcconfig | 1 + .../UMCore/UMCore.xcconfig | 1 + .../UMFaceDetectorInterface.xcconfig | 1 + .../UMFileSystemInterface.xcconfig | 1 + .../UMFontInterface/UMFontInterface.xcconfig | 1 + .../UMImageLoaderInterface.xcconfig | 1 + .../UMPermissionsInterface.xcconfig | 1 + .../UMReactNativeAdapter.xcconfig | 1 + .../UMSensorsInterface.xcconfig | 1 + .../UMTaskManagerInterface.xcconfig | 1 + .../Target Support Files/Yoga/Yoga-dummy.m | 5 + .../Target Support Files/Yoga/Yoga-prefix.pch | 12 + .../Target Support Files/Yoga/Yoga.xcconfig | 11 + .../boost-for-react-native.xcconfig | 2 + .../Target Support Files/glog/glog.xcconfig | 2 + .../libwebp/libwebp.xcconfig | 2 + .../nanopb/nanopb.xcconfig | 2 + .../react-native-appearance-dummy.m | 5 + .../react-native-appearance-prefix.pch | 12 + .../react-native-appearance.xcconfig | 11 + .../react-native-background-timer.xcconfig | 2 + .../react-native-document-picker.xcconfig | 2 + .../react-native-jitsi-meet.xcconfig | 2 + .../react-native-keyboard-input.xcconfig | 2 + ...act-native-keyboard-tracking-view.xcconfig | 2 + .../react-native-notifications.xcconfig | 2 + .../react-native-orientation-locker.xcconfig | 2 + .../react-native-slider.xcconfig | 2 + .../react-native-splash-screen.xcconfig | 2 + .../react-native-video.xcconfig | 2 + .../react-native-webview.xcconfig | 2 + .../rn-extensions-share.xcconfig | 2 + .../rn-fetch-blob/rn-fetch-blob.xcconfig | 2 + .../Target Support Files/yoga/yoga.xcconfig | 2 + ios/RocketChatRN.xcodeproj/project.pbxproj | 28 +- .../message_empty.imageset/message_empty.png | Bin 77516 -> 0 bytes .../Contents.json | 12 + .../Message Empty Black Theme.pdf | Bin 0 -> 114477 bytes .../message_empty_dark.imageset/Contents.json | 12 + .../Message Empty Dark Theme.pdf | Bin 0 -> 114402 bytes .../Contents.json | 12 + .../Message Empty.pdf | Bin 0 -> 114646 bytes .../Contents.json | 4 +- .../Launch Screen Icon.imageset/icon.png | Bin 0 -> 5047 bytes .../Launch Screen Icon.imageset/icon@2x.png | Bin 0 -> 11181 bytes .../Launch Screen Icon.imageset/icon@3x.png | Bin 0 -> 17737 bytes .../LaunchImage.launchimage/Contents.json | 135 - .../Default-568h@2x.png | Bin 17261 -> 0 bytes .../Default-667h@2x.png | Bin 21067 -> 0 bytes .../Default-Landscape-736h@3x.png | Bin 13558 -> 0 bytes .../Default-Landscape-812h@3x.png | Bin 42069 -> 0 bytes .../Default-Landscape.png | Bin 15836 -> 0 bytes .../Default-Landscape@2x.png | Bin 38905 -> 0 bytes .../Default-Portrait-736h@3x.png | Bin 15245 -> 0 bytes .../Default-Portrait-812h@3x.png | Bin 44252 -> 0 bytes .../Default-Portrait.png | Bin 16179 -> 0 bytes .../Default-Portrait@2x.png | Bin 39736 -> 0 bytes .../LaunchImage.launchimage/Default@2x.png | Bin 14515 -> 0 bytes ios/RocketChatRN/Info.plist | 10 +- ios/ShareRocketChatRN/Info.plist | 2 +- package.json | 71 +- patches/@rocket.chat+sdk+1.0.0-alpha.31.patch | 60 + ...0.61.1.patch => react-native+0.61.3.patch} | 147 + .../react-native-keyboard-input+5.3.1.patch | 59 + ...-native-keyboard-tracking-view+5.5.0.patch | 58 + patches/rn-fetch-blob+0.10.16.patch | 55 - storybook/stories/Message.js | 1397 +- storybook/stories/RoomItem.js | 198 +- storybook/stories/RoomViewHeader.js | 68 +- storybook/stories/StoriesSeparator.js | 18 +- storybook/stories/index.js | 9 +- yarn.lock | 790 +- 478 files changed, 29204 insertions(+), 21987 deletions(-) create mode 100644 android/app/_BUCK delete mode 100644 android/app/src/debug/res/xml/react_native_config.xml delete mode 100644 android/app/src/main/res/drawable-xxxhdpi/message_empty.png create mode 100644 android/app/src/main/res/drawable-xxxhdpi/message_empty_black.png create mode 100644 android/app/src/main/res/drawable-xxxhdpi/message_empty_dark.png create mode 100644 android/app/src/main/res/drawable-xxxhdpi/message_empty_light.png create mode 100644 android/app/src/main/res/xml/network_security_config.xml create mode 100644 app/commands.js create mode 100644 app/constants/tablet.js delete mode 100644 app/containers/MessageBox/CommandPreview.js create mode 100644 app/containers/MessageBox/CommandsPreview/Item.js create mode 100644 app/containers/MessageBox/CommandsPreview/index.js create mode 100644 app/containers/MessageBox/Context.js create mode 100644 app/containers/MessageBox/Mentions/FixedMentionItem.js create mode 100644 app/containers/MessageBox/Mentions/MentionEmoji.js create mode 100644 app/containers/MessageBox/Mentions/MentionItem.js create mode 100644 app/containers/MessageBox/Mentions/index.js create mode 100644 app/containers/MessageBox/constants.js create mode 100644 app/lib/ModalNavigation.js create mode 100644 app/presentation/RoomItem/Touchable.js create mode 100644 app/presentation/TextInput.js create mode 100644 app/split.js create mode 100644 app/tablet.js create mode 100644 app/theme.js create mode 100644 app/utils/fetch.js create mode 100644 app/utils/theme.js create mode 100644 app/utils/touch.js delete mode 100644 app/utils/touch/index.android.js delete mode 100644 app/utils/touch/index.ios.js create mode 100644 app/views/MarkdownTableView.js create mode 100644 app/views/RoomView/Header/RoomHeaderLeft.js create mode 100644 app/views/RoomsListView/SortDropdown/Item.js create mode 100644 app/views/RoomsListView/SortDropdown/index.js delete mode 100644 app/views/ShareView/Loading.js delete mode 100644 app/views/TableView.js create mode 100644 app/views/ThemeView.js delete mode 100644 icons/20x20/at.svg delete mode 100644 icons/20x20/image.svg delete mode 100644 icons/20x20/location.svg delete mode 100644 icons/20x20/video.svg delete mode 100644 icons/20x20/volume.svg create mode 100644 ios/LaunchScreen.storyboard create mode 120000 ios/Pods/Headers/Private/BugsnagReactNative/BSG_KSCrashIdentifier.h create mode 120000 ios/Pods/Headers/Private/KeyCommands/RCTKeyCommandConstants.h create mode 120000 ios/Pods/Headers/Private/KeyCommands/RCTKeyCommandsManager.h create mode 120000 ios/Pods/Headers/Private/RNRootView/RootView.h create mode 120000 ios/Pods/Headers/Private/Yoga/yoga/Bitfield.h create mode 120000 ios/Pods/Headers/Private/Yoga/yoga/CompactValue.h create mode 120000 ios/Pods/Headers/Private/Yoga/yoga/Utils.h create mode 120000 ios/Pods/Headers/Private/Yoga/yoga/YGConfig.h create mode 120000 ios/Pods/Headers/Private/Yoga/yoga/YGEnums.h create mode 120000 ios/Pods/Headers/Private/Yoga/yoga/YGFloatOptional.h create mode 120000 ios/Pods/Headers/Private/Yoga/yoga/YGLayout.h create mode 120000 ios/Pods/Headers/Private/Yoga/yoga/YGMacros.h create mode 120000 ios/Pods/Headers/Private/Yoga/yoga/YGNode.h create mode 120000 ios/Pods/Headers/Private/Yoga/yoga/YGNodePrint.h create mode 120000 ios/Pods/Headers/Private/Yoga/yoga/YGStyle.h create mode 120000 ios/Pods/Headers/Private/Yoga/yoga/YGValue.h create mode 120000 ios/Pods/Headers/Private/Yoga/yoga/Yoga-internal.h create mode 120000 ios/Pods/Headers/Private/Yoga/yoga/Yoga.h create mode 120000 ios/Pods/Headers/Private/Yoga/yoga/event.h create mode 120000 ios/Pods/Headers/Private/Yoga/yoga/experiments-inl.h create mode 120000 ios/Pods/Headers/Private/Yoga/yoga/experiments.h create mode 120000 ios/Pods/Headers/Private/Yoga/yoga/log.h create mode 120000 ios/Pods/Headers/Private/react-native-appearance/RNCAppearance.h create mode 120000 ios/Pods/Headers/Private/react-native-appearance/RNCAppearanceProvider.h create mode 120000 ios/Pods/Headers/Private/react-native-appearance/RNCAppearanceProviderManager.h delete mode 120000 ios/Pods/Headers/Private/react-native-webview/RNCUIWebView.h delete mode 120000 ios/Pods/Headers/Private/react-native-webview/RNCUIWebViewManager.h delete mode 120000 ios/Pods/Headers/Private/react-native-webview/RNCWKWebView.h delete mode 120000 ios/Pods/Headers/Private/react-native-webview/RNCWKWebViewManager.h create mode 120000 ios/Pods/Headers/Private/react-native-webview/RNCWebView.h create mode 120000 ios/Pods/Headers/Private/react-native-webview/RNCWebViewManager.h create mode 120000 ios/Pods/Headers/Public/KeyCommands/RCTKeyCommandConstants.h create mode 120000 ios/Pods/Headers/Public/KeyCommands/RCTKeyCommandsManager.h create mode 120000 ios/Pods/Headers/Public/RNRootView/RootView.h create mode 120000 ios/Pods/Headers/Public/Yoga/yoga/YGEnums.h create mode 120000 ios/Pods/Headers/Public/Yoga/yoga/YGMacros.h create mode 120000 ios/Pods/Headers/Public/Yoga/yoga/YGValue.h create mode 120000 ios/Pods/Headers/Public/Yoga/yoga/Yoga.h create mode 120000 ios/Pods/Headers/Public/react-native-appearance/RNCAppearance.h create mode 120000 ios/Pods/Headers/Public/react-native-appearance/RNCAppearanceProvider.h create mode 120000 ios/Pods/Headers/Public/react-native-appearance/RNCAppearanceProviderManager.h delete mode 120000 ios/Pods/Headers/Public/react-native-webview/RNCUIWebView.h delete mode 120000 ios/Pods/Headers/Public/react-native-webview/RNCUIWebViewManager.h delete mode 120000 ios/Pods/Headers/Public/react-native-webview/RNCWKWebView.h delete mode 120000 ios/Pods/Headers/Public/react-native-webview/RNCWKWebViewManager.h create mode 120000 ios/Pods/Headers/Public/react-native-webview/RNCWebView.h create mode 120000 ios/Pods/Headers/Public/react-native-webview/RNCWebViewManager.h create mode 100644 ios/Pods/Local Podspecs/KeyCommands.podspec.json create mode 100644 ios/Pods/Local Podspecs/RNRootView.podspec.json create mode 100644 ios/Pods/Local Podspecs/Yoga.podspec.json create mode 100644 ios/Pods/Local Podspecs/react-native-appearance.podspec.json create mode 100644 ios/Pods/Target Support Files/KeyCommands/KeyCommands-dummy.m rename ios/Pods/Target Support Files/{yoga/yoga-prefix.pch => KeyCommands/KeyCommands-prefix.pch} (100%) create mode 100644 ios/Pods/Target Support Files/KeyCommands/KeyCommands.xcconfig create mode 100644 ios/Pods/Target Support Files/RNRootView/RNRootView-dummy.m create mode 100644 ios/Pods/Target Support Files/RNRootView/RNRootView-prefix.pch create mode 100644 ios/Pods/Target Support Files/RNRootView/RNRootView.xcconfig create mode 100644 ios/Pods/Target Support Files/Yoga/Yoga-dummy.m create mode 100644 ios/Pods/Target Support Files/Yoga/Yoga-prefix.pch create mode 100644 ios/Pods/Target Support Files/Yoga/Yoga.xcconfig create mode 100644 ios/Pods/Target Support Files/react-native-appearance/react-native-appearance-dummy.m create mode 100644 ios/Pods/Target Support Files/react-native-appearance/react-native-appearance-prefix.pch create mode 100644 ios/Pods/Target Support Files/react-native-appearance/react-native-appearance.xcconfig delete mode 100644 ios/RocketChatRN/Images.xcassets/Icons/message_empty.imageset/message_empty.png create mode 100644 ios/RocketChatRN/Images.xcassets/Icons/message_empty_black.imageset/Contents.json create mode 100644 ios/RocketChatRN/Images.xcassets/Icons/message_empty_black.imageset/Message Empty Black Theme.pdf create mode 100644 ios/RocketChatRN/Images.xcassets/Icons/message_empty_dark.imageset/Contents.json create mode 100644 ios/RocketChatRN/Images.xcassets/Icons/message_empty_dark.imageset/Message Empty Dark Theme.pdf create mode 100644 ios/RocketChatRN/Images.xcassets/Icons/message_empty_light.imageset/Contents.json create mode 100644 ios/RocketChatRN/Images.xcassets/Icons/message_empty_light.imageset/Message Empty.pdf rename ios/RocketChatRN/Images.xcassets/{Icons/message_empty.imageset => Launch Screen Icon.imageset}/Contents.json (73%) create mode 100644 ios/RocketChatRN/Images.xcassets/Launch Screen Icon.imageset/icon.png create mode 100644 ios/RocketChatRN/Images.xcassets/Launch Screen Icon.imageset/icon@2x.png create mode 100644 ios/RocketChatRN/Images.xcassets/Launch Screen Icon.imageset/icon@3x.png delete mode 100644 ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Contents.json delete mode 100644 ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png delete mode 100644 ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Default-667h@2x.png delete mode 100644 ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h@3x.png delete mode 100644 ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Default-Landscape-812h@3x.png delete mode 100644 ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Default-Landscape.png delete mode 100644 ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x.png delete mode 100644 ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Default-Portrait-736h@3x.png delete mode 100644 ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Default-Portrait-812h@3x.png delete mode 100644 ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Default-Portrait.png delete mode 100644 ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x.png delete mode 100644 ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Default@2x.png create mode 100644 patches/@rocket.chat+sdk+1.0.0-alpha.31.patch rename patches/{react-native+0.61.1.patch => react-native+0.61.3.patch} (57%) delete mode 100644 patches/rn-fetch-blob+0.10.16.patch diff --git a/.circleci/config.yml b/.circleci/config.yml index 09d001ed88..206b41d8db 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -46,7 +46,7 @@ jobs: e2e-test: macos: - xcode: "10.2.1" + xcode: "11.2.1" environment: BASH_ENV: "~/.nvm/nvm.sh" @@ -223,7 +223,7 @@ jobs: ios-build: macos: - xcode: "10.2.1" + xcode: "11.2.1" environment: BASH_ENV: "~/.nvm/nvm.sh" @@ -257,7 +257,8 @@ jobs: - run: name: Update Fastlane command: | - sudo bundle install + echo "ruby-2.6.4" > ~/.ruby-version + bundle install working_directory: ios - run: @@ -319,7 +320,7 @@ jobs: ios-testflight: macos: - xcode: "10.2.1" + xcode: "11.2.1" steps: - checkout @@ -334,7 +335,8 @@ jobs: - run: name: Update Fastlane command: | - sudo bundle install + echo "ruby-2.4" > ~/.ruby-version + bundle install working_directory: ios - run: diff --git a/.eslintrc.js b/.eslintrc.js index 8548429f6c..b7c949197d 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -2,7 +2,7 @@ module.exports = { "settings": { "import/resolver": { "node": { - "extensions": [".js", ".ios.js", ".android.js"] + "extensions": [".js", ".ios.js", ".android.js", ".native.js", ".tsx"] } } }, diff --git a/README.md b/README.md index 416379bf50..0fa9942298 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ Readme will guide you on how to config. ## Features | Feature | Status | |--------------------------------------------------------------- |-------- | -| Jitsi Integration | ❌ | +| Jitsi Integration | ✅ | | Federation (Directory) | ✅ | | Discussions | ❌ | | Threads | ✅ | @@ -98,11 +98,11 @@ Readme will guide you on how to config. | Unread counter banner on message list | ✅ | | E2E Encryption | ❌ | | Join a Protected Room | ❌ | -| Optional Analytics | ❌ | +| Optional Analytics | ✅ | | Settings -> About us | ❌ | | Settings -> Contact us | ✅ | | Settings -> Update App Icon | ❌ | -| Settings -> Share | ❌ | +| Settings -> Share | ✅ | | Accessibility (Medium) | ❌ | | Accessibility (Advanced) | ❌ | | Authentication via Meteor | ❌ | diff --git a/__mocks__/react-native-device-info.js b/__mocks__/react-native-device-info.js index 270ca77ea5..d3fa5fa664 100644 --- a/__mocks__/react-native-device-info.js +++ b/__mocks__/react-native-device-info.js @@ -1,5 +1,6 @@ export default { getModel: () => '', getReadableVersion: () => '', - getBundleId: () => '' + getBundleId: () => '', + isTablet: () => false }; diff --git a/__tests__/__snapshots__/Storyshots.test.js.snap b/__tests__/__snapshots__/Storyshots.test.js.snap index 83b88dfc3c..b6bc2022d9 100644 --- a/__tests__/__snapshots__/Storyshots.test.js.snap +++ b/__tests__/__snapshots__/Storyshots.test.js.snap @@ -2,14 +2,9 @@ exports[`Storyshots Message list 1`] = ` @@ -23,6 +18,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -170,14 +169,18 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -185,15 +188,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -202,6 +209,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -408,15 +430,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -425,6 +451,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -631,15 +672,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -648,6 +693,14 @@ exports[`Storyshots Message list 1`] = ` Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. @@ -836,15 +892,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -853,6 +913,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -1215,15 +1300,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -1232,6 +1321,14 @@ exports[`Storyshots Message list 1`] = ` Diego Mello @ @@ -1557,15 +1676,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -1574,6 +1697,14 @@ exports[`Storyshots Message list 1`] = ` Diego Mello @ @@ -1776,15 +1914,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -1793,6 +1935,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -1999,15 +2156,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -2016,6 +2177,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -2222,15 +2398,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -2247,12 +2427,16 @@ exports[`Storyshots Message list 1`] = ` > diego.mello @@ -2455,15 +2650,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -2480,12 +2679,16 @@ exports[`Storyshots Message list 1`] = ` > diego.mello @@ -2737,15 +2962,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -2773,7 +3002,13 @@ exports[`Storyshots Message list 1`] = ` ] } > - + @@ -2786,6 +3021,14 @@ exports[`Storyshots Message list 1`] = ` > - + @@ -2851,6 +3099,14 @@ exports[`Storyshots Message list 1`] = ` > - + @@ -2920,6 +3181,14 @@ exports[`Storyshots Message list 1`] = ` > diego.mello @@ -3134,15 +3410,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -3170,7 +3450,13 @@ exports[`Storyshots Message list 1`] = ` ] } > - + 1. @@ -3183,6 +3469,14 @@ exports[`Storyshots Message list 1`] = ` > - + 2. @@ -3250,6 +3549,14 @@ exports[`Storyshots Message list 1`] = ` > diego.mello @@ -3460,15 +3774,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -3496,7 +3814,13 @@ exports[`Storyshots Message list 1`] = ` ] } > - + 1. @@ -3509,6 +3833,14 @@ exports[`Storyshots Message list 1`] = ` > - + 2. @@ -3632,6 +3969,14 @@ exports[`Storyshots Message list 1`] = ` > diego.mello @@ -3842,15 +4194,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -3859,14 +4215,21 @@ exports[`Storyshots Message list 1`] = ` - + Diego Mello @@ -4065,15 +4436,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -4082,6 +4457,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -4288,15 +4678,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -4305,6 +4699,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -4677,15 +5083,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -4694,6 +5104,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -4906,15 +5330,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -4923,6 +5351,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -5135,15 +5577,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -5152,6 +5598,14 @@ exports[`Storyshots Message list 1`] = ` - diego.mello - - - + diego.mello + + + 10:00 AM @@ -5510,6 +5972,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -5721,15 +6199,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -5738,6 +6220,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -5982,15 +6478,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -5999,6 +6499,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -6276,15 +6778,19 @@ exports[`Storyshots Message list 1`] = ` 10 November 2017 @@ -6293,6 +6799,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -6499,15 +7020,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -6516,6 +7041,14 @@ exports[`Storyshots Message list 1`] = ` @@ -6613,23 +7147,27 @@ exports[`Storyshots Message list 1`] = ` - 3 - - - - + 3 + + + + @@ -6709,15 +7249,19 @@ exports[`Storyshots Message list 1`] = ` 13 @@ -6745,6 +7289,7 @@ exports[`Storyshots Message list 1`] = ` onStartShouldSetResponder={[Function]} style={ Object { + "backgroundColor": "#ffffff", "borderRadius": 2, "marginBottom": 6, "marginRight": 6, @@ -6758,7 +7303,6 @@ exports[`Storyshots Message list 1`] = ` Array [ Object { "alignItems": "center", - "borderColor": "#e1e5e8", "borderRadius": 2, "borderWidth": 1, "flexDirection": "row", @@ -6766,7 +7310,9 @@ exports[`Storyshots Message list 1`] = ` "justifyContent": "center", "minWidth": 46.3, }, - false, + Object { + "borderColor": "#e1e5e8", + }, ] } > @@ -6782,15 +7328,19 @@ exports[`Storyshots Message list 1`] = ` 1 @@ -6818,6 +7368,7 @@ exports[`Storyshots Message list 1`] = ` onStartShouldSetResponder={[Function]} style={ Object { + "backgroundColor": "#ffffff", "borderRadius": 2, "marginBottom": 6, "marginRight": 6, @@ -6828,29 +7379,31 @@ exports[`Storyshots Message list 1`] = ` > diego.mello @@ -7041,15 +7602,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -7058,6 +7623,14 @@ exports[`Storyshots Message list 1`] = ` @@ -7178,15 +7752,19 @@ exports[`Storyshots Message list 1`] = ` 1 @@ -7214,6 +7792,7 @@ exports[`Storyshots Message list 1`] = ` onStartShouldSetResponder={[Function]} style={ Object { + "backgroundColor": "#ffffff", "borderRadius": 2, "marginBottom": 6, "marginRight": 6, @@ -7227,7 +7806,6 @@ exports[`Storyshots Message list 1`] = ` Array [ Object { "alignItems": "center", - "borderColor": "#e1e5e8", "borderRadius": 2, "borderWidth": 1, "flexDirection": "row", @@ -7235,7 +7813,9 @@ exports[`Storyshots Message list 1`] = ` "justifyContent": "center", "minWidth": 46.3, }, - false, + Object { + "borderColor": "#e1e5e8", + }, ] } > @@ -7274,15 +7854,19 @@ exports[`Storyshots Message list 1`] = ` 1 @@ -7310,6 +7894,7 @@ exports[`Storyshots Message list 1`] = ` onStartShouldSetResponder={[Function]} style={ Object { + "backgroundColor": "#ffffff", "borderRadius": 2, "marginBottom": 6, "marginRight": 6, @@ -7323,7 +7908,6 @@ exports[`Storyshots Message list 1`] = ` Array [ Object { "alignItems": "center", - "borderColor": "#e1e5e8", "borderRadius": 2, "borderWidth": 1, "flexDirection": "row", @@ -7331,7 +7915,9 @@ exports[`Storyshots Message list 1`] = ` "justifyContent": "center", "minWidth": 46.3, }, - false, + Object { + "borderColor": "#e1e5e8", + }, ] } > @@ -7370,15 +7956,19 @@ exports[`Storyshots Message list 1`] = ` 1 @@ -7406,6 +7996,7 @@ exports[`Storyshots Message list 1`] = ` onStartShouldSetResponder={[Function]} style={ Object { + "backgroundColor": "#ffffff", "borderRadius": 2, "marginBottom": 6, "marginRight": 6, @@ -7419,7 +8010,6 @@ exports[`Storyshots Message list 1`] = ` Array [ Object { "alignItems": "center", - "borderColor": "#e1e5e8", "borderRadius": 2, "borderWidth": 1, "flexDirection": "row", @@ -7427,7 +8017,9 @@ exports[`Storyshots Message list 1`] = ` "justifyContent": "center", "minWidth": 46.3, }, - false, + Object { + "borderColor": "#e1e5e8", + }, ] } > @@ -7443,15 +8035,19 @@ exports[`Storyshots Message list 1`] = ` 1 @@ -7479,6 +8075,7 @@ exports[`Storyshots Message list 1`] = ` onStartShouldSetResponder={[Function]} style={ Object { + "backgroundColor": "#ffffff", "borderRadius": 2, "marginBottom": 6, "marginRight": 6, @@ -7492,7 +8089,6 @@ exports[`Storyshots Message list 1`] = ` Array [ Object { "alignItems": "center", - "borderColor": "#e1e5e8", "borderRadius": 2, "borderWidth": 1, "flexDirection": "row", @@ -7500,7 +8096,9 @@ exports[`Storyshots Message list 1`] = ` "justifyContent": "center", "minWidth": 46.3, }, - false, + Object { + "borderColor": "#e1e5e8", + }, ] } > @@ -7516,15 +8114,19 @@ exports[`Storyshots Message list 1`] = ` 1 @@ -7552,6 +8154,7 @@ exports[`Storyshots Message list 1`] = ` onStartShouldSetResponder={[Function]} style={ Object { + "backgroundColor": "#ffffff", "borderRadius": 2, "marginBottom": 6, "marginRight": 6, @@ -7565,7 +8168,6 @@ exports[`Storyshots Message list 1`] = ` Array [ Object { "alignItems": "center", - "borderColor": "#e1e5e8", "borderRadius": 2, "borderWidth": 1, "flexDirection": "row", @@ -7573,7 +8175,9 @@ exports[`Storyshots Message list 1`] = ` "justifyContent": "center", "minWidth": 46.3, }, - false, + Object { + "borderColor": "#e1e5e8", + }, ] } > @@ -7589,25 +8193,29 @@ exports[`Storyshots Message list 1`] = ` - 1 - - - - + 1 + + + + @@ -7662,15 +8272,19 @@ exports[`Storyshots Message list 1`] = ` 1 @@ -7698,6 +8312,7 @@ exports[`Storyshots Message list 1`] = ` onStartShouldSetResponder={[Function]} style={ Object { + "backgroundColor": "#ffffff", "borderRadius": 2, "marginBottom": 6, "marginRight": 6, @@ -7711,7 +8326,6 @@ exports[`Storyshots Message list 1`] = ` Array [ Object { "alignItems": "center", - "borderColor": "#e1e5e8", "borderRadius": 2, "borderWidth": 1, "flexDirection": "row", @@ -7719,7 +8333,9 @@ exports[`Storyshots Message list 1`] = ` "justifyContent": "center", "minWidth": 46.3, }, - false, + Object { + "borderColor": "#e1e5e8", + }, ] } > @@ -7735,15 +8351,19 @@ exports[`Storyshots Message list 1`] = ` 1 @@ -7771,6 +8391,7 @@ exports[`Storyshots Message list 1`] = ` onStartShouldSetResponder={[Function]} style={ Object { + "backgroundColor": "#ffffff", "borderRadius": 2, "marginBottom": 6, "marginRight": 6, @@ -7781,29 +8402,31 @@ exports[`Storyshots Message list 1`] = ` > rocket.cat @@ -7994,15 +8625,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -8011,6 +8646,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -8199,15 +8845,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -8216,6 +8866,14 @@ exports[`Storyshots Message list 1`] = ` rocket.cat @@ -8404,15 +9065,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -8421,6 +9086,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -8609,15 +9285,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -8626,14 +9306,21 @@ exports[`Storyshots Message list 1`] = ` + style={ + Array [ + undefined, + Object { + "color": "#0d0e12", + }, + ] + } + > rocket.cat @@ -8832,15 +9527,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -8849,6 +9548,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -9102,15 +9809,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -9119,6 +9830,14 @@ exports[`Storyshots Message list 1`] = ` rocket.cat @@ -9441,15 +10168,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -9458,6 +10189,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -9685,15 +10433,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -9702,6 +10454,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -9908,15 +10675,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -9949,14 +10720,17 @@ exports[`Storyshots Message list 1`] = ` Object { "overflow": "hidden", }, - Object { - "borderColor": "#e1e5e8", - "borderRadius": 4, - "borderWidth": 1, - "maxWidth": 400, - "minHeight": 200, - "width": "100%", - }, + Array [ + Object { + "borderRadius": 4, + "borderWidth": 1, + "minHeight": 200, + "width": "100%", + }, + Object { + "borderColor": "#e1e5e8", + }, + ], ] } > @@ -9978,13 +10752,21 @@ exports[`Storyshots Message list 1`] = ` } /> - + diego.mello @@ -10166,15 +10952,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -10207,14 +10997,17 @@ exports[`Storyshots Message list 1`] = ` Object { "overflow": "hidden", }, - Object { - "borderColor": "#e1e5e8", - "borderRadius": 4, - "borderWidth": 1, - "maxWidth": 400, - "minHeight": 200, - "width": "100%", - }, + Array [ + Object { + "borderRadius": 4, + "borderWidth": 1, + "minHeight": 200, + "width": "100%", + }, + Object { + "borderColor": "#e1e5e8", + }, + ], ] } > @@ -10236,13 +11029,21 @@ exports[`Storyshots Message list 1`] = ` } /> - + diego.mello @@ -10474,15 +11283,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -10518,12 +11331,10 @@ exports[`Storyshots Message list 1`] = ` style={ Array [ Object { - "color": undefined, + "color": "#ffffff", "fontSize": 54, }, - Object { - "color": "white", - }, + undefined, Object { "fontFamily": "custom", "fontStyle": "normal", @@ -10536,13 +11347,21 @@ exports[`Storyshots Message list 1`] = `  - + diego.mello @@ -10754,15 +11577,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -10798,12 +11625,10 @@ exports[`Storyshots Message list 1`] = ` style={ Array [ Object { - "color": undefined, + "color": "#ffffff", "fontSize": 54, }, - Object { - "color": "white", - }, + undefined, Object { "fontFamily": "custom", "fontStyle": "normal", @@ -10830,6 +11655,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -10977,14 +11806,18 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -10992,15 +11825,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -11009,17 +11846,22 @@ exports[`Storyshots Message list 1`] = ` View @@ -11055,13 +11897,11 @@ exports[`Storyshots Message list 1`] = ` allowFontScaling={false} style={ Array [ - Object { - "color": undefined, - "fontSize": 36, - }, Object { "color": "#1d74f5", + "fontSize": 36, }, + undefined, Object { "fontFamily": "custom", "fontStyle": "normal", @@ -11086,6 +11926,7 @@ exports[`Storyshots Message list 1`] = ` disabled={false} enabled={true} inverted={false} + maximumTrackTintColor="#9ca2a8" maximumValue={0} minimumTrackTintColor="#1d74f5" minimumValue={0} @@ -11117,26 +11958,38 @@ exports[`Storyshots Message list 1`] = ` /> 00:00 - + View @@ -11380,13 +12245,11 @@ exports[`Storyshots Message list 1`] = ` allowFontScaling={false} style={ Array [ - Object { - "color": undefined, - "fontSize": 36, - }, Object { "color": "#1d74f5", + "fontSize": 36, }, + undefined, Object { "fontFamily": "custom", "fontStyle": "normal", @@ -11411,6 +12274,7 @@ exports[`Storyshots Message list 1`] = ` disabled={false} enabled={true} inverted={false} + maximumTrackTintColor="#9ca2a8" maximumValue={0} minimumTrackTintColor="#1d74f5" minimumValue={0} @@ -11442,26 +12306,38 @@ exports[`Storyshots Message list 1`] = ` /> 00:00 - + View @@ -11586,13 +12467,11 @@ exports[`Storyshots Message list 1`] = ` allowFontScaling={false} style={ Array [ - Object { - "color": undefined, - "fontSize": 36, - }, Object { "color": "#1d74f5", + "fontSize": 36, }, + undefined, Object { "fontFamily": "custom", "fontStyle": "normal", @@ -11617,6 +12496,7 @@ exports[`Storyshots Message list 1`] = ` disabled={false} enabled={true} inverted={false} + maximumTrackTintColor="#9ca2a8" maximumValue={0} minimumTrackTintColor="#1d74f5" minimumValue={0} @@ -11648,14 +12528,18 @@ exports[`Storyshots Message list 1`] = ` /> 00:00 @@ -11718,17 +12602,22 @@ exports[`Storyshots Message list 1`] = ` View @@ -11764,13 +12653,11 @@ exports[`Storyshots Message list 1`] = ` allowFontScaling={false} style={ Array [ - Object { - "color": undefined, - "fontSize": 36, - }, Object { "color": "#1d74f5", + "fontSize": 36, }, + undefined, Object { "fontFamily": "custom", "fontStyle": "normal", @@ -11795,6 +12682,7 @@ exports[`Storyshots Message list 1`] = ` disabled={false} enabled={true} inverted={false} + maximumTrackTintColor="#9ca2a8" maximumValue={0} minimumTrackTintColor="#1d74f5" minimumValue={0} @@ -11826,14 +12714,18 @@ exports[`Storyshots Message list 1`] = ` /> 00:00 @@ -11853,6 +12745,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -12000,14 +12896,18 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -12015,15 +12915,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -12032,6 +12936,14 @@ exports[`Storyshots Message list 1`] = ` I'm a very long long title and I'll break 10:00 AM - + diego.mello @@ -12378,15 +13307,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -12395,6 +13328,14 @@ exports[`Storyshots Message list 1`] = ` rocket.cat 10:00 AM - + diego.mello @@ -12791,15 +13753,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -12808,6 +13774,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -13191,15 +14171,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -13208,6 +14192,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -13653,15 +14655,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -13670,6 +14676,14 @@ exports[`Storyshots Message list 1`] = ` 1 reply @@ -13767,15 +14790,19 @@ exports[`Storyshots Message list 1`] = ` Nov 10 @@ -13924,30 +14951,38 @@ exports[`Storyshots Message list 1`] = ` - diego.mello - - - + diego.mello + + + 10:00 AM @@ -13956,6 +14991,14 @@ exports[`Storyshots Message list 1`] = ` +999 replies @@ -14053,15 +15105,19 @@ exports[`Storyshots Message list 1`] = ` Nov 10 @@ -14119,11 +15175,10 @@ exports[`Storyshots Message list 1`] = ` style={ Array [ Object { - "color": undefined, + "color": "#1d74f5", "fontSize": 20, }, Object { - "color": "#1d74f5", "marginLeft": 16, "marginRight": 10, }, @@ -14141,14 +15196,18 @@ exports[`Storyshots Message list 1`] = ` How are you? @@ -14170,10 +15229,15 @@ exports[`Storyshots Message list 1`] = ` } } style={ - Object { - "height": 20, - "width": 20, - } + Array [ + Object { + "height": 20, + "width": 20, + }, + Object { + "tintColor": "#caced1", + }, + ] } /> @@ -14272,6 +15336,14 @@ exports[`Storyshots Message list 1`] = ` Thread with emoji :) 😂 @@ -14429,10 +15501,15 @@ exports[`Storyshots Message list 1`] = ` } } style={ - Object { - "height": 20, - "width": 20, - } + Array [ + Object { + "height": 20, + "width": 20, + }, + Object { + "tintColor": "#caced1", + }, + ] } /> @@ -14531,6 +15608,14 @@ exports[`Storyshots Message list 1`] = ` Markdown: link block code @@ -14688,10 +15773,15 @@ exports[`Storyshots Message list 1`] = ` } } style={ - Object { - "height": 20, - "width": 20, - } + Array [ + Object { + "height": 20, + "width": 20, + }, + Object { + "tintColor": "#caced1", + }, + ] } /> @@ -14790,6 +15880,14 @@ exports[`Storyshots Message list 1`] = ` Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. @@ -14947,10 +16045,15 @@ exports[`Storyshots Message list 1`] = ` } } style={ - Object { - "height": 20, - "width": 20, - } + Array [ + Object { + "height": 20, + "width": 20, + }, + Object { + "tintColor": "#caced1", + }, + ] } /> @@ -15049,6 +16152,14 @@ exports[`Storyshots Message list 1`] = ` How are you? @@ -15206,10 +16317,15 @@ exports[`Storyshots Message list 1`] = ` } } style={ - Object { - "height": 20, - "width": 20, - } + Array [ + Object { + "height": 20, + "width": 20, + }, + Object { + "tintColor": "#caced1", + }, + ] } /> @@ -15308,14 +16424,21 @@ exports[`Storyshots Message list 1`] = ` - + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. @@ -15431,10 +16557,15 @@ exports[`Storyshots Message list 1`] = ` } } style={ - Object { - "height": 20, - "width": 20, - } + Array [ + Object { + "height": 20, + "width": 20, + }, + Object { + "tintColor": "#caced1", + }, + ] } /> @@ -15533,6 +16664,14 @@ exports[`Storyshots Message list 1`] = ` Thread with attachment @@ -15656,10 +16797,15 @@ exports[`Storyshots Message list 1`] = ` } } style={ - Object { - "height": 20, - "width": 20, - } + Array [ + Object { + "height": 20, + "width": 20, + }, + Object { + "tintColor": "#caced1", + }, + ] } /> @@ -15758,13 +16904,17 @@ exports[`Storyshots Message list 1`] = ` Sent an attachment @@ -15784,6 +16934,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -15931,14 +17085,18 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -15946,15 +17104,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -15963,6 +17125,14 @@ exports[`Storyshots Message list 1`] = ` 1 reply @@ -16060,15 +17239,19 @@ exports[`Storyshots Message list 1`] = ` Nov 10 @@ -16204,6 +17387,14 @@ exports[`Storyshots Message list 1`] = ` Sent an attachment @@ -16564,6 +17763,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -16620,11 +17823,10 @@ exports[`Storyshots Message list 1`] = ` style={ Array [ Object { - "color": undefined, + "color": "#1d74f5", "fontSize": 20, }, Object { - "color": "#1d74f5", "marginLeft": 16, "marginRight": 10, }, @@ -16642,14 +17844,18 @@ exports[`Storyshots Message list 1`] = ` How are you? @@ -16671,10 +17877,15 @@ exports[`Storyshots Message list 1`] = ` } } style={ - Object { - "height": 20, - "width": 20, - } + Array [ + Object { + "height": 20, + "width": 20, + }, + Object { + "tintColor": "#caced1", + }, + ] } /> @@ -16773,6 +17984,14 @@ exports[`Storyshots Message list 1`] = ` Sent an attachment @@ -17300,6 +18533,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -17447,14 +18684,18 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -17462,15 +18703,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -17478,28 +18723,36 @@ exports[`Storyshots Message list 1`] = ` Started a discussion: This is a discussion @@ -17550,11 +18803,10 @@ exports[`Storyshots Message list 1`] = ` style={ Array [ Object { - "color": undefined, + "color": "#ffffff", "fontSize": 20, }, Object { - "color": "#fff", "marginRight": 6, }, Object { @@ -17570,13 +18822,17 @@ exports[`Storyshots Message list 1`] = ` No messages yet @@ -17584,15 +18840,19 @@ exports[`Storyshots Message list 1`] = ` @@ -17739,14 +18999,18 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -17754,15 +19018,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -17770,28 +19038,36 @@ exports[`Storyshots Message list 1`] = ` Started a discussion: This is a discussion @@ -17842,11 +19118,10 @@ exports[`Storyshots Message list 1`] = ` style={ Array [ Object { - "color": undefined, + "color": "#ffffff", "fontSize": 20, }, Object { - "color": "#fff", "marginRight": 6, }, Object { @@ -17862,13 +19137,17 @@ exports[`Storyshots Message list 1`] = ` 1 message @@ -17876,15 +19155,19 @@ exports[`Storyshots Message list 1`] = ` Nov 10 @@ -18033,14 +19316,18 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -18048,15 +19335,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -18064,28 +19355,36 @@ exports[`Storyshots Message list 1`] = ` Started a discussion: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. @@ -18136,11 +19435,10 @@ exports[`Storyshots Message list 1`] = ` style={ Array [ Object { - "color": undefined, + "color": "#ffffff", "fontSize": 20, }, Object { - "color": "#fff", "marginRight": 6, }, Object { @@ -18156,13 +19454,17 @@ exports[`Storyshots Message list 1`] = ` 10 messages @@ -18170,15 +19472,19 @@ exports[`Storyshots Message list 1`] = ` Nov 10 @@ -18327,14 +19633,18 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -18342,15 +19652,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -18358,28 +19672,36 @@ exports[`Storyshots Message list 1`] = ` Started a discussion: This is a discussion @@ -18430,11 +19752,10 @@ exports[`Storyshots Message list 1`] = ` style={ Array [ Object { - "color": undefined, + "color": "#ffffff", "fontSize": 20, }, Object { - "color": "#fff", "marginRight": 6, }, Object { @@ -18450,13 +19771,17 @@ exports[`Storyshots Message list 1`] = ` +999 messages @@ -18464,15 +19789,19 @@ exports[`Storyshots Message list 1`] = ` Nov 10 @@ -18492,6 +19821,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -18639,14 +19972,18 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -18654,15 +19991,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -18740,13 +20081,17 @@ exports[`Storyshots Message list 1`] = ` Rocket.Chat - Free, Open Source, Enterprise Team Chat @@ -18754,13 +20099,17 @@ exports[`Storyshots Message list 1`] = ` Rocket.Chat is the leading open source team chat software solution. Free, unlimited and completely customizable with on-premises and SaaS cloud hosting. @@ -18805,13 +20154,17 @@ exports[`Storyshots Message list 1`] = ` Google @@ -18819,13 +20172,17 @@ exports[`Storyshots Message list 1`] = ` Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for. @@ -18975,14 +20332,18 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -18990,15 +20351,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -19007,6 +20372,14 @@ exports[`Storyshots Message list 1`] = ` Google @@ -19121,13 +20497,17 @@ exports[`Storyshots Message list 1`] = ` Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for. @@ -19227,13 +20607,17 @@ exports[`Storyshots Message list 1`] = ` Google @@ -19241,13 +20625,17 @@ exports[`Storyshots Message list 1`] = ` Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for. @@ -19268,6 +20656,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -19415,14 +20807,18 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -19430,15 +20826,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -19447,6 +20847,14 @@ exports[`Storyshots Message list 1`] = ` rocket.cat 10:00 AM - + Field 1 Value 1 @@ -19643,26 +21074,34 @@ exports[`Storyshots Message list 1`] = ` > Field 2 Value 2 @@ -19683,26 +21122,34 @@ exports[`Storyshots Message list 1`] = ` > Field 3 Value 3 @@ -19723,26 +21170,34 @@ exports[`Storyshots Message list 1`] = ` > Field 4 Value 4 @@ -19763,26 +21218,34 @@ exports[`Storyshots Message list 1`] = ` > Field 5 Value 5 @@ -19805,6 +21268,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -19952,14 +21419,18 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -19967,15 +21438,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -19984,6 +21459,14 @@ exports[`Storyshots Message list 1`] = ` rocket.cat 10:00 AM - + Field 1 Value 1 @@ -20180,26 +21686,34 @@ exports[`Storyshots Message list 1`] = ` > Field 2 Value 2 @@ -20222,7 +21736,7 @@ exports[`Storyshots Message list 1`] = ` style={ Object { "alignItems": "center", - "alignSelf": "flex-end", + "alignSelf": "flex-start", "backgroundColor": "#f3f4f5", "borderColor": "#e1e5e8", "borderRadius": 4, @@ -20255,40 +21769,56 @@ exports[`Storyshots Message list 1`] = ` > rocket.cat 10:00 AM - + Field 1 Value 1 @@ -20374,26 +21912,34 @@ exports[`Storyshots Message list 1`] = ` > Field 2 Value 2 @@ -20416,6 +21962,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -20563,14 +22113,18 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -20578,15 +22132,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -20595,6 +22153,14 @@ exports[`Storyshots Message list 1`] = ` Reply @@ -20718,6 +22286,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -20865,14 +22437,18 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -20880,15 +22456,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -20897,6 +22477,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -21086,15 +22681,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -21151,6 +22750,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -21253,15 +22863,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -21318,6 +22932,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -21523,15 +23152,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -21546,6 +23179,14 @@ exports[`Storyshots Message list 1`] = ` > diego.mello @@ -21752,15 +23400,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -21769,6 +23421,14 @@ exports[`Storyshots Message list 1`] = ` Message removed @@ -21972,6 +23639,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -22105,14 +23776,18 @@ exports[`Storyshots Message list 1`] = ` > Has joined the channel @@ -22131,6 +23806,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -22264,14 +23943,18 @@ exports[`Storyshots Message list 1`] = ` > Room name changed to: New name by diego.mello @@ -22290,6 +23973,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -22423,14 +24110,18 @@ exports[`Storyshots Message list 1`] = ` > Message pinned @@ -22449,6 +24140,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -22582,14 +24277,18 @@ exports[`Storyshots Message list 1`] = ` > Has left the channel @@ -22608,6 +24307,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -22741,14 +24444,18 @@ exports[`Storyshots Message list 1`] = ` > User rocket.cat removed by diego.mello @@ -22767,6 +24474,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -22900,14 +24611,18 @@ exports[`Storyshots Message list 1`] = ` > User rocket.cat added by diego.mello @@ -22926,6 +24641,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -23059,14 +24778,18 @@ exports[`Storyshots Message list 1`] = ` > User rocket.cat muted by diego.mello @@ -23085,6 +24808,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -23218,14 +24945,18 @@ exports[`Storyshots Message list 1`] = ` > User rocket.cat unmuted by diego.mello @@ -23244,6 +24975,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -23377,14 +25112,18 @@ exports[`Storyshots Message list 1`] = ` > rocket.cat was set admin by diego.mello @@ -23403,6 +25142,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -23536,14 +25279,18 @@ exports[`Storyshots Message list 1`] = ` > rocket.cat is no longer admin by diego.mello @@ -23562,6 +25309,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -23695,14 +25446,18 @@ exports[`Storyshots Message list 1`] = ` > Room description changed to: new description by diego.mello @@ -23721,6 +25476,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -23854,14 +25613,18 @@ exports[`Storyshots Message list 1`] = ` > Room announcement changed to: new announcement by diego.mello @@ -23880,6 +25643,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -24013,14 +25780,18 @@ exports[`Storyshots Message list 1`] = ` > Room topic changed to: new topic by diego.mello @@ -24039,6 +25810,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -24172,14 +25947,18 @@ exports[`Storyshots Message list 1`] = ` > Room type changed to: public by diego.mello @@ -24198,6 +25977,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -24350,14 +26133,18 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -24365,15 +26152,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -24382,6 +26173,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -24588,15 +26394,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -24605,6 +26415,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -25129,15 +26943,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -25146,6 +26964,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -25495,15 +27363,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -25512,6 +27384,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -25981,15 +27856,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -25998,6 +27877,14 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -26191,15 +28086,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -26208,6 +28107,14 @@ exports[`Storyshots Message list 1`] = ` code @@ -26255,7 +28165,6 @@ exports[`Storyshots Message list 1`] = ` Array [ Object { "backgroundColor": "transparent", - "color": "#2F343D", "fontFamily": "System", "fontSize": 16, "fontWeight": "400", @@ -26278,13 +28187,17 @@ exports[`Storyshots Message list 1`] = ` back-ticks around @@ -26295,7 +28208,6 @@ exports[`Storyshots Message list 1`] = ` Array [ Object { "backgroundColor": "transparent", - "color": "#2F343D", "fontFamily": "System", "fontSize": 16, "fontWeight": "400", @@ -26319,15 +28231,18 @@ exports[`Storyshots Message list 1`] = ` Code block @@ -26348,6 +28263,10 @@ exports[`Storyshots Message list 1`] = ` "marginLeft": 10, "marginTop": 30, }, + Object { + "backgroundColor": "#efeff4", + "color": "#0d0e12", + }, Object { "marginBottom": 0, "marginTop": 30, @@ -26495,14 +28414,18 @@ exports[`Storyshots Message list 1`] = ` diego.mello @@ -26510,15 +28433,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -26535,12 +28462,16 @@ exports[`Storyshots Message list 1`] = ` > diego.mello @@ -26761,15 +28707,19 @@ exports[`Storyshots Message list 1`] = ` 10:00 AM @@ -26805,10 +28755,10 @@ exports[`Storyshots Message list 1`] = ` Array [ Object { "borderBottomWidth": 1, - "borderColor": "#e1e5e8", "borderRightWidth": 1, }, Object { + "borderColor": "#e1e5e8", "maxHeight": 300, "maxWidth": 200, }, @@ -26820,10 +28770,12 @@ exports[`Storyshots Message list 1`] = ` style={ Array [ Object { - "borderColor": "#e1e5e8", "borderLeftWidth": 1, "borderTopWidth": 1, }, + Object { + "borderColor": "#e1e5e8", + }, ] } > @@ -26834,9 +28786,11 @@ exports[`Storyshots Message list 1`] = ` "flexDirection": "row", }, Object { - "borderBottomWidth": 1, "borderColor": "#e1e5e8", }, + Object { + "borderBottomWidth": 1, + }, ] } > @@ -26844,11 +28798,13 @@ exports[`Storyshots Message list 1`] = ` style={ Array [ Object { - "borderColor": "#e1e5e8", "justifyContent": "flex-start", "paddingHorizontal": 13, "paddingVertical": 6, }, + Object { + "borderColor": "#e1e5e8", + }, Object { "borderRightWidth": 1, }, @@ -26859,7 +28815,14 @@ exports[`Storyshots Message list 1`] = ` } > @@ -26953,11 +28923,13 @@ exports[`Storyshots Message list 1`] = ` style={ Array [ Object { - "borderColor": "#e1e5e8", "justifyContent": "flex-start", "paddingHorizontal": 13, "paddingVertical": 6, }, + Object { + "borderColor": "#e1e5e8", + }, Object { "borderRightWidth": 1, }, @@ -26968,7 +28940,14 @@ exports[`Storyshots Message list 1`] = ` } > @@ -27058,11 +29045,13 @@ exports[`Storyshots Message list 1`] = ` style={ Array [ Object { - "borderColor": "#e1e5e8", "justifyContent": "flex-start", "paddingHorizontal": 13, "paddingVertical": 6, }, + Object { + "borderColor": "#e1e5e8", + }, Object { "borderRightWidth": 1, }, @@ -27073,7 +29062,14 @@ exports[`Storyshots Message list 1`] = ` } > Click to see full table @@ -27179,7 +29184,13 @@ exports[`Storyshots Message list 1`] = ` `; exports[`Storyshots RoomItem list 1`] = ` - + - + \ No newline at end of file diff --git a/android/app/src/debug/res/xml/react_native_config.xml b/android/app/src/debug/res/xml/react_native_config.xml deleted file mode 100644 index ba4b23070b..0000000000 --- a/android/app/src/debug/res/xml/react_native_config.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - localhost - 10.0.2.2 - 10.0.3.2 - - diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index cf2faf4485..e4e2ec4039 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -17,6 +17,7 @@ android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:theme="@style/AppTheme" + android:networkSecurityConfig="@xml/network_security_config" > e3z?~u=i1)axz2U2b3eUgVZ3X{{vBJk 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

vaVC(RGF4W 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 diff --git a/android/app/src/main/res/drawable-xxxhdpi/message_empty_black.png b/android/app/src/main/res/drawable-xxxhdpi/message_empty_black.png new file mode 100644 index 0000000000000000000000000000000000000000..2a86c698552819e8a531aad7bf733176b2a959a0 GIT binary patch literal 71461 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�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%0D#Zdo}) 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 z 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%0Dc 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%0A!-~qgL;xg-?KD={Obr9_1K*7!LXd9=% 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 Ef?p=buK)l5 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/drawable-xxxhdpi/message_empty_light.png b/android/app/src/main/res/drawable-xxxhdpi/message_empty_light.png new file mode 100644 index 0000000000000000000000000000000000000000..74c630594e6191e4bcf2bd580d1db58699564026 GIT binary patch literal 114991 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 RUK+#6epZq!7yt70{{ylrOcDS9 literal 0 HcmV?d00001 diff --git a/android/app/src/main/res/layout/launch_screen.xml b/android/app/src/main/res/layout/launch_screen.xml index 7ec70ce1ec..97c4ac2738 100644 --- a/android/app/src/main/res/layout/launch_screen.xml +++ b/android/app/src/main/res/layout/launch_screen.xml @@ -1,6 +1,13 @@ - + \ No newline at end of file diff --git a/android/app/src/main/res/xml/network_security_config.xml b/android/app/src/main/res/xml/network_security_config.xml new file mode 100644 index 0000000000..bb6ab93df0 --- /dev/null +++ b/android/app/src/main/res/xml/network_security_config.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/actions/actionsTypes.js b/app/actions/actionsTypes.js index 5430706234..ced5b25ef4 100644 --- a/app/actions/actionsTypes.js +++ b/app/actions/actionsTypes.js @@ -31,7 +31,7 @@ export const ROOMS = createRequestTypes('ROOMS', [ 'CLOSE_SEARCH_HEADER' ]); export const ROOM = createRequestTypes('ROOM', ['LEAVE', 'ERASE', 'USER_TYPING']); -export const APP = createRequestTypes('APP', ['START', 'READY', 'INIT']); +export const APP = createRequestTypes('APP', ['START', 'READY', 'INIT', 'INIT_LOCAL_SETTINGS']); export const MESSAGES = createRequestTypes('MESSAGES', ['REPLY_BROADCAST']); export const CREATE_CHANNEL = createRequestTypes('CREATE_CHANNEL', [...defaultTypes]); export const SELECTED_USERS = createRequestTypes('SELECTED_USERS', ['ADD_USER', 'REMOVE_USER', 'RESET', 'SET_LOADING']); diff --git a/app/actions/index.js b/app/actions/index.js index ca322276ad..494cb1c934 100644 --- a/app/actions/index.js +++ b/app/actions/index.js @@ -20,6 +20,12 @@ export function appInit() { }; } +export function appInitLocalSettings() { + return { + type: APP.INIT_LOCAL_SETTINGS + }; +} + export function setCurrentServer(server) { return { type: types.SET_CURRENT_SERVER, diff --git a/app/actions/login.js b/app/actions/login.js index c406d8e892..455c4fa146 100644 --- a/app/actions/login.js +++ b/app/actions/login.js @@ -1,9 +1,10 @@ import * as types from './actionsTypes'; -export function loginRequest(credentials) { +export function loginRequest(credentials, logoutOnError) { return { type: types.LOGIN.REQUEST, - credentials + credentials, + logoutOnError }; } diff --git a/app/commands.js b/app/commands.js new file mode 100644 index 0000000000..5c0ffd5998 --- /dev/null +++ b/app/commands.js @@ -0,0 +1,187 @@ +/* eslint-disable no-bitwise */ +import { constants } from 'react-native-keycommands'; + +import I18n from './i18n'; + +const KEY_TYPING = '\t'; +const KEY_PREFERENCES = 'p'; +const KEY_SEARCH = 'f'; +const KEY_PREVIOUS_ROOM = '['; +const KEY_NEXT_ROOM = ']'; +const KEY_NEW_ROOM = __DEV__ ? 'e' : 'n'; +const KEY_ROOM_ACTIONS = __DEV__ ? 'b' : 'i'; +const KEY_UPLOAD = 'u'; +const KEY_REPLY = ';'; +const KEY_SERVER_SELECTION = __DEV__ ? 'o' : '`'; +const KEY_ADD_SERVER = __DEV__ ? 'l' : 'n'; +const KEY_SEND_MESSAGE = '\r'; +const KEY_SELECT = '123456789'; + +export const defaultCommands = [ + { + // Focus messageBox + input: KEY_TYPING, + modifierFlags: 0, + discoverabilityTitle: I18n.t('Type_message') + }, + { + // Send message on textInput to current room + input: KEY_SEND_MESSAGE, + modifierFlags: 0, + discoverabilityTitle: I18n.t('Send') + } +]; + +export const keyCommands = [ + { + // Open Preferences Modal + input: KEY_PREFERENCES, + modifierFlags: constants.keyModifierCommand, + discoverabilityTitle: I18n.t('Preferences') + }, + { + // Focus Room Search + input: KEY_SEARCH, + modifierFlags: constants.keyModifierCommand | constants.keyModifierAlternate, + discoverabilityTitle: I18n.t('Room_search') + }, + { + // Select a room by order using 1-9 + input: '1...9', + modifierFlags: constants.keyModifierCommand, + discoverabilityTitle: I18n.t('Room_selection') + }, + { + // Change room to next on Rooms List + input: KEY_NEXT_ROOM, + modifierFlags: constants.keyModifierCommand, + discoverabilityTitle: I18n.t('Next_room') + }, + { + // Change room to previous on Rooms List + input: KEY_PREVIOUS_ROOM, + modifierFlags: constants.keyModifierCommand, + discoverabilityTitle: I18n.t('Previous_room') + }, + { + // Open New Room Modal + input: KEY_NEW_ROOM, + modifierFlags: constants.keyModifierCommand, + discoverabilityTitle: I18n.t('New_room') + }, + { + // Open Room Actions + input: KEY_ROOM_ACTIONS, + modifierFlags: constants.keyModifierCommand, + discoverabilityTitle: I18n.t('Room_actions') + }, + { + // Upload a file to room + input: KEY_UPLOAD, + modifierFlags: constants.keyModifierCommand, + discoverabilityTitle: I18n.t('Upload_room') + }, + { + // Search Messages on current room + input: KEY_SEARCH, + modifierFlags: constants.keyModifierCommand, + discoverabilityTitle: I18n.t('Search_messages') + }, + { + // Scroll messages on current room + input: '↑ ↓', + modifierFlags: constants.keyModifierAlternate, + discoverabilityTitle: I18n.t('Scroll_messages') + }, + { + // Scroll up messages on current room + input: constants.keyInputUpArrow, + modifierFlags: constants.keyModifierAlternate + }, + { + // Scroll down messages on current room + input: constants.keyInputDownArrow, + modifierFlags: constants.keyModifierAlternate + }, + { + // Reply latest message with Quote + input: KEY_REPLY, + modifierFlags: constants.keyModifierCommand, + discoverabilityTitle: I18n.t('Reply_latest') + }, + { + // Open server dropdown + input: KEY_SERVER_SELECTION, + modifierFlags: constants.keyModifierCommand | constants.keyModifierAlternate, + discoverabilityTitle: I18n.t('Server_selection') + }, + { + // Select a server by order using 1-9 + input: '1...9', + modifierFlags: constants.keyModifierCommand | constants.keyModifierAlternate, + discoverabilityTitle: I18n.t('Server_selection_numbers') + }, + { + // Navigate to add new server + input: KEY_ADD_SERVER, + modifierFlags: constants.keyModifierCommand | constants.keyModifierAlternate, + discoverabilityTitle: I18n.t('Add_server') + }, + // Refers to select rooms on list + ...([1, 2, 3, 4, 5, 6, 7, 8, 9].map(value => ({ + input: `${ value }`, + modifierFlags: constants.keyModifierCommand + }))), + // Refers to select servers on list + ...([1, 2, 3, 4, 5, 6, 7, 8, 9].map(value => ({ + input: `${ value }`, + modifierFlags: constants.keyModifierCommand | constants.keyModifierAlternate + }))) +]; + +export const KEY_COMMAND = 'KEY_COMMAND'; + +export const commandHandle = (event, key, flags = []) => { + const { input, modifierFlags } = event; + let _flags = 0; + if (flags.includes('command') && flags.includes('alternate')) { + _flags = constants.keyModifierCommand | constants.keyModifierAlternate; + } else if (flags.includes('command')) { + _flags = constants.keyModifierCommand; + } else if (flags.includes('alternate')) { + _flags = constants.keyModifierAlternate; + } + return key.includes(input) && modifierFlags === _flags; +}; + +export const handleCommandTyping = event => commandHandle(event, KEY_TYPING); + +export const handleCommandSubmit = event => commandHandle(event, KEY_SEND_MESSAGE); + +export const handleCommandShowUpload = event => commandHandle(event, KEY_UPLOAD, ['command']); + +export const handleCommandScroll = event => commandHandle(event, [constants.keyInputUpArrow, constants.keyInputDownArrow], ['alternate']); + +export const handleCommandRoomActions = event => commandHandle(event, KEY_ROOM_ACTIONS, ['command']); + +export const handleCommandSearchMessages = event => commandHandle(event, KEY_SEARCH, ['command']); + +export const handleCommandReplyLatest = event => commandHandle(event, KEY_REPLY, ['command']); + +export const handleCommandSelectServer = event => commandHandle(event, KEY_SELECT, ['command', 'alternate']); + +export const handleCommandShowPreferences = event => commandHandle(event, KEY_PREFERENCES, ['command']); + +export const handleCommandSearching = event => commandHandle(event, KEY_SEARCH, ['command', 'alternate']); + +export const handleCommandSelectRoom = event => commandHandle(event, KEY_SELECT, ['command']); + +export const handleCommandPreviousRoom = event => commandHandle(event, KEY_PREVIOUS_ROOM, ['command']); + +export const handleCommandNextRoom = event => commandHandle(event, KEY_NEXT_ROOM, ['command']); + +export const handleCommandShowNewMessage = event => commandHandle(event, KEY_NEW_ROOM, ['command']); + +export const handleCommandAddNewServer = event => commandHandle(event, KEY_ADD_SERVER, ['command', 'alternate']); + +export const handleCommandOpenServerDropdown = event => commandHandle(event, KEY_SERVER_SELECTION, ['command', 'alternate']); diff --git a/app/constants/colors.js b/app/constants/colors.js index b65cbc22a6..d38ac2cbf3 100644 --- a/app/constants/colors.js +++ b/app/constants/colors.js @@ -1,32 +1,121 @@ import { isIOS, isAndroid } from '../utils/deviceInfo'; -export const COLOR_DANGER = '#f5455c'; -export const COLOR_SUCCESS = '#2de0a5'; -export const COLOR_PRIMARY = '#1d74f5'; -export const COLOR_WHITE = '#fff'; -export const COLOR_BUTTON_PRIMARY = COLOR_PRIMARY; -export const COLOR_TITLE = '#0C0D0F'; -export const COLOR_TEXT = '#2F343D'; -export const COLOR_TEXT_DESCRIPTION = '#9ca2a8'; -export const COLOR_SEPARATOR = '#A7A7AA'; -export const COLOR_BACKGROUND_CONTAINER = '#f3f4f5'; -export const COLOR_BACKGROUND_NOTIFICATION = '#f8f8f8'; -export const COLOR_BORDER = '#e1e5e8'; -export const COLOR_UNREAD = '#e1e5e8'; -export const COLOR_TOAST = '#0C0D0F'; export const STATUS_COLORS = { online: '#2de0a5', - busy: COLOR_DANGER, + busy: '#f5455c', away: '#ffd21f', offline: '#cbced1' }; -export const HEADER_BACKGROUND = isIOS ? '#f8f8f8' : '#2F343D'; -export const HEADER_TITLE = isIOS ? COLOR_TITLE : COLOR_WHITE; -export const HEADER_BACK = isIOS ? COLOR_PRIMARY : COLOR_WHITE; -export const HEADER_TINT = isIOS ? COLOR_PRIMARY : COLOR_WHITE; - export const SWITCH_TRACK_COLOR = { - false: isAndroid ? COLOR_DANGER : null, - true: COLOR_SUCCESS + false: isAndroid ? '#f5455c' : null, + true: '#2de0a5' +}; + +export const themes = { + light: { + backgroundColor: '#ffffff', + focusedBackground: '#ffffff', + chatComponentBackground: '#f3f4f5', + auxiliaryBackground: '#efeff4', + bannerBackground: '#f1f2f4', + titleText: '#0d0e12', + bodyText: '#2f343d', + backdropColor: '#000000', + dangerColor: '#f5455c', + successColor: '#2de0a5', + borderColor: '#e1e5e8', + controlText: '#54585e', + auxiliaryText: '#9ca2a8', + infoText: '#6d6d72', + tintColor: '#1d74f5', + auxiliaryTintColor: '#caced1', + actionTintColor: '#1d74f5', + separatorColor: '#cbcbcc', + navbarBackground: '#ffffff', + headerBorder: '#B2B2B2', + headerBackground: isIOS ? '#f8f8f8' : '#2f343d', + headerSecondaryBackground: '#ffffff', + headerTintColor: isAndroid ? '#ffffff' : '#1d74f5', + headerTitleColor: isAndroid ? '#ffffff' : '#0d0e12', + headerSecondaryText: isAndroid ? '#9ca2a8' : '#1d74f5', + toastBackground: '#0C0D0F', + videoBackground: '#1f2329', + favoriteBackground: '#ffbb00', + hideBackground: '#54585e', + messageboxBackground: '#ffffff', + searchboxBackground: '#E6E6E7', + buttonBackground: '#414852', + buttonText: '#ffffff' + }, + dark: { + backgroundColor: '#030b1b', + focusedBackground: '#0b182c', + chatComponentBackground: '#192132', + auxiliaryBackground: '#07101e', + bannerBackground: '#0e1f38', + titleText: '#FFFFFF', + bodyText: '#e8ebed', + backdropColor: '#000000', + dangerColor: '#f5455c', + successColor: '#2de0a5', + borderColor: '#0f213d', + controlText: '#dadde6', + auxiliaryText: '#9297a2', + infoText: '#6D6D72', + tintColor: '#1d74f5', + auxiliaryTintColor: '#cdcdcd', + actionTintColor: '#1d74f5', + separatorColor: '#2b2b2d', + navbarBackground: '#0b182c', + headerBorder: '#2F3A4B', + headerBackground: '#0b182c', + headerSecondaryBackground: '#0b182c', + headerTintColor: isAndroid ? '#ffffff' : '#1d74f5', + headerTitleColor: '#FFFFFF', + headerSecondaryText: isAndroid ? '#9297a2' : '#1d74f5', + toastBackground: '#0C0D0F', + videoBackground: '#1f2329', + favoriteBackground: '#ffbb00', + hideBackground: '#54585e', + messageboxBackground: '#0b182c', + searchboxBackground: '#192d4d', + buttonBackground: '#414852', + buttonText: '#ffffff' + }, + black: { + backgroundColor: '#000000', + focusedBackground: '#0d0d0d', + chatComponentBackground: '#16181a', + auxiliaryBackground: '#080808', + bannerBackground: '#1f2329', + titleText: '#f9f9f9', + bodyText: '#e8ebed', + backdropColor: '#000000', + dangerColor: '#f5455c', + successColor: '#2de0a5', + borderColor: '#1f2329', + controlText: '#dadde6', + auxiliaryText: '#b2b8c6', + infoText: '#6d6d72', + tintColor: '#1e9bfe', + auxiliaryTintColor: '#cdcdcd', + actionTintColor: '#1ea1fe', + separatorColor: '#272728', + navbarBackground: '#0d0d0d', + headerBorder: '#323232', + headerBackground: '#0d0d0d', + headerSecondaryBackground: '#0d0d0d', + headerTintColor: isAndroid ? '#ffffff' : '#1e9bfe', + headerTitleColor: '#f9f9f9', + headerSecondaryText: isAndroid ? '#b2b8c6' : '#1e9bfe', + toastBackground: '#0C0D0F', + videoBackground: '#1f2329', + favoriteBackground: '#ffbb00', + hideBackground: '#54585e', + messageboxBackground: '#0d0d0d', + searchboxBackground: '#1f1f1f', + buttonBackground: '#414852', + buttonText: '#ffffff' + } }; diff --git a/app/constants/tablet.js b/app/constants/tablet.js new file mode 100644 index 0000000000..16e62f6d0e --- /dev/null +++ b/app/constants/tablet.js @@ -0,0 +1,4 @@ +export const MAX_SIDEBAR_WIDTH = 321; +export const MAX_CONTENT_WIDTH = '90%'; +export const MAX_SCREEN_CONTENT_WIDTH = '45%'; +export const MIN_WIDTH_SPLIT_LAYOUT = 700; diff --git a/app/containers/ActivityIndicator.js b/app/containers/ActivityIndicator.js index f4fa47d4e4..964d9c267e 100644 --- a/app/containers/ActivityIndicator.js +++ b/app/containers/ActivityIndicator.js @@ -1,12 +1,40 @@ import React from 'react'; import { ActivityIndicator, StyleSheet } from 'react-native'; +import { PropTypes } from 'prop-types'; +import { themes } from '../constants/colors'; const styles = StyleSheet.create({ indicator: { - padding: 10 + padding: 16, + flex: 1 + }, + absolute: { + position: 'absolute', + left: 0, + right: 0, + top: 0, + bottom: 0, + alignItems: 'center', + justifyContent: 'center' } }); -const RCActivityIndicator = () => ; +const RCActivityIndicator = ({ theme, absolute, ...props }) => ( + +); + +RCActivityIndicator.propTypes = { + theme: PropTypes.string, + absolute: PropTypes.bool, + props: PropTypes.object +}; + +RCActivityIndicator.defaultProps = { + theme: 'light' +}; export default RCActivityIndicator; diff --git a/app/containers/Avatar.js b/app/containers/Avatar.js index c616788cf1..39d488efa7 100644 --- a/app/containers/Avatar.js +++ b/app/containers/Avatar.js @@ -2,13 +2,14 @@ import React from 'react'; import PropTypes from 'prop-types'; import { View } from 'react-native'; import FastImage from 'react-native-fast-image'; +import Touch from '../utils/touch'; const formatUrl = (url, baseUrl, uriSize, avatarAuthURLFragment) => ( `${ baseUrl }${ url }?format=png&width=${ uriSize }&height=${ uriSize }${ avatarAuthURLFragment }` ); const Avatar = React.memo(({ - text, size, baseUrl, borderRadius, style, avatar, type, children, userId, token + text, size, baseUrl, borderRadius, style, avatar, type, children, userId, token, onPress, theme }) => { const avatarStyle = { width: size, @@ -39,7 +40,7 @@ const Avatar = React.memo(({ } - const image = ( + let image = ( ); + if (onPress) { + image = ( + + {image} + + ); + } + return ( {image} @@ -67,7 +76,9 @@ Avatar.propTypes = { type: PropTypes.string, children: PropTypes.object, userId: PropTypes.string, - token: PropTypes.string + token: PropTypes.string, + theme: PropTypes.string, + onPress: PropTypes.func }; Avatar.defaultProps = { diff --git a/app/containers/Button/index.js b/app/containers/Button/index.js index f7d610aa22..c90ced8349 100644 --- a/app/containers/Button/index.js +++ b/app/containers/Button/index.js @@ -1,18 +1,11 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { StyleSheet, Text, ActivityIndicator } from 'react-native'; +import { StyleSheet, Text } from 'react-native'; import { RectButton } from 'react-native-gesture-handler'; -import { COLOR_BUTTON_PRIMARY } from '../../constants/colors'; +import { themes } from '../../constants/colors'; import sharedStyles from '../../views/Styles'; - -const colors = { - background_primary: COLOR_BUTTON_PRIMARY, - background_secondary: 'white', - - text_color_primary: 'white', - text_color_secondary: COLOR_BUTTON_PRIMARY -}; +import ActivityIndicator from '../ActivityIndicator'; /* eslint-disable react-native/no-unused-styles */ const styles = StyleSheet.create({ @@ -26,23 +19,6 @@ const styles = StyleSheet.create({ text: { fontSize: 18, textAlign: 'center' - }, - background_primary: { - backgroundColor: colors.background_primary - }, - background_secondary: { - backgroundColor: colors.background_secondary - }, - text_primary: { - ...sharedStyles.textMedium, - color: colors.text_color_primary - }, - text_secondary: { - ...sharedStyles.textBold, - color: colors.text_color_secondary - }, - disabled: { - backgroundColor: '#e1e5e8' } }); @@ -54,6 +30,7 @@ export default class Button extends React.PureComponent { disabled: PropTypes.bool, backgroundColor: PropTypes.string, loading: PropTypes.bool, + theme: PropTypes.string, style: PropTypes.any } @@ -67,24 +44,37 @@ export default class Button extends React.PureComponent { render() { const { - title, type, onPress, disabled, backgroundColor, loading, style, ...otherProps + title, type, onPress, disabled, backgroundColor, loading, style, theme, ...otherProps } = this.props; + const isPrimary = type === 'primary'; return ( { loading - ? - : {title} + ? + : ( + + {title} + + ) } ); diff --git a/app/containers/Check.js b/app/containers/Check.js index 30c9cbd31c..e3f4f51476 100644 --- a/app/containers/Check.js +++ b/app/containers/Check.js @@ -1,18 +1,22 @@ import React from 'react'; import { StyleSheet } from 'react-native'; +import PropTypes from 'prop-types'; import { CustomIcon } from '../lib/Icons'; -import sharedStyles from '../views/Styles'; +import { themes } from '../constants/colors'; const styles = StyleSheet.create({ icon: { width: 22, height: 22, - marginHorizontal: 15, - ...sharedStyles.textColorDescription + marginHorizontal: 15 } }); -const Check = React.memo(() => ); +const Check = React.memo(({ theme }) => ); + +Check.propTypes = { + theme: PropTypes.string +}; export default Check; diff --git a/app/containers/DisclosureIndicator.js b/app/containers/DisclosureIndicator.js index 25a284baf1..eb6588e1ff 100644 --- a/app/containers/DisclosureIndicator.js +++ b/app/containers/DisclosureIndicator.js @@ -1,5 +1,8 @@ import React from 'react'; import { View, Image, StyleSheet } from 'react-native'; +import PropTypes from 'prop-types'; + +import { themes } from '../constants/colors'; const styles = StyleSheet.create({ disclosureContainer: { @@ -14,12 +17,23 @@ const styles = StyleSheet.create({ } }); -export const DisclosureImage = React.memo(() => ); +export const DisclosureImage = React.memo(({ theme }) => ( + +)); +DisclosureImage.propTypes = { + theme: PropTypes.string +}; -const DisclosureIndicator = React.memo(() => ( +const DisclosureIndicator = React.memo(({ theme }) => ( - + )); +DisclosureIndicator.propTypes = { + theme: PropTypes.string +}; export default DisclosureIndicator; diff --git a/app/containers/EmojiPicker/EmojiCategory.js b/app/containers/EmojiPicker/EmojiCategory.js index e5b572d97f..e7a71f5133 100644 --- a/app/containers/EmojiPicker/EmojiCategory.js +++ b/app/containers/EmojiPicker/EmojiCategory.js @@ -1,20 +1,18 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { Text, TouchableOpacity } from 'react-native'; +import { Text, TouchableOpacity, FlatList } from 'react-native'; import { shortnameToUnicode } from 'emoji-toolkit'; import { responsive } from 'react-native-responsive-ui'; -import { OptimizedFlatList } from 'react-native-optimized-flatlist'; import styles from './styles'; import CustomEmoji from './CustomEmoji'; import scrollPersistTaps from '../../utils/scrollPersistTaps'; -import { isIOS } from '../../utils/deviceInfo'; -const EMOJIS_PER_ROW = isIOS ? 8 : 9; +const EMOJI_SIZE = 50; const renderEmoji = (emoji, size, baseUrl) => { - if (emoji.isCustom) { - return ; + if (emoji && emoji.isCustom) { + return ; } return ( @@ -33,44 +31,41 @@ class EmojiCategory extends React.Component { width: PropTypes.number } - constructor(props) { - super(props); - const { window, width, emojisPerRow } = this.props; - const { width: widthWidth, height: windowHeight } = window; - - this.size = Math.min(width || widthWidth, windowHeight) / (emojisPerRow || EMOJIS_PER_ROW); - this.emojis = props.emojis; - } - - shouldComponentUpdate() { - return false; - } - - renderItem(emoji, size) { + renderItem(emoji) { const { baseUrl, onEmojiSelected } = this.props; return ( onEmojiSelected(emoji)} - testID={`reaction-picker-${ emoji.isCustom ? emoji.content : emoji }`} + testID={`reaction-picker-${ emoji && emoji.isCustom ? emoji.content : emoji }`} > - {renderEmoji(emoji, size, baseUrl)} + {renderEmoji(emoji, EMOJI_SIZE, baseUrl)} ); } render() { - const { emojis } = this.props; + const { emojis, width } = this.props; + + if (!width) { + return null; + } + + const numColumns = Math.trunc(width / EMOJI_SIZE); + const marginHorizontal = (width - (numColumns * EMOJI_SIZE)) / 2; return ( - (item.isCustom && item.content) || item} + (item && item.isCustom && item.content) || item} data={emojis} - renderItem={({ item }) => this.renderItem(item, this.size)} - numColumns={EMOJIS_PER_ROW} + extraData={this.props} + renderItem={({ item }) => this.renderItem(item)} + numColumns={numColumns} initialNumToRender={45} - getItemLayout={(data, index) => ({ length: this.size, offset: this.size * index, index })} removeClippedSubviews {...scrollPersistTaps} /> diff --git a/app/containers/EmojiPicker/TabBar.js b/app/containers/EmojiPicker/TabBar.js index c298484baa..834f587a51 100644 --- a/app/containers/EmojiPicker/TabBar.js +++ b/app/containers/EmojiPicker/TabBar.js @@ -2,26 +2,31 @@ import React from 'react'; import PropTypes from 'prop-types'; import { View, TouchableOpacity, Text } from 'react-native'; import styles from './styles'; +import { themes } from '../../constants/colors'; export default class TabBar extends React.Component { static propTypes = { goToPage: PropTypes.func, activeTab: PropTypes.number, tabs: PropTypes.array, - tabEmojiStyle: PropTypes.object + tabEmojiStyle: PropTypes.object, + theme: PropTypes.string } shouldComponentUpdate(nextProps) { - const { activeTab } = this.props; + const { activeTab, theme } = this.props; if (nextProps.activeTab !== activeTab) { return true; } + if (nextProps.theme !== theme) { + return true; + } return false; } render() { const { - tabs, goToPage, tabEmojiStyle, activeTab + tabs, goToPage, tabEmojiStyle, activeTab, theme } = this.props; return ( @@ -35,7 +40,7 @@ export default class TabBar extends React.Component { testID={`reaction-picker-${ tab }`} > {tab} - {activeTab === i ? : } + {activeTab === i ? : } ))} diff --git a/app/containers/EmojiPicker/index.js b/app/containers/EmojiPicker/index.js index 1b0a7c172d..817b0f6022 100644 --- a/app/containers/EmojiPicker/index.js +++ b/app/containers/EmojiPicker/index.js @@ -1,6 +1,6 @@ import React, { Component } from 'react'; +import { View } from 'react-native'; import PropTypes from 'prop-types'; -import { ScrollView } from 'react-native'; import ScrollableTabView from 'react-native-scrollable-tab-view'; import { shortnameToUnicode } from 'emoji-toolkit'; import equal from 'deep-equal'; @@ -16,6 +16,8 @@ import database from '../../lib/database'; import { emojisByCategory } from '../../emojis'; import protectedFunction from '../../lib/methods/helpers/protectedFunction'; import log from '../../utils/log'; +import { themes } from '../../constants/colors'; +import { withTheme } from '../../theme'; const scrollProps = { keyboardShouldPersistTaps: 'always', @@ -28,8 +30,7 @@ class EmojiPicker extends Component { customEmojis: PropTypes.object, onEmojiSelected: PropTypes.func, tabEmojiStyle: PropTypes.object, - emojisPerRow: PropTypes.number, - width: PropTypes.number + theme: PropTypes.string }; constructor(props) { @@ -44,7 +45,8 @@ class EmojiPicker extends Component { this.state = { frequentlyUsed: [], customEmojis, - show: false + show: false, + width: null }; } @@ -54,12 +56,15 @@ class EmojiPicker extends Component { } shouldComponentUpdate(nextProps, nextState) { - const { frequentlyUsed, show } = this.state; - const { width } = this.props; + const { frequentlyUsed, show, width } = this.state; + const { theme } = this.props; + if (nextProps.theme !== theme) { + return true; + } if (nextState.show !== show) { return true; } - if (nextProps.width !== width) { + if (nextState.width !== width) { return true; } if (!equal(nextState.frequentlyUsed, frequentlyUsed)) { @@ -91,22 +96,24 @@ class EmojiPicker extends Component { _addFrequentlyUsed = protectedFunction(async(emoji) => { const db = database.active; const freqEmojiCollection = db.collections.get('frequently_used_emojis'); + let freqEmojiRecord; + try { + freqEmojiRecord = await freqEmojiCollection.find(emoji.content); + } catch (error) { + // Do nothing + } + await db.action(async() => { - try { - const freqEmojiRecord = await freqEmojiCollection.find(emoji.content); + if (freqEmojiRecord) { await freqEmojiRecord.update((f) => { f.count += 1; }); - } catch (error) { - try { - await freqEmojiCollection.create((f) => { - f._raw = sanitizedRaw({ id: emoji.content }, freqEmojiCollection.schema); - Object.assign(f, emoji); - f.count = 1; - }); - } catch (e) { - // Do nothing - } + } else { + await freqEmojiCollection.create((f) => { + f._raw = sanitizedRaw({ id: emoji.content }, freqEmojiCollection.schema); + Object.assign(f, emoji); + f.count = 1; + }); } }); }) @@ -124,11 +131,11 @@ class EmojiPicker extends Component { this.setState({ frequentlyUsed }); } - renderCategory(category, i) { - const { frequentlyUsed, customEmojis } = this.state; - const { - emojisPerRow, width, baseUrl - } = this.props; + onLayout = ({ nativeEvent: { layout: { width } } }) => this.setState({ width }); + + renderCategory(category, i, label) { + const { frequentlyUsed, customEmojis, width } = this.state; + const { baseUrl } = this.props; let emojis = []; if (i === 0) { @@ -143,41 +150,36 @@ class EmojiPicker extends Component { emojis={emojis} onEmojiSelected={emoji => this.onEmojiSelected(emoji)} style={styles.categoryContainer} - size={emojisPerRow} width={width} baseUrl={baseUrl} + tabLabel={label} /> ); } render() { const { show, frequentlyUsed } = this.state; - const { tabEmojiStyle } = this.props; + const { tabEmojiStyle, theme } = this.props; if (!show) { return null; } return ( - } - contentProps={scrollProps} - style={styles.background} - > - { - categories.tabs.map((tab, i) => ( - (i === 0 && frequentlyUsed.length === 0) ? null // when no frequentlyUsed don't show the tab - : ( - - {this.renderCategory(tab.category, i)} - - ))) - } - + + } + contentProps={scrollProps} + style={{ backgroundColor: themes[theme].focusedBackground }} + > + { + categories.tabs.map((tab, i) => ( + (i === 0 && frequentlyUsed.length === 0) ? null // when no frequentlyUsed don't show the tab + : ( + this.renderCategory(tab.category, i, tab.tabLabel) + ))) + } + + ); } } @@ -186,4 +188,4 @@ const mapStateToProps = state => ({ customEmojis: state.customEmojis }); -export default connect(mapStateToProps)(EmojiPicker); +export default connect(mapStateToProps)(withTheme(EmojiPicker)); diff --git a/app/containers/EmojiPicker/styles.js b/app/containers/EmojiPicker/styles.js index d4e993f50b..f7fdbfdef2 100644 --- a/app/containers/EmojiPicker/styles.js +++ b/app/containers/EmojiPicker/styles.js @@ -1,10 +1,6 @@ import { StyleSheet } from 'react-native'; -import { COLOR_PRIMARY, COLOR_WHITE } from '../../constants/colors'; export default StyleSheet.create({ - background: { - backgroundColor: COLOR_WHITE - }, container: { flex: 1 }, @@ -28,7 +24,6 @@ export default StyleSheet.create({ left: 0, right: 0, height: 2, - backgroundColor: COLOR_PRIMARY, bottom: 0 }, tabLine: { @@ -51,11 +46,10 @@ export default StyleSheet.create({ flex: 1 }, categoryEmoji: { - color: 'black', backgroundColor: 'transparent', textAlign: 'center' }, customCategoryEmoji: { - margin: 4 + margin: 8 } }); diff --git a/app/containers/FileModal.js b/app/containers/FileModal.js index bf7e53ec9e..2943afa4ff 100644 --- a/app/containers/FileModal.js +++ b/app/containers/FileModal.js @@ -1,6 +1,6 @@ import React, { useState } from 'react'; import { - View, Text, TouchableWithoutFeedback, ActivityIndicator, StyleSheet, SafeAreaView + View, Text, TouchableWithoutFeedback, StyleSheet, SafeAreaView } from 'react-native'; import FastImage from 'react-native-fast-image'; import PropTypes from 'prop-types'; @@ -9,8 +9,10 @@ import ImageViewer from 'react-native-image-zoom-viewer'; import { Video } from 'expo-av'; import sharedStyles from '../views/Styles'; -import { COLOR_WHITE } from '../constants/colors'; import { formatAttachmentUrl } from '../lib/utils'; +import ActivityIndicator from './ActivityIndicator'; +import { themes } from '../constants/colors'; +import { withTheme } from '../theme'; const styles = StyleSheet.create({ safeArea: { @@ -25,40 +27,22 @@ const styles = StyleSheet.create({ marginVertical: 10 }, title: { - color: COLOR_WHITE, textAlign: 'center', fontSize: 16, ...sharedStyles.textSemibold }, description: { - color: COLOR_WHITE, textAlign: 'center', fontSize: 14, ...sharedStyles.textMedium }, - indicator: { - flex: 1 - }, video: { flex: 1 - }, - loading: { - position: 'absolute', - left: 0, - right: 0, - top: 0, - bottom: 0, - alignItems: 'center', - justifyContent: 'center' } }); -const Indicator = React.memo(() => ( - -)); - const ModalContent = React.memo(({ - attachment, onClose, user, baseUrl + attachment, onClose, user, baseUrl, theme }) => { if (attachment && attachment.image_url) { const url = formatAttachmentUrl(attachment.image_url, user.id, user.token, baseUrl); @@ -66,8 +50,8 @@ const ModalContent = React.memo(({ - {attachment.title} - {attachment.description ? {attachment.description} : null} + {attachment.title} + {attachment.description ? {attachment.description} : null} null} renderImage={props => } - loadingRender={() => } + loadingRender={() => } /> ); @@ -102,7 +86,7 @@ const ModalContent = React.memo(({ onLoadStart={() => setLoading(true)} onError={console.log} /> - { loading ? : null } + { loading ? : null } ); } @@ -110,7 +94,7 @@ const ModalContent = React.memo(({ }); const FileModal = React.memo(({ - isVisible, onClose, attachment, user, baseUrl + isVisible, onClose, attachment, user, baseUrl, theme }) => ( - + -), (prevProps, nextProps) => prevProps.isVisible === nextProps.isVisible && prevProps.loading === nextProps.loading); +), (prevProps, nextProps) => ( + prevProps.isVisible === nextProps.isVisible && prevProps.loading === nextProps.loading && prevProps.theme === nextProps.theme +)); FileModal.propTypes = { isVisible: PropTypes.bool, attachment: PropTypes.object, user: PropTypes.object, baseUrl: PropTypes.string, + theme: PropTypes.string, onClose: PropTypes.func }; FileModal.displayName = 'FileModal'; @@ -137,8 +124,9 @@ ModalContent.propTypes = { attachment: PropTypes.object, user: PropTypes.object, baseUrl: PropTypes.string, + theme: PropTypes.string, onClose: PropTypes.func }; ModalContent.displayName = 'FileModalContent'; -export default FileModal; +export default withTheme(FileModal); diff --git a/app/containers/HeaderButton.js b/app/containers/HeaderButton.js index 7741cafa15..bb233c0a04 100644 --- a/app/containers/HeaderButton.js +++ b/app/containers/HeaderButton.js @@ -3,16 +3,25 @@ import PropTypes from 'prop-types'; import { HeaderButtons, HeaderButton, Item } from 'react-navigation-header-buttons'; import { CustomIcon } from '../lib/Icons'; -import { isIOS } from '../utils/deviceInfo'; -import { COLOR_PRIMARY, COLOR_WHITE } from '../constants/colors'; +import { isIOS, isAndroid } from '../utils/deviceInfo'; +import { themes } from '../constants/colors'; import I18n from '../i18n'; +import { withTheme } from '../theme'; -const color = isIOS ? COLOR_PRIMARY : COLOR_WHITE; export const headerIconSize = 23; -const CustomHeaderButton = React.memo(props => ( - -)); +const CustomHeaderButton = React.memo(withTheme(({ theme, ...props }) => ( + +))); export const CustomHeaderButtons = React.memo(props => ( ( navigation.navigate('LegalView')} testID={testID} /> )); +CustomHeaderButton.propTypes = { + theme: PropTypes.string +}; DrawerButton.propTypes = { navigation: PropTypes.object.isRequired, testID: PropTypes.string.isRequired diff --git a/app/containers/ListItem.js b/app/containers/ListItem.js index 0693293432..dcdaa65851 100644 --- a/app/containers/ListItem.js +++ b/app/containers/ListItem.js @@ -1,9 +1,9 @@ import React from 'react'; import { View, Text, StyleSheet } from 'react-native'; import PropTypes from 'prop-types'; -import { RectButton } from 'react-native-gesture-handler'; -import { COLOR_TEXT } from '../constants/colors'; +import Touch from '../utils/touch'; +import { themes } from '../constants/colors'; import sharedStyles from '../views/Styles'; const styles = StyleSheet.create({ @@ -12,7 +12,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'center', - height: 56, + height: 46, paddingHorizontal: 15 }, disabled: { @@ -24,24 +24,22 @@ const styles = StyleSheet.create({ }, title: { fontSize: 16, - ...sharedStyles.textColorNormal, ...sharedStyles.textRegular }, subtitle: { fontSize: 14, - ...sharedStyles.textColorNormal, ...sharedStyles.textRegular } }); const Content = React.memo(({ - title, subtitle, disabled, testID, right + title, subtitle, disabled, testID, right, color, theme }) => ( - {title} + {title} {subtitle - ? {subtitle} + ? {subtitle} : null } @@ -52,25 +50,30 @@ const Content = React.memo(({ const Button = React.memo(({ onPress, ...props }) => ( - - + )); const Item = React.memo(({ ...props }) => { if (props.onPress) { return ); } return ( - ); -}, (prevProps, nextProps) => equal(prevProps.file, nextProps.file)); +}, (prevProps, nextProps) => equal(prevProps.file, nextProps.file) && prevProps.split === nextProps.split && prevProps.theme === nextProps.theme); ImageContainer.propTypes = { file: PropTypes.object, @@ -61,19 +66,24 @@ ImageContainer.propTypes = { user: PropTypes.object, useMarkdown: PropTypes.bool, onOpenFileModal: PropTypes.func, - getCustomEmoji: PropTypes.func + theme: PropTypes.string, + getCustomEmoji: PropTypes.func, + split: PropTypes.bool }; ImageContainer.displayName = 'MessageImageContainer'; Image.propTypes = { - img: PropTypes.string + img: PropTypes.string, + theme: PropTypes.string }; ImageContainer.displayName = 'MessageImage'; Button.propTypes = { children: PropTypes.node, - onPress: PropTypes.func + onPress: PropTypes.func, + theme: PropTypes.string, + split: PropTypes.bool }; ImageContainer.displayName = 'MessageButton'; -export default ImageContainer; +export default withSplit(ImageContainer); diff --git a/app/containers/message/Message.js b/app/containers/message/Message.js index e26040d5a9..dc2bb6b8ea 100644 --- a/app/containers/message/Message.js +++ b/app/containers/message/Message.js @@ -5,7 +5,6 @@ import Touchable from 'react-native-platform-touchable'; import User from './User'; import styles from './styles'; -import sharedStyles from '../../views/Styles'; import RepliedThread from './RepliedThread'; import MessageAvatar from './MessageAvatar'; import Attachments from './Attachments'; @@ -52,11 +51,11 @@ MessageInner.displayName = 'MessageInner'; const Message = React.memo((props) => { if (props.isThreadReply || props.isThreadSequential || props.isInfo) { - const thread = props.isThreadReply ? : null; + const thread = props.isThreadReply ? : null; return ( {thread} - + { @@ -134,7 +134,8 @@ Message.propTypes = { onLongPress: PropTypes.func, onPress: PropTypes.func, isReadReceiptEnabled: PropTypes.bool, - unread: PropTypes.bool + unread: PropTypes.bool, + theme: PropTypes.string }; MessageInner.propTypes = { diff --git a/app/containers/message/MessageError.js b/app/containers/message/MessageError.js index 0392e64435..d30e409966 100644 --- a/app/containers/message/MessageError.js +++ b/app/containers/message/MessageError.js @@ -3,24 +3,25 @@ import Touchable from 'react-native-platform-touchable'; import PropTypes from 'prop-types'; import { CustomIcon } from '../../lib/Icons'; -import { COLOR_DANGER } from '../../constants/colors'; import styles from './styles'; import { BUTTON_HIT_SLOP } from './utils'; +import { themes } from '../../constants/colors'; -const MessageError = React.memo(({ hasError, onErrorPress }) => { +const MessageError = React.memo(({ hasError, onErrorPress, theme }) => { if (!hasError) { return null; } return ( - + ); -}, (prevProps, nextProps) => prevProps.hasError === nextProps.hasError); +}, (prevProps, nextProps) => prevProps.hasError === nextProps.hasError && prevProps.theme === nextProps.theme); MessageError.propTypes = { hasError: PropTypes.bool, - onErrorPress: PropTypes.func + onErrorPress: PropTypes.func, + theme: PropTypes.string }; MessageError.displayName = 'MessageError'; diff --git a/app/containers/message/Reactions.js b/app/containers/message/Reactions.js index e20dd02988..f6fab3457d 100644 --- a/app/containers/message/Reactions.js +++ b/app/containers/message/Reactions.js @@ -7,24 +7,26 @@ import { CustomIcon } from '../../lib/Icons'; import styles from './styles'; import Emoji from './Emoji'; import { BUTTON_HIT_SLOP } from './utils'; +import { themes } from '../../constants/colors'; +import { withTheme } from '../../theme'; -const AddReaction = React.memo(({ reactionInit }) => ( +const AddReaction = React.memo(({ reactionInit, theme }) => ( - - + + )); const Reaction = React.memo(({ - reaction, user, onReactionLongPress, onReactionPress, baseUrl, getCustomEmoji + reaction, user, onReactionLongPress, onReactionPress, baseUrl, getCustomEmoji, theme }) => { const reacted = reaction.usernames.findIndex(item => item === user.username) !== -1; return ( @@ -33,11 +35,11 @@ const Reaction = React.memo(({ onLongPress={onReactionLongPress} key={reaction.emoji} testID={`message-reaction-${ reaction.emoji }`} - style={[styles.reactionButton, reacted && styles.reactionButtonReacted]} - background={Touchable.Ripple('#fff')} + style={[styles.reactionButton, { backgroundColor: reacted ? themes[theme].bannerBackground : themes[theme].backgroundColor }]} + background={Touchable.Ripple(themes[theme].bannerBackground)} hitSlop={BUTTON_HIT_SLOP} > - + - { reaction.usernames.length } + { reaction.usernames.length } ); }); const Reactions = React.memo(({ - reactions, user, baseUrl, onReactionPress, reactionInit, onReactionLongPress, getCustomEmoji + reactions, user, baseUrl, onReactionPress, reactionInit, onReactionLongPress, getCustomEmoji, theme }) => { if (!reactions || reactions.length === 0) { return null; @@ -68,9 +70,10 @@ const Reactions = React.memo(({ onReactionLongPress={onReactionLongPress} onReactionPress={onReactionPress} getCustomEmoji={getCustomEmoji} + theme={theme} /> ))} - + ); }); @@ -81,7 +84,8 @@ Reaction.propTypes = { baseUrl: PropTypes.string, onReactionPress: PropTypes.func, onReactionLongPress: PropTypes.func, - getCustomEmoji: PropTypes.func + getCustomEmoji: PropTypes.func, + theme: PropTypes.string }; Reaction.displayName = 'MessageReaction'; @@ -92,13 +96,15 @@ Reactions.propTypes = { onReactionPress: PropTypes.func, reactionInit: PropTypes.func, onReactionLongPress: PropTypes.func, - getCustomEmoji: PropTypes.func + getCustomEmoji: PropTypes.func, + theme: PropTypes.string }; Reactions.displayName = 'MessageReactions'; AddReaction.propTypes = { - reactionInit: PropTypes.func + reactionInit: PropTypes.func, + theme: PropTypes.string }; AddReaction.displayName = 'MessageAddReaction'; -export default Reactions; +export default withTheme(Reactions); diff --git a/app/containers/message/ReadReceipt.js b/app/containers/message/ReadReceipt.js index c407e021d6..5ca392f6d1 100644 --- a/app/containers/message/ReadReceipt.js +++ b/app/containers/message/ReadReceipt.js @@ -1,13 +1,13 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { COLOR_PRIMARY } from '../../constants/colors'; +import { themes } from '../../constants/colors'; import { CustomIcon } from '../../lib/Icons'; import styles from './styles'; -const ReadReceipt = React.memo(({ isReadReceiptEnabled, unread }) => { +const ReadReceipt = React.memo(({ isReadReceiptEnabled, unread, theme }) => { if (isReadReceiptEnabled && !unread && unread !== null) { - return ; + return ; } return null; }); @@ -15,7 +15,8 @@ ReadReceipt.displayName = 'MessageReadReceipt'; ReadReceipt.propTypes = { isReadReceiptEnabled: PropTypes.bool, - unread: PropTypes.bool + unread: PropTypes.bool, + theme: PropTypes.bool }; export default ReadReceipt; diff --git a/app/containers/message/RepliedThread.js b/app/containers/message/RepliedThread.js index 7a6f17b7f3..25a5721881 100644 --- a/app/containers/message/RepliedThread.js +++ b/app/containers/message/RepliedThread.js @@ -7,11 +7,12 @@ import PropTypes from 'prop-types'; import { CustomIcon } from '../../lib/Icons'; import DisclosureIndicator from '../DisclosureIndicator'; import styles from './styles'; +import { themes } from '../../constants/colors'; const RepliedThread = React.memo(({ - tmid, tmsg, isHeader, isTemp, fetchThreadName, id + tmid, tmsg, isHeader, fetchThreadName, id, theme }) => { - if (!tmid || !isHeader || isTemp) { + if (!tmid || !isHeader) { return null; } @@ -25,9 +26,9 @@ const RepliedThread = React.memo(({ return ( - - {msg} - + + {msg} + ); }, (prevProps, nextProps) => { @@ -40,7 +41,7 @@ const RepliedThread = React.memo(({ if (prevProps.isHeader !== nextProps.isHeader) { return false; } - if (prevProps.isTemp !== nextProps.isTemp) { + if (prevProps.theme !== nextProps.theme) { return false; } return true; @@ -51,7 +52,7 @@ RepliedThread.propTypes = { tmsg: PropTypes.string, id: PropTypes.string, isHeader: PropTypes.bool, - isTemp: PropTypes.bool, + theme: PropTypes.string, fetchThreadName: PropTypes.func }; RepliedThread.displayName = 'MessageRepliedThread'; diff --git a/app/containers/message/Reply.js b/app/containers/message/Reply.js index 4b2af8e580..58bf14f81d 100644 --- a/app/containers/message/Reply.js +++ b/app/containers/message/Reply.js @@ -8,7 +8,8 @@ import isEqual from 'deep-equal'; import Markdown from '../markdown'; import openLink from '../../utils/openLink'; import sharedStyles from '../../views/Styles'; -import { COLOR_BACKGROUND_CONTAINER, COLOR_BORDER } from '../../constants/colors'; +import { themes } from '../../constants/colors'; +import { withSplit } from '../../split'; const styles = StyleSheet.create({ button: { @@ -16,9 +17,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', marginTop: 6, - alignSelf: 'flex-end', - backgroundColor: COLOR_BACKGROUND_CONTAINER, - borderColor: COLOR_BORDER, + alignSelf: 'flex-start', borderWidth: 1, borderRadius: 4 }, @@ -36,13 +35,11 @@ const styles = StyleSheet.create({ author: { flex: 1, fontSize: 16, - ...sharedStyles.textColorNormal, ...sharedStyles.textMedium }, time: { fontSize: 12, marginLeft: 10, - ...sharedStyles.textColorDescription, ...sharedStyles.textRegular, fontWeight: '300' }, @@ -57,12 +54,10 @@ const styles = StyleSheet.create({ }, fieldTitle: { fontSize: 14, - ...sharedStyles.textColorNormal, ...sharedStyles.textSemibold }, fieldValue: { fontSize: 14, - ...sharedStyles.textColorNormal, ...sharedStyles.textRegular }, marginTop: { @@ -70,21 +65,21 @@ const styles = StyleSheet.create({ } }); -const Title = React.memo(({ attachment, timeFormat }) => { +const Title = React.memo(({ attachment, timeFormat, theme }) => { if (!attachment.author_name) { return null; } const time = attachment.ts ? moment(attachment.ts).format(timeFormat) : null; return ( - {attachment.author_name ? {attachment.author_name} : null} - {time ? { time } : null} + {attachment.author_name ? {attachment.author_name} : null} + {time ? { time } : null} ); -}, () => true); +}); const Description = React.memo(({ - attachment, baseUrl, user, getCustomEmoji, useMarkdown + attachment, baseUrl, user, getCustomEmoji, useMarkdown, theme }) => { const text = attachment.text || attachment.title; if (!text) { @@ -97,6 +92,7 @@ const Description = React.memo(({ username={user.username} getCustomEmoji={getCustomEmoji} useMarkdown={useMarkdown} + theme={theme} /> ); }, (prevProps, nextProps) => { @@ -106,10 +102,13 @@ const Description = React.memo(({ if (prevProps.attachment.title !== nextProps.attachment.title) { return false; } + if (prevProps.theme !== nextProps.theme) { + return false; + } return true; }); -const Fields = React.memo(({ attachment }) => { +const Fields = React.memo(({ attachment, theme }) => { if (!attachment.fields) { return null; } @@ -117,16 +116,16 @@ const Fields = React.memo(({ attachment }) => { {attachment.fields.map(field => ( - {field.title} - {field.value} + {field.title} + {field.value} ))} ); -}, (prevProps, nextProps) => isEqual(prevProps.attachment.fields, nextProps.attachment.fields)); +}, (prevProps, nextProps) => isEqual(prevProps.attachment.fields, nextProps.attachment.fields) && prevProps.theme === nextProps.theme); const Reply = React.memo(({ - attachment, timeFormat, baseUrl, user, index, getCustomEmoji, useMarkdown + attachment, timeFormat, baseUrl, user, index, getCustomEmoji, useMarkdown, split, theme }) => { if (!attachment) { return null; @@ -140,17 +139,25 @@ const Reply = React.memo(({ if (attachment.type === 'file') { url = `${ baseUrl }${ url }?rc_uid=${ user.id }&rc_token=${ user.token }`; } - openLink(url); + openLink(url, theme); }; return ( 0 && styles.marginTop]} - background={Touchable.Ripple('#fff')} + style={[ + styles.button, + index > 0 && styles.marginTop, + { + backgroundColor: themes[theme].chatComponentBackground, + borderColor: themes[theme].borderColor + }, + split && sharedStyles.tabletContent + ]} + background={Touchable.Ripple(themes[theme].bannerBackground)} > - + <Title attachment={attachment} timeFormat={timeFormat} theme={theme} /> <Description attachment={attachment} timeFormat={timeFormat} @@ -158,12 +165,13 @@ const Reply = React.memo(({ user={user} getCustomEmoji={getCustomEmoji} useMarkdown={useMarkdown} + theme={theme} /> - <Fields attachment={attachment} /> + <Fields attachment={attachment} theme={theme} /> </View> </Touchable> ); -}, (prevProps, nextProps) => isEqual(prevProps.attachment, nextProps.attachment)); +}, (prevProps, nextProps) => isEqual(prevProps.attachment, nextProps.attachment) && prevProps.split === nextProps.split && prevProps.theme === nextProps.theme); Reply.propTypes = { attachment: PropTypes.object, @@ -172,13 +180,16 @@ Reply.propTypes = { user: PropTypes.object, index: PropTypes.number, useMarkdown: PropTypes.bool, - getCustomEmoji: PropTypes.func + theme: PropTypes.string, + getCustomEmoji: PropTypes.func, + split: PropTypes.bool }; Reply.displayName = 'MessageReply'; Title.propTypes = { attachment: PropTypes.object, - timeFormat: PropTypes.string + timeFormat: PropTypes.string, + theme: PropTypes.string }; Title.displayName = 'MessageReplyTitle'; @@ -187,13 +198,15 @@ Description.propTypes = { baseUrl: PropTypes.string, user: PropTypes.object, useMarkdown: PropTypes.bool, - getCustomEmoji: PropTypes.func + getCustomEmoji: PropTypes.func, + theme: PropTypes.string }; Description.displayName = 'MessageReplyDescription'; Fields.propTypes = { - attachment: PropTypes.object + attachment: PropTypes.object, + theme: PropTypes.string }; Fields.displayName = 'MessageReplyFields'; -export default Reply; +export default withSplit(Reply); diff --git a/app/containers/message/Thread.js b/app/containers/message/Thread.js index c274734893..f72a429b6d 100644 --- a/app/containers/message/Thread.js +++ b/app/containers/message/Thread.js @@ -6,9 +6,10 @@ import { formatLastMessage, formatMessageCount } from './utils'; import styles from './styles'; import { CustomIcon } from '../../lib/Icons'; import { THREAD } from './constants'; +import { themes } from '../../constants/colors'; const Thread = React.memo(({ - msg, tcount, tlm, customThreadTimeFormat, isThreadRoom + msg, tcount, tlm, customThreadTimeFormat, isThreadRoom, theme }) => { if (!tlm || isThreadRoom || tcount === 0) { return null; @@ -19,25 +20,29 @@ const Thread = React.memo(({ return ( <View style={styles.buttonContainer}> <View - style={[styles.button, styles.smallButton]} + style={[styles.button, styles.smallButton, { backgroundColor: themes[theme].tintColor }]} testID={`message-thread-button-${ msg }`} > - <CustomIcon name='thread' size={20} style={styles.buttonIcon} /> - <Text style={styles.buttonText}>{buttonText}</Text> + <CustomIcon name='thread' size={20} style={[styles.buttonIcon, { color: themes[theme].buttonText }]} /> + <Text style={[styles.buttonText, { color: themes[theme].buttonText }]}>{buttonText}</Text> </View> - <Text style={styles.time}>{time}</Text> + <Text style={[styles.time, { color: themes[theme].auxiliaryText }]}>{time}</Text> </View> ); }, (prevProps, nextProps) => { if (prevProps.tcount !== nextProps.tcount) { return false; } + if (prevProps.theme !== nextProps.theme) { + return false; + } return true; }); Thread.propTypes = { msg: PropTypes.string, tcount: PropTypes.string, + theme: PropTypes.string, tlm: PropTypes.string, customThreadTimeFormat: PropTypes.string, isThreadRoom: PropTypes.bool diff --git a/app/containers/message/Urls.js b/app/containers/message/Urls.js index 0275996a9b..4c67faa7bd 100644 --- a/app/containers/message/Urls.js +++ b/app/containers/message/Urls.js @@ -7,9 +7,9 @@ import isEqual from 'lodash/isEqual'; import openLink from '../../utils/openLink'; import sharedStyles from '../../views/Styles'; -import { - COLOR_BACKGROUND_CONTAINER, COLOR_BORDER, COLOR_PRIMARY -} from '../../constants/colors'; +import { themes } from '../../constants/colors'; +import { withTheme } from '../../theme'; +import { withSplit } from '../../split'; const styles = StyleSheet.create({ button: { @@ -19,8 +19,6 @@ const styles = StyleSheet.create({ flex: 1, flexDirection: 'column', borderRadius: 4, - backgroundColor: COLOR_BACKGROUND_CONTAINER, - borderColor: COLOR_BORDER, borderWidth: 1 }, textContainer: { @@ -31,13 +29,11 @@ const styles = StyleSheet.create({ alignItems: 'flex-start' }, title: { - color: COLOR_PRIMARY, fontSize: 16, ...sharedStyles.textMedium }, description: { fontSize: 16, - ...sharedStyles.textColorDescription, ...sharedStyles.textRegular }, marginTop: { @@ -59,10 +55,10 @@ const UrlImage = React.memo(({ image, user, baseUrl }) => { return <FastImage source={{ uri: image }} style={styles.image} resizeMode={FastImage.resizeMode.cover} />; }, (prevProps, nextProps) => prevProps.image === nextProps.image); -const UrlContent = React.memo(({ title, description }) => ( +const UrlContent = React.memo(({ title, description, theme }) => ( <View style={styles.textContainer}> - {title ? <Text style={styles.title} numberOfLines={2}>{title}</Text> : null} - {description ? <Text style={styles.description} numberOfLines={2}>{description}</Text> : null} + {title ? <Text style={[styles.title, { color: themes[theme].tintColor }]} numberOfLines={2}>{title}</Text> : null} + {description ? <Text style={[styles.description, { color: themes[theme].auxiliaryText }]} numberOfLines={2}>{description}</Text> : null} </View> ), (prevProps, nextProps) => { if (prevProps.title !== nextProps.title) { @@ -71,41 +67,55 @@ const UrlContent = React.memo(({ title, description }) => ( if (prevProps.description !== nextProps.description) { return false; } + if (prevProps.theme !== nextProps.theme) { + return false; + } return true; }); const Url = React.memo(({ - url, index, user, baseUrl + url, index, user, baseUrl, split, theme }) => { if (!url) { return null; } - const onPress = () => openLink(url.url); + const onPress = () => openLink(url.url, theme); return ( <Touchable onPress={onPress} - style={[styles.button, index > 0 && styles.marginTop, styles.container]} - background={Touchable.Ripple('#fff')} + style={[ + styles.button, + index > 0 && styles.marginTop, + styles.container, + { + backgroundColor: themes[theme].chatComponentBackground, + borderColor: themes[theme].borderColor + }, + split && sharedStyles.tabletContent + ]} + background={Touchable.Ripple(themes[theme].bannerBackground)} > <> <UrlImage image={url.image} user={user} baseUrl={baseUrl} /> - <UrlContent title={url.title} description={url.description} /> + <UrlContent title={url.title} description={url.description} theme={theme} /> </> </Touchable> ); -}, (oldProps, newProps) => isEqual(oldProps.url, newProps.url)); +}, (oldProps, newProps) => isEqual(oldProps.url, newProps.url) && oldProps.split === newProps.split && oldProps.theme === newProps.theme); -const Urls = React.memo(({ urls, user, baseUrl }) => { +const Urls = React.memo(({ + urls, user, baseUrl, split, theme +}) => { if (!urls || urls.length === 0) { return null; } return urls.map((url, index) => ( - <Url url={url} key={url.url} index={index} user={user} baseUrl={baseUrl} /> + <Url url={url} key={url.url} index={index} user={user} baseUrl={baseUrl} split={split} theme={theme} /> )); -}, (oldProps, newProps) => isEqual(oldProps.urls, newProps.urls)); +}, (oldProps, newProps) => isEqual(oldProps.urls, newProps.urls) && oldProps.split === newProps.split && oldProps.theme === newProps.theme); UrlImage.propTypes = { image: PropTypes.string, @@ -116,7 +126,8 @@ UrlImage.displayName = 'MessageUrlImage'; UrlContent.propTypes = { title: PropTypes.string, - description: PropTypes.string + description: PropTypes.string, + theme: PropTypes.string }; UrlContent.displayName = 'MessageUrlContent'; @@ -124,15 +135,19 @@ Url.propTypes = { url: PropTypes.object.isRequired, index: PropTypes.number, user: PropTypes.object, - baseUrl: PropTypes.string + baseUrl: PropTypes.string, + theme: PropTypes.string, + split: PropTypes.bool }; Url.displayName = 'MessageUrl'; Urls.propTypes = { urls: PropTypes.array, user: PropTypes.object, - baseUrl: PropTypes.string + baseUrl: PropTypes.string, + theme: PropTypes.string, + split: PropTypes.bool }; Urls.displayName = 'MessageUrls'; -export default Urls; +export default withTheme(withSplit(Urls)); diff --git a/app/containers/message/User.js b/app/containers/message/User.js index 54634f08e1..7795f2c555 100644 --- a/app/containers/message/User.js +++ b/app/containers/message/User.js @@ -3,6 +3,9 @@ import PropTypes from 'prop-types'; import { View, Text, StyleSheet } from 'react-native'; import moment from 'moment'; +import { themes } from '../../constants/colors'; +import { withTheme } from '../../theme'; + import MessageError from './MessageError'; import sharedStyles from '../../views/Styles'; import messageStyles from './styles'; @@ -16,7 +19,6 @@ const styles = StyleSheet.create({ username: { fontSize: 16, lineHeight: 22, - ...sharedStyles.textColorNormal, ...sharedStyles.textMedium }, titleContainer: { @@ -26,29 +28,28 @@ const styles = StyleSheet.create({ }, alias: { fontSize: 14, - ...sharedStyles.textColorDescription, ...sharedStyles.textRegular } }); const User = React.memo(({ - isHeader, useRealName, author, alias, ts, timeFormat, hasError, ...props + isHeader, useRealName, author, alias, ts, timeFormat, hasError, theme, ...props }) => { if (isHeader || hasError) { const username = (useRealName && author.name) || author.username; - const aliasUsername = alias ? (<Text style={styles.alias}> @{username}</Text>) : null; + const aliasUsername = alias ? (<Text style={[styles.alias, { color: themes[theme].auxiliaryText }]}> @{username}</Text>) : null; const time = moment(ts).format(timeFormat); return ( <View style={styles.container}> <View style={styles.titleContainer}> - <Text style={styles.username} numberOfLines={1}> + <Text style={[styles.username, { color: themes[theme].titleText }]} numberOfLines={1}> {alias || username} {aliasUsername} </Text> </View> - <Text style={messageStyles.time}>{time}</Text> - { hasError && <MessageError hasError={hasError} {...props} /> } + <Text style={[messageStyles.time, { color: themes[theme].auxiliaryText }]}>{time}</Text> + { hasError && <MessageError hasError={hasError} theme={theme} {...props} /> } </View> ); } @@ -62,8 +63,9 @@ User.propTypes = { author: PropTypes.object, alias: PropTypes.string, ts: PropTypes.instanceOf(Date), - timeFormat: PropTypes.string + timeFormat: PropTypes.string, + theme: PropTypes.string }; User.displayName = 'MessageUser'; -export default User; +export default withTheme(User); diff --git a/app/containers/message/Video.js b/app/containers/message/Video.js index 74cedca680..4f85b27350 100644 --- a/app/containers/message/Video.js +++ b/app/containers/message/Video.js @@ -6,9 +6,11 @@ import isEqual from 'deep-equal'; import Markdown from '../markdown'; import openLink from '../../utils/openLink'; -import { isIOS } from '../../utils/deviceInfo'; +import { isIOS, isTablet } from '../../utils/deviceInfo'; import { CustomIcon } from '../../lib/Icons'; import { formatAttachmentUrl } from '../../lib/utils'; +import { themes } from '../../constants/colors'; +import sharedStyles from '../../views/Styles'; const SUPPORTED_TYPES = ['video/quicktime', 'video/mp4', ...(isIOS ? [] : ['video/3gp', 'video/mkv'])]; const isTypeSupported = type => SUPPORTED_TYPES.indexOf(type) !== -1; @@ -18,22 +20,14 @@ const styles = StyleSheet.create({ flex: 1, borderRadius: 4, height: 150, - backgroundColor: '#1f2329', marginBottom: 6, alignItems: 'center', justifyContent: 'center' - }, - modal: { - margin: 0, - backgroundColor: '#000' - }, - image: { - color: 'white' } }); const Video = React.memo(({ - file, baseUrl, user, useMarkdown, onOpenFileModal, getCustomEmoji + file, baseUrl, user, useMarkdown, onOpenFileModal, getCustomEmoji, theme }) => { if (!baseUrl) { return null; @@ -44,26 +38,26 @@ const Video = React.memo(({ return onOpenFileModal(file); } const uri = formatAttachmentUrl(file.video_url, user.id, user.token, baseUrl); - openLink(uri); + openLink(uri, theme); }; return ( <> <Touchable onPress={onPress} - style={styles.button} - background={Touchable.Ripple('#fff')} + style={[styles.button, { backgroundColor: themes[theme].videoBackground }, isTablet && sharedStyles.tabletContent]} + background={Touchable.Ripple(themes[theme].bannerBackground)} > <CustomIcon name='play' size={54} - style={styles.image} + color={themes[theme].buttonText} /> </Touchable> - <Markdown msg={file.description} baseUrl={baseUrl} username={user.username} getCustomEmoji={getCustomEmoji} useMarkdown={useMarkdown} /> + <Markdown msg={file.description} baseUrl={baseUrl} username={user.username} getCustomEmoji={getCustomEmoji} useMarkdown={useMarkdown} theme={theme} /> </> ); -}, (prevProps, nextProps) => isEqual(prevProps.file, nextProps.file)); +}, (prevProps, nextProps) => isEqual(prevProps.file, nextProps.file) && prevProps.theme === nextProps.theme); Video.propTypes = { file: PropTypes.object, @@ -71,7 +65,8 @@ Video.propTypes = { user: PropTypes.object, useMarkdown: PropTypes.bool, onOpenFileModal: PropTypes.func, - getCustomEmoji: PropTypes.func + getCustomEmoji: PropTypes.func, + theme: PropTypes.string }; export default Video; diff --git a/app/containers/message/index.js b/app/containers/message/index.js index 1aef420aad..3602d2682c 100644 --- a/app/containers/message/index.js +++ b/app/containers/message/index.js @@ -6,8 +6,9 @@ import Message from './Message'; import debounce from '../../utils/debounce'; import { SYSTEM_MESSAGES, getMessageTranslation } from './utils'; import messagesStatus from '../../constants/messagesStatus'; +import { withTheme } from '../../theme'; -export default class MessageContainer extends React.Component { +class MessageContainer extends React.Component { static propTypes = { item: PropTypes.object.isRequired, user: PropTypes.shape({ @@ -42,13 +43,15 @@ export default class MessageContainer extends React.Component { onOpenFileModal: PropTypes.func, onReactionLongPress: PropTypes.func, navToRoomInfo: PropTypes.func, - callJitsi: PropTypes.func + callJitsi: PropTypes.func, + theme: PropTypes.string } static defaultProps = { onLongPress: () => {}, archived: false, - broadcast: false + broadcast: false, + theme: 'light' } componentDidMount() { @@ -61,7 +64,11 @@ export default class MessageContainer extends React.Component { } } - shouldComponentUpdate() { + shouldComponentUpdate(nextProps) { + const { theme } = this.props; + if (nextProps.theme !== theme) { + return true; + } return false; } @@ -205,7 +212,7 @@ export default class MessageContainer extends React.Component { render() { const { - item, user, style, archived, baseUrl, useRealName, broadcast, fetchThreadName, customThreadTimeFormat, onOpenFileModal, timeFormat, useMarkdown, isReadReceiptEnabled, autoTranslateRoom, autoTranslateLanguage, navToRoomInfo, getCustomEmoji, isThreadRoom, callJitsi + item, user, style, archived, baseUrl, useRealName, broadcast, fetchThreadName, customThreadTimeFormat, onOpenFileModal, timeFormat, useMarkdown, isReadReceiptEnabled, autoTranslateRoom, autoTranslateLanguage, navToRoomInfo, getCustomEmoji, isThreadRoom, callJitsi, theme } = this.props; const { id, msg, ts, attachments, urls, reactions, t, avatar, u, alias, editedBy, role, drid, dcount, dlm, tmid, tcount, tlm, tmsg, mentions, channels, unread, autoTranslate: autoTranslateMessage @@ -272,7 +279,10 @@ export default class MessageContainer extends React.Component { getCustomEmoji={getCustomEmoji} navToRoomInfo={navToRoomInfo} callJitsi={callJitsi} + theme={theme} /> ); } } + +export default withTheme(MessageContainer); diff --git a/app/containers/message/styles.js b/app/containers/message/styles.js index 3113f542a2..6b8559ab7b 100644 --- a/app/containers/message/styles.js +++ b/app/containers/message/styles.js @@ -1,9 +1,7 @@ import { StyleSheet } from 'react-native'; import sharedStyles from '../../views/Styles'; -import { - COLOR_BORDER, COLOR_PRIMARY, COLOR_WHITE -} from '../../constants/colors'; +import { isTablet } from '../../utils/deviceInfo'; export default StyleSheet.create({ root: { @@ -25,6 +23,9 @@ export default StyleSheet.create({ messageContentWithError: { marginLeft: 0 }, + center: { + alignItems: 'center' + }, flex: { flexDirection: 'row' // flex: 1 @@ -43,27 +44,19 @@ export default StyleSheet.create({ marginBottom: 6, borderRadius: 2 }, - reactionButtonReacted: { - backgroundColor: '#e8f2ff' - }, reactionContainer: { flexDirection: 'row', justifyContent: 'center', alignItems: 'center', borderRadius: 2, borderWidth: 1, - borderColor: COLOR_BORDER, height: 28, minWidth: 46.3 }, - reactedContainer: { - borderColor: COLOR_PRIMARY - }, reactionCount: { fontSize: 14, marginLeft: 3, marginRight: 8.5, - color: COLOR_PRIMARY, ...sharedStyles.textSemibold }, reactionEmoji: { @@ -81,9 +74,6 @@ export default StyleSheet.create({ avatarSmall: { marginLeft: 16 }, - addReaction: { - color: COLOR_PRIMARY - }, errorButton: { paddingLeft: 10, paddingVertical: 5 @@ -99,18 +89,15 @@ export default StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'center', - backgroundColor: COLOR_PRIMARY, borderRadius: 2 }, smallButton: { height: 30 }, buttonIcon: { - color: COLOR_WHITE, marginRight: 6 }, buttonText: { - color: COLOR_WHITE, fontSize: 14, ...sharedStyles.textMedium }, @@ -121,10 +108,9 @@ export default StyleSheet.create({ }, image: { width: '100%', - maxWidth: 400, - minHeight: 200, + // maxWidth: 400, + minHeight: isTablet ? 300 : 200, borderRadius: 4, - borderColor: COLOR_BORDER, borderWidth: 1 }, imagePressed: { @@ -137,27 +123,23 @@ export default StyleSheet.create({ }, text: { fontSize: 16, - ...sharedStyles.textColorNormal, ...sharedStyles.textRegular }, textInfo: { fontStyle: 'italic', fontSize: 16, - ...sharedStyles.textColorDescription, ...sharedStyles.textRegular }, startedDiscussion: { fontStyle: 'italic', fontSize: 16, marginBottom: 6, - ...sharedStyles.textColorDescription, ...sharedStyles.textRegular }, time: { fontSize: 12, paddingLeft: 10, lineHeight: 22, - ...sharedStyles.textColorDescription, ...sharedStyles.textRegular, fontWeight: '300' }, @@ -169,14 +151,12 @@ export default StyleSheet.create({ marginBottom: 12 }, repliedThreadIcon: { - color: COLOR_PRIMARY, marginRight: 10, marginLeft: 16 }, repliedThreadName: { fontSize: 16, flex: 1, - color: COLOR_PRIMARY, ...sharedStyles.textRegular }, readReceipt: { diff --git a/app/i18n/locales/en.js b/app/i18n/locales/en.js index 3455441957..185ae9907d 100644 --- a/app/i18n/locales/en.js +++ b/app/i18n/locales/en.js @@ -95,6 +95,7 @@ export default { announcement: 'announcement', Announcement: 'Announcement', Apply_Your_Certificate: 'Apply Your Certificate', + Applying_a_theme_will_change_how_the_app_looks: 'Applying a theme will change how the app looks.', ARCHIVE: 'ARCHIVE', archive: 'archive', are_typing: 'are typing', @@ -102,11 +103,13 @@ export default { Are_you_sure_you_want_to_leave_the_room: 'Are you sure you want to leave the room {{room}}?', Audio: 'Audio', Authenticating: 'Authenticating', + Automatic: 'Automatic', Auto_Translate: 'Auto-Translate', Avatar_changed_successfully: 'Avatar changed successfully!', Avatar_Url: 'Avatar URL', Away: 'Away', Back: 'Back', + Black: 'Black', Block_user: 'Block user', Broadcast_channel_Description: 'Only authorized users can write new messages, but the other users will be able to reply', Broadcast_Channel: 'Broadcast Channel', @@ -136,6 +139,7 @@ export default { connecting_server: 'connecting to server', Connecting: 'Connecting...', Contact_us: 'Contact us', + Contact_your_server_admin: 'Contact your server admin.', Continue_with: 'Continue with', Copied_to_clipboard: 'Copied to clipboard!', Copy: 'Copy', @@ -147,6 +151,8 @@ export default { Created_snippet: 'Created a snippet', Create_a_new_workspace: 'Create a new workspace', Create: 'Create', + Dark: 'Dark', + Dark_level: 'Dark Level', Default: 'Default', Delete_Room_Warning: 'Deleting a room will delete all messages posted within the room. This cannot be undone.', delete: 'delete', @@ -211,6 +217,7 @@ export default { leaving_room: 'leaving room', leave: 'leave', Legal: 'Legal', + Light: 'Light', License: 'License', Livechat: 'Livechat', Login: 'Login', @@ -257,6 +264,7 @@ export default { No_Reactions: 'No Reactions', No_Read_Receipts: 'No Read Receipts', Not_logged: 'Not logged', + Not_RC_Server: 'This is not a Rocket.Chat server.\n{{contact}}', Nothing: 'Nothing', Nothing_to_save: 'Nothing to save!', Notify_active_in_this_room: 'Notify active users in this room', @@ -277,6 +285,7 @@ export default { pinned: 'pinned', Pinned: 'Pinned', Please_enter_your_password: 'Please enter your password', + Preferences: 'Preferences', Preferences_saved: 'Preferences saved!', Privacy_Policy: ' Privacy Policy', Private_Channel: 'Private Channel', @@ -375,7 +384,7 @@ export default { Tap_to_view_servers_list: 'Tap to view servers list', Terms_of_Service: ' Terms of Service ', Theme: 'Theme', - The_URL_is_invalid: 'The URL you entered is invalid. Check it and try again, please!', + The_URL_is_invalid: 'Invalid URL or unable to establish a secure connection.\n{{contact}}', There_was_an_error_while_action: 'There was an error while {{action}}!', This_room_is_blocked: 'This room is blocked', This_room_is_read_only: 'This room is read only', @@ -420,6 +429,7 @@ export default { Video_call: 'Video call', View_Original: 'View Original', Voice_call: 'Voice call', + Websocket_disabled: 'Websocket is disabled for this server.\n{{contact}}', Welcome: 'Welcome', Welcome_to_RocketChat: 'Welcome to Rocket.Chat', Whats_your_2fa: 'What\'s your 2FA code?', @@ -438,5 +448,19 @@ export default { Version_no: 'Version: {{version}}', You_will_not_be_able_to_recover_this_message: 'You will not be able to recover this message!', Change_Language: 'Change Language', - Crash_report_disclaimer: 'We never track the content of your chats. The crash report only contains relevant information for us in order to identify problems and fix it.' + Crash_report_disclaimer: 'We never track the content of your chats. The crash report only contains relevant information for us in order to identify problems and fix it.', + Type_message: 'Type message', + Room_search: 'Rooms search', + Room_selection: 'Room selection 1...9', + Next_room: 'Next room', + Previous_room: 'Previous room', + New_room: 'New room', + Upload_room: 'Upload to room', + Search_messages: 'Search messages', + Scroll_messages: 'Scroll messages', + Reply_latest: 'Reply to latest', + Server_selection: 'Server selection', + Server_selection_numbers: 'Server selection 1...9', + Add_server: 'Add server', + New_line: 'New line' }; diff --git a/app/i18n/locales/pt-BR.js b/app/i18n/locales/pt-BR.js index dbc66a0c43..fe13a5edf6 100644 --- a/app/i18n/locales/pt-BR.js +++ b/app/i18n/locales/pt-BR.js @@ -99,16 +99,19 @@ export default { and: 'e', announcement: 'anúncio', Announcement: 'Anúncio', + Applying_a_theme_will_change_how_the_app_looks: 'Aplicar um tema mudará a aparência do app.', ARCHIVE: 'ARQUIVAR', archive: 'arquivar', are_typing: 'estão digitando', Are_you_sure_question_mark: 'Você tem certeza?', Are_you_sure_you_want_to_leave_the_room: 'Tem certeza de que deseja sair da sala {{room}}?', Authenticating: 'Autenticando', + Automatic: 'Automático', Avatar_changed_successfully: 'Avatar alterado com sucesso!', Avatar_Url: 'Avatar URL', Away: 'Ausente', Back: 'Voltar', + Black: 'Preto', Block_user: 'Bloquear usuário', Broadcast_channel_Description: 'Somente usuários autorizados podem escrever novas mensagens, mas os outros usuários poderão responder', Broadcast_Channel: 'Canal de Transmissão', @@ -138,6 +141,7 @@ export default { connecting_server: 'conectando no servidor', Connecting: 'Conectando...', Continue_with: 'Entrar com', + Contact_your_server_admin: 'Contate o administrador do servidor.', Copied_to_clipboard: 'Copiado para a área de transferência!', Copy: 'Copiar', Permalink: 'Link-Permanente', @@ -146,6 +150,8 @@ export default { Created_snippet: 'Criou um snippet', Create_a_new_workspace: 'Criar nova área de trabalho', Create: 'Criar', + Dark: 'Escuro', + Dark_level: 'Nível escuro', Delete_Room_Warning: 'A exclusão de uma sala irá apagar todas as mensagens postadas na sala. Isso não pode ser desfeito.', delete: 'excluir', Delete: 'Excluir', @@ -199,6 +205,7 @@ export default { leaving_room: 'saindo do canal', leave: 'sair', Legal: 'Legal', + Light: 'Claro', Livechat: 'Livechat', Login: 'Entrar', Login_error: 'Suas credenciais foram rejeitadas. Tente novamente por favor!', @@ -242,6 +249,7 @@ export default { Nothing_to_save: 'Nada para salvar!', Notify_active_in_this_room: 'Notificar usuários ativos nesta sala', Notify_all_in_this_room: 'Notificar todos nesta sala', + Not_RC_Server: 'Este não é um servidor Rocket.Chat.\n{{contact}}', Offline: 'Offline', Oops: 'Ops!', Online: 'Online', @@ -255,6 +263,7 @@ export default { pinned: 'fixada', Pinned: 'Mensagens Fixadas', Please_enter_your_password: 'Por favor, digite sua senha', + Preferences: 'Preferências', Preferences_saved: 'Preferências salvas!', Privacy_Policy: ' Política de Privacidade', Private_Channel: 'Canal Privado', @@ -334,7 +343,8 @@ export default { Take_a_photo: 'Tirar uma foto', Take_a_video: 'Gravar um vídeo', Terms_of_Service: ' Termos de Serviço ', - The_URL_is_invalid: 'A URL fornecida é inválida ou não acessível. Por favor tente novamente, mas com uma url diferente.', + Theme: 'Tema', + The_URL_is_invalid: 'A URL fornecida é inválida ou incapaz de estabelecer uma conexão segura.\n{{contact}}', There_was_an_error_while_action: 'Aconteceu um erro {{action}}!', This_room_is_blocked: 'Este quarto está bloqueado', This_room_is_read_only: 'Este quarto é apenas de leitura', @@ -375,6 +385,7 @@ export default { Username_or_email: 'Usuário ou email', Video_call: 'Chamada de vídeo', Voice_call: 'Chamada de voz', + Websocket_disabled: 'Websocket está desativado para esse servidor.\n{{contact}}', Welcome: 'Bem vindo', Welcome_to_RocketChat: 'Bem vindo ao Rocket.Chat', Whats_your_2fa: 'Qual seu código de autenticação?', @@ -389,5 +400,20 @@ export default { you: 'você', You: 'Você', You_need_to_access_at_least_one_RocketChat_server_to_share_something: 'Você precisa acessar ao menos um servidor Rocket.Chat para compartilhar.', - You_will_not_be_able_to_recover_this_message: 'Você não será capaz de recuperar essa mensagem!' + You_will_not_be_able_to_recover_this_message: 'Você não será capaz de recuperar essa mensagem!', + Crash_report_disclaimer: 'Nós não rastreamos o conteúdo das suas conversas. O relatório de erros apenas contém informações relevantes para identificarmos problemas e corrigí-los.', + Type_message: 'Digitar mensagem', + Room_search: 'Busca de sala', + Room_selection: 'Selecionar sala 1...9', + Next_room: 'Próxima sala', + Previous_room: 'Sala anterior', + New_room: 'Nova sala', + Upload_room: 'Enviar arquivo', + Search_messages: 'Buscar mensagens', + Scroll_messages: 'Rolar mensagens', + Reply_latest: 'Responder para última mensagem', + Server_selection: 'Seleção de servidor', + Server_selection_numbers: 'Selecionar servidor 1...9', + Add_server: 'Adicionar servidor', + New_line: 'Nova linha' }; diff --git a/app/i18n/locales/ru.js b/app/i18n/locales/ru.js index 780706f9a4..dcc5453345 100644 --- a/app/i18n/locales/ru.js +++ b/app/i18n/locales/ru.js @@ -1,5 +1,6 @@ export default { '1_person_reacted': '1 человек отреагировал', + '1_user': '1 пользователь', 'error-action-not-allowed': '{{action}} не допускается', 'error-application-not-found': 'Приложение не найдено', 'error-archived-duplicate-name': 'Есть архивный канал с именем {{room_name}}', @@ -21,7 +22,7 @@ export default { 'error-input-is-not-a-valid-field': '{{input}} недействительно {{field}}', 'error-invalid-actionlink': 'Недействительная ссылка действия', 'error-invalid-arguments': 'Недопустимые аргументы', - 'error-invalid-asset': 'Недопустимый актив', + 'error-invalid-asset': 'Недопустимый ресурс', 'error-invalid-channel': 'Недействительный канал.', 'error-invalid-channel-start-with-chars': 'Недействительный канал. Начните с @ или #', 'error-invalid-custom-field': 'Неверное настраиваемое поле', @@ -65,7 +66,7 @@ export default { 'error-role-in-use': 'Невозможно удалить роль, потому что она используется', 'error-role-name-required': 'Требуется имя роли', 'error-the-field-is-required': 'Требуется поле {{field}}.', - 'error-too-many-requests': 'Ошибка, слишком много запросов. Пожалуйста, помедленнее. Вы должны подождать {{seconds}} секунд, прежде чем повторять попытку.', + 'error-too-many-requests': 'Ошибка, слишком много запросов. Пожалуйста, помедленнее. Вы должны подождать {{seconds}} секунд, прежде чем повторить попытку.', 'error-user-is-not-activated': 'Пользователь не активирован', 'error-user-has-no-roles': 'Пользователь не имеет ролей', 'error-user-limit-exceeded': 'Количество пользователей, которых вы пытаетесь пригласить на #channel_name, превышает лимит, установленный администратором', @@ -75,28 +76,37 @@ export default { 'error-user-registration-secret': 'Регистрация пользователей разрешена только через секретный URL', 'error-you-are-last-owner': 'Вы последний владелец. Пожалуйста, установите нового владельца, прежде чем покинуть комнату.', Actions: 'Действия', + activity: 'активность', + Activity: 'Активность', Add_Reaction: 'Добавить реакцию', Add_Server: 'Добавить сервер', Add_user: 'Добавить пользователя', + Admin_Panel: 'Панель админа', Alert: 'Оповещение', alert: 'оповещение', alerts: 'оповещения', All_users_in_the_channel_can_write_new_messages: 'Все пользователи канала могут писать новые сообщения', All: 'Все', + All_Messages: 'Все сообщения', Allow_Reactions: 'Разрешить реакции', + Alphabetical: 'По алфавиту', and_more: 'и более', and: 'и', announcement: 'объявление', Announcement: 'Объявление', + Apply_Your_Certificate: 'Применить ваш сертификат', ARCHIVE: 'АРХИВ', archive: 'архив', are_typing: 'печатают', Are_you_sure_question_mark: 'Вы уверены?', Are_you_sure_you_want_to_leave_the_room: 'Вы действительно хотите покинуть канал {{room}}?', + Audio: 'Аудио', Authenticating: 'Аутентификация', + Auto_Translate: 'Автоперевод', Avatar_changed_successfully: 'Аватар успешно изменен!', Avatar_Url: 'URL аватара', Away: 'Отошел', + Back: 'Назад', Block_user: 'Блокировать пользователя', Broadcast_channel_Description: 'Только авторизованные пользователи могут писать новые сообщения, но другие пользователи смогут ответить', Broadcast_Channel: 'Широковещательный канал', @@ -106,60 +116,109 @@ export default { Cancel_recording: 'Отменить запись', Cancel: 'Отмена', changing_avatar: 'изменение аватара', + creating_channel: 'создание канала', Channel_Name: 'Название канала', + Channels: 'Каналы', Chats: 'Чаты', + Call_already_ended: 'Вызов уже завершен!', + Click_to_join: 'Нажмите, чтобы присоединиться!', Close: 'Закрыть', Close_emoji_selector: 'Закрыть селектор emoji', Choose: 'Выбрать', Choose_from_library: 'Выбрать из библиотеки', + Choose_file: 'Выбрать файл', Code: 'Код', Collaborative: 'Совместный', + Confirm: 'Подтверждение', Connect: 'Соединение', - Connected_to: 'Подключен к', - Connecting: 'Соединение', + Connect_to_a_server: 'Подключиться к серверу', + Connected: 'Подключено', + connecting_server: 'подключение к серверу', + Connecting: 'Соединение...', + Contact_us: 'Связаться с нами', + Contact_your_server_admin: 'Свяжитесь с администратором сервера.', + Continue_with: 'Продолжить с', Copied_to_clipboard: 'Скопировано в буфер обмена!', Copy: 'Копировать', - Permalink: 'постоянную ссылку', + Permalink: 'Постоянная ссылка', + Certificate_password: 'Пароль сертификата', + Whats_the_password_for_your_certificate: 'Какой пароль для вашего сертификата?', Create_account: 'Создать аккаунт', Create_Channel: 'Создать канал', + Created_snippet: 'Создать сниппет', + Create_a_new_workspace: 'Новое рабочее пространство', Create: 'Создать', + Default: 'По умолчанию', Delete_Room_Warning: 'Удаление канала приведет к удалению всех сообщений, размещенных в нем. Это не может быть отменено.', delete: 'удалить', Delete: 'Удалить', DELETE: 'УДАЛИТЬ', description: 'описание', Description: 'Описание', + DESKTOP_OPTIONS: 'ПАРАМЕТРЫ РАБОЧЕГО СТОЛА', + Directory: 'Директория', + Direct_Messages: 'Личные сообщения', Disable_notifications: 'Отключить уведомления', + Discussions: 'Дискуссии', + Dont_Have_An_Account: 'Нет аккаунта?', + Do_you_have_a_certificate: 'У вас есть сертификат?', Do_you_really_want_to_key_this_room_question_mark: 'Вы действительно хотите {{key}} этот канал?', edit: 'редактировать', + edited: 'отредактировано', Edit: 'Редактировать', Email_or_password_field_is_empty: 'Поле электронной почты или пароля пусты', - Email: 'Электронная почта', + Email: 'Email', + EMAIL: 'EMAIL', + email: 'e-mail', + Enable_Auto_Translate: 'Включить автоперевод', + Enable_markdown: 'Включить markdown', Enable_notifications: 'Включить уведомления', Everyone_can_access_this_channel: 'Каждый может получить доступ к этому каналу', + erasing_room: 'стирание комнаты', Error_uploading: 'Ошибка при загрузке', + Favorite: 'Избранное', + Favorites: 'Избранные', Files: 'Файлы', + File_description: 'Описание файла', + File_name: 'Имя файла', Finish_recording: 'Завершить запись', + Following_thread: 'Следить за темой', For_your_security_you_must_enter_your_current_password_to_continue: 'В целях вашей безопасности вы должны ввести свой текущий пароль для продолжения', Forgot_my_password: 'Забыл свой пароль', Forgot_password_If_this_email_is_registered: 'Если эта электронная почта зарегистрирована, мы отправим инструкции о том, как сбросить пароль. Если вы не получите письмо в ближайшее время, вернитесь и повторите попытку.', Forgot_password: 'Забыли пароль', Forgot_Password: 'Забыли Пароль', + Full_table: 'Нажмите, чтобы увидеть полную таблицу', + Group_by_favorites: 'По избранным', + Group_by_type: 'По типу', + Hide: 'Скрыть', Has_joined_the_channel: 'Присоединился к каналу', + Has_joined_the_conversation: 'Присоединился к беседе', Has_left_the_channel: 'Покинул канал', - I_have_an_account: 'У меня есть аккаунт', + IN_APP_AND_DESKTOP: 'В приложении и на десктопе', + In_App_and_Desktop_Alert_info: 'Отображает баннер в верхней части экрана, когда приложение открыто, и отображает уведомление на рабочем столе.', Invisible: 'Невидимый', + Invite: 'Приглашение', is_a_valid_RocketChat_instance: 'является действительным сервером Rocket.Chat', is_not_a_valid_RocketChat_instance: 'не является действительным сервером Rocket.Chat', is_typing: 'печатает', + Invalid_server_version: 'Сервер, к которому вы пытаетесь подключиться, использует версию, которая больше не поддерживается приложением: {{currentVersion}}.\n\nНам нужна версия {{minVersion}}', + Join_the_community: 'Присоединиться к сообществу', + Join: 'Присоединиться', Just_invited_people_can_access_this_channel: 'Только приглашенные люди могут получить доступ к этому каналу', Language: 'Язык', last_message: 'последнее сообщение', Leave_channel: 'Покинуть канал', + leaving_room: 'покинуть комнату', leave: 'покинуть', - Loading_messages_ellipsis: 'Загрузка сообщений ...', + Legal: 'Правовые аспекты', + License: 'Лицензия', + Livechat: 'Livechat', Login: 'Вход', + Login_error: 'Ваши учетные данные были отклонены! Пожалуйста, попробуйте еще раз.', + Login_with: 'Войти с', Logout: 'Выйти', + members: 'пользователи', Members: 'Пользователи', Mentioned_Messages: 'Упомянутые сообщения', mentioned: 'упомянутые', @@ -168,35 +227,51 @@ export default { Message_actions: 'Действия с сообщением', Message_pinned: 'Сообщение прикреплено', Message_removed: 'Сообщение удалено', + message: 'сообщение', + messages: 'сообщения', Messages: 'Сообщения', - Microphone_Permission_Message: 'Rocket Chat нуждается в доступе к вашему микрофону, чтобы вы могли отправлять аудиосообщения.', + Message_Reported: 'Сообщение отправлено', + Microphone_Permission_Message: 'Rocket Chat нужен доступ к вашему микрофону, чтобы вы могли отправлять аудиосообщения.', Microphone_Permission: 'Разрешение на использование микрофона', Mute: 'Заглушить', muted: 'Заглушен', My_servers: 'Мои серверы', N_person_reacted: '{{n}} людей отреагировало', + N_users: '{{n}} пользователи', + name: 'имя', Name: 'Имя', - New_in_RocketChat_question_mark: 'Новичок в Rocket.Chat?', - New_Message: 'Новое Сообщение', - New_Password: 'Новый Пароль', - New_Server: 'Новый Сервер', + New_Message: 'Новое сообщение', + New_Password: 'Новый пароль', + New_Server: 'Новый сервер', No_files: 'Нет файлов', + Next: 'Далее', No_mentioned_messages: 'Нет упоминаний', No_pinned_messages: 'Нет прикрепленных сообщений', + No_results_found: 'Ничего не найдено', No_starred_messages: 'Нет отмеченных сообщений', + No_thread_messages: 'Нет сообщений в теме', No_announcement_provided: 'Нет объявлений.', No_description_provided: 'Нет описания.', No_topic_provided: 'Нет темы.', No_Message: 'Нет сообщения', + No_messages_yet: 'Пока нет сообщений', No_Reactions: 'Нет реакций', + No_Read_Receipts: 'Нет информации о прочтении', Not_logged: 'Не зарегистрирован', + Not_RC_Server: 'Это не сервер Rocket.Chat.\n{{contact}}', + Nothing: 'Ничего', Nothing_to_save: 'Нечего сохранять!', Notify_active_in_this_room: 'Уведомить всех активных пользователей в этом чате', Notify_all_in_this_room: 'Уведомить всех в этом чате', + Notifications: 'Уведомления', + Notification_Duration: 'Продолжительность уведомлений', + Notification_Preferences: 'Настройки уведомлений', Offline: 'Офлайн', + Oops: 'Упс!', Online: 'Онлайн', Only_authorized_users_can_write_new_messages: 'Только авторизованные пользователи могут писать новые сообщения', Open_emoji_selector: 'Открыть селектор emoji', + Open_Source_Communication: 'Общение с открытым кодом', Password: 'Пароль', Permalink_copied_to_clipboard: 'Постоянная ссылка скопирована в буфер обмена!', Pin: 'Прикрепить сообщение', @@ -205,25 +280,40 @@ export default { Pinned: 'Прикреплено', Please_enter_your_password: 'Пожалуйста введите ваш пароль', Preferences_saved: 'Настройки сохранены!', - Privacy_Policy: ' Политика Конфиденциальности', + Privacy_Policy: ' Политика конфиденциальности', Private_Channel: 'Приватный канал', + Private_Groups: 'Приватные группы', Private: 'Приватный', + Processing: 'Обработка...', Profile_saved_successfully: 'Профиль успешно сохранен!', Profile: 'Профиль', Public_Channel: 'Публичный канал', Public: 'Публичный', + PUSH_NOTIFICATIONS: 'PUSH УВЕДОМЛЕНИЯ', + Push_Notifications_Alert_Info: 'Эти уведомления доставляются вам, когда приложение не открыто', Quote: 'Цитата', Reactions_are_disabled: 'Реакции отключены', Reactions_are_enabled: 'Реакции активированы', Reactions: 'Реакции', + Read: 'Читать', Read_Only_Channel: 'Канал только для чтения', Read_Only: 'Только для чтения', + Read_Receipt: 'Уведомление о прочтении', + Receive_Group_Mentions: 'Получать групповые уведомления', + Receive_Group_Mentions_Info: 'Получать @all и @here уведомления', Register: 'Зарегистрировать', Repeat_Password: 'Повторите пароль', + Replied_on: 'Ответил на:', + replies: 'ответы', + reply: 'ответить', Reply: 'Ответить', + Report: 'Жалоба', + Receive_Notification: 'Получать уведомления', + Receive_notifications_from: 'Получать уведомления от {{name}}', Resend: 'Отправить повторно', Reset_password: 'Сброс пароля', RESET: 'СБРОС', + resetting_password: 'сброс пароля', Roles: 'Роли', Room_actions: 'Действия с каналом', Room_changed_announcement: 'Объявление канала было изменено на: {{объявление}} пользователем {{userBy}}', @@ -243,59 +333,100 @@ export default { saving_settings: 'сохранение настроек', Search_Messages: 'Поиск сообщений', Search: 'Поиск', + Search_by: 'Поиск по', + Search_global_users: 'Поиск глобальных пользователей', + Search_global_users_description: 'При активации станет возможен поиск пользователей на других серверах.', + Seconds: '{{second}} секунд', Select_Avatar: 'Выбор аватара', + Select_Server: 'Выбор сервера', Select_Users: 'Выбор пользователей', Send: 'Отправить', Send_audio_message: 'Отправить аудиосообщение', + Send_crash_report: 'Отправить отчет об ошибке', Send_message: 'Отправить сообщение', + Send_to: 'Отправить...', + Sent_an_attachment: 'Отправить вложение', + Server: 'Сервер', Servers: 'Серверы', + Server_version: 'Версия сервера: {{version}}', + Set_username_subtitle: 'Имя пользователя необходимо для того, чтобы позволить другим упомянуть вас в сообщениях', Settings: 'Настройки', Settings_succesfully_changed: 'Настройки успешно изменены!', Share: 'Поделиться', + Share_this_app: 'Рассказать о приложении', + Show_Unread_Counter: 'Показать счетчик непрочитанных', + Show_Unread_Counter_Info: 'Счетчик непрочитанных отображается в виде значка справа от канала в списке каналов', Sign_in_your_server: 'Войдите на ваш сервер', Sign_Up: 'Регистрация', Some_field_is_invalid_or_empty: 'Некоторые поля недопустимы или пусты', - Star_room: 'Star room', - Star: 'Звезда', - Starred_Messages: 'Помеченные сообщения', + Sorting_by: 'Сортировать по {{key}}', + Sound: 'Звук', + Star_room: 'В избранное', + Star: 'Отметить', + Starred_Messages: 'Отмеченные сообщения', starred: 'отмечено', Starred: 'Отмечено', Start_of_conversation: 'Начало разговора', + Started_discussion: 'Началось обсуждение :', + Started_call: 'Звонок, начатый {{userBy}}', Submit: 'Отправить', + Table: 'Таблица', Take_a_photo: 'Сфотографировать', + Take_a_video: 'Записать видео', tap_to_change_status: 'нажмите для изменения статуса', Tap_to_view_servers_list: 'Нажмите, чтобы просмотреть список серверов', Terms_of_Service: ' Условия использования ', + Theme: 'Тема', + The_URL_is_invalid: 'IНеверный URL или невозможно установить безопасное соединение.\n{{contact}}', There_was_an_error_while_action: 'Произошла ошибка в процессе {{action}}!', This_room_is_blocked: 'Этот канал заблокирован', This_room_is_read_only: 'Этот канал доступен только для чтения', + Thread: 'Тема', + Threads: 'Темы', Timezone: 'Часовой пояс', + To: 'К', topic: 'топик', Topic: 'Топик', + Translate: 'Перевести', Try_again: 'Попробуйте еще раз', + Two_Factor_Authentication: 'Двухфакторная аутентификация', Type_the_channel_name_here: 'Введите название канала здесь', unarchive: 'разархивировать', UNARCHIVE: 'РАЗАРХИВИРОВАТЬ', Unblock_user: 'Разблокировать пользователя', + Unfavorite: 'Удалить из избранного', + Unfollowed_thread: 'Отписаться', Unmute: 'Отменить заглушивание', unmuted: 'Заглушивание отменено', Unpin: 'Открепить', unread_messages: 'непрочитанные', + Unread: 'Непрочитанные', + Unread_on_top: 'Непрочитанные сверху', Unstar: 'Снять отметку', + Updating: 'Обновление...', Uploading: 'Выгрузка', + Upload_file_question_mark: 'Загрузить файл?', + Users: 'Пользователи', User_added_by: 'Пользователь {{userAdded}} добавлен по решению {{userBy}}', User_has_been_key: 'Пользователь был {{key}}!', User_is_no_longer_role_by_: '{{user}} больше не {{role}} по решению {{userBy}}', User_muted_by: 'Пользователь {{userMuted}} заглушен по решению {{userBy}}', User_removed_by: 'Пользователь {{userRemoved}} удален по решению {{userBy}}', + User_sent_an_attachment: '{{user}} отправил вложение', User_unmuted_by: 'Пользователь {{userUnmuted}} перестал быть заглушенным по решению {{userBy}}', User_was_set_role_by_: '{{user}} был назначен {{role}} пользователем {{userBy}}', Username_is_empty: 'Имя пользователя пусто', Username: 'Имя пользователя', + Username_or_email: 'Имя пользователя или email', Validating: 'Проверка', Video_call: 'Видеозвонок', + View_Original: 'Посмотреть оригинал', Voice_call: 'Голосовой вызов', - Welcome: 'Добро пожаловать', + Websocket_disabled: 'Websocket отключен для этого сервера.\n{{contact}}', + Welcome: 'Добро пожаловать,', + Welcome_to_RocketChat: 'Добро пожаловать в Rocket.Chat', + Whats_your_2fa: 'Какой у вас код 2FA?', + Without_Servers: 'Без серверов', Yes_action_it: 'Да, {{action}} это!', Yesterday: 'Вчера', You_are_in_preview_mode: 'Вы находитесь в режиме предварительного просмотра', @@ -303,7 +434,12 @@ export default { You_can_search_using_RegExp_eg: 'Вы можете выполнить поиск с помощью регулярных выражений, например `/^text$/i`', You_colon: 'Вы: ', you_were_mentioned: 'вы были упомянуты', - You_will_not_be_able_to_recover_this_message: 'Вы не сможете восстановить это сообщение!', you: 'вы', - Your_server: 'Ваш сервер' + You: 'Вы', + You_need_to_access_at_least_one_RocketChat_server_to_share_something: 'Вам нужно получить доступ как минимум к одному серверу Rocket.Chat, чтобы поделиться чем-то.', + Your_certificate: 'Ваш сертификат', + Version_no: 'Version: {{version}}', + You_will_not_be_able_to_recover_this_message: 'Вы не сможете восстановить это сообщение!', + Change_Language: 'Изменить язык', + Crash_report_disclaimer: 'Мы никогда не отслеживаем содержание ваших чатов. Отчет о сбое содержит только важную для нас информацию для выявления проблем и их устранения.' }; diff --git a/app/index.js b/app/index.js index 9782714fb6..2ad65f8aac 100644 --- a/app/index.js +++ b/app/index.js @@ -1,13 +1,23 @@ import React from 'react'; +import { View, Linking, BackHandler } from 'react-native'; import { createAppContainer, createSwitchNavigator } from 'react-navigation'; import { createStackNavigator } from 'react-navigation-stack'; import { createDrawerNavigator } from 'react-navigation-drawer'; +import { AppearanceProvider } from 'react-native-appearance'; import { Provider } from 'react-redux'; -import { useScreens } from 'react-native-screens'; // eslint-disable-line import/no-unresolved -import { Linking } from 'react-native'; import PropTypes from 'prop-types'; +import RNUserDefaults from 'rn-user-defaults'; +import Modal from 'react-native-modal'; +import KeyCommands, { KeyCommandsEmitter } from 'react-native-keycommands'; -import { appInit } from './actions'; +import { + defaultTheme, + newThemeState, + subscribeTheme, + unsubscribeTheme +} from './utils/theme'; +import EventEmitter from './utils/events'; +import { appInit, appInitLocalSettings } from './actions'; import { deepLinkingOpen } from './actions/deepLinking'; import Navigation from './lib/Navigation'; import Sidebar from './views/SidebarView'; @@ -15,13 +25,24 @@ import parseQuery from './lib/methods/helpers/parseQuery'; import { initializePushNotifications, onNotification } from './notifications/push'; import store from './lib/createStore'; import NotificationBadge from './notifications/inApp'; -import { defaultHeader, onNavigationStateChange } from './utils/navigation'; +import { defaultHeader, onNavigationStateChange, cardStyle } from './utils/navigation'; import { loggerConfig, analytics } from './utils/log'; import Toast from './containers/Toast'; -import RocketChat from './lib/rocketchat'; -import LayoutAnimation from './utils/layoutAnimation'; +import { ThemeContext } from './theme'; +import RocketChat, { THEME_PREFERENCES_KEY } from './lib/rocketchat'; +import { MIN_WIDTH_SPLIT_LAYOUT } from './constants/tablet'; +import { + isTablet, isSplited, isIOS, setWidth, supportSystemTheme +} from './utils/deviceInfo'; +import { KEY_COMMAND } from './commands'; +import Tablet, { initTabletNav } from './tablet'; +import sharedStyles from './views/Styles'; +import { SplitContext } from './split'; -useScreens(); +if (isIOS) { + const RNScreens = require('react-native-screens'); + RNScreens.useScreens(); +} const parseDeepLinking = (url) => { if (url) { @@ -62,7 +83,8 @@ const OutsideStack = createStackNavigator({ getScreen: () => require('./views/LegalView').default } }, { - defaultNavigationOptions: defaultHeader + defaultNavigationOptions: defaultHeader, + cardStyle }); const AuthenticationWebViewStack = createStackNavigator({ @@ -70,7 +92,8 @@ const AuthenticationWebViewStack = createStackNavigator({ getScreen: () => require('./views/AuthenticationWebView').default } }, { - defaultNavigationOptions: defaultHeader + defaultNavigationOptions: defaultHeader, + cardStyle }); const OutsideStackModal = createStackNavigator({ @@ -79,17 +102,30 @@ const OutsideStackModal = createStackNavigator({ }, { mode: 'modal', - headerMode: 'none' + headerMode: 'none', + cardStyle }); +const RoomRoutes = { + RoomView: { + getScreen: () => require('./views/RoomView').default + }, + ThreadMessagesView: { + getScreen: () => require('./views/ThreadMessagesView').default + }, + MarkdownTableView: { + getScreen: () => require('./views/MarkdownTableView').default + }, + ReadReceiptsView: { + getScreen: () => require('./views/ReadReceiptView').default + } +}; + // Inside const ChatsStack = createStackNavigator({ RoomsListView: { getScreen: () => require('./views/RoomsListView').default }, - RoomView: { - getScreen: () => require('./views/RoomView').default - }, RoomActionsView: { getScreen: () => require('./views/RoomActionsView').default }, @@ -108,34 +144,35 @@ const ChatsStack = createStackNavigator({ SelectedUsersView: { getScreen: () => require('./views/SelectedUsersView').default }, - ThreadMessagesView: { - getScreen: () => require('./views/ThreadMessagesView').default - }, MessagesView: { getScreen: () => require('./views/MessagesView').default }, AutoTranslateView: { getScreen: () => require('./views/AutoTranslateView').default }, - ReadReceiptsView: { - getScreen: () => require('./views/ReadReceiptView').default - }, DirectoryView: { getScreen: () => require('./views/DirectoryView').default }, - TableView: { - getScreen: () => require('./views/TableView').default - }, NotificationPrefView: { getScreen: () => require('./views/NotificationPreferencesView').default - } + }, + ...RoomRoutes }, { - defaultNavigationOptions: defaultHeader + defaultNavigationOptions: defaultHeader, + cardStyle +}); + +// Inside +const RoomStack = createStackNavigator({ + ...RoomRoutes +}, { + defaultNavigationOptions: defaultHeader, + cardStyle }); ChatsStack.navigationOptions = ({ navigation }) => { let drawerLockMode = 'unlocked'; - if (navigation.state.index > 0) { + if (navigation.state.index > 0 || isSplited()) { drawerLockMode = 'locked-closed'; } return { @@ -148,7 +185,8 @@ const ProfileStack = createStackNavigator({ getScreen: () => require('./views/ProfileView').default } }, { - defaultNavigationOptions: defaultHeader + defaultNavigationOptions: defaultHeader, + cardStyle }); ProfileStack.navigationOptions = ({ navigation }) => { @@ -167,9 +205,13 @@ const SettingsStack = createStackNavigator({ }, LanguageView: { getScreen: () => require('./views/LanguageView').default + }, + ThemeView: { + getScreen: () => require('./views/ThemeView').default } }, { - defaultNavigationOptions: defaultHeader + defaultNavigationOptions: defaultHeader, + cardStyle }); const AdminPanelStack = createStackNavigator({ @@ -177,7 +219,8 @@ const AdminPanelStack = createStackNavigator({ getScreen: () => require('./views/AdminPanelView').default } }, { - defaultNavigationOptions: defaultHeader + defaultNavigationOptions: defaultHeader, + cardStyle }); SettingsStack.navigationOptions = ({ navigation }) => { @@ -211,7 +254,8 @@ const NewMessageStack = createStackNavigator({ getScreen: () => require('./views/CreateChannelView').default } }, { - defaultNavigationOptions: defaultHeader + defaultNavigationOptions: defaultHeader, + cardStyle }); const InsideStackModal = createStackNavigator({ @@ -223,35 +267,210 @@ const InsideStackModal = createStackNavigator({ }, { mode: 'modal', - headerMode: 'none' + headerMode: 'none', + cardStyle }); const SetUsernameStack = createStackNavigator({ SetUsernameView: { getScreen: () => require('./views/SetUsernameView').default } +}, +{ + cardStyle }); class CustomInsideStack extends React.Component { static router = InsideStackModal.router; static propTypes = { - navigation: PropTypes.object + navigation: PropTypes.object, + screenProps: PropTypes.object + } + + render() { + const { navigation, screenProps } = this.props; + return ( + <> + <InsideStackModal navigation={navigation} screenProps={screenProps} /> + { !isTablet ? <NotificationBadge navigation={navigation} /> : null } + { !isTablet ? <Toast /> : null } + </> + ); + } +} + +class CustomRoomStack extends React.Component { + static router = RoomStack.router; + + static propTypes = { + navigation: PropTypes.object, + screenProps: PropTypes.object } render() { - const { navigation } = this.props; + const { navigation, screenProps } = this.props; return ( <> - <InsideStackModal navigation={navigation} /> - <NotificationBadge navigation={navigation} /> + <RoomStack navigation={navigation} screenProps={screenProps} /> <Toast /> </> ); } } -const App = createAppContainer(createSwitchNavigator( +const MessagesStack = createStackNavigator({ + NewMessageView: { + getScreen: () => require('./views/NewMessageView').default + }, + SelectedUsersViewCreateChannel: { + getScreen: () => require('./views/SelectedUsersView').default + }, + CreateChannelView: { + getScreen: () => require('./views/CreateChannelView').default + } +}, { + defaultNavigationOptions: defaultHeader, + cardStyle +}); + +const DirectoryStack = createStackNavigator({ + DirectoryView: { + getScreen: () => require('./views/DirectoryView').default + } +}, { + defaultNavigationOptions: defaultHeader, + cardStyle +}); + +const SidebarStack = createStackNavigator({ + SettingsView: { + getScreen: () => require('./views/SettingsView').default + }, + ProfileView: { + getScreen: () => require('./views/ProfileView').default + }, + AdminPanelView: { + getScreen: () => require('./views/AdminPanelView').default + } +}, { + defaultNavigationOptions: defaultHeader, + cardStyle +}); + +const RoomActionsStack = createStackNavigator({ + RoomActionsView: { + getScreen: () => require('./views/RoomActionsView').default + }, + RoomInfoView: { + getScreen: () => require('./views/RoomInfoView').default + }, + RoomInfoEditView: { + getScreen: () => require('./views/RoomInfoEditView').default + }, + RoomMembersView: { + getScreen: () => require('./views/RoomMembersView').default + }, + SearchMessagesView: { + getScreen: () => require('./views/SearchMessagesView').default + }, + SelectedUsersView: { + getScreen: () => require('./views/SelectedUsersView').default + }, + MessagesView: { + getScreen: () => require('./views/MessagesView').default + }, + AutoTranslateView: { + getScreen: () => require('./views/AutoTranslateView').default + }, + ReadReceiptsView: { + getScreen: () => require('./views/ReadReceiptView').default + }, + NotificationPrefView: { + getScreen: () => require('./views/NotificationPreferencesView').default + } +}, { + defaultNavigationOptions: defaultHeader, + cardStyle +}); + + +const ModalSwitch = createSwitchNavigator({ + MessagesStack, + DirectoryStack, + SidebarStack, + RoomActionsStack, + SettingsStack, + AuthLoading: () => null +}, +{ + initialRouteName: 'AuthLoading' +}); + +class CustomModalStack extends React.Component { + static router = ModalSwitch.router; + + static propTypes = { + navigation: PropTypes.object, + showModal: PropTypes.bool, + closeModal: PropTypes.func, + screenProps: PropTypes.object + } + + componentDidMount() { + this.backHandler = BackHandler.addEventListener('hardwareBackPress', this.closeModal); + } + + componentWillUnmount() { + this.backHandler.remove(); + } + + closeModal = () => { + const { closeModal, navigation } = this.props; + const { state } = navigation; + if (state && state.routes[state.index] && state.routes[state.index].index === 0) { + closeModal(); + return true; + } + return false; + } + + render() { + const { + navigation, showModal, closeModal, screenProps + } = this.props; + return ( + <Modal + useNativeDriver + coverScreen={false} + isVisible={showModal} + onBackdropPress={closeModal} + hideModalContentWhileAnimating + avoidKeyboard + > + <View style={sharedStyles.modal}> + <ModalSwitch navigation={navigation} screenProps={screenProps} /> + </View> + </Modal> + ); + } +} + +class CustomNotificationStack extends React.Component { + static router = InsideStackModal.router; + + static propTypes = { + navigation: PropTypes.object, + screenProps: PropTypes.object + } + + render() { + const { navigation, screenProps } = this.props; + return <NotificationBadge navigation={navigation} screenProps={screenProps} />; + } +} + +export const App = createAppContainer(createSwitchNavigator( { OutsideStack: OutsideStackModal, InsideStack: CustomInsideStack, @@ -265,11 +484,30 @@ const App = createAppContainer(createSwitchNavigator( } )); +export const RoomContainer = createAppContainer(CustomRoomStack); + +export const ModalContainer = createAppContainer(CustomModalStack); + +export const NotificationContainer = createAppContainer(CustomNotificationStack); + export default class Root extends React.Component { constructor(props) { super(props); this.init(); this.initCrashReport(); + this.state = { + split: false, + inside: false, + showModal: false, + theme: defaultTheme(), + themePreferences: { + currentTheme: supportSystemTheme() ? 'automatic' : 'light', + darkLevel: 'dark' + } + }; + if (isTablet) { + this.initTablet(); + } } componentDidMount() { @@ -283,13 +521,36 @@ export default class Root extends React.Component { }, 5000); } + // eslint-disable-next-line no-unused-vars + componentDidUpdate(_, prevState) { + if (isTablet) { + const { split, inside } = this.state; + if (inside && split !== prevState.split) { + // Reset app on split mode changes + Navigation.navigate('RoomsListView'); + this.closeModal(); + } + } + } + componentWillUnmount() { clearTimeout(this.listenerTimeout); + + unsubscribeTheme(); + + if (this.onKeyCommands && this.onKeyCommands.remove) { + this.onKeyCommands.remove(); + } } init = async() => { + if (isIOS) { + await RNUserDefaults.setName('group.ios.chat.rocket'); + } + RNUserDefaults.objectForKey(THEME_PREFERENCES_KEY).then(this.setTheme); const [notification, deepLinking] = await Promise.all([initializePushNotifications(), Linking.getInitialURL()]); const parsedDeepLinkingURL = parseDeepLinking(deepLinking); + store.dispatch(appInitLocalSettings()); if (notification) { onNotification(notification); } else if (parsedDeepLinkingURL) { @@ -299,6 +560,24 @@ export default class Root extends React.Component { } } + setTheme = (newTheme = {}) => { + // change theme state + this.setState(prevState => newThemeState(prevState, newTheme), () => { + const { themePreferences } = this.state; + // subscribe to Appearance changes + subscribeTheme(themePreferences, this.setTheme); + }); + } + + initTablet = async() => { + initTabletNav(args => this.setState(args)); + await KeyCommands.setKeyCommands([]); + this.onKeyCommands = KeyCommandsEmitter.addListener( + 'onKeyCommand', + command => EventEmitter.emit(KEY_COMMAND, { event: command }) + ); + } + initCrashReport = () => { RocketChat.getAllowCrashReport() .then((allowCrashReport) => { @@ -310,18 +589,59 @@ export default class Root extends React.Component { }); } + onLayout = ({ nativeEvent: { layout: { width } } }) => (isTablet ? this.setSplit(width) : null); + + setSplit = (width) => { + this.setState({ split: width > MIN_WIDTH_SPLIT_LAYOUT }); + setWidth(width); + } + + closeModal = () => this.setState({ showModal: false }); + render() { + const { split, themePreferences, theme } = this.state; + + let content = ( + <App + ref={(navigatorRef) => { + Navigation.setTopLevelNavigator(navigatorRef); + }} + screenProps={{ split, theme }} + onNavigationStateChange={onNavigationStateChange} + /> + ); + + if (isTablet) { + const { inside, showModal } = this.state; + content = ( + <SplitContext.Provider value={{ split }}> + <Tablet + theme={theme} + tablet={split} + inside={inside} + showModal={showModal} + closeModal={this.closeModal} + onLayout={this.onLayout} + > + {content} + </Tablet> + </SplitContext.Provider> + ); + } return ( - <Provider store={store}> - <LayoutAnimation> - <App - ref={(navigatorRef) => { - Navigation.setTopLevelNavigator(navigatorRef); + <AppearanceProvider> + <Provider store={store}> + <ThemeContext.Provider + value={{ + theme, + themePreferences, + setTheme: this.setTheme }} - onNavigationStateChange={onNavigationStateChange} - /> - </LayoutAnimation> - </Provider> + > + {content} + </ThemeContext.Provider> + </Provider> + </AppearanceProvider> ); } } diff --git a/app/lib/ModalNavigation.js b/app/lib/ModalNavigation.js new file mode 100644 index 0000000000..3474a7451f --- /dev/null +++ b/app/lib/ModalNavigation.js @@ -0,0 +1,21 @@ +import { NavigationActions } from 'react-navigation'; + +let _navigatorModal; + +function setTopLevelNavigator(navigatorRef) { + _navigatorModal = navigatorRef; +} + +function navigate(routeName, params) { + _navigatorModal.dispatch( + NavigationActions.navigate({ + routeName, + params + }) + ); +} + +export default { + navigate, + setTopLevelNavigator +}; diff --git a/app/lib/database/index.js b/app/lib/database/index.js index 7216779d49..1508d11fc5 100644 --- a/app/lib/database/index.js +++ b/app/lib/database/index.js @@ -44,15 +44,46 @@ class DB { } get active() { - return this.databases.activeDB; + return this.databases.shareDB || this.databases.activeDB; + } + + get share() { + return this.databases.shareDB; + } + + set share(db) { + this.databases.shareDB = db; } get servers() { return this.databases.serversDB; } + setShareDB(database = '') { + const path = database.replace(/(^\w+:|^)\/\//, '').replace(/\//, '.'); + const dbName = `${ appGroupPath }${ path }.db`; + + const adapter = new SQLiteAdapter({ + dbName, + schema: appSchema, + migrations + }); + + this.databases.shareDB = new Database({ + adapter, + modelClasses: [ + Subscription, + Message, + Thread, + ThreadMessage, + Upload + ], + actionsEnabled: true + }); + } + setActiveDB(database = '') { - const path = database.replace(/(^\w+:|^)\/\//, ''); + const path = database.replace(/(^\w+:|^)\/\//, '').replace(/\//, '.'); const dbName = `${ appGroupPath }${ path }.db`; const adapter = new SQLiteAdapter({ diff --git a/app/lib/database/model/Subscription.js b/app/lib/database/model/Subscription.js index 577bec5843..630c640b31 100644 --- a/app/lib/database/model/Subscription.js +++ b/app/lib/database/model/Subscription.js @@ -87,4 +87,6 @@ export default class Subscription extends Model { @children('threads') threads; @children('thread_messages') threadMessages; + + @field('hide_unread_status') hideUnreadStatus; } diff --git a/app/lib/database/model/migrations.js b/app/lib/database/model/migrations.js index f3a7f57b57..3c78dec361 100644 --- a/app/lib/database/model/migrations.js +++ b/app/lib/database/model/migrations.js @@ -12,6 +12,17 @@ export default schemaMigrations({ ] }) ] + }, + { + toVersion: 3, + steps: [ + addColumns({ + table: 'subscriptions', + columns: [ + { name: 'hide_unread_status', type: 'boolean', isOptional: true } + ] + }) + ] } ] }); diff --git a/app/lib/database/schema/app.js b/app/lib/database/schema/app.js index 563d2fed25..8e38f76a62 100644 --- a/app/lib/database/schema/app.js +++ b/app/lib/database/schema/app.js @@ -1,7 +1,7 @@ import { appSchema, tableSchema } from '@nozbe/watermelondb'; export default appSchema({ - version: 2, + version: 3, tables: [ tableSchema({ name: 'subscriptions', @@ -38,7 +38,8 @@ export default appSchema({ { name: 'last_thread_sync', type: 'number', isOptional: true }, { name: 'jitsi_timeout', type: 'number', isOptional: true }, { name: 'auto_translate', type: 'boolean', isOptional: true }, - { name: 'auto_translate_language', type: 'string' } + { name: 'auto_translate_language', type: 'string' }, + { name: 'hide_unread_status', type: 'boolean', isOptional: true } ] }), tableSchema({ diff --git a/app/lib/methods/getCustomEmojis.js b/app/lib/methods/getCustomEmojis.js index d7dd56580b..9454b90133 100644 --- a/app/lib/methods/getCustomEmojis.js +++ b/app/lib/methods/getCustomEmojis.js @@ -91,7 +91,7 @@ export function getCustomEmojis() { const updatedSince = await getUpdatedSince(allRecords); // if server version is lower than 0.75.0, fetches from old api - if (semver.lt(serverVersion, '0.75.0')) { + if (serverVersion && semver.lt(serverVersion, '0.75.0')) { // RC 0.61.0 const result = await this.sdk.get('emoji-custom'); diff --git a/app/lib/methods/getPermissions.js b/app/lib/methods/getPermissions.js index b6a2dcd022..0d38298085 100644 --- a/app/lib/methods/getPermissions.js +++ b/app/lib/methods/getPermissions.js @@ -79,7 +79,7 @@ export default function() { const allRecords = await permissionsCollection.query().fetch(); // if server version is lower than 0.73.0, fetches from old api - if (semver.lt(serverVersion, '0.73.0')) { + if (serverVersion && semver.lt(serverVersion, '0.73.0')) { // RC 0.66.0 const result = await this.sdk.get('permissions.list'); if (!result.success) { diff --git a/app/lib/methods/getSettings.js b/app/lib/methods/getSettings.js index 5cd8a04d0f..997e3c5337 100644 --- a/app/lib/methods/getSettings.js +++ b/app/lib/methods/getSettings.js @@ -2,12 +2,14 @@ import { InteractionManager } from 'react-native'; import { sanitizedRaw } from '@nozbe/watermelondb/RawRecord'; import { Q } from '@nozbe/watermelondb'; +import RocketChat from '../rocketchat'; import reduxStore from '../createStore'; import * as actions from '../../actions'; import settings from '../../constants/settings'; import log from '../../utils/log'; import database from '../database'; import protectedFunction from './helpers/protectedFunction'; +import fetch from '../../utils/fetch'; const serverInfoKeys = ['Site_Name', 'UI_Use_Real_Name', 'FileUpload_MediaTypeWhiteList', 'FileUpload_MaxFileSize']; @@ -50,6 +52,20 @@ const serverInfoUpdate = async(serverInfo, iconSetting) => { }); }; +export async function setSettings() { + const db = database.active; + const settingsCollection = db.collections.get('settings'); + const settingsRecords = await settingsCollection.query().fetch(); + const parsed = Object.values(settingsRecords).map(item => ({ + _id: item.id, + valueAsString: item.valueAsString, + valueAsBoolean: item.valueAsBoolean, + valueAsNumber: item.valueAsNumber, + _updatedAt: item._updatedAt + })); + reduxStore.dispatch(actions.setAllSettings(RocketChat.parseSettings(parsed.slice(0, parsed.length)))); +} + export default async function() { try { const db = database.active; diff --git a/app/lib/methods/helpers/parseUrls.js b/app/lib/methods/helpers/parseUrls.js index e0896e3a78..d49c54c473 100644 --- a/app/lib/methods/helpers/parseUrls.js +++ b/app/lib/methods/helpers/parseUrls.js @@ -9,6 +9,13 @@ export default urls => urls.filter(url => url.meta && !url.ignoreParse).map((url decodedOgImage = meta.ogImage.replace(/&/g, '&'); } tmp.image = decodedOgImage || meta.twitterImage || meta.oembedThumbnailUrl; + if (tmp.image) { + if (tmp.image.indexOf('//') === 0) { + tmp.image = `${ url.parsedUrl.protocol }${ tmp.image }`; + } else if (tmp.image.indexOf('/') === 0 && (url.parsedUrl && url.parsedUrl.host)) { + tmp.image = `${ url.parsedUrl.protocol }//${ url.parsedUrl.host }${ tmp.image }`; + } + } tmp.url = url.url; return tmp; }); diff --git a/app/lib/methods/readMessages.js b/app/lib/methods/readMessages.js index 9e61cfc449..552cd1e0e8 100644 --- a/app/lib/methods/readMessages.js +++ b/app/lib/methods/readMessages.js @@ -3,12 +3,14 @@ import log from '../../utils/log'; export default async function readMessages(rid, lastOpen) { try { - // RC 0.61.0 - const data = await this.sdk.post('subscriptions.read', { rid }); const db = database.active; + const subscription = await db.collections.get('subscriptions').find(rid); + + // RC 0.61.0 + await this.sdk.post('subscriptions.read', { rid }); + await db.action(async() => { try { - const subscription = await db.collections.get('subscriptions').find(rid); await subscription.update((s) => { s.open = true; s.alert = false; @@ -22,7 +24,6 @@ export default async function readMessages(rid, lastOpen) { // Do nothing } }); - return data; } catch (e) { log(e); } diff --git a/app/lib/methods/sendFileMessage.js b/app/lib/methods/sendFileMessage.js index dc8674119e..5113391586 100644 --- a/app/lib/methods/sendFileMessage.js +++ b/app/lib/methods/sendFileMessage.js @@ -2,6 +2,7 @@ import { sanitizedRaw } from '@nozbe/watermelondb/RawRecord'; import database from '../database'; import log from '../../utils/log'; +import { headers } from '../../utils/fetch'; const uploadQueue = {}; @@ -78,6 +79,7 @@ export function sendFileMessage(rid, fileInfo, tmid, server, user) { xhr.setRequestHeader('X-Auth-Token', token); xhr.setRequestHeader('X-User-Id', id); + xhr.setRequestHeader('User-Agent', headers['User-Agent']); xhr.upload.onprogress = async({ total, loaded }) => { try { diff --git a/app/lib/methods/sendMessage.js b/app/lib/methods/sendMessage.js index 5b7f051ca7..7b9e341ec3 100644 --- a/app/lib/methods/sendMessage.js +++ b/app/lib/methods/sendMessage.js @@ -5,81 +5,156 @@ import database from '../database'; import log from '../../utils/log'; import random from '../../utils/random'; -export const getMessage = async(rid, msg = '', tmid, user) => { - const _id = random(17); - const { id, username } = user; +export async function sendMessageCall(message) { + const { + id: _id, subscription: { id: rid }, msg, tmid + } = message; try { + const sdk = this.shareSDK || this.sdk; + // RC 0.60.0 + await sdk.post('chat.sendMessage', { + message: { + _id, rid, msg, tmid + } + }); + } catch (e) { const db = database.active; const msgCollection = db.collections.get('messages'); - let message; + const threadMessagesCollection = db.collections.get('thread_messages'); + const errorBatch = []; + const messageRecord = await msgCollection.find(_id); + errorBatch.push( + messageRecord.prepareUpdate((m) => { + m.status = messagesStatus.ERROR; + }) + ); + + if (tmid) { + const threadMessageRecord = await threadMessagesCollection.find(_id); + errorBatch.push( + threadMessageRecord.prepareUpdate((tm) => { + tm.status = messagesStatus.ERROR; + }) + ); + } + await db.action(async() => { - message = await msgCollection.create((m) => { - m._raw = sanitizedRaw({ id: _id }, msgCollection.schema); - m.subscription.id = rid; - m.msg = msg; - m.tmid = tmid; - m.ts = new Date(); - m._updatedAt = new Date(); - m.status = messagesStatus.TEMP; - m.u = { - _id: id || '1', - username - }; - }); + await db.batch(...errorBatch); }); - return message; - } catch (error) { - console.warn('getMessage', error); } -}; - -export async function sendMessageCall(message) { - const { - id: _id, subscription: { id: rid }, msg, tmid - } = message; - // RC 0.60.0 - const data = await this.sdk.post('chat.sendMessage', { - message: { - _id, rid, msg, tmid - } - }); - return data; } export default async function(rid, msg, tmid, user) { try { const db = database.active; - const subsCollections = db.collections.get('subscriptions'); - const message = await getMessage(rid, msg, tmid, user); - if (!message) { - return; + const subsCollection = db.collections.get('subscriptions'); + const msgCollection = db.collections.get('messages'); + const threadCollection = db.collections.get('threads'); + const threadMessagesCollection = db.collections.get('thread_messages'); + const messageId = random(17); + const batch = []; + const message = { + id: messageId, subscription: { id: rid }, msg, tmid + }; + const messageDate = new Date(); + let tMessageRecord; + + // If it's replying to a thread + if (tmid) { + try { + // Find thread message header in Messages collection + tMessageRecord = await msgCollection.find(tmid); + batch.push( + tMessageRecord.prepareUpdate((m) => { + m.tlm = messageDate; + m.tcount += 1; + }) + ); + + try { + // Find thread message header in Threads collection + await threadCollection.find(tmid); + } catch (error) { + // If there's no record, create one + batch.push( + threadCollection.prepareCreate((tm) => { + tm._raw = sanitizedRaw({ id: tmid }, threadCollection.schema); + tm.subscription.id = rid; + tm.tmid = tmid; + tm.msg = tMessageRecord.msg; + tm.ts = tMessageRecord.ts; + tm._updatedAt = messageDate; + tm.status = messagesStatus.SENT; // Original message was sent already + tm.u = tMessageRecord.u; + }) + ); + } + + // Create the message sent in ThreadMessages collection + batch.push( + threadMessagesCollection.prepareCreate((tm) => { + tm._raw = sanitizedRaw({ id: messageId }, threadMessagesCollection.schema); + tm.subscription.id = rid; + tm.rid = tmid; + tm.msg = msg; + tm.ts = messageDate; + tm._updatedAt = messageDate; + tm.status = messagesStatus.TEMP; + tm.u = { + _id: user.id || '1', + username: user.username + }; + }) + ); + } catch (e) { + log(e); + } } + // Create the message sent in Messages collection + batch.push( + msgCollection.prepareCreate((m) => { + m._raw = sanitizedRaw({ id: messageId }, msgCollection.schema); + m.subscription.id = rid; + m.msg = msg; + m.ts = messageDate; + m._updatedAt = messageDate; + m.status = messagesStatus.TEMP; + m.u = { + _id: user.id || '1', + username: user.username + }; + if (tmid) { + m.tmid = tmid; + m.tlm = messageDate; + m.tmsg = tMessageRecord.msg; + } + }) + ); + try { - const room = await subsCollections.find(rid); - await db.action(async() => { - await room.update((r) => { - r.draftMessage = null; - }); - }); + const room = await subsCollection.find(rid); + if (room.draftMessage) { + batch.push( + room.prepareUpdate((r) => { + r.draftMessage = null; + }) + ); + } } catch (e) { // Do nothing } try { - await sendMessageCall.call(this, message); await db.action(async() => { - await message.update((m) => { - m.status = messagesStatus.SENT; - }); + await db.batch(...batch); }); } catch (e) { - await db.action(async() => { - await message.update((m) => { - m.status = messagesStatus.ERROR; - }); - }); + log(e); + return; } + + await sendMessageCall.call(this, message); } catch (e) { log(e); } diff --git a/app/lib/methods/subscriptions/room.js b/app/lib/methods/subscriptions/room.js index 1a3de160b7..46e3bba188 100644 --- a/app/lib/methods/subscriptions/room.js +++ b/app/lib/methods/subscriptions/room.js @@ -8,6 +8,7 @@ import buildMessage from '../helpers/buildMessage'; import database from '../../database'; import reduxStore from '../../createStore'; import { addUserTyping, removeUserTyping, clearUserTyping } from '../../../actions/usersTyping'; +import debounce from '../../../utils/debounce'; const unsubscribe = subscriptions => subscriptions.forEach(sub => sub.unsubscribe().catch(() => console.log('unsubscribeRoom'))); const removeListener = listener => listener.stop(); @@ -85,6 +86,10 @@ export default function subscribeRoom({ rid }) { } }); + const read = debounce((lastOpen) => { + this.readMessages(rid, lastOpen); + }, 300); + const handleMessageReceived = protectedFunction((ddpMessage) => { const message = buildMessage(EJSON.fromJSONValue(ddpMessage.fields.args[0])); const lastOpen = new Date(); @@ -94,20 +99,29 @@ export default function subscribeRoom({ rid }) { InteractionManager.runAfterInteractions(async() => { const db = database.active; const batch = []; - const subCollection = db.collections.get('subscriptions'); const msgCollection = db.collections.get('messages'); const threadsCollection = db.collections.get('threads'); const threadMessagesCollection = db.collections.get('thread_messages'); + let messageRecord; + let threadRecord; + let threadMessageRecord; // Create or update message try { - const messageRecord = await msgCollection.find(message._id); - batch.push( - messageRecord.prepareUpdate((m) => { - Object.assign(m, message); - }) - ); + messageRecord = await msgCollection.find(message._id); } catch (error) { + // Do nothing + } + if (messageRecord) { + try { + const update = messageRecord.prepareUpdate((m) => { + Object.assign(m, message); + }); + batch.push(update); + } catch (e) { + console.log(e); + } + } else { batch.push( msgCollection.prepareCreate(protectedFunction((m) => { m._raw = sanitizedRaw({ id: message._id }, msgCollection.schema); @@ -120,13 +134,18 @@ export default function subscribeRoom({ rid }) { // Create or update thread if (message.tlm) { try { - const threadRecord = await threadsCollection.find(message._id); + threadRecord = await threadsCollection.find(message._id); + } catch (error) { + // Do nothing + } + + if (threadRecord) { batch.push( - threadRecord.prepareUpdate((t) => { + threadRecord.prepareUpdate(protectedFunction((t) => { Object.assign(t, message); - }) + })) ); - } catch (error) { + } else { batch.push( threadsCollection.prepareCreate(protectedFunction((t) => { t._raw = sanitizedRaw({ id: message._id }, threadsCollection.schema); @@ -140,15 +159,20 @@ export default function subscribeRoom({ rid }) { // Create or update thread message if (message.tmid) { try { - const threadMessageRecord = await threadMessagesCollection.find(message._id); + threadMessageRecord = await threadMessagesCollection.find(message._id); + } catch (error) { + // Do nothing + } + + if (threadMessageRecord) { batch.push( - threadMessageRecord.prepareUpdate((tm) => { + threadMessageRecord.prepareUpdate(protectedFunction((tm) => { Object.assign(tm, message); tm.rid = message.tmid; delete tm.tmid; - }) + })) ); - } catch (error) { + } else { batch.push( threadMessagesCollection.prepareCreate(protectedFunction((tm) => { tm._raw = sanitizedRaw({ id: message._id }, threadMessagesCollection.schema); @@ -161,12 +185,7 @@ export default function subscribeRoom({ rid }) { } } - try { - await subCollection.find(rid); - this.readMessages(rid, lastOpen); - } catch (e) { - console.log('Subscription not found. We probably subscribed to a not joined channel. No need to mark as read.'); - } + read(lastOpen); try { await db.action(async() => { diff --git a/app/lib/methods/subscriptions/rooms.js b/app/lib/methods/subscriptions/rooms.js index c6b940c9e9..91be40fc9e 100644 --- a/app/lib/methods/subscriptions/rooms.js +++ b/app/lib/methods/subscriptions/rooms.js @@ -66,10 +66,10 @@ const createOrUpdateSubscription = async(subscription, room) => { } catch (error) { try { await db.action(async() => { - await roomsCollection.create((r) => { + await roomsCollection.create(protectedFunction((r) => { r._raw = sanitizedRaw({ id: room._id }, roomsCollection.schema); Object.assign(r, room); - }); + })); }); } catch (e) { // Do nothing @@ -96,20 +96,66 @@ const createOrUpdateSubscription = async(subscription, room) => { const tmp = merge(subscription, room); await db.action(async() => { + let sub; try { - const sub = await subCollection.find(tmp.rid); - await sub.update((s) => { - Object.assign(s, tmp); - }); + sub = await subCollection.find(tmp.rid); } catch (error) { - await subCollection.create((s) => { - s._raw = sanitizedRaw({ id: tmp.rid }, subCollection.schema); - Object.assign(s, tmp); - if (s.roomUpdatedAt) { - s.roomUpdatedAt = new Date(); - } - }); + // Do nothing } + + const batch = []; + if (sub) { + try { + const update = sub.prepareUpdate((s) => { + Object.assign(s, tmp); + }); + batch.push(update); + } catch (e) { + console.log(e); + } + } else { + try { + const create = subCollection.prepareCreate((s) => { + s._raw = sanitizedRaw({ id: tmp.rid }, subCollection.schema); + Object.assign(s, tmp); + if (s.roomUpdatedAt) { + s.roomUpdatedAt = new Date(); + } + }); + batch.push(create); + } catch (e) { + console.log(e); + } + } + + // if (tmp.lastMessage) { + // const lastMessage = buildMessage(tmp.lastMessage); + // const messagesCollection = db.collections.get('messages'); + // let messageRecord; + // try { + // messageRecord = await messagesCollection.find(lastMessage._id); + // } catch (error) { + // // Do nothing + // } + + // if (messageRecord) { + // batch.push( + // messageRecord.prepareUpdate(() => { + // Object.assign(messageRecord, lastMessage); + // }) + // ); + // } else { + // batch.push( + // messagesCollection.prepareCreate((m) => { + // m._raw = sanitizedRaw({ id: lastMessage._id }, messagesCollection.schema); + // m.subscription.id = lastMessage.rid; + // return Object.assign(m, lastMessage); + // }) + // ); + // } + // } + + await db.batch(...batch); }); } catch (e) { log(e); @@ -149,7 +195,7 @@ export default function subscribeRooms() { sub.prepareDestroyPermanently(), ...messagesToDelete, ...threadsToDelete, - ...threadMessagesToDelete, + ...threadMessagesToDelete ); }); } catch (e) { diff --git a/app/lib/methods/updateMessages.js b/app/lib/methods/updateMessages.js index c19bbf7465..77a0ced435 100644 --- a/app/lib/methods/updateMessages.js +++ b/app/lib/methods/updateMessages.js @@ -6,7 +6,7 @@ import log from '../../utils/log'; import database from '../database'; import protectedFunction from './helpers/protectedFunction'; -export default function updateMessages({ rid, update, remove }) { +export default function updateMessages({ rid, update = [], remove = [] }) { try { if (!((update && update.length) || (remove && remove.length))) { return; @@ -22,7 +22,7 @@ export default function updateMessages({ rid, update, remove }) { console.log('updateMessages: subscription not found'); } - const messagesIds = update.map(m => m._id); + const messagesIds = [...update.map(m => m._id), ...remove.map(m => m._id)]; const msgCollection = db.collections.get('messages'); const threadCollection = db.collections.get('threads'); const threadMessagesCollection = db.collections.get('thread_messages'); diff --git a/app/lib/rocketchat.js b/app/lib/rocketchat.js index e625484570..fb79d6b45f 100644 --- a/app/lib/rocketchat.js +++ b/app/lib/rocketchat.js @@ -1,6 +1,6 @@ import { AsyncStorage, InteractionManager } from 'react-native'; import semver from 'semver'; -import { Rocketchat as RocketchatClient } from '@rocket.chat/sdk'; +import { Rocketchat as RocketchatClient, settings as RocketChatSettings } from '@rocket.chat/sdk'; import RNUserDefaults from 'rn-user-defaults'; import { Q } from '@nozbe/watermelondb'; import * as FileSystem from 'expo-file-system'; @@ -12,10 +12,9 @@ import database from './database'; import log from '../utils/log'; import { isIOS, getBundleId } from '../utils/deviceInfo'; import { extractHostname } from '../utils/server'; +import fetch, { headers } from '../utils/fetch'; -import { - setUser, setLoginServices, loginRequest, loginFailure, logout -} from '../actions/login'; +import { setUser, setLoginServices, loginRequest } from '../actions/login'; import { disconnect, connectSuccess, connectRequest } from '../actions/connect'; import { shareSelectServer, shareSetUser @@ -26,7 +25,7 @@ import subscribeRoom from './methods/subscriptions/room'; import protectedFunction from './methods/helpers/protectedFunction'; import readMessages from './methods/readMessages'; -import getSettings from './methods/getSettings'; +import getSettings, { setSettings } from './methods/getSettings'; import getRooms from './methods/getRooms'; import getPermissions from './methods/getPermissions'; @@ -39,7 +38,7 @@ import loadMessagesForRoom from './methods/loadMessagesForRoom'; import loadMissedMessages from './methods/loadMissedMessages'; import loadThreadMessages from './methods/loadThreadMessages'; -import sendMessage, { getMessage, sendMessageCall } from './methods/sendMessage'; +import sendMessage, { sendMessageCall } from './methods/sendMessage'; import { sendFileMessage, cancelUpload, isUploadActive } from './methods/sendFileMessage'; import callJitsi from './methods/callJitsi'; @@ -47,16 +46,20 @@ import callJitsi from './methods/callJitsi'; import { getDeviceToken } from '../notifications/push'; import { SERVERS, SERVER_URL } from '../constants/userDefaults'; import { setActiveUsers } from '../actions/activeUsers'; +import I18n from '../i18n'; const TOKEN_KEY = 'reactnativemeteor_usertoken'; const SORT_PREFS_KEY = 'RC_SORT_PREFS_KEY'; export const MARKDOWN_KEY = 'RC_MARKDOWN_KEY'; +export const THEME_PREFERENCES_KEY = 'RC_THEME_PREFERENCES_KEY'; export const CRASH_REPORT_KEY = 'RC_CRASH_REPORT_KEY'; const returnAnArray = obj => obj || []; const MIN_ROCKETCHAT_VERSION = '0.70.0'; const STATUSES = ['offline', 'online', 'away', 'busy']; +RocketChatSettings.customHeaders = headers; + const RocketChat = { TOKEN_KEY, callJitsi, @@ -85,9 +88,53 @@ const RocketChat = { console.warn(`RNUserDefaults error: ${ error.message }`); } }, + async getWebsocketInfo({ server }) { + // Use useSsl: false only if server url starts with http:// + const useSsl = !/http:\/\//.test(server); + + const sdk = new RocketchatClient({ host: server, protocol: 'ddp', useSsl }); + + try { + await sdk.connect(); + } catch (err) { + if (err.message && err.message.includes('400')) { + return { + success: false, + message: 'Websocket_disabled', + messageOptions: { + contact: I18n.t('Contact_your_server_admin') + } + }; + } + } + + sdk.disconnect(); + + return { + success: true + }; + }, async getServerInfo(server) { + const notRCServer = { + success: false, + message: 'Not_RC_Server', + messageOptions: { + contact: I18n.t('Contact_your_server_admin') + } + }; try { - const result = await fetch(`${ server }/api/info`).then(response => response.json()); + const result = await fetch(`${ server }/api/info`).then(async(response) => { + let res = notRCServer; + try { + res = await response.json(); + if (!(res && res.success)) { + return notRCServer; + } + } catch (e) { + // do nothing + } + return res; + }); if (result.success) { if (semver.lt(result.version, MIN_ROCKETCHAT_VERSION)) { return { @@ -99,20 +146,23 @@ const RocketChat = { } }; } - return result; } + return result; } catch (e) { log(e); } return { success: false, - message: 'The_URL_is_invalid' + message: 'The_URL_is_invalid', + messageOptions: { + contact: I18n.t('Contact_your_server_admin') + } }; }, stopListener(listener) { return listener && listener.stop(); }, - connect({ server, user }) { + connect({ server, user, logoutOnError = false }) { return new Promise((resolve) => { if (!this.sdk || this.sdk.client.host !== server) { database.setActiveDB(server); @@ -157,7 +207,7 @@ const RocketChat = { this.sdk.connect() .then(() => { if (user && user.token) { - reduxStore.dispatch(loginRequest({ resume: user.token })); + reduxStore.dispatch(loginRequest({ resume: user.token }, logoutOnError)); } }) .catch((err) => { @@ -209,17 +259,17 @@ const RocketChat = { }, async shareExtensionInit(server) { - database.setActiveDB(server); + database.setShareDB(server); - if (this.sdk) { - this.sdk.disconnect(); - this.sdk = null; + if (this.shareSDK) { + this.shareSDK.disconnect(); + this.shareSDK = null; } // Use useSsl: false only if server url starts with http:// const useSsl = !/http:\/\//.test(server); - this.sdk = new RocketchatClient({ host: server, protocol: 'ddp', useSsl }); + this.shareSDK = new RocketchatClient({ host: server, protocol: 'ddp', useSsl }); // set Server const serversDB = database.servers; @@ -248,6 +298,13 @@ const RocketChat = { log(e); } }, + closeShareExtension() { + if (this.shareSDK) { + this.shareSDK.disconnect(); + this.shareSDK = null; + } + database.share = null; + }, updateJitsiTimeout(rid) { return this.sdk.methodCall('jitsi:updateTimeout', rid); @@ -281,7 +338,8 @@ const RocketChat = { }; } else if (state.settings.CROWD_Enable) { params = { - ...params, + username: user, + crowdPassword: password, crowd: true }; } @@ -312,9 +370,10 @@ const RocketChat = { async login(params) { try { + const sdk = this.shareSDK || this.sdk; // RC 0.64.0 - await this.sdk.login(params); - const { result } = this.sdk.currentLogin; + await sdk.login(params); + const { result } = sdk.currentLogin; const user = { id: result.userId, token: result.authToken, @@ -328,11 +387,6 @@ const RocketChat = { }; return user; } catch (e) { - if (e.data && e.data.message && /you've been logged out by the server/i.test(e.data.message)) { - reduxStore.dispatch(logout({ server: this.sdk.client.host })); - } else { - reduxStore.dispatch(loginFailure(e)); - } throw e; } }, @@ -378,8 +432,13 @@ const RocketChat = { const serversDB = database.servers; await serversDB.action(async() => { const usersCollection = serversDB.collections.get('users'); - const user = await usersCollection.find(userId); - await user.destroyPermanently(); + const userRecord = await usersCollection.find(userId); + const serverCollection = serversDB.collections.get('servers'); + const serverRecord = await serverCollection.find(server); + await serversDB.batch( + userRecord.prepareDestroyPermanently(), + serverRecord.prepareDestroyPermanently() + ); }); } catch (error) { // Do nothing @@ -427,11 +486,10 @@ const RocketChat = { loadMissedMessages, loadMessagesForRoom, loadThreadMessages, - getMessage, sendMessage, getRooms, readMessages, - async resendMessage(message) { + async resendMessage(message, tmid) { const db = database.active; try { await db.action(async() => { @@ -439,17 +497,20 @@ const RocketChat = { m.status = messagesStatus.TEMP; }); }); - await sendMessageCall.call(this, message); - } catch (error) { - try { - await db.action(async() => { - await message.update((m) => { - m.status = messagesStatus.ERROR; - }); - }); - } catch (e) { - log(e); + let m = { + id: message.id, + msg: message.msg, + subscription: { id: message.subscription.id } + }; + if (tmid) { + m = { + ...m, + tmid + }; } + await sendMessageCall.call(this, m); + } catch (e) { + log(e); } }, @@ -527,6 +588,7 @@ const RocketChat = { cancelUpload, isUploadActive, getSettings, + setSettings, getPermissions, getCustomEmojis, setCustomEmojis, @@ -971,7 +1033,7 @@ const RocketChat = { const serverVersion = reduxStore.getState().server.version; // if server is lower than 1.1.0 - if (semver.lt(semver.coerce(serverVersion), '1.1.0')) { + if (serverVersion && semver.lt(semver.coerce(serverVersion), '1.1.0')) { if (this.activeUsersSubTimeout) { clearTimeout(this.activeUsersSubTimeout); this.activeUsersSubTimeout = false; diff --git a/app/notifications/inApp/index.js b/app/notifications/inApp/index.js index 7e99903af7..c03f2093d1 100644 --- a/app/notifications/inApp/index.js +++ b/app/notifications/inApp/index.js @@ -8,13 +8,14 @@ import equal from 'deep-equal'; import { responsive } from 'react-native-responsive-ui'; import Touchable from 'react-native-platform-touchable'; -import { isNotch, isIOS } from '../../utils/deviceInfo'; +import { isNotch, isIOS, isTablet } from '../../utils/deviceInfo'; import { CustomIcon } from '../../lib/Icons'; -import { COLOR_BACKGROUND_NOTIFICATION, COLOR_SEPARATOR, COLOR_TEXT } from '../../constants/colors'; +import { themes } from '../../constants/colors'; import Avatar from '../../containers/Avatar'; import { removeNotification as removeNotificationAction } from '../../actions/notification'; import sharedStyles from '../../views/Styles'; import { ROW_HEIGHT } from '../../presentation/RoomItem'; +import { withTheme } from '../../theme'; const AVATAR_SIZE = 48; const ANIMATION_DURATION = 300; @@ -38,33 +39,31 @@ const styles = StyleSheet.create({ justifyContent: 'space-between', position: 'absolute', zIndex: 2, - backgroundColor: COLOR_BACKGROUND_NOTIFICATION, width: '100%', - borderBottomWidth: StyleSheet.hairlineWidth, - borderColor: COLOR_SEPARATOR + borderBottomWidth: StyleSheet.hairlineWidth }, content: { flex: 1, flexDirection: 'row', alignItems: 'center' }, + inner: { + flex: 1 + }, avatar: { marginRight: 10 }, roomName: { fontSize: 17, lineHeight: 20, - ...sharedStyles.textColorNormal, ...sharedStyles.textMedium }, message: { fontSize: 14, lineHeight: 17, - ...sharedStyles.textRegular, - ...sharedStyles.textColorNormal + ...sharedStyles.textRegular }, close: { - color: COLOR_TEXT, marginLeft: 10 } }); @@ -77,7 +76,8 @@ class NotificationBadge extends React.Component { userId: PropTypes.string, notification: PropTypes.object, window: PropTypes.object, - removeNotification: PropTypes.func + removeNotification: PropTypes.func, + theme: PropTypes.string } constructor(props) { @@ -88,8 +88,11 @@ class NotificationBadge extends React.Component { shouldComponentUpdate(nextProps) { const { notification: nextNotification } = nextProps; const { - notification: { payload }, window + notification: { payload }, window, theme } = this.props; + if (nextProps.theme !== theme) { + return true; + } if (!equal(nextNotification.payload, payload)) { return true; } @@ -120,7 +123,7 @@ class NotificationBadge extends React.Component { { toValue: 1, ...ANIMATION_PROPS - }, + } ).start(() => { this.clearTimeout(); this.timeout = setTimeout(() => { @@ -136,7 +139,7 @@ class NotificationBadge extends React.Component { { toValue: 0, ...ANIMATION_PROPS - }, + } ).start(); setTimeout(removeNotification, ANIMATION_DURATION); } @@ -155,26 +158,26 @@ class NotificationBadge extends React.Component { } goToRoom = async() => { - const { notification: { payload }, navigation } = this.props; + const { notification: { payload }, navigation, baseUrl } = this.props; const { rid, type, prid } = payload; if (!rid) { return; } - const name = type === 'p' ? payload.name : payload.sender.username; + const name = type === 'd' ? payload.sender.username : payload.name; await navigation.navigate('RoomsListView'); navigation.navigate('RoomView', { - rid, name, t: type, prid + rid, name, t: type, prid, baseUrl }); this.hide(); } render() { const { - baseUrl, token, userId, notification, window + baseUrl, token, userId, notification, window, theme } = this.props; const { message, payload } = notification; const { type } = payload; - const name = type === 'p' ? payload.name : payload.sender.username; + const name = type === 'd' ? payload.sender.username : payload.name; let top = 0; if (isIOS) { @@ -182,18 +185,25 @@ class NotificationBadge extends React.Component { if (portrait) { top = isNotch ? 45 : 20; } else { - top = 0; + top = isTablet ? 20 : 0; } } - const maxWidthMessage = window.width - 110; - const translateY = this.animatedValue.interpolate({ inputRange: [0, 1], outputRange: [-top - ROW_HEIGHT, top] }); return ( - <Animated.View style={[styles.container, { transform: [{ translateY }] }]}> + <Animated.View + style={[ + styles.container, + { + transform: [{ translateY }], + backgroundColor: themes[theme].focusedBackground, + borderColor: themes[theme].separatorColor + } + ]} + > <Touchable style={styles.content} onPress={this.goToRoom} @@ -202,14 +212,14 @@ class NotificationBadge extends React.Component { > <> <Avatar text={name} size={AVATAR_SIZE} type={type} baseUrl={baseUrl} style={styles.avatar} userId={userId} token={token} /> - <View> - <Text style={styles.roomName}>{name}</Text> - <Text style={[styles.message, { maxWidth: maxWidthMessage }]} numberOfLines={1}>{message}</Text> + <View style={styles.inner}> + <Text style={[styles.roomName, { color: themes[theme].titleText }]} numberOfLines={1}>{name}</Text> + <Text style={[styles.message, { color: themes[theme].titleText }]} numberOfLines={1}>{message}</Text> </View> </> </Touchable> <TouchableOpacity onPress={this.hide}> - <CustomIcon name='circle-cross' style={styles.close} size={20} /> + <CustomIcon name='circle-cross' style={[styles.close, { color: themes[theme].titleText }]} size={20} /> </TouchableOpacity> </Animated.View> ); @@ -227,4 +237,4 @@ const mapDispatchToProps = dispatch => ({ removeNotification: () => dispatch(removeNotificationAction()) }); -export default responsive(connect(mapStateToProps, mapDispatchToProps)(NotificationBadge)); +export default responsive(connect(mapStateToProps, mapDispatchToProps)(withTheme(NotificationBadge))); diff --git a/app/presentation/DirectoryItem/index.js b/app/presentation/DirectoryItem/index.js index f9c0d88832..c77bc4c26c 100644 --- a/app/presentation/DirectoryItem/index.js +++ b/app/presentation/DirectoryItem/index.js @@ -2,25 +2,31 @@ import React from 'react'; import { Text, View } from 'react-native'; import PropTypes from 'prop-types'; -import Avatar from '../../containers/Avatar'; import Touch from '../../utils/touch'; +import Avatar from '../../containers/Avatar'; import RoomTypeIcon from '../../containers/RoomTypeIcon'; import styles, { ROW_HEIGHT } from './styles'; +import { themes } from '../../constants/colors'; export { ROW_HEIGHT }; -const DirectoryItemLabel = React.memo(({ text }) => { +const DirectoryItemLabel = React.memo(({ text, theme }) => { if (!text) { return null; } - return <Text style={styles.directoryItemLabel}>{text}</Text>; + return <Text style={[styles.directoryItemLabel, { color: themes[theme].auxiliaryText }]}>{text}</Text>; }); const DirectoryItem = ({ - title, description, avatar, onPress, testID, style, baseUrl, user, rightLabel, type + title, description, avatar, onPress, testID, style, baseUrl, user, rightLabel, type, theme }) => ( - <Touch onPress={onPress} style={styles.directoryItemButton} testID={testID}> - <View style={[styles.directoryItemContainer, style]}> + <Touch + onPress={onPress} + style={{ backgroundColor: themes[theme].backgroundColor }} + testID={testID} + theme={theme} + > + <View style={[styles.directoryItemContainer, styles.directoryItemButton, style]}> <Avatar text={avatar} size={30} @@ -32,12 +38,12 @@ const DirectoryItem = ({ /> <View style={styles.directoryItemTextContainer}> <View style={styles.directoryItemTextTitle}> - <RoomTypeIcon type={type} /> - <Text style={styles.directoryItemName} numberOfLines={1}>{title}</Text> + <RoomTypeIcon type={type} theme={theme} /> + <Text style={[styles.directoryItemName, { color: themes[theme].titleText }]} numberOfLines={1}>{title}</Text> </View> - { description ? <Text style={styles.directoryItemUsername} numberOfLines={1}>{description}</Text> : null } + { description ? <Text style={[styles.directoryItemUsername, { color: themes[theme].auxiliaryText }]} numberOfLines={1}>{description}</Text> : null } </View> - <DirectoryItemLabel text={rightLabel} /> + <DirectoryItemLabel text={rightLabel} theme={theme} /> </View> </Touch> ); @@ -55,11 +61,13 @@ DirectoryItem.propTypes = { onPress: PropTypes.func.isRequired, testID: PropTypes.string.isRequired, style: PropTypes.any, - rightLabel: PropTypes.string + rightLabel: PropTypes.string, + theme: PropTypes.string }; DirectoryItemLabel.propTypes = { - text: PropTypes.string + text: PropTypes.string, + theme: PropTypes.string }; export default DirectoryItem; diff --git a/app/presentation/DirectoryItem/styles.js b/app/presentation/DirectoryItem/styles.js index 0e8382d064..55fa36c47c 100644 --- a/app/presentation/DirectoryItem/styles.js +++ b/app/presentation/DirectoryItem/styles.js @@ -1,14 +1,12 @@ import { StyleSheet } from 'react-native'; -import { COLOR_WHITE } from '../../constants/colors'; import sharedStyles from '../../views/Styles'; export const ROW_HEIGHT = 54; export default StyleSheet.create({ directoryItemButton: { - height: ROW_HEIGHT, - backgroundColor: COLOR_WHITE + height: ROW_HEIGHT }, directoryItemContainer: { flex: 1, @@ -32,18 +30,15 @@ export default StyleSheet.create({ directoryItemName: { flex: 1, fontSize: 17, - ...sharedStyles.textMedium, - ...sharedStyles.textColorNormal + ...sharedStyles.textMedium }, directoryItemUsername: { fontSize: 14, - ...sharedStyles.textRegular, - ...sharedStyles.textColorDescription + ...sharedStyles.textRegular }, directoryItemLabel: { fontSize: 14, paddingLeft: 10, - ...sharedStyles.textRegular, - ...sharedStyles.textColorDescription + ...sharedStyles.textRegular } }); diff --git a/app/presentation/RoomItem/Actions.js b/app/presentation/RoomItem/Actions.js index 7bdebcb1b9..e0b8c29b26 100644 --- a/app/presentation/RoomItem/Actions.js +++ b/app/presentation/RoomItem/Actions.js @@ -6,9 +6,10 @@ import PropTypes from 'prop-types'; import I18n from '../../i18n'; import styles, { ACTION_WIDTH, LONG_SWIPE } from './styles'; import { CustomIcon } from '../../lib/Icons'; +import { themes } from '../../constants/colors'; export const LeftActions = React.memo(({ - transX, isRead, width, onToggleReadPress + theme, transX, isRead, width, onToggleReadPress }) => { const translateX = transX.interpolate({ inputRange: [0, ACTION_WIDTH], @@ -21,7 +22,7 @@ export const LeftActions = React.memo(({ }); return ( <View - style={styles.actionsContainer} + style={[styles.actionsContainer, styles.actionLeftContainer]} pointerEvents='box-none' > <Animated.View @@ -30,7 +31,8 @@ export const LeftActions = React.memo(({ { right: width - ACTION_WIDTH, width, - transform: [{ translateX }] + transform: [{ translateX }], + backgroundColor: themes[theme].tintColor } ]} > @@ -46,7 +48,7 @@ export const LeftActions = React.memo(({ <RectButton style={styles.actionButton} onPress={onToggleReadPress}> <> <CustomIcon size={20} name={isRead ? 'flag' : 'check'} color='white' /> - <Text style={styles.actionText}>{I18n.t(isRead ? 'Unread' : 'Read')}</Text> + <Text style={[styles.actionText, { color: themes[theme].buttonText }]}>{I18n.t(isRead ? 'Unread' : 'Read')}</Text> </> </RectButton> </Animated.View> @@ -56,7 +58,7 @@ export const LeftActions = React.memo(({ }); export const RightActions = React.memo(({ - transX, favorite, width, toggleFav, onHidePress + transX, favorite, width, toggleFav, onHidePress, theme }) => { const translateXFav = transX.interpolate({ inputRange: [-width / 2, -ACTION_WIDTH * 2, 0], @@ -82,14 +84,15 @@ export const RightActions = React.memo(({ styles.actionRightButtonContainer, { width, - transform: [{ translateX: translateXFav }] + transform: [{ translateX: translateXFav }], + backgroundColor: themes[theme].hideBackground } ]} > - <RectButton style={[styles.actionButton, { backgroundColor: '#ffbb00' }]} onPress={toggleFav}> + <RectButton style={[styles.actionButton, { backgroundColor: themes[theme].favoriteBackground }]} onPress={toggleFav}> <> - <CustomIcon size={20} name={favorite ? 'Star-filled' : 'star'} color='white' /> - <Text style={styles.actionText}>{I18n.t(favorite ? 'Unfavorite' : 'Favorite')}</Text> + <CustomIcon size={20} name={favorite ? 'Star-filled' : 'star'} color={themes[theme].buttonText} /> + <Text style={[styles.actionText, { color: themes[theme].buttonText }]}>{I18n.t(favorite ? 'Unfavorite' : 'Favorite')}</Text> </> </RectButton> </Animated.View> @@ -102,10 +105,10 @@ export const RightActions = React.memo(({ } ]} > - <RectButton style={[styles.actionButton, { backgroundColor: '#54585e' }]} onPress={onHidePress}> + <RectButton style={[styles.actionButton, { backgroundColor: themes[theme].hideBackground }]} onPress={onHidePress}> <> - <CustomIcon size={20} name='eye-off' color='white' /> - <Text style={styles.actionText}>{I18n.t('Hide')}</Text> + <CustomIcon size={20} name='eye-off' color={themes[theme].buttonText} /> + <Text style={[styles.actionText, { color: themes[theme].buttonText }]}>{I18n.t('Hide')}</Text> </> </RectButton> </Animated.View> @@ -114,6 +117,7 @@ export const RightActions = React.memo(({ }); LeftActions.propTypes = { + theme: PropTypes.string, transX: PropTypes.object, isRead: PropTypes.bool, width: PropTypes.number, @@ -121,6 +125,7 @@ LeftActions.propTypes = { }; RightActions.propTypes = { + theme: PropTypes.string, transX: PropTypes.object, favorite: PropTypes.bool, width: PropTypes.number, diff --git a/app/presentation/RoomItem/LastMessage.js b/app/presentation/RoomItem/LastMessage.js index bafd0acc8b..52724b4690 100644 --- a/app/presentation/RoomItem/LastMessage.js +++ b/app/presentation/RoomItem/LastMessage.js @@ -6,6 +6,7 @@ import _ from 'lodash'; import I18n from '../../i18n'; import styles from './styles'; import Markdown from '../../containers/markdown'; +import { themes } from '../../constants/colors'; const formatMsg = ({ lastMessage, type, showLastMessage, username @@ -45,20 +46,22 @@ const formatMsg = ({ const arePropsEqual = (oldProps, newProps) => _.isEqual(oldProps, newProps); const LastMessage = React.memo(({ - lastMessage, type, showLastMessage, username, alert + lastMessage, type, showLastMessage, username, alert, theme }) => ( <Markdown msg={formatMsg({ lastMessage, type, showLastMessage, username })} - style={[styles.markdownText, alert && styles.markdownTextAlert]} + style={[styles.markdownText, { color: alert ? themes[theme].bodyText : themes[theme].auxiliaryText }]} customEmojis={false} numberOfLines={2} preview + theme={theme} /> ), arePropsEqual); LastMessage.propTypes = { + theme: PropTypes.string, lastMessage: PropTypes.object, type: PropTypes.string, showLastMessage: PropTypes.bool, diff --git a/app/presentation/RoomItem/Touchable.js b/app/presentation/RoomItem/Touchable.js new file mode 100644 index 0000000000..5107a21daf --- /dev/null +++ b/app/presentation/RoomItem/Touchable.js @@ -0,0 +1,219 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { Animated } from 'react-native'; +import { PanGestureHandler, State } from 'react-native-gesture-handler'; + +import Touch from '../../utils/touch'; +import { + ACTION_WIDTH, + SMALL_SWIPE, + LONG_SWIPE +} from './styles'; +import { themes } from '../../constants/colors'; +import { LeftActions, RightActions } from './Actions'; + +class Touchable extends React.Component { + static propTypes = { + type: PropTypes.string.isRequired, + onPress: PropTypes.func, + testID: PropTypes.string, + width: PropTypes.number, + favorite: PropTypes.bool, + isRead: PropTypes.bool, + rid: PropTypes.string, + toggleFav: PropTypes.func, + toggleRead: PropTypes.func, + hideChannel: PropTypes.func, + children: PropTypes.element, + theme: PropTypes.string + } + + constructor(props) { + super(props); + this.dragX = new Animated.Value(0); + this.rowOffSet = new Animated.Value(0); + this.transX = Animated.add( + this.rowOffSet, + this.dragX + ); + this.state = { + rowState: 0 // 0: closed, 1: right opened, -1: left opened + }; + this._onGestureEvent = Animated.event( + [{ nativeEvent: { translationX: this.dragX } }] + ); + this._value = 0; + } + + _onHandlerStateChange = ({ nativeEvent }) => { + if (nativeEvent.oldState === State.ACTIVE) { + this._handleRelease(nativeEvent); + } + } + + + _handleRelease = (nativeEvent) => { + const { translationX } = nativeEvent; + const { rowState } = this.state; + this._value = this._value + translationX; + + let toValue = 0; + if (rowState === 0) { // if no option is opened + if (translationX > 0 && translationX < LONG_SWIPE) { + toValue = ACTION_WIDTH; // open left option if he swipe right but not enough to trigger action + this.setState({ rowState: -1 }); + } else if (translationX >= LONG_SWIPE) { + toValue = 0; + this.toggleRead(); + } else if (translationX < 0 && translationX > -LONG_SWIPE) { + toValue = -2 * ACTION_WIDTH; // open right option if he swipe left + this.setState({ rowState: 1 }); + } else if (translationX <= -LONG_SWIPE) { + toValue = 0; + this.setState({ rowState: 0 }); + this.hideChannel(); + } else { + toValue = 0; + } + } + + if (rowState === -1) { // if left option is opened + if (this._value < SMALL_SWIPE) { + toValue = 0; + this.setState({ rowState: 0 }); + } else if (this._value > LONG_SWIPE) { + toValue = 0; + this.setState({ rowState: 0 }); + this.toggleRead(); + } else { + toValue = ACTION_WIDTH; + } + } + + if (rowState === 1) { // if right option is opened + if (this._value > -2 * SMALL_SWIPE) { + toValue = 0; + this.setState({ rowState: 0 }); + } else if (this._value < -LONG_SWIPE) { + toValue = 0; + this.setState({ rowState: 0 }); + this.hideChannel(); + } else { + toValue = -2 * ACTION_WIDTH; + } + } + this._animateRow(toValue); + } + + _animateRow = (toValue) => { + this.rowOffSet.setValue(this._value); + this._value = toValue; + this.dragX.setValue(0); + Animated.spring(this.rowOffSet, { + toValue, + bounciness: 0, + useNativeDriver: true + }).start(); + } + + close = () => { + this.setState({ rowState: 0 }); + this._animateRow(0); + } + + toggleFav = () => { + const { toggleFav, rid, favorite } = this.props; + if (toggleFav) { + toggleFav(rid, favorite); + } + this.close(); + }; + + toggleRead = () => { + const { toggleRead, rid, isRead } = this.props; + if (toggleRead) { + toggleRead(rid, isRead); + } + }; + + hideChannel = () => { + const { hideChannel, rid, type } = this.props; + if (hideChannel) { + hideChannel(rid, type); + } + }; + + onToggleReadPress = () => { + this.toggleRead(); + this.close(); + }; + + onHidePress = () => { + this.hideChannel(); + this.close(); + }; + + onPress = () => { + const { rowState } = this.state; + if (rowState !== 0) { + this.close(); + return; + } + const { onPress } = this.props; + if (onPress) { + onPress(); + } + }; + + render() { + const { + testID, isRead, width, favorite, children, theme + } = this.props; + + return ( + + <PanGestureHandler + minDeltaX={20} + onGestureEvent={this._onGestureEvent} + onHandlerStateChange={this._onHandlerStateChange} + > + <Animated.View> + <LeftActions + transX={this.transX} + isRead={isRead} + width={width} + onToggleReadPress={this.onToggleReadPress} + theme={theme} + /> + <RightActions + transX={this.transX} + favorite={favorite} + width={width} + toggleFav={this.toggleFav} + onHidePress={this.onHidePress} + theme={theme} + /> + <Animated.View + style={{ + transform: [{ translateX: this.transX }] + }} + > + <Touch + onPress={this.onPress} + theme={theme} + testID={testID} + style={{ + backgroundColor: themes[theme].backgroundColor + }} + > + {children} + </Touch> + </Animated.View> + </Animated.View> + + </PanGestureHandler> + ); + } +} + +export default Touchable; diff --git a/app/presentation/RoomItem/TypeIcon.js b/app/presentation/RoomItem/TypeIcon.js index 4be82c9341..0f80794271 100644 --- a/app/presentation/RoomItem/TypeIcon.js +++ b/app/presentation/RoomItem/TypeIcon.js @@ -5,14 +5,17 @@ import Status from '../../containers/Status/Status'; import RoomTypeIcon from '../../containers/RoomTypeIcon'; import styles from './styles'; -const TypeIcon = React.memo(({ type, prid, status }) => { +const TypeIcon = React.memo(({ + theme, type, prid, status +}) => { if (type === 'd') { return <Status style={styles.status} size={10} status={status} />; } - return <RoomTypeIcon type={prid ? 'discussion' : type} />; + return <RoomTypeIcon theme={theme} type={prid ? 'discussion' : type} />; }); TypeIcon.propTypes = { + theme: PropTypes.string, type: PropTypes.string, status: PropTypes.string, prid: PropTypes.string diff --git a/app/presentation/RoomItem/UnreadBadge.js b/app/presentation/RoomItem/UnreadBadge.js index eb6a72bad7..af745f8114 100644 --- a/app/presentation/RoomItem/UnreadBadge.js +++ b/app/presentation/RoomItem/UnreadBadge.js @@ -3,8 +3,11 @@ import PropTypes from 'prop-types'; import { View, Text } from 'react-native'; import styles from './styles'; +import { themes } from '../../constants/colors'; -const UnreadBadge = React.memo(({ unread, userMentions, type }) => { +const UnreadBadge = React.memo(({ + theme, unread, userMentions, type +}) => { if (!unread || unread <= 0) { return; } @@ -14,13 +17,25 @@ const UnreadBadge = React.memo(({ unread, userMentions, type }) => { const mentioned = userMentions > 0 && type !== 'd'; return ( - <View style={[styles.unreadNumberContainer, mentioned && styles.unreadMentionedContainer]}> - <Text style={[styles.unreadText, mentioned && styles.unreadMentionedText]}>{ unread }</Text> + <View + style={[ + styles.unreadNumberContainer, + { backgroundColor: mentioned ? themes[theme].tintColor : themes[theme].borderColor } + ]} + > + <Text + style={[ + styles.unreadText, + { color: mentioned ? themes[theme].buttonText : themes[theme].bodyText } + ]} + >{ unread } + </Text> </View> ); }); UnreadBadge.propTypes = { + theme: PropTypes.string, unread: PropTypes.number, userMentions: PropTypes.number, type: PropTypes.string diff --git a/app/presentation/RoomItem/index.js b/app/presentation/RoomItem/index.js index f0e05a3b1c..898df036eb 100644 --- a/app/presentation/RoomItem/index.js +++ b/app/presentation/RoomItem/index.js @@ -1,26 +1,19 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { View, Text, Animated } from 'react-native'; -import { - RectButton, - PanGestureHandler, - State -} from 'react-native-gesture-handler'; +import { View, Text } from 'react-native'; import { connect } from 'react-redux'; import Avatar from '../../containers/Avatar'; import I18n from '../../i18n'; import styles, { - ROW_HEIGHT, - ACTION_WIDTH, - SMALL_SWIPE, - LONG_SWIPE + ROW_HEIGHT } from './styles'; import UnreadBadge from './UnreadBadge'; import TypeIcon from './TypeIcon'; import LastMessage from './LastMessage'; import { capitalize, formatDate } from '../../utils/room'; -import { LeftActions, RightActions } from './Actions'; +import Touchable from './Touchable'; +import { themes } from '../../constants/colors'; export { ROW_HEIGHT }; @@ -34,312 +27,181 @@ const attrs = [ 'width', 'isRead', 'favorite', - 'status' + 'status', + 'theme' ]; -class RoomItem extends React.Component { - static propTypes = { - type: PropTypes.string.isRequired, - name: PropTypes.string.isRequired, - baseUrl: PropTypes.string.isRequired, - showLastMessage: PropTypes.bool, - _updatedAt: PropTypes.string, - lastMessage: PropTypes.object, - alert: PropTypes.bool, - unread: PropTypes.number, - userMentions: PropTypes.number, - id: PropTypes.string, - prid: PropTypes.string, - onPress: PropTypes.func, - userId: PropTypes.string, - username: PropTypes.string, - token: PropTypes.string, - avatarSize: PropTypes.number, - testID: PropTypes.string, - width: PropTypes.number, - favorite: PropTypes.bool, - isRead: PropTypes.bool, - rid: PropTypes.string, - status: PropTypes.string, - toggleFav: PropTypes.func, - toggleRead: PropTypes.func, - hideChannel: PropTypes.func, - avatar: PropTypes.bool +const arePropsEqual = (oldProps, newProps) => { + const { _updatedAt: _updatedAtOld } = oldProps; + const { _updatedAt: _updatedAtNew } = newProps; + if (_updatedAtOld && _updatedAtNew && _updatedAtOld.toISOString() !== _updatedAtNew.toISOString()) { + return false; } - - static defaultProps = { - avatarSize: 48 - }; - - constructor(props) { - super(props); - this.dragX = new Animated.Value(0); - this.rowOffSet = new Animated.Value(0); - this.transX = Animated.add( - this.rowOffSet, - this.dragX - ); - this.state = { - rowState: 0 // 0: closed, 1: right opened, -1: left opened - }; - this._onGestureEvent = Animated.event( - [{ nativeEvent: { translationX: this.dragX } }] - ); - this._value = 0; + return attrs.every(key => oldProps[key] === newProps[key]); +}; + +const RoomItem = React.memo(({ + onPress, width, favorite, toggleFav, isRead, rid, toggleRead, hideChannel, testID, unread, userMentions, name, _updatedAt, alert, type, avatarSize, baseUrl, userId, username, token, id, prid, showLastMessage, hideUnreadStatus, lastMessage, status, avatar, theme +}) => { + const date = formatDate(_updatedAt); + + let accessibilityLabel = name; + if (unread === 1) { + accessibilityLabel += `, ${ unread } ${ I18n.t('alert') }`; + } else if (unread > 1) { + accessibilityLabel += `, ${ unread } ${ I18n.t('alerts') }`; } - shouldComponentUpdate(nextProps) { - const { _updatedAt } = this.props; - if (_updatedAt && nextProps._updatedAt && nextProps._updatedAt.toISOString() !== _updatedAt.toISOString()) { - return true; - } - // eslint-disable-next-line react/destructuring-assignment - return attrs.some(key => nextProps[key] !== this.props[key]); + if (userMentions > 0) { + accessibilityLabel += `, ${ I18n.t('you_were_mentioned') }`; } - _onHandlerStateChange = ({ nativeEvent }) => { - if (nativeEvent.oldState === State.ACTIVE) { - this._handleRelease(nativeEvent); - } - }; - - _handleRelease = (nativeEvent) => { - const { translationX } = nativeEvent; - const { rowState } = this.state; - this._value = this._value + translationX; - - let toValue = 0; - if (rowState === 0) { // if no option is opened - if (translationX > 0 && translationX < LONG_SWIPE) { - toValue = ACTION_WIDTH; // open left option if he swipe right but not enough to trigger action - this.setState({ rowState: -1 }); - } else if (translationX >= LONG_SWIPE) { - toValue = 0; - this.toggleRead(); - } else if (translationX < 0 && translationX > -LONG_SWIPE) { - toValue = -2 * ACTION_WIDTH; // open right option if he swipe left - this.setState({ rowState: 1 }); - } else if (translationX <= -LONG_SWIPE) { - toValue = 0; - this.setState({ rowState: 0 }); - this.hideChannel(); - } else { - toValue = 0; - } - } - - if (rowState === -1) { // if left option is opened - if (this._value < SMALL_SWIPE) { - toValue = 0; - this.setState({ rowState: 0 }); - } else if (this._value > LONG_SWIPE) { - toValue = 0; - this.setState({ rowState: 0 }); - this.toggleRead(); - } else { - toValue = ACTION_WIDTH; - } - } - - if (rowState === 1) { // if right option is opened - if (this._value > -2 * SMALL_SWIPE) { - toValue = 0; - this.setState({ rowState: 0 }); - } else if (this._value < -LONG_SWIPE) { - toValue = 0; - this.setState({ rowState: 0 }); - this.hideChannel(); - } else { - toValue = -2 * ACTION_WIDTH; - } - } - this._animateRow(toValue); + if (date) { + accessibilityLabel += `, ${ I18n.t('last_message') } ${ date }`; } - _animateRow = (toValue) => { - this.rowOffSet.setValue(this._value); - this._value = toValue; - this.dragX.setValue(0); - Animated.spring(this.rowOffSet, { - toValue, - bounciness: 0, - useNativeDriver: true - }).start(); - } - - close = () => { - this.setState({ rowState: 0 }); - this._animateRow(0); - } - - toggleFav = () => { - const { toggleFav, rid, favorite } = this.props; - if (toggleFav) { - toggleFav(rid, favorite); - } - this.close(); - }; - - toggleRead = () => { - const { toggleRead, rid, isRead } = this.props; - if (toggleRead) { - toggleRead(rid, isRead); - } - }; - - hideChannel = () => { - const { hideChannel, rid, type } = this.props; - if (hideChannel) { - hideChannel(rid, type); - } - }; - - onToggleReadPress = () => { - this.toggleRead(); - this.close(); - }; - - onHidePress = () => { - this.hideChannel(); - this.close(); - }; - - onPress = () => { - const { rowState } = this.state; - if (rowState !== 0) { - this.close(); - return; - } - const { onPress } = this.props; - if (onPress) { - onPress(); - } - }; - - render() { - const { - unread, userMentions, name, _updatedAt, alert, testID, type, avatarSize, baseUrl, userId, username, token, id, prid, showLastMessage, lastMessage, isRead, width, favorite, status, avatar - } = this.props; - - const date = formatDate(_updatedAt); - - let accessibilityLabel = name; - if (unread === 1) { - accessibilityLabel += `, ${ unread } ${ I18n.t('alert') }`; - } else if (unread > 1) { - accessibilityLabel += `, ${ unread } ${ I18n.t('alerts') }`; - } - - if (userMentions > 0) { - accessibilityLabel += `, ${ I18n.t('you_were_mentioned') }`; - } - - if (date) { - accessibilityLabel += `, ${ I18n.t('last_message') } ${ date }`; - } - - return ( - <PanGestureHandler - minDeltaX={20} - onGestureEvent={this._onGestureEvent} - onHandlerStateChange={this._onHandlerStateChange} + return ( + <Touchable + onPress={onPress} + width={width} + favorite={favorite} + toggleFav={toggleFav} + isRead={isRead} + rid={rid} + toggleRead={toggleRead} + hideChannel={hideChannel} + testID={testID} + type={type} + theme={theme} + > + <View + style={styles.container} + accessibilityLabel={accessibilityLabel} > - <Animated.View> - <LeftActions - transX={this.transX} - isRead={isRead} - width={width} - onToggleReadPress={this.onToggleReadPress} - /> - <RightActions - transX={this.transX} - favorite={favorite} - width={width} - toggleFav={this.toggleFav} - onHidePress={this.onHidePress} - /> - <Animated.View - style={{ - transform: [{ translateX: this.transX }] - }} - > - <RectButton - onPress={this.onPress} - activeOpacity={0.8} - underlayColor='#e1e5e8' - testID={testID} - style={styles.button} + <Avatar + text={avatar} + size={avatarSize} + type={type} + baseUrl={baseUrl} + style={styles.avatar} + userId={userId} + token={token} + /> + <View + style={[ + styles.centerContainer, + { + borderColor: themes[theme].separatorColor + } + ]} + > + <View style={styles.titleContainer}> + <TypeIcon + type={type} + id={id} + prid={prid} + status={status} + theme={theme} + /> + <Text + style={[ + styles.title, + alert && !hideUnreadStatus && styles.alert, + { color: themes[theme].titleText } + ]} + ellipsizeMode='tail' + numberOfLines={1} > - <View - style={styles.container} - accessibilityLabel={accessibilityLabel} + {name} + </Text> + {_updatedAt ? ( + <Text + style={[ + styles.date, + { + color: + themes[theme] + .auxiliaryText + }, + alert && !hideUnreadStatus && [ + styles.updateAlert, + { + color: + themes[theme] + .tintColor + } + ] + ]} + ellipsizeMode='tail' + numberOfLines={1} > - <Avatar - text={avatar} - size={avatarSize} - type={type} - baseUrl={baseUrl} - style={styles.avatar} - userId={userId} - token={token} - /> - <View style={styles.centerContainer}> - <View style={styles.titleContainer}> - <TypeIcon - type={type} - id={id} - prid={prid} - status={status} - /> - <Text - style={[ - styles.title, - alert && styles.alert - ]} - ellipsizeMode='tail' - numberOfLines={1} - > - {name} - </Text> - {_updatedAt ? ( - <Text - style={[ - styles.date, - alert && styles.updateAlert - ]} - ellipsizeMode='tail' - numberOfLines={1} - > - {capitalize(date)} - </Text> - ) : null} - </View> - <View style={styles.row}> - <LastMessage - lastMessage={lastMessage} - type={type} - showLastMessage={showLastMessage} - username={username} - alert={alert} - /> - <UnreadBadge - unread={unread} - userMentions={userMentions} - type={type} - /> - </View> - </View> - </View> - </RectButton> - </Animated.View> - </Animated.View> - </PanGestureHandler> - ); - } -} + {capitalize(date)} + </Text> + ) : null} + </View> + <View style={styles.row}> + <LastMessage + lastMessage={lastMessage} + type={type} + showLastMessage={showLastMessage} + username={username} + alert={alert && !hideUnreadStatus} + theme={theme} + /> + <UnreadBadge + unread={unread} + userMentions={userMentions} + type={type} + theme={theme} + /> + </View> + </View> + </View> + </Touchable> + ); +}, arePropsEqual); + +RoomItem.propTypes = { + type: PropTypes.string.isRequired, + name: PropTypes.string.isRequired, + baseUrl: PropTypes.string.isRequired, + showLastMessage: PropTypes.bool, + _updatedAt: PropTypes.string, + lastMessage: PropTypes.object, + alert: PropTypes.bool, + unread: PropTypes.number, + userMentions: PropTypes.number, + id: PropTypes.string, + prid: PropTypes.string, + onPress: PropTypes.func, + userId: PropTypes.string, + username: PropTypes.string, + token: PropTypes.string, + avatarSize: PropTypes.number, + testID: PropTypes.string, + width: PropTypes.number, + favorite: PropTypes.bool, + isRead: PropTypes.bool, + rid: PropTypes.string, + status: PropTypes.string, + toggleFav: PropTypes.func, + toggleRead: PropTypes.func, + hideChannel: PropTypes.func, + avatar: PropTypes.bool, + hideUnreadStatus: PropTypes.bool, + theme: PropTypes.string +}; + +RoomItem.defaultProps = { + avatarSize: 48, + status: 'offline' +}; const mapStateToProps = (state, ownProps) => ({ - status: state.meteor.connected && ownProps.type === 'd' ? state.activeUsers[ownProps.id] : 'offline' + status: + state.meteor.connected && ownProps.type === 'd' + ? state.activeUsers[ownProps.id] + : 'offline' }); export default connect(mapStateToProps)(RoomItem); diff --git a/app/presentation/RoomItem/styles.js b/app/presentation/RoomItem/styles.js index 6ad29fd6d0..1a74d19c61 100644 --- a/app/presentation/RoomItem/styles.js +++ b/app/presentation/RoomItem/styles.js @@ -1,9 +1,6 @@ import { StyleSheet, PixelRatio } from 'react-native'; import sharedStyles from '../../views/Styles'; -import { - COLOR_SEPARATOR, COLOR_PRIMARY, COLOR_WHITE, COLOR_UNREAD, COLOR_TEXT -} from '../../constants/colors'; export const ROW_HEIGHT = 75 * PixelRatio.getFontScale(); export const ACTION_WIDTH = 80; @@ -17,21 +14,16 @@ export default StyleSheet.create({ paddingLeft: 14, height: ROW_HEIGHT }, - button: { - backgroundColor: COLOR_WHITE - }, centerContainer: { flex: 1, paddingVertical: 10, paddingRight: 14, - borderBottomWidth: StyleSheet.hairlineWidth, - borderColor: COLOR_SEPARATOR + borderBottomWidth: StyleSheet.hairlineWidth }, title: { flex: 1, fontSize: 17, lineHeight: 20, - ...sharedStyles.textColorNormal, ...sharedStyles.textMedium }, alert: { @@ -51,11 +43,9 @@ export default StyleSheet.create({ date: { fontSize: 13, marginLeft: 4, - ...sharedStyles.textColorDescription, ...sharedStyles.textRegular }, updateAlert: { - color: COLOR_PRIMARY, ...sharedStyles.textSemibold }, unreadNumberContainer: { @@ -64,25 +54,17 @@ export default StyleSheet.create({ paddingVertical: 3, paddingHorizontal: 5, borderRadius: 10.5, - backgroundColor: COLOR_UNREAD, alignItems: 'center', justifyContent: 'center', marginLeft: 10 }, - unreadMentionedContainer: { - backgroundColor: COLOR_PRIMARY - }, unreadText: { - color: COLOR_TEXT, overflow: 'hidden', fontSize: 13, ...sharedStyles.textMedium, letterSpacing: 0.56, textAlign: 'center' }, - unreadMentionedText: { - color: COLOR_WHITE - }, status: { marginRight: 7, marginTop: 3 @@ -91,11 +73,7 @@ export default StyleSheet.create({ flex: 1, fontSize: 14, lineHeight: 17, - ...sharedStyles.textRegular, - ...sharedStyles.textColorDescription - }, - markdownTextAlert: { - ...sharedStyles.textColorNormal + ...sharedStyles.textRegular }, avatar: { marginRight: 10 @@ -110,9 +88,7 @@ export default StyleSheet.create({ height: ROW_HEIGHT }, actionText: { - color: COLOR_WHITE, fontSize: 15, - backgroundColor: 'transparent', justifyContent: 'center', marginTop: 4, ...sharedStyles.textSemibold @@ -120,7 +96,6 @@ export default StyleSheet.create({ actionLeftButtonContainer: { position: 'absolute', height: ROW_HEIGHT, - backgroundColor: COLOR_PRIMARY, justifyContent: 'center', top: 0 }, @@ -128,8 +103,7 @@ export default StyleSheet.create({ position: 'absolute', height: ROW_HEIGHT, justifyContent: 'center', - top: 0, - backgroundColor: '#54585e' + top: 0 }, actionButton: { width: ACTION_WIDTH, diff --git a/app/presentation/ServerItem/index.js b/app/presentation/ServerItem/index.js index 1a3d7e25a9..094b86a949 100644 --- a/app/presentation/ServerItem/index.js +++ b/app/presentation/ServerItem/index.js @@ -2,17 +2,23 @@ import React from 'react'; import PropTypes from 'prop-types'; import { View, Text } from 'react-native'; import FastImage from 'react-native-fast-image'; -import { RectButton } from 'react-native-gesture-handler'; +import Touch from '../../utils/touch'; import Check from '../../containers/Check'; import styles, { ROW_HEIGHT } from './styles'; +import { themes } from '../../constants/colors'; export { ROW_HEIGHT }; const ServerItem = React.memo(({ - server, item, onPress, hasCheck + server, item, onPress, hasCheck, theme }) => ( - <RectButton onPress={onPress} style={styles.serverItem} testID={`rooms-list-header-server-${ item.id }`}> + <Touch + onPress={onPress} + style={[styles.serverItem, { backgroundColor: themes[theme].backgroundColor }]} + testID={`rooms-list-header-server-${ item.id }`} + theme={theme} + > <View style={styles.serverItemContainer}> {item.iconURL ? ( @@ -34,19 +40,20 @@ const ServerItem = React.memo(({ ) } <View style={styles.serverTextContainer}> - <Text style={styles.serverName}>{item.name || item.id}</Text> - <Text style={styles.serverUrl}>{item.id}</Text> + <Text style={[styles.serverName, { color: themes[theme].titleText }]}>{item.name || item.id}</Text> + <Text style={[styles.serverUrl, { color: themes[theme].auxiliaryText }]}>{item.id}</Text> </View> - {item.id === server && hasCheck ? <Check /> : null} + {item.id === server && hasCheck ? <Check theme={theme} /> : null} </View> - </RectButton> + </Touch> )); ServerItem.propTypes = { onPress: PropTypes.func.isRequired, item: PropTypes.object.isRequired, hasCheck: PropTypes.bool, - server: PropTypes.string + server: PropTypes.string, + theme: PropTypes.string }; export default ServerItem; diff --git a/app/presentation/ServerItem/styles.js b/app/presentation/ServerItem/styles.js index 07669158fa..34ed0c1585 100644 --- a/app/presentation/ServerItem/styles.js +++ b/app/presentation/ServerItem/styles.js @@ -1,14 +1,12 @@ import { StyleSheet } from 'react-native'; import sharedStyles from '../../views/Styles'; -import { COLOR_WHITE } from '../../constants/colors'; export const ROW_HEIGHT = 56; export default StyleSheet.create({ serverItem: { height: ROW_HEIGHT, - backgroundColor: COLOR_WHITE, justifyContent: 'center' }, serverItemContainer: { @@ -28,12 +26,10 @@ export default StyleSheet.create({ }, serverName: { fontSize: 18, - ...sharedStyles.textColorNormal, ...sharedStyles.textSemibold }, serverUrl: { fontSize: 15, - ...sharedStyles.textColorDescription, ...sharedStyles.textRegular } }); diff --git a/app/presentation/TextInput.js b/app/presentation/TextInput.js new file mode 100644 index 0000000000..ef63db2364 --- /dev/null +++ b/app/presentation/TextInput.js @@ -0,0 +1,22 @@ +import React from 'react'; +import { TextInput } from 'react-native'; +import PropTypes from 'prop-types'; + +import { themes } from '../constants/colors'; + +const ThemedTextInput = React.forwardRef(({ style, theme, ...props }, ref) => ( + <TextInput + ref={ref} + style={[{ color: themes[theme].titleText }, style]} + placeholderTextColor={themes[theme].auxiliaryText} + keyboardAppearance={theme === 'light' ? 'light' : 'dark'} + {...props} + /> +)); + +ThemedTextInput.propTypes = { + style: PropTypes.object, + theme: PropTypes.string +}; + +export default ThemedTextInput; diff --git a/app/presentation/UserItem.js b/app/presentation/UserItem.js index 94f42cbbae..7ac25739f6 100644 --- a/app/presentation/UserItem.js +++ b/app/presentation/UserItem.js @@ -1,17 +1,17 @@ import React from 'react'; import { Text, View, StyleSheet } from 'react-native'; import PropTypes from 'prop-types'; +import { LongPressGestureHandler, State } from 'react-native-gesture-handler'; import Avatar from '../containers/Avatar'; -import Touch from '../utils/touch'; import { CustomIcon } from '../lib/Icons'; import sharedStyles from '../views/Styles'; -import { COLOR_PRIMARY, COLOR_WHITE } from '../constants/colors'; +import { themes } from '../constants/colors'; +import Touch from '../utils/touch'; const styles = StyleSheet.create({ button: { - height: 54, - backgroundColor: COLOR_WHITE + height: 54 }, container: { flexDirection: 'row' @@ -27,35 +27,50 @@ const styles = StyleSheet.create({ }, name: { fontSize: 17, - ...sharedStyles.textMedium, - ...sharedStyles.textColorNormal + ...sharedStyles.textMedium }, username: { fontSize: 14, - ...sharedStyles.textRegular, - ...sharedStyles.textColorDescription + ...sharedStyles.textRegular }, icon: { marginHorizontal: 15, - alignSelf: 'center', - color: COLOR_PRIMARY + alignSelf: 'center' } }); const UserItem = ({ - name, username, onPress, testID, onLongPress, style, icon, baseUrl, user -}) => ( - <Touch onPress={onPress} onLongPress={onLongPress} style={styles.button} testID={testID}> - <View style={[styles.container, style]}> - <Avatar text={username} size={30} type='d' style={styles.avatar} baseUrl={baseUrl} userId={user.id} token={user.token} /> - <View style={styles.textContainer}> - <Text style={styles.name}>{name}</Text> - <Text style={styles.username}>@{username}</Text> - </View> - {icon ? <CustomIcon name={icon} size={22} style={styles.icon} /> : null} - </View> - </Touch> -); + name, username, onPress, testID, onLongPress, style, icon, baseUrl, user, theme +}) => { + const longPress = ({ nativeEvent }) => { + if (nativeEvent.state === State.ACTIVE) { + onLongPress(); + } + }; + + return ( + <LongPressGestureHandler + onHandlerStateChange={longPress} + minDurationMs={800} + > + <Touch + onPress={onPress} + style={{ backgroundColor: themes[theme].backgroundColor }} + testID={testID} + theme={theme} + > + <View style={[styles.container, styles.button, style]}> + <Avatar text={username} size={30} type='d' style={styles.avatar} baseUrl={baseUrl} userId={user.id} token={user.token} /> + <View style={styles.textContainer}> + <Text style={[styles.name, { color: themes[theme].titleText }]}>{name}</Text> + <Text style={[styles.username, { color: themes[theme].auxiliaryText }]}>@{username}</Text> + </View> + {icon ? <CustomIcon name={icon} size={22} style={[styles.icon, { color: themes[theme].actionTintColor }]} /> : null} + </View> + </Touch> + </LongPressGestureHandler> + ); +}; UserItem.propTypes = { name: PropTypes.string.isRequired, @@ -69,7 +84,8 @@ UserItem.propTypes = { testID: PropTypes.string.isRequired, onLongPress: PropTypes.func, style: PropTypes.any, - icon: PropTypes.string + icon: PropTypes.string, + theme: PropTypes.string }; export default UserItem; diff --git a/app/sagas/deepLinking.js b/app/sagas/deepLinking.js index 2706be47db..061db014a0 100644 --- a/app/sagas/deepLinking.js +++ b/app/sagas/deepLinking.js @@ -53,17 +53,13 @@ const handleOpen = function* handleOpen({ params }) { // TODO: needs better test // if deep link is from same server - if (server === host) { - if (user) { - const connected = yield select(state => state.server.connected); - if (!connected) { - yield put(selectServerRequest(host)); - yield take(types.SERVER.SELECT_SUCCESS); - } - yield navigate({ params }); - } else { - yield put(appStart('outside')); + if (server === host && user) { + const connected = yield select(state => state.server.connected); + if (!connected) { + yield put(selectServerRequest(host)); + yield take(types.SERVER.SELECT_SUCCESS); } + yield navigate({ params }); } else { // search if deep link's server already exists const serversDB = database.servers; @@ -80,13 +76,21 @@ const handleOpen = function* handleOpen({ params }) { // do nothing? } // if deep link is from a different server - const result = yield RocketChat.getServerInfo(server); + const result = yield RocketChat.getServerInfo(host); if (!result.success) { return; } Navigation.navigate('OnboardingView', { previousServer: server }); yield delay(1000); EventEmitter.emit('NewServer', { server: host }); + + if (params.token) { + yield take(types.SERVER.SELECT_SUCCESS); + yield RocketChat.connect({ server: host, user: { token: params.token } }); + } + Navigation.navigate('OnboardingView', { previousServer: server }); + yield delay(1000); + EventEmitter.emit('NewServer', { server: host }); } }; diff --git a/app/sagas/init.js b/app/sagas/init.js index 022177c44a..f41daf72f5 100644 --- a/app/sagas/init.js +++ b/app/sagas/init.js @@ -20,11 +20,21 @@ import { isIOS } from '../utils/deviceInfo'; import database from '../lib/database'; import protectedFunction from '../lib/methods/helpers/protectedFunction'; +export const initLocalSettings = function* initLocalSettings() { + const sortPreferences = yield RocketChat.getSortPreferences(); + yield put(setAllPreferences(sortPreferences)); + + const useMarkdown = yield RocketChat.getUseMarkdown(); + yield put(toggleMarkdown(useMarkdown)); + + const allowCrashReport = yield RocketChat.getAllowCrashReport(); + yield put(toggleCrashReport(allowCrashReport)); +}; + const restore = function* restore() { try { let hasMigration; if (isIOS) { - yield RNUserDefaults.setName('group.ios.chat.rocket'); hasMigration = yield AsyncStorage.getItem('hasMigration'); } @@ -84,12 +94,6 @@ const restore = function* restore() { } } - const sortPreferences = yield RocketChat.getSortPreferences(); - yield put(setAllPreferences(sortPreferences)); - - const useMarkdown = yield RocketChat.getUseMarkdown(); - yield put(toggleMarkdown(useMarkdown)); - const allowCrashReport = yield RocketChat.getAllowCrashReport(); yield put(toggleCrashReport(allowCrashReport)); @@ -127,5 +131,6 @@ const start = function* start({ root }) { const root = function* root() { yield takeLatest(APP.INIT, restore); yield takeLatest(APP.START, start); + yield takeLatest(APP.INIT_LOCAL_SETTINGS, initLocalSettings); }; export default root; diff --git a/app/sagas/login.js b/app/sagas/login.js index b9d20a55b5..3e0415914d 100644 --- a/app/sagas/login.js +++ b/app/sagas/login.js @@ -9,7 +9,9 @@ import 'moment/min/locales'; import * as types from '../actions/actionsTypes'; import { appStart } from '../actions'; import { serverFinishAdd, selectServerRequest } from '../actions/server'; -import { loginFailure, loginSuccess, setUser } from '../actions/login'; +import { + loginFailure, loginSuccess, setUser, logout +} from '../actions/login'; import { roomsRequest } from '../actions/rooms'; import { toMomentLocale } from '../utils/moment'; import RocketChat from '../lib/rocketchat'; @@ -24,7 +26,7 @@ const loginWithPasswordCall = args => RocketChat.loginWithPassword(args); const loginCall = args => RocketChat.login(args); const logoutCall = args => RocketChat.logout(args); -const handleLoginRequest = function* handleLoginRequest({ credentials }) { +const handleLoginRequest = function* handleLoginRequest({ credentials, logoutOnError = false }) { try { let result; if (credentials.resume) { @@ -34,7 +36,11 @@ const handleLoginRequest = function* handleLoginRequest({ credentials }) { } return yield put(loginSuccess(result)); } catch (error) { - yield put(loginFailure(error)); + if (logoutOnError) { + yield put(logout()); + } else { + yield put(loginFailure(error)); + } } }; @@ -114,7 +120,10 @@ const handleLoginSuccess = function* handleLoginSuccess({ user }) { yield put(serverFinishAdd()); yield put(appStart('inside')); } else { - yield put(appStart('inside')); + const currentRoot = yield select(state => state.app.root); + if (currentRoot !== 'inside') { + yield put(appStart('inside')); + } } } catch (e) { log(e); @@ -130,16 +139,9 @@ const handleLogout = function* handleLogout() { const serversDB = database.servers; // all servers const serversCollection = serversDB.collections.get('servers'); - - // filter logging out server and delete it - yield serversDB.action(async() => { - const serverRecord = await serversCollection.find(server); - await serverRecord.destroyPermanently(); - }); - const servers = yield serversCollection.query().fetch(); - // see if there's other logged in servers and selects first one + // see if there're other logged in servers and selects first one if (servers.length > 0) { const newServer = servers[0].id; const token = yield RNUserDefaults.get(`${ RocketChat.TOKEN_KEY }-${ newServer }`); diff --git a/app/sagas/messages.js b/app/sagas/messages.js index 24c1a7046a..75ba170690 100644 --- a/app/sagas/messages.js +++ b/app/sagas/messages.js @@ -7,24 +7,30 @@ import RocketChat from '../lib/rocketchat'; import database from '../lib/database'; import log from '../utils/log'; -const goRoom = function goRoom({ rid, name, message }) { +const goRoom = function goRoom({ + rid, name, fname, message +}) { Navigation.navigate('RoomsListView'); Navigation.navigate('RoomView', { - rid, name, t: 'd', message + rid, name, fname, t: 'd', message }); }; const handleReplyBroadcast = function* handleReplyBroadcast({ message }) { try { const db = database.active; - const { username } = message.u; + const { username, name } = message.u; const subsCollection = db.collections.get('subscriptions'); const subscriptions = yield subsCollection.query(Q.where('name', username)).fetch(); if (subscriptions.length) { - yield goRoom({ rid: subscriptions[0].rid, name: username, message }); + yield goRoom({ + rid: subscriptions[0].rid, name: username, fname: name, message + }); } else { const room = yield RocketChat.createDirectMessage(username); - yield goRoom({ rid: room.rid, name: username, message }); + yield goRoom({ + rid: room.rid, name: username, fname: name, message + }); } } catch (e) { log(e); diff --git a/app/sagas/rooms.js b/app/sagas/rooms.js index ef1d42dcf2..17da0b07fb 100644 --- a/app/sagas/rooms.js +++ b/app/sagas/rooms.js @@ -11,6 +11,7 @@ import database from '../lib/database'; import log from '../utils/log'; import mergeSubscriptionsRooms from '../lib/methods/helpers/mergeSubscriptionsRooms'; import RocketChat from '../lib/rocketchat'; +// import buildMessage from '../lib/methods/helpers/buildMessage'; const handleRoomsRequest = function* handleRoomsRequest() { try { @@ -26,17 +27,27 @@ const handleRoomsRequest = function* handleRoomsRequest() { const db = database.active; yield db.action(async() => { - const subCollection = db.collections.get('subscriptions'); if (!subscriptions.length) { return; } + const subCollection = db.collections.get('subscriptions'); + // const messagesCollection = db.collections.get('messages'); + const subsIds = subscriptions.map(sub => sub.rid); const existingSubs = await subCollection.query(Q.where('id', Q.oneOf(subsIds))).fetch(); const subsToUpdate = existingSubs.filter(i1 => subscriptions.find(i2 => i1._id === i2._id)); const subsToCreate = subscriptions.filter(i1 => !existingSubs.find(i2 => i1._id === i2._id)); // TODO: subsToDelete? + // const lastMessages = subscriptions + // .map(sub => sub.lastMessage && buildMessage(sub.lastMessage)) + // .filter(lm => lm); + // const lastMessagesIds = lastMessages.map(lm => lm._id); + // const existingMessages = await messagesCollection.query(Q.where('id', Q.oneOf(lastMessagesIds))).fetch(); + // const messagesToUpdate = existingMessages.filter(i1 => lastMessages.find(i2 => i1.id === i2._id)); + // const messagesToCreate = lastMessages.filter(i1 => !existingMessages.find(i2 => i1._id === i2.id)); + const allRecords = [ ...subsToCreate.map(subscription => subCollection.prepareCreate((s) => { s._raw = sanitizedRaw({ id: subscription.rid }, subCollection.schema); @@ -48,6 +59,17 @@ const handleRoomsRequest = function* handleRoomsRequest() { Object.assign(subscription, newSub); }); }) + // ...messagesToCreate.map(message => messagesCollection.prepareCreate((m) => { + // m._raw = sanitizedRaw({ id: message._id }, messagesCollection.schema); + // m.subscription.id = message.rid; + // return Object.assign(m, message); + // })), + // ...messagesToUpdate.map((message) => { + // const newMessage = lastMessages.find(m => m._id === message.id); + // return message.prepareUpdate(() => { + // Object.assign(message, newMessage); + // }); + // }) ]; try { diff --git a/app/sagas/selectServer.js b/app/sagas/selectServer.js index 83fdc29768..6b1a2078a6 100644 --- a/app/sagas/selectServer.js +++ b/app/sagas/selectServer.js @@ -22,9 +22,14 @@ import { SERVERS, TOKEN, SERVER_URL } from '../constants/userDefaults'; const getServerInfo = function* getServerInfo({ server, raiseError = true }) { try { const serverInfo = yield RocketChat.getServerInfo(server); - if (!serverInfo.success) { + let websocketInfo = { success: true }; + if (raiseError) { + websocketInfo = yield RocketChat.getWebsocketInfo({ server }); + } + if (!serverInfo.success || !websocketInfo.success) { if (raiseError) { - Alert.alert(I18n.t('Oops'), I18n.t(serverInfo.message, serverInfo.messageOptions)); + const info = serverInfo.success ? websocketInfo : serverInfo; + Alert.alert(I18n.t('Oops'), I18n.t(info.message, info.messageOptions)); } yield put(serverFailure()); return; @@ -82,7 +87,7 @@ const handleSelectServer = function* handleSelectServer({ server, version, fetch } if (user) { - yield RocketChat.connect({ server, user }); + yield RocketChat.connect({ server, user, logoutOnError: true }); yield put(setUser(user)); yield put(actions.appStart('inside')); } else { @@ -90,17 +95,10 @@ const handleSelectServer = function* handleSelectServer({ server, version, fetch yield put(actions.appStart('outside')); } - const db = database.active; - const serversCollection = db.collections.get('settings'); - const settingsRecords = yield serversCollection.query().fetch(); - const settings = Object.values(settingsRecords).map(item => ({ - _id: item.id, - valueAsString: item.valueAsString, - valueAsBoolean: item.valueAsBoolean, - valueAsNumber: item.valueAsNumber, - _updatedAt: item._updatedAt - })); - yield put(actions.setAllSettings(RocketChat.parseSettings(settings.slice(0, settings.length)))); + // We can't use yield here because fetch of Settings & Custom Emojis is slower + // and block the selectServerSuccess raising multiples errors + RocketChat.setSettings(); + RocketChat.setCustomEmojis(); yield RocketChat.setCustomEmojis(); diff --git a/app/share.js b/app/share.js index 73d6f06b4e..3d2484a7de 100644 --- a/app/share.js +++ b/app/share.js @@ -1,17 +1,24 @@ import React from 'react'; import { View } from 'react-native'; import { createAppContainer, createSwitchNavigator } from 'react-navigation'; +import { AppearanceProvider } from 'react-native-appearance'; import { createStackNavigator } from 'react-navigation-stack'; import { Provider } from 'react-redux'; import RNUserDefaults from 'rn-user-defaults'; +import { + defaultTheme, + newThemeState, + subscribeTheme, + unsubscribeTheme +} from './utils/theme'; import Navigation from './lib/ShareNavigation'; import store from './lib/createStore'; import sharedStyles from './views/Styles'; -import { isNotch, isIOS } from './utils/deviceInfo'; -import { defaultHeader, onNavigationStateChange } from './utils/navigation'; -import RocketChat from './lib/rocketchat'; -import LayoutAnimation from './utils/layoutAnimation'; +import { isNotch, isIOS, supportSystemTheme } from './utils/deviceInfo'; +import { defaultHeader, onNavigationStateChange, cardStyle } from './utils/navigation'; +import RocketChat, { THEME_PREFERENCES_KEY } from './lib/rocketchat'; +import { ThemeContext } from './theme'; const InsideNavigator = createStackNavigator({ ShareListView: { @@ -25,7 +32,8 @@ const InsideNavigator = createStackNavigator({ } }, { initialRouteName: 'ShareListView', - defaultNavigationOptions: defaultHeader + defaultNavigationOptions: defaultHeader, + cardStyle }); const OutsideNavigator = createStackNavigator({ @@ -34,7 +42,8 @@ const OutsideNavigator = createStackNavigator({ } }, { initialRouteName: 'WithoutServersView', - defaultNavigationOptions: defaultHeader + defaultNavigationOptions: defaultHeader, + cardStyle }); const AppContainer = createAppContainer(createSwitchNavigator({ @@ -52,15 +61,26 @@ class Root extends React.Component { constructor(props) { super(props); this.state = { - isLandscape: false + isLandscape: false, + theme: defaultTheme(), + themePreferences: { + currentTheme: supportSystemTheme() ? 'automatic' : 'light', + darkLevel: 'dark' + } }; this.init(); } + componentWillUnmount() { + RocketChat.closeShareExtension(); + unsubscribeTheme(); + } + init = async() => { if (isIOS) { await RNUserDefaults.setName('group.ios.chat.rocket'); } + RNUserDefaults.objectForKey(THEME_PREFERENCES_KEY).then(this.setTheme); const currentServer = await RNUserDefaults.get('currentServer'); const token = await RNUserDefaults.get(RocketChat.TOKEN_KEY); @@ -72,29 +92,41 @@ class Root extends React.Component { } } + setTheme = (newTheme = {}) => { + // change theme state + this.setState(prevState => newThemeState(prevState, newTheme), () => { + const { themePreferences } = this.state; + // subscribe to Appearance changes + subscribeTheme(themePreferences, this.setTheme); + }); + } + handleLayout = (event) => { const { width, height } = event.nativeEvent.layout; this.setState({ isLandscape: width > height }); } render() { - const { isLandscape } = this.state; + const { isLandscape, theme } = this.state; return ( - <View - style={[sharedStyles.container, isLandscape && isNotch ? sharedStyles.notchLandscapeContainer : {}]} - onLayout={this.handleLayout} - > - <Provider store={store}> - <LayoutAnimation> - <AppContainer - ref={(navigatorRef) => { - Navigation.setTopLevelNavigator(navigatorRef); - }} - onNavigationStateChange={onNavigationStateChange} - /> - </LayoutAnimation> - </Provider> - </View> + <AppearanceProvider> + <View + style={[sharedStyles.container, isLandscape && isNotch ? sharedStyles.notchLandscapeContainer : {}]} + onLayout={this.handleLayout} + > + <Provider store={store}> + <ThemeContext.Provider value={{ theme }}> + <AppContainer + ref={(navigatorRef) => { + Navigation.setTopLevelNavigator(navigatorRef); + }} + onNavigationStateChange={onNavigationStateChange} + screenProps={{ theme }} + /> + </ThemeContext.Provider> + </Provider> + </View> + </AppearanceProvider> ); } } diff --git a/app/split.js b/app/split.js new file mode 100644 index 0000000000..44136bbcbf --- /dev/null +++ b/app/split.js @@ -0,0 +1,19 @@ +import React from 'react'; +import hoistNonReactStatics from 'hoist-non-react-statics'; + +import { isTablet } from './utils/deviceInfo'; + +export const SplitContext = React.createContext(null); + +export function withSplit(Component) { + if (isTablet) { + const SplitComponent = props => ( + <SplitContext.Consumer> + {contexts => <Component {...props} {...contexts} />} + </SplitContext.Consumer> + ); + hoistNonReactStatics(SplitComponent, Component); + return SplitComponent; + } + return Component; +} diff --git a/app/tablet.js b/app/tablet.js new file mode 100644 index 0000000000..c503e0f7a6 --- /dev/null +++ b/app/tablet.js @@ -0,0 +1,202 @@ +import React from 'react'; +import { View } from 'react-native'; +import PropTypes from 'prop-types'; +import { NavigationActions, StackActions } from 'react-navigation'; +import KeyCommands from 'react-native-keycommands'; + +import Navigation from './lib/Navigation'; +import { isSplited } from './utils/deviceInfo'; +import { + App, RoomContainer, ModalContainer, NotificationContainer +} from './index'; +import { MAX_SIDEBAR_WIDTH } from './constants/tablet'; +import ModalNavigation from './lib/ModalNavigation'; +import { keyCommands, defaultCommands } from './commands'; +import { themes } from './constants/colors'; + +import sharedStyles from './views/Styles'; + +let modalRef; +let roomRef; +let notificationRef; + +export const initTabletNav = (setState) => { + let inCall = false; + + const defaultApp = App.router.getStateForAction; + const defaultModal = ModalContainer.router.getStateForAction; + const defaultRoom = RoomContainer.router.getStateForAction; + const defaultNotification = NotificationContainer.router.getStateForAction; + + NotificationContainer.router.getStateForAction = (action, state) => { + if (action.type === NavigationActions.NAVIGATE && isSplited()) { + const { routeName, params } = action; + if (routeName === 'RoomView') { + const resetAction = StackActions.reset({ + index: 0, + actions: [NavigationActions.navigate({ routeName, params })] + }); + roomRef.dispatch(resetAction); + } + } + return defaultNotification(action, state); + }; + + RoomContainer.router.getStateForAction = (action, state) => { + if (action.type === NavigationActions.NAVIGATE && isSplited()) { + const { routeName, params } = action; + if (routeName === 'RoomActionsView') { + modalRef.dispatch(NavigationActions.navigate({ routeName, params })); + setState({ showModal: true }); + return null; + } + } + if (action.type === 'Navigation/RESET' && isSplited()) { + const { params } = action.actions[action.index]; + const routes = state.routes[state.index] && state.routes[state.index].params; + if (params && params.rid && routes && routes.rid && params.rid === routes.rid) { + return null; + } + } + return defaultRoom(action, state); + }; + + ModalContainer.router.getStateForAction = (action, state) => { + if (action.type === 'Navigation/POP' && isSplited()) { + modalRef.dispatch(NavigationActions.navigate({ routeName: 'AuthLoading' })); + setState({ showModal: false }); + } + if (action.type === NavigationActions.NAVIGATE && isSplited()) { + const { routeName, params } = action; + if (routeName === 'RoomView') { + Navigation.navigate(routeName, params); + } + } + return defaultModal(action, state); + }; + + App.router.getStateForAction = (action, state) => { + if (action.type === NavigationActions.NAVIGATE) { + const { routeName, params } = action; + + if (routeName === 'InsideStack') { + let commands = defaultCommands; + let newState = { inside: true }; + if (isSplited()) { + commands = [...commands, ...keyCommands]; + newState = { ...newState, showModal: false }; + } + KeyCommands.setKeyCommands(commands); + setState(newState); + } + if (isSplited()) { + if (routeName === 'ReadReceiptsView') { + roomRef.dispatch(NavigationActions.navigate({ routeName, params })); + return null; + } + if (routeName === 'OutsideStack') { + KeyCommands.deleteKeyCommands([...defaultCommands, ...keyCommands]); + setState({ inside: false, showModal: false }); + } + if (routeName === 'JitsiMeetView') { + inCall = true; + KeyCommands.deleteKeyCommands([...defaultCommands, ...keyCommands]); + setState({ inside: false, showModal: false }); + } + if (routeName === 'OnboardingView') { + KeyCommands.deleteKeyCommands([...defaultCommands, ...keyCommands]); + setState({ inside: false, showModal: false }); + } + + if (routeName === 'RoomView') { + const resetAction = StackActions.reset({ + index: 0, + actions: [NavigationActions.navigate({ routeName, params })] + }); + roomRef.dispatch(resetAction); + notificationRef.dispatch(resetAction); + setState({ showModal: false }); + return null; + } + + if (routeName === 'NewMessageView') { + modalRef.dispatch(NavigationActions.navigate({ routeName, params })); + setState({ showModal: true }); + return null; + } + if (routeName === 'DirectoryView') { + modalRef.dispatch(NavigationActions.navigate({ routeName })); + setState({ showModal: true }); + return null; + } + } + } + if (action.type === 'Navigation/TOGGLE_DRAWER' && isSplited()) { + modalRef.dispatch(NavigationActions.navigate({ routeName: 'SettingsView' })); + setState({ showModal: true }); + return null; + } + if (action.type === 'Navigation/POP' && inCall) { + KeyCommands.setKeyCommands([...defaultCommands, ...keyCommands]); + setState({ inside: true, showModal: false }); + } + return defaultApp(action, state); + }; +}; + +const Split = ({ + split, tablet, showModal, closeModal, setModalRef, theme +}) => { + if (split) { + return ( + <> + <View style={[sharedStyles.container, sharedStyles.separatorLeft, { borderColor: themes[theme].separatorColor }]}> + <RoomContainer ref={ref => roomRef = ref} screenProps={{ split: tablet, theme }} /> + </View> + <ModalContainer showModal={showModal} closeModal={closeModal} ref={setModalRef} screenProps={{ split: tablet, theme }} /> + </> + ); + } + return null; +}; + +const Tablet = ({ + children, tablet, theme, inside, showModal, closeModal, onLayout +}) => { + const setModalRef = (ref) => { + modalRef = ref; + ModalNavigation.setTopLevelNavigator(modalRef); + }; + + const split = tablet && inside; + return ( + <View style={sharedStyles.containerSplitView} onLayout={onLayout}> + <View style={[sharedStyles.container, split && { maxWidth: MAX_SIDEBAR_WIDTH }]}> + {children} + </View> + <Split split={split} tablet={tablet} theme={theme} showModal={showModal} closeModal={closeModal} setModalRef={setModalRef} /> + <NotificationContainer ref={ref => notificationRef = ref} screenProps={{ theme }} /> + </View> + ); +}; + +Split.propTypes = { + split: PropTypes.bool, + tablet: PropTypes.bool, + showModal: PropTypes.bool, + closeModal: PropTypes.func, + setModalRef: PropTypes.func, + theme: PropTypes.string +}; + +Tablet.propTypes = { + children: PropTypes.node, + tablet: PropTypes.bool, + inside: PropTypes.bool, + showModal: PropTypes.bool, + closeModal: PropTypes.func, + onLayout: PropTypes.func, + theme: PropTypes.string +}; + +export default Tablet; diff --git a/app/theme.js b/app/theme.js new file mode 100644 index 0000000000..05476a7ed0 --- /dev/null +++ b/app/theme.js @@ -0,0 +1,14 @@ +import React from 'react'; +import hoistNonReactStatics from 'hoist-non-react-statics'; + +export const ThemeContext = React.createContext(null); + +export function withTheme(Component) { + const ThemedComponent = props => ( + <ThemeContext.Consumer> + {contexts => <Component {...props} {...contexts} />} + </ThemeContext.Consumer> + ); + hoistNonReactStatics(ThemedComponent, Component); + return ThemedComponent; +} diff --git a/app/utils/deviceInfo.js b/app/utils/deviceInfo.js index cc2b493b72..cc9236ab12 100644 --- a/app/utils/deviceInfo.js +++ b/app/utils/deviceInfo.js @@ -1,6 +1,8 @@ import { Platform } from 'react-native'; import DeviceInfo from 'react-native-device-info'; +import { MIN_WIDTH_SPLIT_LAYOUT } from '../constants/tablet'; + const NOTCH_DEVICES = ['iPhone X', 'iPhone XS', 'iPhone XS Max', 'iPhone XR']; export const isNotch = NOTCH_DEVICES.includes(DeviceInfo.getModel()); @@ -9,3 +11,19 @@ export const isAndroid = !isIOS; export const getReadableVersion = DeviceInfo.getReadableVersion(); export const getBundleId = DeviceInfo.getBundleId(); export const getDeviceModel = DeviceInfo.getModel(); + +// Theme is supported by system on iOS 13+ or Android 10+ +export const supportSystemTheme = () => { + const systemVersion = parseInt(DeviceInfo.getSystemVersion(), 10); + return systemVersion >= (isIOS ? 13 : 10); +}; + +// Tablet info +export const isTablet = DeviceInfo.isTablet(); + +// We need to use this when app is used on splitview with another app +// to handle cases on app view not-larger sufficient to show splited views (room list/room) +// https://github.com/RocketChat/Rocket.Chat.ReactNative/pull/1300#discussion_r341405245 +let _width = null; +export const setWidth = width => _width = width; +export const isSplited = () => isTablet && _width > MIN_WIDTH_SPLIT_LAYOUT; diff --git a/app/utils/fetch.js b/app/utils/fetch.js new file mode 100644 index 0000000000..1e526af2d2 --- /dev/null +++ b/app/utils/fetch.js @@ -0,0 +1,12 @@ +import { Platform } from 'react-native'; +import DeviceInfo from 'react-native-device-info'; + +export const headers = { 'User-Agent': `RC-RN Mobile/${ DeviceInfo.getVersion() } (build: ${ DeviceInfo.getBuildNumber() }; os: ${ Platform.OS } ${ DeviceInfo.getSystemVersion() })` }; + +export default (url, options = {}) => { + let customOptions = { ...options, headers }; + if (options && options.headers) { + customOptions = { ...customOptions, headers: { ...options.headers, ...headers } }; + } + return fetch(url, customOptions); +}; diff --git a/app/utils/layoutAnimation.js b/app/utils/layoutAnimation.js index a558404cd3..3b4292d35d 100644 --- a/app/utils/layoutAnimation.js +++ b/app/utils/layoutAnimation.js @@ -1,44 +1,10 @@ -import React from 'react'; -import { Transition, Transitioning } from 'react-native-reanimated'; -import PropTypes from 'prop-types'; +import { LayoutAnimation } from 'react-native'; import debounce from './debounce'; import { isIOS } from './deviceInfo'; -import sharedStyles from '../views/Styles'; - -const transition = ( - <Transition.Together> - <Transition.In type='fade' /> - <Transition.Out type='fade' /> - <Transition.Change interpolation='easeInOut' /> - </Transition.Together> -); - -const TRANSITION_REF = React.createRef(); export const animateNextTransition = debounce(() => { if (isIOS) { - TRANSITION_REF.current.animateNextTransition(); + LayoutAnimation.easeInEaseOut(); } }, 200, true); - -const LayoutAnimation = ({ children }) => { - if (isIOS) { - return ( - <Transitioning.View - style={sharedStyles.root} - transition={transition} - ref={TRANSITION_REF} - > - {children} - </Transitioning.View> - ); - } - return children; -}; - -LayoutAnimation.propTypes = { - children: PropTypes.node -}; - -export default LayoutAnimation; diff --git a/app/utils/navigation.js b/app/utils/navigation.js index 539aff9ecd..729ea5202b 100644 --- a/app/utils/navigation.js +++ b/app/utils/navigation.js @@ -1,17 +1,30 @@ -import { analytics, leaveBreadcrumb } from './log'; +import { StyleSheet } from 'react-native'; -import { HEADER_BACKGROUND, HEADER_TITLE, HEADER_BACK } from '../constants/colors'; +import { analytics, leaveBreadcrumb } from './log'; +import { themes } from '../constants/colors'; export const defaultHeader = { + headerBackTitle: null +}; + +export const cardStyle = { + backgroundColor: 'rgba(0,0,0,0)' +}; + +const borderBottom = theme => ({ + borderBottomWidth: StyleSheet.hairlineWidth, + borderBottomColor: themes[theme].headerBorder, + elevation: 0 +}); + +export const themedHeader = theme => ({ headerStyle: { - backgroundColor: HEADER_BACKGROUND + ...borderBottom(theme), + backgroundColor: themes[theme].headerBackground }, - headerTitleStyle: { - color: HEADER_TITLE - }, - headerBackTitle: null, - headerTintColor: HEADER_BACK -}; + headerTintColor: themes[theme].headerTintColor, + headerTitleStyle: { color: themes[theme].headerTitleColor } +}); // gets the current screen from navigation state export const getActiveRouteName = (navigationState) => { diff --git a/app/utils/openLink.js b/app/utils/openLink.js index 36988d2934..9978590ad9 100644 --- a/app/utils/openLink.js +++ b/app/utils/openLink.js @@ -1,10 +1,10 @@ import * as WebBrowser from 'expo-web-browser'; -import { HEADER_TINT, HEADER_BACKGROUND } from '../constants/colors'; +import { themes } from '../constants/colors'; -const openLink = url => WebBrowser.openBrowserAsync(url, { - toolbarColor: HEADER_BACKGROUND, - controlsColor: HEADER_TINT, +const openLink = (url, theme = 'light') => WebBrowser.openBrowserAsync(url, { + toolbarColor: themes[theme].headerBackground, + controlsColor: themes[theme].headerTintColor, collapseToolbar: true, showTitle: true }); diff --git a/app/utils/scaling.js b/app/utils/scaling.js index 17fc1b93ec..1168cc6148 100644 --- a/app/utils/scaling.js +++ b/app/utils/scaling.js @@ -1,9 +1,11 @@ import { Dimensions } from 'react-native'; +import { isTablet } from './deviceInfo'; + const { width, height } = Dimensions.get('window'); -const guidelineBaseWidth = 375; -const guidelineBaseHeight = 667; +const guidelineBaseWidth = isTablet ? 600 : 375; +const guidelineBaseHeight = isTablet ? 800 : 667; const scale = size => (width / guidelineBaseWidth) * size; const verticalScale = size => (height / guidelineBaseHeight) * size; diff --git a/app/utils/theme.js b/app/utils/theme.js new file mode 100644 index 0000000000..24405d34a6 --- /dev/null +++ b/app/utils/theme.js @@ -0,0 +1,65 @@ +import { Appearance } from 'react-native-appearance'; +import changeNavigationBarColor from 'react-native-navigation-bar-color'; +import setRootViewColor from 'rn-root-view'; + +import { isAndroid } from './deviceInfo'; +import { themes } from '../constants/colors'; + +let themeListener; + +export const defaultTheme = () => { + const systemTheme = Appearance.getColorScheme(); + if (systemTheme && systemTheme !== 'no-preference') { + return systemTheme; + } + return 'light'; +}; + +export const getTheme = (themePreferences) => { + const { darkLevel, currentTheme } = themePreferences; + let theme = currentTheme; + if (currentTheme === 'automatic') { + theme = defaultTheme(); + } + return theme === 'dark' ? darkLevel : 'light'; +}; + +export const newThemeState = (prevState, newTheme) => { + // new theme preferences + const themePreferences = { + ...prevState.themePreferences, + ...newTheme + }; + // set new state of themePreferences + // and theme (based on themePreferences) + return { themePreferences, theme: getTheme(themePreferences) }; +}; + +export const setNativeTheme = (themePreferences) => { + const theme = getTheme(themePreferences); + if (isAndroid) { + const iconsLight = theme === 'light'; + changeNavigationBarColor(themes[theme].navbarBackground, iconsLight); + } + setRootViewColor(themes[theme].backgroundColor); +}; + +export const unsubscribeTheme = () => { + if (themeListener && themeListener.remove) { + themeListener.remove(); + themeListener = null; + } +}; + +export const subscribeTheme = (themePreferences, setTheme) => { + const { currentTheme } = themePreferences; + if (!themeListener && currentTheme === 'automatic') { + // not use listener params because we use getTheme + themeListener = Appearance.addChangeListener(() => setTheme()); + } else if (currentTheme !== 'automatic') { + // unsubscribe appearance changes when automatic was disabled + unsubscribeTheme(); + } + // set native components theme + setNativeTheme(themePreferences); +}; diff --git a/app/utils/touch.js b/app/utils/touch.js new file mode 100644 index 0000000000..505e6a02a6 --- /dev/null +++ b/app/utils/touch.js @@ -0,0 +1,42 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { RectButton } from 'react-native-gesture-handler'; + +import { themes } from '../constants/colors'; + +class Touch extends React.Component { + setNativeProps(props) { + this.ref.setNativeProps(props); + } + + getRef = (ref) => { + this.ref = ref; + }; + + render() { + const { + children, onPress, theme, ...props + } = this.props; + + return ( + <RectButton + ref={this.getRef} + onPress={onPress} + activeOpacity={1} + underlayColor={themes[theme].bannerBackground} + rippleColor={themes[theme].bannerBackground} + {...props} + > + {children} + </RectButton> + ); + } +} + +Touch.propTypes = { + children: PropTypes.node, + onPress: PropTypes.func, + theme: PropTypes.string +}; + +export default Touch; diff --git a/app/utils/touch/index.android.js b/app/utils/touch/index.android.js deleted file mode 100644 index 9eb368a42a..0000000000 --- a/app/utils/touch/index.android.js +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import { TouchableNativeFeedback, View } from 'react-native'; -import PropTypes from 'prop-types'; - -const Touch = ({ - children, style, onPress, ...props -}) => ( - <TouchableNativeFeedback - onPress={onPress} - {...props} - > - <View style={style}> - {children} - </View> - </TouchableNativeFeedback> -); - -Touch.propTypes = { - children: PropTypes.node.isRequired, - style: PropTypes.any, - onPress: PropTypes.func.isRequired -}; - -export default Touch; diff --git a/app/utils/touch/index.ios.js b/app/utils/touch/index.ios.js deleted file mode 100644 index 493559503f..0000000000 --- a/app/utils/touch/index.ios.js +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react'; -import { TouchableHighlight } from 'react-native'; -import PropTypes from 'prop-types'; -import { COLOR_WHITE } from '../../constants/colors'; - -const Touch = ({ children, onPress, ...props }) => ( - <TouchableHighlight - underlayColor={COLOR_WHITE} - activeOpacity={0.5} - onPress={onPress} - {...props} - > - {children} - </TouchableHighlight> -); - -Touch.propTypes = { - children: PropTypes.node.isRequired, - onPress: PropTypes.func -}; - -export default Touch; diff --git a/app/views/AdminPanelView/index.js b/app/views/AdminPanelView/index.js index c315296800..1fc0ba0216 100644 --- a/app/views/AdminPanelView/index.js +++ b/app/views/AdminPanelView/index.js @@ -8,26 +8,31 @@ import I18n from '../../i18n'; import StatusBar from '../../containers/StatusBar'; import { DrawerButton } from '../../containers/HeaderButton'; import styles from '../Styles'; +import { themedHeader } from '../../utils/navigation'; +import { withTheme } from '../../theme'; +import { themes } from '../../constants/colors'; class AdminPanelView extends React.Component { - static navigationOptions = ({ navigation }) => ({ + static navigationOptions = ({ navigation, screenProps }) => ({ + ...themedHeader(screenProps.theme), headerLeft: <DrawerButton navigation={navigation} />, title: I18n.t('Admin_Panel') }) static propTypes = { baseUrl: PropTypes.string, - authToken: PropTypes.string + authToken: PropTypes.string, + theme: PropTypes.string } render() { - const { baseUrl, authToken } = this.props; + const { baseUrl, authToken, theme } = this.props; if (!baseUrl) { return null; } return ( - <SafeAreaView style={styles.container} testID='terms-view'> - <StatusBar /> + <SafeAreaView style={[styles.container, { backgroundColor: themes[theme].backgroundColor }]} testID='terms-view'> + <StatusBar theme={theme} /> <WebView source={{ uri: `${ baseUrl }/admin/info?layout=embedded` }} injectedJavaScript={`Meteor.loginWithToken('${ authToken }', function() { })`} @@ -42,4 +47,4 @@ const mapStateToProps = state => ({ authToken: state.login.user && state.login.user.token }); -export default connect(mapStateToProps)(AdminPanelView); +export default connect(mapStateToProps)(withTheme(AdminPanelView)); diff --git a/app/views/AuthLoadingView.js b/app/views/AuthLoadingView.js index b0195d634d..cf55170b1c 100644 --- a/app/views/AuthLoadingView.js +++ b/app/views/AuthLoadingView.js @@ -3,17 +3,28 @@ import { StyleSheet, Image } from 'react-native'; import StatusBar from '../containers/StatusBar'; import { isAndroid } from '../utils/deviceInfo'; +import { withTheme } from '../theme'; const styles = StyleSheet.create({ image: { width: '100%', - height: '100%' + height: '100%', + backgroundColor: 'white' } }); -export default React.memo(() => ( +export default React.memo(withTheme(({ theme }) => ( <> - <StatusBar /> - {isAndroid ? <Image source={{ uri: 'launch_screen' }} style={styles.image} /> : null} + <StatusBar theme={theme} /> + {isAndroid + ? ( + <Image + source={{ uri: 'launch_screen' }} + style={styles.image} + resizeMode='contain' + /> + ) + : null + } </> -)); +))); diff --git a/app/views/AuthenticationWebView.js b/app/views/AuthenticationWebView.js index cbf7549b48..2a6b656c59 100644 --- a/app/views/AuthenticationWebView.js +++ b/app/views/AuthenticationWebView.js @@ -2,32 +2,23 @@ import React from 'react'; import PropTypes from 'prop-types'; import { WebView } from 'react-native-webview'; import { connect } from 'react-redux'; -import { ActivityIndicator, StyleSheet } from 'react-native'; import RocketChat from '../lib/rocketchat'; import { isIOS } from '../utils/deviceInfo'; import { CloseModalButton } from '../containers/HeaderButton'; import StatusBar from '../containers/StatusBar'; +import ActivityIndicator from '../containers/ActivityIndicator'; +import { withTheme } from '../theme'; +import { themedHeader } from '../utils/navigation'; const userAgent = isIOS ? 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1' : 'Mozilla/5.0 (Linux; Android 6.0.1; SM-G920V Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Mobile Safari/537.36'; -const styles = StyleSheet.create({ - loading: { - position: 'absolute', - left: 0, - right: 0, - top: 0, - bottom: 0, - alignItems: 'center', - justifyContent: 'center' - } -}); - class AuthenticationWebView extends React.PureComponent { - static navigationOptions = ({ navigation }) => { + static navigationOptions = ({ navigation, screenProps }) => { const authType = navigation.getParam('authType', 'oauth'); return { + ...themedHeader(screenProps.theme), headerLeft: <CloseModalButton navigation={navigation} />, title: authType === 'saml' || authType === 'cas' ? 'SSO' : 'OAuth' }; @@ -35,7 +26,8 @@ class AuthenticationWebView extends React.PureComponent { static propTypes = { navigation: PropTypes.object, - server: PropTypes.string + server: PropTypes.string, + theme: PropTypes.string } constructor(props) { @@ -101,14 +93,13 @@ class AuthenticationWebView extends React.PureComponent { } render() { - const { navigation } = this.props; const { loading } = this.state; + const { navigation, theme } = this.props; const uri = navigation.getParam('url'); return ( <> - <StatusBar /> + <StatusBar theme={theme} /> <WebView - useWebKit source={{ uri }} userAgent={userAgent} onNavigationStateChange={this.onNavigationStateChange} @@ -119,7 +110,7 @@ class AuthenticationWebView extends React.PureComponent { this.setState({ loading: false }); }} /> - { loading ? <ActivityIndicator size='large' style={styles.loading} /> : null } + { loading ? <ActivityIndicator size='large' theme={theme} absolute /> : null } </> ); } @@ -129,4 +120,4 @@ const mapStateToProps = state => ({ server: state.server.server }); -export default connect(mapStateToProps)(AuthenticationWebView); +export default connect(mapStateToProps)(withTheme(AuthenticationWebView)); diff --git a/app/views/AutoTranslateView/index.js b/app/views/AutoTranslateView/index.js index 0bb520a6b5..b9beac37ad 100644 --- a/app/views/AutoTranslateView/index.js +++ b/app/views/AutoTranslateView/index.js @@ -7,42 +7,56 @@ import { SafeAreaView, ScrollView } from 'react-navigation'; import RocketChat from '../../lib/rocketchat'; import I18n from '../../i18n'; -// import log from '../../utils/log'; import StatusBar from '../../containers/StatusBar'; import { CustomIcon } from '../../lib/Icons'; import sharedStyles from '../Styles'; import ListItem from '../../containers/ListItem'; import Separator from '../../containers/Separator'; -import { - SWITCH_TRACK_COLOR, COLOR_BACKGROUND_CONTAINER, COLOR_WHITE, COLOR_SEPARATOR -} from '../../constants/colors'; +import { SWITCH_TRACK_COLOR, themes } from '../../constants/colors'; import scrollPersistTaps from '../../utils/scrollPersistTaps'; +import { withTheme } from '../../theme'; +import { themedHeader } from '../../utils/navigation'; const styles = StyleSheet.create({ contentContainerStyle: { - borderColor: COLOR_SEPARATOR, borderTopWidth: StyleSheet.hairlineWidth, - borderBottomWidth: StyleSheet.hairlineWidth, - backgroundColor: COLOR_WHITE, marginTop: 10, paddingBottom: 30 }, + flatListContainerStyle: { + borderBottomWidth: StyleSheet.hairlineWidth + }, sectionSeparator: { ...sharedStyles.separatorVertical, - backgroundColor: COLOR_BACKGROUND_CONTAINER, height: 10 } }); -const SectionSeparator = React.memo(() => <View style={styles.sectionSeparator} />); - -export default class AutoTranslateView extends React.Component { - static navigationOptions = () => ({ - title: I18n.t('Auto_Translate') +const SectionSeparator = React.memo(({ theme }) => ( + <View + style={[ + styles.sectionSeparator, + { + backgroundColor: themes[theme].auxiliaryBackground, + borderColor: themes[theme].separatorColor + } + ]} + /> +)); + +SectionSeparator.propTypes = { + theme: PropTypes.string +}; + +class AutoTranslateView extends React.Component { + static navigationOptions = ({ screenProps }) => ({ + title: I18n.t('Auto_Translate'), + ...themedHeader(screenProps.theme) }) static propTypes = { - navigation: PropTypes.object + navigation: PropTypes.object, + theme: PropTypes.string } constructor(props) { @@ -107,9 +121,15 @@ export default class AutoTranslateView extends React.Component { } } - renderSeparator = () => <Separator /> + renderSeparator = () => { + const { theme } = this.props; + return <Separator theme={theme} />; + } - renderIcon = () => <CustomIcon name='check' size={20} style={sharedStyles.colorPrimary} /> + renderIcon = () => { + const { theme } = this.props; + return <CustomIcon name='check' size={20} style={{ color: themes[theme].tintColor }} />; + } renderSwitch = () => { const { enableAutoTranslate } = this.state; @@ -124,6 +144,7 @@ export default class AutoTranslateView extends React.Component { renderItem = ({ item }) => { const { selectedLanguage } = this.state; + const { theme } = this.props; const { language, name } = item; const isSelected = selectedLanguage === language; @@ -133,35 +154,51 @@ export default class AutoTranslateView extends React.Component { onPress={() => this.saveAutoTranslateLanguage(language)} testID={`auto-translate-view-${ language }`} right={isSelected ? this.renderIcon : null} + theme={theme} /> ); } render() { const { languages } = this.state; + const { theme } = this.props; return ( - <SafeAreaView style={sharedStyles.listSafeArea} testID='auto-translate-view' forceInset={{ vertical: 'never' }}> - <StatusBar /> + <SafeAreaView + style={[sharedStyles.container, { backgroundColor: themes[theme].auxiliaryBackground }]} + forceInset={{ vertical: 'never' }} + testID='auto-translate-view' + > + <StatusBar theme={theme} /> <ScrollView {...scrollPersistTaps} - contentContainerStyle={styles.contentContainerStyle} + contentContainerStyle={[ + styles.contentContainerStyle, + { + backgroundColor: themes[theme].auxiliaryBackground, + borderColor: themes[theme].separatorColor + } + ]} testID='auto-translate-view-list' > <ListItem title={I18n.t('Enable_Auto_Translate')} testID='auto-translate-view-switch' right={() => this.renderSwitch()} + theme={theme} /> - <SectionSeparator /> + <SectionSeparator theme={theme} /> <FlatList data={languages} extraData={this.state} keyExtractor={item => item.language} renderItem={this.renderItem} ItemSeparatorComponent={this.renderSeparator} + contentContainerStyle={[styles.flatListContainerStyle, { borderColor: themes[theme].separatorColor }]} /> </ScrollView> </SafeAreaView> ); } } + +export default withTheme(AutoTranslateView); diff --git a/app/views/CreateChannelView.js b/app/views/CreateChannelView.js index 46b989922e..e05b9a819f 100644 --- a/app/views/CreateChannelView.js +++ b/app/views/CreateChannelView.js @@ -2,11 +2,12 @@ import React from 'react'; import { connect } from 'react-redux'; import PropTypes from 'prop-types'; import { - View, Text, Switch, ScrollView, TextInput, StyleSheet, FlatList + View, Text, Switch, ScrollView, StyleSheet, FlatList } from 'react-native'; import { SafeAreaView } from 'react-navigation'; import equal from 'deep-equal'; +import TextInput from '../presentation/TextInput'; import Loading from '../containers/Loading'; import { createChannelRequest as createChannelRequestAction } from '../actions/createChannel'; import { removeUser as removeUserAction } from '../actions/selectedUsers'; @@ -18,16 +19,16 @@ import UserItem from '../presentation/UserItem'; import { showErrorAlert } from '../utils/info'; import { CustomHeaderButtons, Item } from '../containers/HeaderButton'; import StatusBar from '../containers/StatusBar'; -import { COLOR_TEXT_DESCRIPTION, COLOR_WHITE, SWITCH_TRACK_COLOR } from '../constants/colors'; +import { SWITCH_TRACK_COLOR, themes } from '../constants/colors'; +import { withTheme } from '../theme'; +import { themedHeader } from '../utils/navigation'; const styles = StyleSheet.create({ container: { - backgroundColor: '#f7f8fa', flex: 1 }, list: { - width: '100%', - backgroundColor: COLOR_WHITE + width: '100%' }, separator: { marginLeft: 60 @@ -39,13 +40,10 @@ const styles = StyleSheet.create({ height: 54, paddingHorizontal: 18, fontSize: 17, - ...sharedStyles.textRegular, - ...sharedStyles.textColorNormal, - backgroundColor: COLOR_WHITE + ...sharedStyles.textRegular }, swithContainer: { height: 54, - backgroundColor: COLOR_WHITE, alignItems: 'center', justifyContent: 'space-between', flexDirection: 'row', @@ -53,8 +51,7 @@ const styles = StyleSheet.create({ }, label: { fontSize: 17, - ...sharedStyles.textMedium, - ...sharedStyles.textColorNormal + ...sharedStyles.textMedium }, invitedHeader: { marginTop: 18, @@ -66,21 +63,20 @@ const styles = StyleSheet.create({ invitedTitle: { fontSize: 18, ...sharedStyles.textSemibold, - ...sharedStyles.textColorNormal, lineHeight: 41 }, invitedCount: { fontSize: 14, - ...sharedStyles.textRegular, - ...sharedStyles.textColorDescription + ...sharedStyles.textRegular } }); class CreateChannelView extends React.Component { - static navigationOptions = ({ navigation }) => { + static navigationOptions = ({ navigation, screenProps }) => { const submit = navigation.getParam('submit', () => {}); const showSubmit = navigation.getParam('showSubmit'); return { + ...themedHeader(screenProps.theme), title: I18n.t('Create_Channel'), headerRight: ( showSubmit @@ -107,7 +103,8 @@ class CreateChannelView extends React.Component { user: PropTypes.shape({ id: PropTypes.string, token: PropTypes.string - }) + }), + theme: PropTypes.string }; state = { @@ -127,8 +124,11 @@ class CreateChannelView extends React.Component { channelName, type, readOnly, broadcast } = this.state; const { - error, failure, isFetching, result, users + error, failure, isFetching, result, users, theme } = this.props; + if (nextProps.theme !== theme) { + return true; + } if (nextState.channelName !== channelName) { return true; } @@ -213,18 +213,21 @@ class CreateChannelView extends React.Component { renderSwitch = ({ id, value, label, onValueChange, disabled = false - }) => ( - <View style={styles.swithContainer}> - <Text style={styles.label}>{I18n.t(label)}</Text> - <Switch - value={value} - onValueChange={onValueChange} - testID={`create-channel-${ id }`} - trackColor={SWITCH_TRACK_COLOR} - disabled={disabled} - /> - </View> - ) + }) => { + const { theme } = this.props; + return ( + <View style={[styles.swithContainer, { backgroundColor: themes[theme].backgroundColor }]}> + <Text style={[styles.label, { color: themes[theme].titleText }]}>{I18n.t(label)}</Text> + <Switch + value={value} + onValueChange={onValueChange} + testID={`create-channel-${ id }`} + trackColor={SWITCH_TRACK_COLOR} + disabled={disabled} + /> + </View> + ); + } renderType() { const { type } = this.state; @@ -264,10 +267,13 @@ class CreateChannelView extends React.Component { renderSeparator = () => <View style={[sharedStyles.separator, styles.separator]} /> - renderFormSeparator = () => <View style={[sharedStyles.separator, styles.formSeparator]} /> + renderFormSeparator = () => { + const { theme } = this.props; + return <View style={[sharedStyles.separator, styles.formSeparator, { backgroundColor: themes[theme].separatorColor }]} />; + } renderItem = ({ item }) => { - const { baseUrl, user } = this.props; + const { baseUrl, user, theme } = this.props; return ( <UserItem @@ -277,19 +283,27 @@ class CreateChannelView extends React.Component { testID={`create-channel-view-item-${ item.name }`} baseUrl={baseUrl} user={user} + theme={theme} /> ); } renderInvitedList = () => { - const { users } = this.props; + const { users, theme } = this.props; return ( <FlatList data={users} extraData={users} keyExtractor={item => item._id} - style={[styles.list, sharedStyles.separatorVertical]} + style={[ + styles.list, + sharedStyles.separatorVertical, + { + backgroundColor: themes[theme].focusedBackground, + borderColor: themes[theme].separatorColor + } + ]} renderItem={this.renderItem} ItemSeparatorComponent={this.renderSeparator} enableEmptySections @@ -300,30 +314,31 @@ class CreateChannelView extends React.Component { render() { const { channelName } = this.state; - const { users, isFetching } = this.props; + const { users, isFetching, theme } = this.props; const userCount = users.length; return ( <KeyboardView + style={{ backgroundColor: themes[theme].auxiliaryBackground }} contentContainerStyle={[sharedStyles.container, styles.container]} keyboardVerticalOffset={128} > - <StatusBar /> + <StatusBar theme={theme} /> <SafeAreaView testID='create-channel-view' style={styles.container} forceInset={{ vertical: 'never' }}> <ScrollView {...scrollPersistTaps}> - <View style={sharedStyles.separatorVertical}> + <View style={[sharedStyles.separatorVertical, { borderColor: themes[theme].separatorColor }]}> <TextInput autoFocus - style={styles.input} + style={[styles.input, { backgroundColor: themes[theme].backgroundColor }]} label={I18n.t('Channel_Name')} value={channelName} onChangeText={this.onChangeText} placeholder={I18n.t('Channel_Name')} - placeholderTextColor={COLOR_TEXT_DESCRIPTION} returnKeyType='done' testID='create-channel-name' autoCorrect={false} autoCapitalize='none' + theme={theme} underlineColorAndroid='transparent' /> {this.renderFormSeparator()} @@ -334,8 +349,8 @@ class CreateChannelView extends React.Component { {this.renderBroadcast()} </View> <View style={styles.invitedHeader}> - <Text style={styles.invitedTitle}>{I18n.t('Invite')}</Text> - <Text style={styles.invitedCount}>{userCount === 1 ? I18n.t('1_user') : I18n.t('N_users', { n: userCount })}</Text> + <Text style={[styles.invitedTitle, { color: themes[theme].titleText }]}>{I18n.t('Invite')}</Text> + <Text style={[styles.invitedCount, { color: themes[theme].auxiliaryText }]}>{userCount === 1 ? I18n.t('1_user') : I18n.t('N_users', { n: userCount })}</Text> </View> {this.renderInvitedList()} <Loading visible={isFetching} /> @@ -364,4 +379,4 @@ const mapDispatchToProps = dispatch => ({ removeUser: user => dispatch(removeUserAction(user)) }); -export default connect(mapStateToProps, mapDispatchToProps)(CreateChannelView); +export default connect(mapStateToProps, mapDispatchToProps)(withTheme(CreateChannelView)); diff --git a/app/views/DirectoryView/Options.js b/app/views/DirectoryView/Options.js index 8a9425db36..3763d53a0a 100644 --- a/app/views/DirectoryView/Options.js +++ b/app/views/DirectoryView/Options.js @@ -4,12 +4,12 @@ import { } from 'react-native'; import PropTypes from 'prop-types'; -import Touch from '../../utils/touch'; import styles from './styles'; +import Touch from '../../utils/touch'; import { CustomIcon } from '../../lib/Icons'; import Check from '../../containers/Check'; import I18n from '../../i18n'; -import { SWITCH_TRACK_COLOR } from '../../constants/colors'; +import { SWITCH_TRACK_COLOR, themes } from '../../constants/colors'; const ANIMATION_DURATION = 200; const ANIMATION_PROPS = { @@ -25,7 +25,8 @@ export default class DirectoryOptions extends PureComponent { isFederationEnabled: PropTypes.bool, close: PropTypes.func, changeType: PropTypes.func, - toggleWorkspace: PropTypes.func + toggleWorkspace: PropTypes.func, + theme: PropTypes.string } constructor(props) { @@ -39,7 +40,7 @@ export default class DirectoryOptions extends PureComponent { { toValue: 1, ...ANIMATION_PROPS - }, + } ).start(); } @@ -50,12 +51,12 @@ export default class DirectoryOptions extends PureComponent { { toValue: 0, ...ANIMATION_PROPS - }, + } ).start(() => close()); } renderItem = (itemType) => { - const { changeType, type: propType } = this.props; + const { changeType, type: propType, theme } = this.props; let text = 'Users'; let icon = 'user'; if (itemType === 'channels') { @@ -64,11 +65,15 @@ export default class DirectoryOptions extends PureComponent { } return ( - <Touch style={styles.dropdownItemButton} onPress={() => changeType(itemType)}> + <Touch + onPress={() => changeType(itemType)} + style={styles.dropdownItemButton} + theme={theme} + > <View style={styles.dropdownItemContainer}> - <CustomIcon style={styles.dropdownItemIcon} size={22} name={icon} /> - <Text style={styles.dropdownItemText}>{I18n.t(text)}</Text> - {propType === itemType ? <Check /> : null} + <CustomIcon style={[styles.dropdownItemIcon, { color: themes[theme].bodyText }]} size={22} name={icon} /> + <Text style={[styles.dropdownItemText, { color: themes[theme].bodyText }]}>{I18n.t(text)}</Text> + {propType === itemType ? <Check theme={theme} /> : null} </View> </Touch> ); @@ -83,20 +88,19 @@ export default class DirectoryOptions extends PureComponent { inputRange: [0, 1], outputRange: [0, 0.3] }); - const { globalUsers, toggleWorkspace, isFederationEnabled } = this.props; + const { + globalUsers, toggleWorkspace, isFederationEnabled, theme + } = this.props; return ( <> <TouchableWithoutFeedback onPress={this.close}> - <Animated.View style={[styles.backdrop, { opacity: backdropOpacity }]} /> + <Animated.View style={[styles.backdrop, { backgroundColor: themes[theme].backdropColor, opacity: backdropOpacity }]} /> </TouchableWithoutFeedback> - <Animated.View style={[styles.dropdownContainer, { transform: [{ translateY }] }]}> - <Touch - onPress={this.close} - style={styles.dropdownContainerHeader} - > - <View style={styles.dropdownItemContainer}> - <Text style={styles.dropdownToggleText}>{I18n.t('Search_by')}</Text> - <CustomIcon style={[styles.dropdownItemIcon, styles.inverted]} size={22} name='arrow-down' /> + <Animated.View style={[styles.dropdownContainer, { transform: [{ translateY }], backgroundColor: themes[theme].backgroundColor }]}> + <Touch onPress={this.close} theme={theme}> + <View style={[styles.dropdownContainerHeader, styles.dropdownItemContainer, { borderColor: themes[theme].separatorColor }]}> + <Text style={[styles.dropdownToggleText, { color: themes[theme].auxiliaryText }]}>{I18n.t('Search_by')}</Text> + <CustomIcon style={[styles.dropdownItemIcon, styles.inverted, { color: themes[theme].auxiliaryTintColor }]} size={22} name='arrow-down' /> </View> </Touch> {this.renderItem('channels')} @@ -104,7 +108,7 @@ export default class DirectoryOptions extends PureComponent { {isFederationEnabled ? ( <> - <View style={styles.dropdownSeparator} /> + <View style={[styles.dropdownSeparator, { backgroundColor: themes[theme].separatorColor }]} /> <View style={[styles.dropdownItemContainer, styles.globalUsersContainer]}> <View style={styles.globalUsersTextContainer}> <Text style={styles.dropdownItemText}>{I18n.t('Search_global_users')}</Text> diff --git a/app/views/DirectoryView/index.js b/app/views/DirectoryView/index.js index 9f5018c860..0f91b2caaa 100644 --- a/app/views/DirectoryView/index.js +++ b/app/views/DirectoryView/index.js @@ -6,24 +6,35 @@ import { import { connect } from 'react-redux'; import { SafeAreaView } from 'react-navigation'; +import Touch from '../../utils/touch'; import RocketChat from '../../lib/rocketchat'; import DirectoryItem from '../../presentation/DirectoryItem'; import sharedStyles from '../Styles'; import I18n from '../../i18n'; -import Touch from '../../utils/touch'; import SearchBox from '../../containers/SearchBox'; import { CustomIcon } from '../../lib/Icons'; import StatusBar from '../../containers/StatusBar'; -import RCActivityIndicator from '../../containers/ActivityIndicator'; +import ActivityIndicator from '../../containers/ActivityIndicator'; +import { CloseModalButton } from '../../containers/HeaderButton'; import debounce from '../../utils/debounce'; import log from '../../utils/log'; import Options from './Options'; +import { withTheme } from '../../theme'; +import { themes } from '../../constants/colors'; import styles from './styles'; +import { themedHeader } from '../../utils/navigation'; class DirectoryView extends React.Component { - static navigationOptions = () => ({ - title: I18n.t('Directory') - }) + static navigationOptions = ({ navigation, screenProps }) => { + const options = { + ...themedHeader(screenProps.theme), + title: I18n.t('Directory') + }; + if (screenProps.split) { + options.headerLeft = <CloseModalButton navigation={navigation} testID='directory-view-close' />; + } + return options; + } static propTypes = { navigation: PropTypes.object, @@ -32,7 +43,8 @@ class DirectoryView extends React.Component { user: PropTypes.shape({ id: PropTypes.string, token: PropTypes.string - }) + }), + theme: PropTypes.string }; constructor(props) { @@ -56,16 +68,6 @@ class DirectoryView extends React.Component { this.setState({ text }); } - onPressItem = (item) => { - const { navigation } = this.props; - try { - const onPressItem = navigation.getParam('onPressItem', () => {}); - onPressItem(item); - } catch (error) { - console.log('DirectoryView -> onPressItem -> error', error); - } - } - // eslint-disable-next-line react/sort-comp load = debounce(async({ newSearch = false }) => { if (newSearch) { @@ -141,6 +143,7 @@ class DirectoryView extends React.Component { renderHeader = () => { const { type } = this.state; + const { theme } = this.props; return ( <> <SearchBox @@ -148,22 +151,30 @@ class DirectoryView extends React.Component { onSubmitEditing={this.search} testID='federation-view-search' /> - <Touch onPress={this.toggleDropdown} testID='federation-view-create-channel'> - <View style={[sharedStyles.separatorVertical, styles.toggleDropdownContainer]}> - <CustomIcon style={styles.toggleDropdownIcon} size={20} name={type === 'users' ? 'user' : 'hashtag'} /> - <Text style={styles.toggleDropdownText}>{type === 'users' ? I18n.t('Users') : I18n.t('Channels')}</Text> - <CustomIcon name='arrow-down' size={20} style={styles.toggleDropdownArrow} /> + <Touch + onPress={this.toggleDropdown} + style={styles.dropdownItemButton} + testID='federation-view-create-channel' + theme={theme} + > + <View style={[sharedStyles.separatorVertical, styles.toggleDropdownContainer, { borderColor: themes[theme].separatorColor }]}> + <CustomIcon style={[styles.toggleDropdownIcon, { color: themes[theme].tintColor }]} size={20} name={type === 'users' ? 'user' : 'hashtag'} /> + <Text style={[styles.toggleDropdownText, { color: themes[theme].tintColor }]}>{type === 'users' ? I18n.t('Users') : I18n.t('Channels')}</Text> + <CustomIcon name='arrow-down' size={20} style={[styles.toggleDropdownArrow, { color: themes[theme].auxiliaryTintColor }]} /> </View> </Touch> </> ); } - renderSeparator = () => <View style={[sharedStyles.separator, styles.separator]} />; + renderSeparator = () => { + const { theme } = this.props; + return <View style={[sharedStyles.separator, styles.separator, { backgroundColor: themes[theme].separatorColor }]} />; + } renderItem = ({ item, index }) => { const { data, type } = this.state; - const { baseUrl, user } = this.props; + const { baseUrl, user, theme } = this.props; let style; if (index === data.length - 1) { @@ -176,7 +187,8 @@ class DirectoryView extends React.Component { baseUrl, testID: `federation-view-item-${ item.name }`, style, - user + user, + theme }; if (type === 'users') { @@ -205,10 +217,10 @@ class DirectoryView extends React.Component { const { data, loading, showOptionsDropdown, type, globalUsers } = this.state; - const { isFederationEnabled } = this.props; + const { isFederationEnabled, theme } = this.props; return ( - <SafeAreaView style={styles.safeAreaView} testID='directory-view' forceInset={{ vertical: 'never' }}> - <StatusBar /> + <SafeAreaView style={[styles.safeAreaView, { backgroundColor: themes[theme].backgroundColor }]} testID='directory-view' forceInset={{ vertical: 'never' }}> + <StatusBar theme={theme} /> <FlatList data={data} style={styles.list} @@ -219,12 +231,13 @@ class DirectoryView extends React.Component { renderItem={this.renderItem} ItemSeparatorComponent={this.renderSeparator} keyboardShouldPersistTaps='always' - ListFooterComponent={loading ? <RCActivityIndicator /> : null} + ListFooterComponent={loading ? <ActivityIndicator theme={theme} /> : null} onEndReached={() => this.load({})} /> {showOptionsDropdown ? ( <Options + theme={theme} type={type} globalUsers={globalUsers} close={this.toggleDropdown} @@ -248,4 +261,4 @@ const mapStateToProps = state => ({ isFederationEnabled: state.settings.FEDERATION_Enabled }); -export default connect(mapStateToProps)(DirectoryView); +export default connect(mapStateToProps)(withTheme(DirectoryView)); diff --git a/app/views/DirectoryView/styles.js b/app/views/DirectoryView/styles.js index 327c05cc25..bc26991579 100644 --- a/app/views/DirectoryView/styles.js +++ b/app/views/DirectoryView/styles.js @@ -1,13 +1,10 @@ import { StyleSheet } from 'react-native'; -import { COLOR_WHITE, COLOR_SEPARATOR, COLOR_PRIMARY } from '../../constants/colors'; -import { isIOS } from '../../utils/deviceInfo'; import sharedStyles from '../Styles'; export default StyleSheet.create({ safeAreaView: { - flex: 1, - backgroundColor: isIOS ? '#F7F8FA' : '#E1E5E8' + flex: 1 }, list: { flex: 1 @@ -19,46 +16,38 @@ export default StyleSheet.create({ marginLeft: 60 }, toggleDropdownContainer: { - height: 47, - backgroundColor: COLOR_WHITE, + height: 46, flexDirection: 'row', alignItems: 'center' }, toggleDropdownIcon: { - color: COLOR_PRIMARY, marginLeft: 20, marginRight: 17 }, toggleDropdownText: { flex: 1, - color: COLOR_PRIMARY, fontSize: 17, ...sharedStyles.textRegular }, toggleDropdownArrow: { - ...sharedStyles.textColorDescription, marginRight: 15 }, dropdownContainer: { - backgroundColor: COLOR_WHITE, width: '100%', position: 'absolute', top: 0 }, backdrop: { - ...StyleSheet.absoluteFill, - backgroundColor: '#000000' + ...StyleSheet.absoluteFill }, dropdownContainerHeader: { - height: 47, + height: 46, borderBottomWidth: StyleSheet.hairlineWidth, - borderColor: COLOR_SEPARATOR, alignItems: 'center', - backgroundColor: isIOS ? COLOR_WHITE : '#54585E', flexDirection: 'row' }, dropdownItemButton: { - height: 57, + height: 46, justifyContent: 'center' }, dropdownItemContainer: { @@ -69,32 +58,27 @@ export default StyleSheet.create({ dropdownItemText: { fontSize: 18, flex: 1, - ...sharedStyles.textColorNormal, ...sharedStyles.textRegular }, dropdownItemDescription: { fontSize: 14, flex: 1, marginTop: 2, - ...sharedStyles.textColorDescription, ...sharedStyles.textRegular }, dropdownToggleText: { fontSize: 15, flex: 1, marginLeft: 15, - ...sharedStyles.textColorDescription, ...sharedStyles.textRegular }, dropdownItemIcon: { width: 22, height: 22, - marginHorizontal: 15, - ...sharedStyles.textColorDescription + marginHorizontal: 15 }, dropdownSeparator: { height: StyleSheet.hairlineWidth, - backgroundColor: COLOR_SEPARATOR, marginHorizontal: 15, flex: 1 }, diff --git a/app/views/ForgotPasswordView.js b/app/views/ForgotPasswordView.js index b8e26c0834..6eb960e33f 100644 --- a/app/views/ForgotPasswordView.js +++ b/app/views/ForgotPasswordView.js @@ -13,17 +13,22 @@ import scrollPersistTaps from '../utils/scrollPersistTaps'; import I18n from '../i18n'; import RocketChat from '../lib/rocketchat'; import StatusBar from '../containers/StatusBar'; +import { withTheme } from '../theme'; +import { themes } from '../constants/colors'; +import { themedHeader } from '../utils/navigation'; -export default class ForgotPasswordView extends React.Component { - static navigationOptions = ({ navigation }) => { +class ForgotPasswordView extends React.Component { + static navigationOptions = ({ navigation, screenProps }) => { const title = navigation.getParam('title', 'Rocket.Chat'); return { - title + title, + ...themedHeader(screenProps.theme) }; } static propTypes = { - navigation: PropTypes.object + navigation: PropTypes.object, + theme: PropTypes.string } state = { @@ -34,6 +39,10 @@ export default class ForgotPasswordView extends React.Component { shouldComponentUpdate(nextProps, nextState) { const { email, invalidEmail, isFetching } = this.state; + const { theme } = this.props; + if (nextProps.theme !== theme) { + return true; + } if (nextState.email !== email) { return true; } @@ -76,16 +85,18 @@ export default class ForgotPasswordView extends React.Component { render() { const { invalidEmail, isFetching } = this.state; + const { theme } = this.props; return ( <KeyboardView + style={{ backgroundColor: themes[theme].backgroundColor }} contentContainerStyle={sharedStyles.container} keyboardVerticalOffset={128} > - <StatusBar /> + <StatusBar theme={theme} /> <ScrollView {...scrollPersistTaps} contentContainerStyle={sharedStyles.containerScrollView}> <SafeAreaView style={sharedStyles.container} testID='forgot-password-view' forceInset={{ vertical: 'never' }}> - <Text style={[sharedStyles.loginTitle, sharedStyles.textBold]}>{I18n.t('Forgot_password')}</Text> + <Text style={[sharedStyles.loginTitle, sharedStyles.textBold, { color: themes[theme].titleText }]}>{I18n.t('Forgot_password')}</Text> <TextInput autoFocus placeholder={I18n.t('Email')} @@ -96,6 +107,7 @@ export default class ForgotPasswordView extends React.Component { onSubmitEditing={this.resetPassword} testID='forgot-password-view-email' containerStyle={sharedStyles.inputLastChild} + theme={theme} /> <Button title={I18n.t('Reset_password')} @@ -104,6 +116,7 @@ export default class ForgotPasswordView extends React.Component { testID='forgot-password-view-submit' loading={isFetching} disabled={invalidEmail} + theme={theme} /> </SafeAreaView> </ScrollView> @@ -111,3 +124,5 @@ export default class ForgotPasswordView extends React.Component { ); } } + +export default withTheme(ForgotPasswordView); diff --git a/app/views/JitsiMeetView.js b/app/views/JitsiMeetView.js index 495a796cd9..7dec8ebfc4 100644 --- a/app/views/JitsiMeetView.js +++ b/app/views/JitsiMeetView.js @@ -33,6 +33,13 @@ class JitsiMeetView extends React.Component { }, 1000); } + componentWillUnmount() { + if (this.jitsiTimeout) { + BackgroundTimer.clearInterval(this.jitsiTimeout); + } + JitsiMeet.endCall(); + } + // Jitsi Update Timeout needs to be called every 10 seconds to make sure // call is not ended and is available to web users. onConferenceJoined = () => { @@ -58,7 +65,7 @@ class JitsiMeetView extends React.Component { <RNJitsiMeetView onConferenceTerminated={this.onConferenceTerminated} onConferenceJoined={this.onConferenceJoined} - style={sharedStyles.root} + style={sharedStyles.container} /> ); } diff --git a/app/views/LanguageView/index.js b/app/views/LanguageView/index.js index d1dc35dbd4..7bf6d5c38d 100644 --- a/app/views/LanguageView/index.js +++ b/app/views/LanguageView/index.js @@ -15,6 +15,9 @@ import { CustomIcon } from '../../lib/Icons'; import sharedStyles from '../Styles'; import ListItem from '../../containers/ListItem'; import Separator from '../../containers/Separator'; +import { themes } from '../../constants/colors'; +import { withTheme } from '../../theme'; +import { themedHeader } from '../../utils/navigation'; const LANGUAGES = [ { @@ -42,14 +45,16 @@ const LANGUAGES = [ ]; class LanguageView extends React.Component { - static navigationOptions = () => ({ - title: I18n.t('Change_Language') + static navigationOptions = ({ screenProps }) => ({ + title: I18n.t('Change_Language'), + ...themedHeader(screenProps.theme) }) static propTypes = { userLanguage: PropTypes.string, navigation: PropTypes.object, - setUser: PropTypes.func + setUser: PropTypes.func, + theme: PropTypes.string } constructor(props) { @@ -62,7 +67,10 @@ class LanguageView extends React.Component { shouldComponentUpdate(nextProps, nextState) { const { language, saving } = this.state; - const { userLanguage } = this.props; + const { userLanguage, theme } = this.props; + if (nextProps.theme !== theme) { + return true; + } if (nextState.language !== language) { return true; } @@ -114,13 +122,20 @@ class LanguageView extends React.Component { } } - renderSeparator = () => <Separator /> + renderSeparator = () => { + const { theme } = this.props; + return <Separator theme={theme} />; + } - renderIcon = () => <CustomIcon name='check' size={20} style={sharedStyles.colorPrimary} /> + renderIcon = () => { + const { theme } = this.props; + return <CustomIcon name='check' size={20} style={{ color: themes[theme].tintColor }} />; + } renderItem = ({ item }) => { const { value, label } = item; const { language } = this.state; + const { theme } = this.props; const isSelected = language === value; return ( @@ -129,19 +144,31 @@ class LanguageView extends React.Component { onPress={() => this.submit(value)} testID={`language-view-${ value }`} right={isSelected ? this.renderIcon : null} + theme={theme} /> ); } render() { const { saving } = this.state; + const { theme } = this.props; return ( - <SafeAreaView style={sharedStyles.listSafeArea} testID='language-view' forceInset={{ vertical: 'never' }}> - <StatusBar /> + <SafeAreaView + style={[sharedStyles.container, { backgroundColor: themes[theme].auxiliaryBackground }]} + forceInset={{ vertical: 'never' }} + testID='language-view' + > + <StatusBar theme={theme} /> <FlatList data={LANGUAGES} keyExtractor={item => item.value} - contentContainerStyle={sharedStyles.listContentContainer} + contentContainerStyle={[ + sharedStyles.listContentContainer, + { + backgroundColor: themes[theme].auxiliaryBackground, + borderColor: themes[theme].separatorColor + } + ]} renderItem={this.renderItem} ItemSeparatorComponent={this.renderSeparator} /> @@ -159,4 +186,4 @@ const mapDispatchToProps = dispatch => ({ setUser: params => dispatch(setUserAction(params)) }); -export default connect(mapStateToProps, mapDispatchToProps)(LanguageView); +export default connect(mapStateToProps, mapDispatchToProps)(withTheme(LanguageView)); diff --git a/app/views/LegalView.js b/app/views/LegalView.js index 8986db3dd5..3c16429bb3 100644 --- a/app/views/LegalView.js +++ b/app/views/LegalView.js @@ -4,31 +4,29 @@ import { Text, ScrollView, View, StyleSheet } from 'react-native'; import { SafeAreaView } from 'react-navigation'; -import { RectButton } from 'react-native-gesture-handler'; import { connect } from 'react-redux'; +import Touch from '../utils/touch'; import sharedStyles from './Styles'; import scrollPersistTaps from '../utils/scrollPersistTaps'; import I18n from '../i18n'; import DisclosureIndicator from '../containers/DisclosureIndicator'; import StatusBar from '../containers/StatusBar'; -import { COLOR_SEPARATOR, COLOR_WHITE } from '../constants/colors'; +import { themes } from '../constants/colors'; import openLink from '../utils/openLink'; +import { withTheme } from '../theme'; +import { themedHeader } from '../utils/navigation'; const styles = StyleSheet.create({ container: { - backgroundColor: '#f7f8fa', flex: 1 }, scroll: { marginTop: 35, - backgroundColor: COLOR_WHITE, - borderColor: COLOR_SEPARATOR, borderTopWidth: StyleSheet.hairlineWidth, borderBottomWidth: StyleSheet.hairlineWidth }, separator: { - backgroundColor: COLOR_SEPARATOR, height: StyleSheet.hairlineWidth, width: '100%', marginLeft: 20 @@ -36,7 +34,6 @@ const styles = StyleSheet.create({ item: { width: '100%', height: 48, - backgroundColor: COLOR_WHITE, paddingLeft: 20, paddingRight: 10, flexDirection: 'row', @@ -45,44 +42,73 @@ const styles = StyleSheet.create({ }, text: { ...sharedStyles.textMedium, - ...sharedStyles.textColorNormal, fontSize: 18 } }); -const Separator = () => <View style={styles.separator} />; +const Separator = ({ theme }) => <View style={[styles.separator, { backgroundColor: themes[theme].separatorColor }]} />; +Separator.propTypes = { + theme: PropTypes.string +}; class LegalView extends React.Component { - static navigationOptions = () => ({ - title: I18n.t('Legal') + static navigationOptions = ({ screenProps }) => ({ + title: I18n.t('Legal'), + ...themedHeader(screenProps.theme) }) static propTypes = { - server: PropTypes.string + server: PropTypes.string, + theme: PropTypes.string } onPressItem = ({ route }) => { - const { server } = this.props; + const { server, theme } = this.props; if (!server) { return; } - openLink(`${ server }/${ route }`); + openLink(`${ server }/${ route }`, theme); } - renderItem = ({ text, route, testID }) => ( - <RectButton style={styles.item} onPress={() => this.onPressItem({ route })} testID={testID}> - <Text style={styles.text}>{I18n.t(text)}</Text> - <DisclosureIndicator /> - </RectButton> - ) + renderItem = ({ text, route, testID }) => { + const { theme } = this.props; + return ( + <Touch + style={[styles.item, { backgroundColor: themes[theme].backgroundColor }]} + onPress={() => this.onPressItem({ route })} + testID={testID} + theme={theme} + > + <Text style={[styles.text, { color: themes[theme].titleText }]}>{I18n.t(text)}</Text> + <DisclosureIndicator theme={theme} /> + </Touch> + ); + } render() { + const { theme } = this.props; return ( - <SafeAreaView style={styles.container} testID='legal-view' forceInset={{ vertical: 'never' }}> - <StatusBar /> - <ScrollView {...scrollPersistTaps} contentContainerStyle={styles.scroll}> + <SafeAreaView + style={[ + styles.container, + { backgroundColor: themes[theme].auxiliaryBackground } + ]} + forceInset={{ vertical: 'never' }} + testID='legal-view' + > + <StatusBar theme={theme} /> + <ScrollView + contentContainerStyle={[ + styles.scroll, + { + backgroundColor: themes[theme].backgroundColor, + borderColor: themes[theme].separatorColor + } + ]} + {...scrollPersistTaps} + > {this.renderItem({ text: 'Terms_of_Service', route: 'terms-of-service', testID: 'legal-terms-button' })} - <Separator /> + <Separator theme={theme} /> {this.renderItem({ text: 'Privacy_Policy', route: 'privacy-policy', testID: 'legal-privacy-button' })} </ScrollView> </SafeAreaView> @@ -94,4 +120,4 @@ const mapStateToProps = state => ({ server: state.server.server }); -export default connect(mapStateToProps)(LegalView); +export default connect(mapStateToProps)(withTheme(LegalView)); diff --git a/app/views/LoginSignupView.js b/app/views/LoginSignupView.js index 0f55361f84..0fe8361e7c 100644 --- a/app/views/LoginSignupView.js +++ b/app/views/LoginSignupView.js @@ -6,9 +6,10 @@ import { import { connect } from 'react-redux'; import { Base64 } from 'js-base64'; import { SafeAreaView } from 'react-navigation'; -import { RectButton, BorderlessButton } from 'react-native-gesture-handler'; +import { BorderlessButton } from 'react-native-gesture-handler'; import equal from 'deep-equal'; +import Touch from '../utils/touch'; import sharedStyles from './Styles'; import scrollPersistTaps from '../utils/scrollPersistTaps'; import random from '../utils/random'; @@ -16,7 +17,10 @@ import Button from '../containers/Button'; import I18n from '../i18n'; import { LegalButton } from '../containers/HeaderButton'; import StatusBar from '../containers/StatusBar'; -import { COLOR_SEPARATOR, COLOR_BORDER } from '../constants/colors'; +import { themes } from '../constants/colors'; +import { withTheme } from '../theme'; +import { themedHeader } from '../utils/navigation'; +import { isTablet } from '../utils/deviceInfo'; const styles = StyleSheet.create({ container: { @@ -32,7 +36,6 @@ const styles = StyleSheet.create({ serviceButtonContainer: { borderRadius: 2, borderWidth: 1, - borderColor: COLOR_BORDER, width: '100%', height: 48, flexDirection: 'row', @@ -49,7 +52,6 @@ const styles = StyleSheet.create({ }, serviceText: { ...sharedStyles.textRegular, - ...sharedStyles.textColorNormal, fontSize: 16 }, serviceName: { @@ -71,8 +73,7 @@ const styles = StyleSheet.create({ }, separatorLine: { flex: 1, - height: 1, - backgroundColor: COLOR_SEPARATOR + height: 1 }, separatorLineLeft: { marginRight: 15 @@ -89,9 +90,10 @@ const SERVICE_HEIGHT = 58; const SERVICES_COLLAPSED_HEIGHT = 174; class LoginSignupView extends React.Component { - static navigationOptions = ({ navigation }) => { + static navigationOptions = ({ navigation, screenProps }) => { const title = navigation.getParam('title', 'Rocket.Chat'); return { + ...themedHeader(screenProps.theme), title, headerRight: <LegalButton testID='welcome-view-more' navigation={navigation} /> }; @@ -104,7 +106,8 @@ class LoginSignupView extends React.Component { Site_Name: PropTypes.string, Gitlab_URL: PropTypes.string, CAS_enabled: PropTypes.bool, - CAS_login_url: PropTypes.string + CAS_login_url: PropTypes.string, + theme: PropTypes.string } constructor(props) { @@ -119,7 +122,9 @@ class LoginSignupView extends React.Component { shouldComponentUpdate(nextProps, nextState) { const { collapsed, servicesHeight } = this.state; - const { server, Site_Name, services } = this.props; + const { + server, Site_Name, services, theme + } = this.props; if (nextState.collapsed !== collapsed) { return true; } @@ -132,6 +137,9 @@ class LoginSignupView extends React.Component { if (nextProps.Site_Name !== Site_Name) { return true; } + if (nextProps.theme !== theme) { + return true; + } if (!equal(nextProps.services, services)) { return true; } @@ -249,7 +257,7 @@ class LoginSignupView extends React.Component { onPressCas = () => { const { server, CAS_login_url } = this.props; const ssoToken = random(17); - const url = `${ CAS_login_url }/?service=${ server }/_cas/${ ssoToken }`; + const url = `${ CAS_login_url }?service=${ server }/_cas/${ ssoToken }`; this.openOAuth({ url, ssoToken, authType: 'cas' }); } @@ -312,17 +320,17 @@ class LoginSignupView extends React.Component { renderServicesSeparator = () => { const { collapsed } = this.state; - const { services } = this.props; + const { services, theme } = this.props; const { length } = Object.values(services); if (length > 3) { return ( <View style={styles.servicesTogglerContainer}> - <View style={[styles.separatorLine, styles.separatorLineLeft]} /> + <View style={[styles.separatorLine, styles.separatorLineLeft, { backgroundColor: themes[theme].auxiliaryText }]} /> <BorderlessButton onPress={this.toggleServices}> <Image source={{ uri: 'options' }} style={[styles.servicesToggler, !collapsed && styles.inverted]} /> </BorderlessButton> - <View style={[styles.separatorLine, styles.separatorLineRight]} /> + <View style={[styles.separatorLine, styles.separatorLineRight, { backgroundColor: themes[theme].auxiliaryText }]} /> </View> ); } @@ -360,7 +368,7 @@ class LoginSignupView extends React.Component { break; } name = name.charAt(0).toUpperCase() + name.slice(1); - const { CAS_enabled } = this.props; + const { CAS_enabled, theme } = this.props; let buttonText; if (service.service === 'saml' || (service.service === 'cas' && CAS_enabled)) { buttonText = <Text style={styles.serviceName}>{name}</Text>; @@ -372,12 +380,17 @@ class LoginSignupView extends React.Component { ); } return ( - <RectButton key={service.name} onPress={onPress} style={styles.serviceButton}> - <View style={styles.serviceButtonContainer}> + <Touch + key={service.name} + onPress={onPress} + style={styles.serviceButton} + theme={theme} + > + <View style={[styles.serviceButtonContainer, { borderColor: themes[theme].borderColor }]}> {service.authType === 'oauth' ? <Image source={{ uri: icon }} style={styles.serviceIcon} /> : null} - <Text style={styles.serviceText}>{buttonText}</Text> + <Text style={[styles.serviceText, { color: themes[theme].titleText }]}>{buttonText}</Text> </View> - </RectButton> + </Touch> ); } @@ -406,9 +419,19 @@ class LoginSignupView extends React.Component { } render() { + const { theme } = this.props; return ( - <ScrollView style={[sharedStyles.containerScrollView, sharedStyles.container, styles.container]} {...scrollPersistTaps}> - <StatusBar /> + <ScrollView + style={[ + sharedStyles.containerScrollView, + sharedStyles.container, + styles.container, + { backgroundColor: themes[theme].backgroundColor }, + isTablet && sharedStyles.tabletScreenContent + ]} + {...scrollPersistTaps} + > + <StatusBar theme={theme} /> <SafeAreaView testID='welcome-view' forceInset={{ vertical: 'never' }} style={styles.safeArea}> {this.renderServices()} {this.renderServicesSeparator()} @@ -416,12 +439,14 @@ class LoginSignupView extends React.Component { title={<Text>{I18n.t('Login_with')} <Text style={{ ...sharedStyles.textBold }}>{I18n.t('email')}</Text></Text>} type='primary' onPress={() => this.login()} + theme={theme} testID='welcome-view-login' /> <Button title={I18n.t('Create_account')} type='secondary' onPress={() => this.register()} + theme={theme} testID='welcome-view-register' /> </SafeAreaView> @@ -439,4 +464,4 @@ const mapStateToProps = state => ({ services: state.login.services }); -export default connect(mapStateToProps)(LoginSignupView); +export default connect(mapStateToProps)(withTheme(LoginSignupView)); diff --git a/app/views/LoginView.js b/app/views/LoginView.js index 87c9cf34ff..490f7f852e 100644 --- a/app/views/LoginView.js +++ b/app/views/LoginView.js @@ -17,8 +17,11 @@ import I18n from '../i18n'; import { loginRequest as loginRequestAction } from '../actions/login'; import { LegalButton } from '../containers/HeaderButton'; import StatusBar from '../containers/StatusBar'; -import { COLOR_PRIMARY } from '../constants/colors'; +import { themes } from '../constants/colors'; import { animateNextTransition } from '../utils/layoutAnimation'; +import { withTheme } from '../theme'; +import { themedHeader } from '../utils/navigation'; +import { isTablet } from '../utils/deviceInfo'; const styles = StyleSheet.create({ bottomContainer: { @@ -28,12 +31,10 @@ const styles = StyleSheet.create({ }, dontHaveAccount: { ...sharedStyles.textRegular, - ...sharedStyles.textColorDescription, fontSize: 13 }, createAccount: { ...sharedStyles.textSemibold, - color: COLOR_PRIMARY, fontSize: 13 }, loginTitle: { @@ -43,11 +44,12 @@ const styles = StyleSheet.create({ }); class LoginView extends React.Component { - static navigationOptions = ({ navigation }) => { + static navigationOptions = ({ navigation, screenProps }) => { const title = navigation.getParam('title', 'Rocket.Chat'); return { title, - headerRight: <LegalButton navigation={navigation} testID='login-view-more' /> + headerRight: <LegalButton navigation={navigation} testID='login-view-more' />, + ...themedHeader(screenProps.theme) }; } @@ -60,7 +62,12 @@ class LoginView extends React.Component { Accounts_PasswordPlaceholder: PropTypes.string, Accounts_PasswordReset: PropTypes.bool, isFetching: PropTypes.bool, - failure: PropTypes.bool + failure: PropTypes.bool, + theme: PropTypes.string + } + + static defaultProps = { + Accounts_PasswordReset: true } static defaultProps = { @@ -98,7 +105,7 @@ class LoginView extends React.Component { user, password, code, showTOTP } = this.state; const { - isFetching, failure, error, Site_Name, Accounts_EmailOrUsernamePlaceholder, Accounts_PasswordPlaceholder + isFetching, failure, error, Site_Name, Accounts_EmailOrUsernamePlaceholder, Accounts_PasswordPlaceholder, theme } = this.props; if (nextState.user !== user) { return true; @@ -118,6 +125,9 @@ class LoginView extends React.Component { if (nextProps.failure !== failure) { return true; } + if (nextProps.theme !== theme) { + return true; + } if (nextProps.Site_Name !== Site_Name) { return true; } @@ -171,11 +181,27 @@ class LoginView extends React.Component { } renderTOTP = () => { - const { isFetching } = this.props; + const { isFetching, theme } = this.props; return ( - <SafeAreaView style={sharedStyles.container} testID='login-view' forceInset={{ vertical: 'never' }}> - <Text style={[sharedStyles.loginTitle, sharedStyles.textBold, styles.loginTitle]}>{I18n.t('Two_Factor_Authentication')}</Text> - <Text style={[sharedStyles.loginSubtitle, sharedStyles.textRegular]}>{I18n.t('Whats_your_2fa')}</Text> + <SafeAreaView + style={[ + sharedStyles.container, + isTablet && sharedStyles.tabletScreenContent, + { backgroundColor: themes[theme].backgroundColor } + ]} + testID='login-view' + forceInset={{ vertical: 'never' }} + > + <Text + style={[sharedStyles.loginTitle, sharedStyles.textBold, styles.loginTitle, { color: themes[theme].titleText }]} + > + {I18n.t('Two_Factor_Authentication')} + </Text> + <Text + style={[sharedStyles.loginSubtitle, sharedStyles.textRegular, { color: themes[theme].titleText }]} + > + {I18n.t('Whats_your_2fa')} + </Text> <TextInput inputRef={ref => this.codeInput = ref} autoFocus @@ -186,6 +212,7 @@ class LoginView extends React.Component { onSubmitEditing={this.submit} testID='login-view-totp' containerStyle={sharedStyles.inputLastChild} + theme={theme} /> <Button title={I18n.t('Confirm')} @@ -194,6 +221,7 @@ class LoginView extends React.Component { testID='login-view-submit' loading={isFetching} disabled={!this.valid()} + theme={theme} /> </SafeAreaView> ); @@ -201,11 +229,19 @@ class LoginView extends React.Component { renderUserForm = () => { const { - Accounts_EmailOrUsernamePlaceholder, Accounts_PasswordPlaceholder, Accounts_PasswordReset, isFetching + Accounts_EmailOrUsernamePlaceholder, Accounts_PasswordPlaceholder, Accounts_PasswordReset, isFetching, theme } = this.props; return ( - <SafeAreaView style={sharedStyles.container} testID='login-view' forceInset={{ vertical: 'never' }}> - <Text style={[sharedStyles.loginTitle, sharedStyles.textBold]}>{I18n.t('Login')}</Text> + <SafeAreaView + style={[ + sharedStyles.container, + isTablet && sharedStyles.tabletScreenContent, + { backgroundColor: themes[theme].backgroundColor } + ]} + testID='login-view' + forceInset={{ vertical: 'never' }} + > + <Text style={[sharedStyles.loginTitle, sharedStyles.textBold, { color: themes[theme].titleText }]}>{I18n.t('Login')}</Text> <TextInput autoFocus placeholder={Accounts_EmailOrUsernamePlaceholder || I18n.t('Username_or_email')} @@ -215,6 +251,9 @@ class LoginView extends React.Component { onChangeText={value => this.setState({ user: value })} onSubmitEditing={() => { this.passwordInput.focus(); }} testID='login-view-email' + textContentType='username' + autoCompleteType='username' + theme={theme} /> <TextInput inputRef={(e) => { this.passwordInput = e; }} @@ -226,6 +265,9 @@ class LoginView extends React.Component { onChangeText={value => this.setState({ password: value })} testID='login-view-password' containerStyle={sharedStyles.inputLastChild} + textContentType='password' + autoCompleteType='password' + theme={theme} /> <Button title={I18n.t('Login')} @@ -234,6 +276,7 @@ class LoginView extends React.Component { testID='login-view-submit' loading={isFetching} disabled={!this.valid()} + theme={theme} /> {Accounts_PasswordReset && ( <Button @@ -241,12 +284,13 @@ class LoginView extends React.Component { type='secondary' onPress={this.forgotPassword} testID='login-view-forgot-password' + theme={theme} /> )} <View style={styles.bottomContainer}> - <Text style={styles.dontHaveAccount}>{I18n.t('Dont_Have_An_Account')}</Text> + <Text style={[styles.dontHaveAccount, { color: themes[theme].auxiliaryText }]}>{I18n.t('Dont_Have_An_Account')}</Text> <Text - style={styles.createAccount} + style={[styles.createAccount, { color: themes[theme].actionTintColor }]} onPress={this.register} testID='login-view-register' >{I18n.t('Create_account')} @@ -258,13 +302,15 @@ class LoginView extends React.Component { render() { const { showTOTP } = this.state; + const { theme } = this.props; return ( <KeyboardView + style={{ backgroundColor: themes[theme].backgroundColor }} contentContainerStyle={sharedStyles.container} keyboardVerticalOffset={128} key='login-view' > - <StatusBar /> + <StatusBar theme={theme} /> <ScrollView {...scrollPersistTaps} contentContainerStyle={sharedStyles.containerScrollView}> {!showTOTP ? this.renderUserForm() : null} {showTOTP ? this.renderTOTP() : null} @@ -288,4 +334,4 @@ const mapDispatchToProps = dispatch => ({ loginRequest: params => dispatch(loginRequestAction(params)) }); -export default connect(mapStateToProps, mapDispatchToProps)(LoginView); +export default connect(mapStateToProps, mapDispatchToProps)(withTheme(LoginView)); diff --git a/app/views/MarkdownTableView.js b/app/views/MarkdownTableView.js new file mode 100644 index 0000000000..d627173586 --- /dev/null +++ b/app/views/MarkdownTableView.js @@ -0,0 +1,45 @@ +import React from 'react'; +import { ScrollView } from 'react-native'; +import PropTypes from 'prop-types'; + +import I18n from '../i18n'; +import { isIOS } from '../utils/deviceInfo'; +import { themes } from '../constants/colors'; +import { withTheme } from '../theme'; +import { themedHeader } from '../utils/navigation'; + +class MarkdownTableView extends React.Component { + static navigationOptions = ({ screenProps }) => ({ + ...themedHeader(screenProps.theme), + title: I18n.t('Table') + }); + + static propTypes = { + navigation: PropTypes.object, + theme: PropTypes.string + } + + render() { + const { navigation, theme } = this.props; + const renderRows = navigation.getParam('renderRows'); + const tableWidth = navigation.getParam('tableWidth'); + + if (isIOS) { + return ( + <ScrollView style={{ backgroundColor: themes[theme].backgroundColor }} contentContainerStyle={{ width: tableWidth }}> + {renderRows()} + </ScrollView> + ); + } + + return ( + <ScrollView style={{ backgroundColor: themes[theme].backgroundColor }}> + <ScrollView horizontal> + {renderRows()} + </ScrollView> + </ScrollView> + ); + } +} + +export default withTheme(MarkdownTableView); diff --git a/app/views/MessagesView/index.js b/app/views/MessagesView/index.js index bea5d01bd3..a6d25c236d 100644 --- a/app/views/MessagesView/index.js +++ b/app/views/MessagesView/index.js @@ -8,26 +8,31 @@ import ActionSheet from 'react-native-action-sheet'; import styles from './styles'; import Message from '../../containers/message/Message'; -import RCActivityIndicator from '../../containers/ActivityIndicator'; +import ActivityIndicator from '../../containers/ActivityIndicator'; import I18n from '../../i18n'; import RocketChat from '../../lib/rocketchat'; import StatusBar from '../../containers/StatusBar'; import getFileUrlFromMessage from '../../lib/methods/helpers/getFileUrlFromMessage'; import FileModal from '../../containers/FileModal'; +import { themes } from '../../constants/colors'; +import { withTheme } from '../../theme'; +import { themedHeader } from '../../utils/navigation'; const ACTION_INDEX = 0; const CANCEL_INDEX = 1; class MessagesView extends React.Component { - static navigationOptions = ({ navigation }) => ({ - title: navigation.state.params.name + static navigationOptions = ({ navigation, screenProps }) => ({ + title: navigation.state.params.name, + ...themedHeader(screenProps.theme) }); static propTypes = { user: PropTypes.object, baseUrl: PropTypes.string, navigation: PropTypes.object, - customEmojis: PropTypes.object + customEmojis: PropTypes.object, + theme: PropTypes.string } constructor(props) { @@ -52,6 +57,10 @@ class MessagesView extends React.Component { const { loading, messages, photoModalVisible, fileLoading } = this.state; + const { theme } = this.props; + if (nextProps.theme !== theme) { + return true; + } if (nextState.loading !== loading) { return true; } @@ -70,7 +79,7 @@ class MessagesView extends React.Component { defineMessagesViewContent = (name) => { const { messages } = this.state; - const { user, baseUrl } = this.props; + const { user, baseUrl, theme } = this.props; const renderItemCommonProps = item => ({ baseUrl, @@ -106,6 +115,7 @@ class MessagesView extends React.Component { description: item.description, ...url }]} + theme={theme} /> ); } @@ -125,6 +135,7 @@ class MessagesView extends React.Component { <Message {...renderItemCommonProps(item)} msg={item.msg} + theme={theme} /> ) }, @@ -144,6 +155,7 @@ class MessagesView extends React.Component { {...renderItemCommonProps(item)} msg={item.msg} onLongPress={() => this.onLongPress(item)} + theme={theme} /> ), actionTitle: I18n.t('Unstar'), @@ -160,6 +172,7 @@ class MessagesView extends React.Component { {...renderItemCommonProps(item)} msg={item.msg} onLongPress={() => this.onLongPress(item)} + theme={theme} /> ), actionTitle: I18n.t('Unpin'), @@ -247,11 +260,20 @@ class MessagesView extends React.Component { this.setState({ fileLoading }); } - renderEmpty = () => ( - <View style={styles.listEmptyContainer} testID={this.content.testID}> - <Text style={styles.noDataFound}>{this.content.noDataMsg}</Text> - </View> - ) + renderEmpty = () => { + const { theme } = this.props; + return ( + <View + style={[ + styles.listEmptyContainer, + { backgroundColor: themes[theme].backgroundColor } + ]} + testID={this.content.testID} + > + <Text style={[styles.noDataFound, { color: themes[theme].titleText }]}>{this.content.noDataMsg}</Text> + </View> + ); + } renderItem = ({ item }) => this.content.renderItem(item) @@ -259,22 +281,29 @@ class MessagesView extends React.Component { const { messages, loading, selectedAttachment, photoModalVisible, fileLoading } = this.state; - const { user, baseUrl } = this.props; + const { user, baseUrl, theme } = this.props; if (!loading && messages.length === 0) { return this.renderEmpty(); } return ( - <SafeAreaView style={styles.list} testID={this.content.testID} forceInset={{ vertical: 'never' }}> - <StatusBar /> + <SafeAreaView + style={[ + styles.list, + { backgroundColor: themes[theme].backgroundColor } + ]} + forceInset={{ vertical: 'never' }} + testID={this.content.testID} + > + <StatusBar theme={theme} /> <FlatList data={messages} renderItem={this.renderItem} - style={styles.list} + style={[styles.list, { backgroundColor: themes[theme].backgroundColor }]} keyExtractor={item => item._id} onEndReached={this.load} - ListFooterComponent={loading ? <RCActivityIndicator /> : null} + ListFooterComponent={loading ? <ActivityIndicator theme={theme} /> : null} /> <FileModal attachment={selectedAttachment} @@ -300,4 +329,4 @@ const mapStateToProps = state => ({ customEmojis: state.customEmojis }); -export default connect(mapStateToProps)(MessagesView); +export default connect(mapStateToProps)(withTheme(MessagesView)); diff --git a/app/views/MessagesView/styles.js b/app/views/MessagesView/styles.js index 9bcaa5580a..4ef5576266 100644 --- a/app/views/MessagesView/styles.js +++ b/app/views/MessagesView/styles.js @@ -1,22 +1,18 @@ import { StyleSheet } from 'react-native'; import sharedStyles from '../Styles'; -import { COLOR_WHITE } from '../../constants/colors'; export default StyleSheet.create({ list: { - flex: 1, - backgroundColor: COLOR_WHITE + flex: 1 }, listEmptyContainer: { flex: 1, alignItems: 'center', - justifyContent: 'center', - backgroundColor: COLOR_WHITE + justifyContent: 'center' }, noDataFound: { fontSize: 14, - ...sharedStyles.textRegular, - ...sharedStyles.textColorNormal + ...sharedStyles.textRegular } }); diff --git a/app/views/NewMessageView.js b/app/views/NewMessageView.js index 9f4bb80256..e16f3d8ca6 100644 --- a/app/views/NewMessageView.js +++ b/app/views/NewMessageView.js @@ -9,24 +9,24 @@ import equal from 'deep-equal'; import { orderBy } from 'lodash'; import { Q } from '@nozbe/watermelondb'; +import Touch from '../utils/touch'; import database from '../lib/database'; import RocketChat from '../lib/rocketchat'; import UserItem from '../presentation/UserItem'; import sharedStyles from './Styles'; import I18n from '../i18n'; import log from '../utils/log'; -import Touch from '../utils/touch'; -import { isIOS } from '../utils/deviceInfo'; import SearchBox from '../containers/SearchBox'; import { CustomIcon } from '../lib/Icons'; import { CloseModalButton } from '../containers/HeaderButton'; import StatusBar from '../containers/StatusBar'; -import { COLOR_PRIMARY, COLOR_WHITE } from '../constants/colors'; +import { themes } from '../constants/colors'; +import { withTheme } from '../theme'; +import { themedHeader } from '../utils/navigation'; const styles = StyleSheet.create({ safeAreaView: { - flex: 1, - backgroundColor: isIOS ? '#F7F8FA' : '#E1E5E8' + flex: 1 }, separator: { marginLeft: 60 @@ -35,25 +35,23 @@ const styles = StyleSheet.create({ marginVertical: 25 }, createChannelContainer: { - height: 47, - backgroundColor: COLOR_WHITE, + height: 46, flexDirection: 'row', alignItems: 'center' }, createChannelIcon: { - color: COLOR_PRIMARY, marginLeft: 18, marginRight: 15 }, createChannelText: { - color: COLOR_PRIMARY, fontSize: 17, ...sharedStyles.textRegular } }); class NewMessageView extends React.Component { - static navigationOptions = ({ navigation }) => ({ + static navigationOptions = ({ navigation, screenProps }) => ({ + ...themedHeader(screenProps.theme), headerLeft: <CloseModalButton navigation={navigation} testID='new-message-view-close' />, title: I18n.t('New_Message') }) @@ -64,7 +62,8 @@ class NewMessageView extends React.Component { user: PropTypes.shape({ id: PropTypes.string, token: PropTypes.string - }) + }), + theme: PropTypes.string }; constructor(props) { @@ -78,6 +77,10 @@ class NewMessageView extends React.Component { shouldComponentUpdate(nextProps, nextState) { const { search, chats } = this.state; + const { theme } = this.props; + if (nextProps.theme !== theme) { + return true; + } if (!equal(nextState.search, search)) { return true; } @@ -138,27 +141,38 @@ class NewMessageView extends React.Component { navigation.navigate('SelectedUsersViewCreateChannel', { nextActionID: 'CREATE_CHANNEL', title: I18n.t('Select_Users') }); } - renderHeader = () => ( - <View> - <SearchBox onChangeText={text => this.onSearchChangeText(text)} testID='new-message-view-search' /> - <Touch onPress={this.createChannel} style={styles.createChannelButton} testID='new-message-view-create-channel'> - <View style={[sharedStyles.separatorVertical, styles.createChannelContainer]}> - <CustomIcon style={styles.createChannelIcon} size={24} name='plus' /> - <Text style={styles.createChannelText}>{I18n.t('Create_Channel')}</Text> - </View> - </Touch> - </View> - ) + renderHeader = () => { + const { theme } = this.props; + return ( + <View style={{ backgroundColor: themes[theme].auxiliaryBackground }}> + <SearchBox onChangeText={text => this.onSearchChangeText(text)} testID='new-message-view-search' /> + <Touch + onPress={this.createChannel} + style={[styles.createChannelButton, { backgroundColor: themes[theme].backgroundColor }]} + testID='new-message-view-create-channel' + theme={theme} + > + <View style={[sharedStyles.separatorVertical, styles.createChannelContainer, { borderColor: themes[theme].separatorColor }]}> + <CustomIcon style={[styles.createChannelIcon, { color: themes[theme].tintColor }]} size={24} name='plus' /> + <Text style={[styles.createChannelText, { color: themes[theme].tintColor }]}>{I18n.t('Create_Channel')}</Text> + </View> + </Touch> + </View> + ); + } - renderSeparator = () => <View style={[sharedStyles.separator, styles.separator]} />; + renderSeparator = () => { + const { theme } = this.props; + return <View style={[sharedStyles.separator, styles.separator, { backgroundColor: themes[theme].separatorColor }]} />; + } renderItem = ({ item, index }) => { const { search, chats } = this.state; - const { baseUrl, user } = this.props; + const { baseUrl, user, theme } = this.props; - let style = {}; + let style = { borderColor: themes[theme].separatorColor }; if (index === 0) { - style = { ...sharedStyles.separatorTop }; + style = { ...style, ...sharedStyles.separatorTop }; } if (search.length > 0 && index === search.length - 1) { style = { ...style, ...sharedStyles.separatorBottom }; @@ -175,12 +189,14 @@ class NewMessageView extends React.Component { testID={`new-message-view-item-${ item.name }`} style={style} user={user} + theme={theme} /> ); } renderList = () => { const { search, chats } = this.state; + const { theme } = this.props; return ( <FlatList data={search.length > 0 ? search : chats} @@ -189,17 +205,25 @@ class NewMessageView extends React.Component { ListHeaderComponent={this.renderHeader} renderItem={this.renderItem} ItemSeparatorComponent={this.renderSeparator} + contentContainerStyle={{ backgroundColor: themes[theme].backgroundColor }} keyboardShouldPersistTaps='always' /> ); } - render = () => ( - <SafeAreaView style={styles.safeAreaView} testID='new-message-view' forceInset={{ vertical: 'never' }}> - <StatusBar /> - {this.renderList()} - </SafeAreaView> - ); + render = () => { + const { theme } = this.props; + return ( + <SafeAreaView + style={[styles.safeAreaView, { backgroundColor: themes[theme].auxiliaryBackground }]} + forceInset={{ vertical: 'never' }} + testID='new-message-view' + > + <StatusBar theme={theme} /> + {this.renderList()} + </SafeAreaView> + ); + } } const mapStateToProps = state => ({ @@ -210,4 +234,4 @@ const mapStateToProps = state => ({ } }); -export default connect(mapStateToProps)(NewMessageView); +export default connect(mapStateToProps)(withTheme(NewMessageView)); diff --git a/app/views/NewServerView.js b/app/views/NewServerView.js index 92759700c9..a925d62ae7 100644 --- a/app/views/NewServerView.js +++ b/app/views/NewServerView.js @@ -18,12 +18,13 @@ import TextInput from '../containers/TextInput'; import I18n from '../i18n'; import { verticalScale, moderateScale } from '../utils/scaling'; import KeyboardView from '../presentation/KeyboardView'; -import { isIOS, isNotch } from '../utils/deviceInfo'; +import { isIOS, isNotch, isTablet } from '../utils/deviceInfo'; import { CustomIcon } from '../lib/Icons'; import StatusBar from '../containers/StatusBar'; -import { COLOR_PRIMARY } from '../constants/colors'; +import { themes } from '../constants/colors'; import log from '../utils/log'; import { animateNextTransition } from '../utils/layoutAnimation'; +import { withTheme } from '../theme'; const styles = StyleSheet.create({ image: { @@ -34,7 +35,6 @@ const styles = StyleSheet.create({ }, title: { ...sharedStyles.textBold, - ...sharedStyles.textColorNormal, fontSize: moderateScale(22), letterSpacing: 0, alignSelf: 'center' @@ -56,13 +56,11 @@ const styles = StyleSheet.create({ }, chooseCertificateTitle: { fontSize: 15, - ...sharedStyles.textRegular, - ...sharedStyles.textColorDescription + ...sharedStyles.textRegular }, chooseCertificate: { fontSize: 15, - ...sharedStyles.textSemibold, - ...sharedStyles.textColorHeaderBack + ...sharedStyles.textSemibold } }); @@ -76,6 +74,7 @@ class NewServerView extends React.Component { static propTypes = { navigation: PropTypes.object, server: PropTypes.string, + theme: PropTypes.string, connecting: PropTypes.bool.isRequired, connectServer: PropTypes.func.isRequired } @@ -109,7 +108,7 @@ class NewServerView extends React.Component { shouldComponentUpdate(nextProps, nextState) { const { text, certificate } = this.state; - const { connecting } = this.props; + const { connecting, theme } = this.props; if (nextState.text !== text) { return true; } @@ -119,6 +118,9 @@ class NewServerView extends React.Component { if (nextProps.connecting !== connecting) { return true; } + if (nextProps.theme !== theme) { + return true; + } return false; } @@ -165,7 +167,7 @@ class NewServerView extends React.Component { onPress: password => this.saveCertificate({ path, name, password }) } ], - 'secure-text', + 'secure-text' ); } catch (e) { if (!DocumentPicker.isCancel(e)) { @@ -175,7 +177,7 @@ class NewServerView extends React.Component { } completeUrl = (url) => { - url = url && url.trim(); + url = url && url.replace(/\s/g, ''); if (/^(\w|[0-9-_]){3,}$/.test(url) && /^(htt(ps?)?)|(loca((l)?|(lh)?|(lho)?|(lhos)?|(lhost:?\d*)?)$)/.test(url) === false) { @@ -190,7 +192,26 @@ class NewServerView extends React.Component { } } - return url.replace(/\/+$/, ''); + return url.replace(/\/+$/, '').replace(/\\/g, '/'); + } + + uriToPath = uri => uri.replace('file://', ''); + + saveCertificate = (certificate) => { + animateNextTransition(); + this.setState({ certificate }); + } + + handleDelete = () => this.setState({ certificate: null }); // We not need delete file from DocumentPicker because it is a temp file + + showActionSheet = () => { + ActionSheet.showActionSheetWithOptions({ + options: this.options, + cancelButtonIndex: this.CANCEL_INDEX, + destructiveButtonIndex: this.DELETE_INDEX + }, (actionIndex) => { + if (actionIndex === this.DELETE_INDEX) { this.handleDelete(); } + }); } uriToPath = uri => uri.replace('file://', ''); @@ -213,7 +234,7 @@ class NewServerView extends React.Component { } renderBack = () => { - const { navigation } = this.props; + const { navigation, theme } = this.props; let top = 15; if (isIOS) { @@ -228,7 +249,7 @@ class NewServerView extends React.Component { <CustomIcon name='back' size={30} - color={COLOR_PRIMARY} + color={themes[theme].tintColor} /> </TouchableOpacity> ); @@ -236,50 +257,75 @@ class NewServerView extends React.Component { renderCertificatePicker = () => { const { certificate } = this.state; + const { theme } = this.props; return ( <View style={styles.certificatePicker}> - <Text style={styles.chooseCertificateTitle}>{certificate ? I18n.t('Your_certificate') : I18n.t('Do_you_have_a_certificate')}</Text> - <TouchableOpacity onPress={certificate ? this.showActionSheet : this.chooseCertificate} testID='new-server-choose-certificate'> - <Text style={styles.chooseCertificate}>{certificate ? certificate.name : I18n.t('Apply_Your_Certificate')}</Text> + <Text + style={[ + styles.chooseCertificateTitle, + { color: themes[theme].auxiliaryText } + ]} + > + {certificate ? I18n.t('Your_certificate') : I18n.t('Do_you_have_a_certificate')} + </Text> + <TouchableOpacity + onPress={certificate ? this.showActionSheet : this.chooseCertificate} + testID='new-server-choose-certificate' + > + <Text + style={[ + styles.chooseCertificate, + { color: themes[theme].tintColor } + ]} + > + {certificate ? certificate.name : I18n.t('Apply_Your_Certificate')} + </Text> </TouchableOpacity> </View> ); } render() { - const { connecting } = this.props; + const { connecting, theme } = this.props; const { text, autoFocus } = this.state; return ( <KeyboardView + style={{ backgroundColor: themes[theme].backgroundColor }} contentContainerStyle={sharedStyles.container} keyboardVerticalOffset={128} key='login-view' > - <StatusBar light /> + <StatusBar theme={theme} /> <ScrollView {...scrollPersistTaps} contentContainerStyle={sharedStyles.containerScrollView}> <SafeAreaView style={sharedStyles.container} testID='new-server-view'> <Image style={styles.image} source={{ uri: 'new_server' }} /> - <Text style={styles.title}>{I18n.t('Sign_in_your_server')}</Text> - <TextInput - autoFocus={autoFocus} - containerStyle={styles.inputContainer} - placeholder={defaultServer} - value={text} - returnKeyType='send' - onChangeText={this.onChangeText} - testID='new-server-view-input' - onSubmitEditing={this.submit} - clearButtonMode='while-editing' - /> - <Button - title={I18n.t('Connect')} - type='primary' - onPress={this.submit} - disabled={!text} - loading={connecting} - testID='new-server-view-button' - /> - { isIOS ? this.renderCertificatePicker() : null } + <Text style={[styles.title, { color: themes[theme].titleText }]}>{I18n.t('Sign_in_your_server')}</Text> + <View style={isTablet && sharedStyles.tabletScreenContent}> + <TextInput + autoFocus={autoFocus} + containerStyle={styles.inputContainer} + placeholder={defaultServer} + value={text} + returnKeyType='send' + onChangeText={this.onChangeText} + testID='new-server-view-input' + onSubmitEditing={this.submit} + clearButtonMode='while-editing' + keyboardType='url' + textContentType='URL' + theme={theme} + /> + <Button + title={I18n.t('Connect')} + type='primary' + onPress={this.submit} + disabled={!text} + loading={connecting} + testID='new-server-view-button' + theme={theme} + /> + { isIOS ? this.renderCertificatePicker() : null } + </View> </SafeAreaView> </ScrollView> {this.renderBack()} @@ -296,4 +342,4 @@ const mapDispatchToProps = dispatch => ({ connectServer: (server, certificate) => dispatch(serverRequest(server, certificate)) }); -export default connect(mapStateToProps, mapDispatchToProps)(NewServerView); +export default connect(mapStateToProps, mapDispatchToProps)(withTheme(NewServerView)); diff --git a/app/views/NotificationPreferencesView/index.js b/app/views/NotificationPreferencesView/index.js index 423d2a7fb9..456b399933 100644 --- a/app/views/NotificationPreferencesView/index.js +++ b/app/views/NotificationPreferencesView/index.js @@ -6,7 +6,7 @@ import PropTypes from 'prop-types'; import RNPickerSelect from 'react-native-picker-select'; import { SafeAreaView } from 'react-navigation'; -import { SWITCH_TRACK_COLOR } from '../../constants/colors'; +import { SWITCH_TRACK_COLOR, themes } from '../../constants/colors'; import StatusBar from '../../containers/StatusBar'; import ListItem from '../../containers/ListItem'; import Separator from '../../containers/Separator'; @@ -16,19 +16,58 @@ import styles from './styles'; import sharedStyles from '../Styles'; import RocketChat from '../../lib/rocketchat'; import log from '../../utils/log'; +import { withTheme } from '../../theme'; +import { themedHeader } from '../../utils/navigation'; -const SectionTitle = React.memo(({ title }) => <Text style={styles.sectionTitle}>{title}</Text>); +const SectionTitle = React.memo(({ title, theme }) => ( + <Text + style={[ + styles.sectionTitle, + { + backgroundColor: themes[theme].auxiliaryBackground, + color: themes[theme].infoText + } + ]} + > + {title} + </Text> +)); -const SectionSeparator = React.memo(() => <View style={styles.sectionSeparatorBorder} />); +const SectionSeparator = React.memo(({ theme }) => ( + <View + style={[ + styles.sectionSeparatorBorder, + { backgroundColor: themes[theme].auxiliaryBackground } + ]} + /> +)); -const Info = React.memo(({ info }) => <Text style={styles.infoText}>{info}</Text>); +const Info = React.memo(({ info, theme }) => ( + <Text + style={[ + styles.infoText, + { + color: themes[theme].infoText, + backgroundColor: themes[theme].auxiliaryBackground + } + ]} + > + {info} + </Text> +)); SectionTitle.propTypes = { - title: PropTypes.string + title: PropTypes.string, + theme: PropTypes.string +}; + +SectionSeparator.propTypes = { + theme: PropTypes.string }; Info.propTypes = { - info: PropTypes.string + info: PropTypes.string, + theme: PropTypes.string }; const OPTIONS = { @@ -100,14 +139,16 @@ const OPTIONS = { }] }; -export default class NotificationPreferencesView extends React.Component { - static navigationOptions = () => ({ - title: I18n.t('Notification_Preferences') +class NotificationPreferencesView extends React.Component { + static navigationOptions = ({ screenProps }) => ({ + title: I18n.t('Notification_Preferences'), + ...themedHeader(screenProps.theme) }) static propTypes = { - navigation: PropTypes.object - } + navigation: PropTypes.object, + theme: PropTypes.string + }; constructor(props) { super(props); @@ -141,9 +182,6 @@ export default class NotificationPreferencesView extends React.Component { } onValueChangeSwitch = async(key, value) => { - const { room: newRoom } = this.state; - newRoom[key] = value; - this.setState({ room: newRoom }); const params = { [key]: value ? '1' : '0' }; @@ -155,9 +193,6 @@ export default class NotificationPreferencesView extends React.Component { } onValueChangePicker = async(key, value) => { - const { room: newRoom } = this.state; - newRoom[key] = value; - this.setState({ room: newRoom }); const params = { [key]: value.toString() }; @@ -170,12 +205,13 @@ export default class NotificationPreferencesView extends React.Component { renderPicker = (key) => { const { room } = this.state; + const { theme } = this.props; return ( <RNPickerSelect testID={key} style={{ viewContainer: styles.viewContainer }} value={room[key]} - textInputProps={{ style: styles.pickerText }} + textInputProps={{ style: { ...styles.pickerText, color: themes[theme].actionTintColor } }} useNativeAndroidPickerStyle={false} placeholder={{}} onValueChange={value => this.onValueChangePicker(key, value)} @@ -198,105 +234,118 @@ export default class NotificationPreferencesView extends React.Component { render() { const { room } = this.state; + const { theme } = this.props; return ( - <SafeAreaView style={sharedStyles.listSafeArea} testID='notification-preference-view' forceInset={{ vertical: 'never' }}> - <StatusBar /> + <SafeAreaView style={sharedStyles.container} testID='notification-preference-view' forceInset={{ vertical: 'never' }}> + <StatusBar theme={theme} /> <ScrollView {...scrollPersistTaps} + style={{ backgroundColor: themes[theme].auxiliaryBackground }} contentContainerStyle={styles.contentContainer} showsVerticalScrollIndicator={false} testID='notification-preference-view-list' > - <Separator /> + <Separator theme={theme} /> <ListItem title={I18n.t('Receive_Notification')} testID='notification-preference-view-receive-notification' right={() => this.renderSwitch('disableNotifications')} + theme={theme} /> - <Separator /> - <Info info={I18n.t('Receive_notifications_from', { name: room.name })} /> - <SectionSeparator /> + <Separator theme={theme} /> + <Info info={I18n.t('Receive_notifications_from', { name: room.name })} theme={theme} /> + <SectionSeparator theme={theme} /> - <Separator /> + <Separator theme={theme} /> <ListItem title={I18n.t('Receive_Group_Mentions')} testID='notification-preference-view-group-mentions' right={() => this.renderSwitch('muteGroupMentions')} + theme={theme} /> - <Separator /> - <Info info={I18n.t('Receive_Group_Mentions_Info')} /> + <Separator theme={theme} /> + <Info info={I18n.t('Receive_Group_Mentions_Info')} theme={theme} /> - <SectionSeparator /> - <Separator /> + <SectionSeparator theme={theme} /> + <Separator theme={theme} /> <ListItem title={I18n.t('Show_Unread_Counter')} testID='notification-preference-view-unread-count' right={() => this.renderSwitch('hideUnreadStatus')} + theme={theme} /> - <Separator /> - <Info info={I18n.t('Show_Unread_Counter_Info')} /> + <Separator theme={theme} /> + <Info info={I18n.t('Show_Unread_Counter_Info')} theme={theme} /> - <SectionSeparator /> - <SectionTitle title={I18n.t('IN_APP_AND_DESKTOP')} /> - <Separator /> + <SectionSeparator theme={theme} /> + <SectionTitle title={I18n.t('IN_APP_AND_DESKTOP')} theme={theme} /> + <Separator theme={theme} /> <ListItem title={I18n.t('Alert')} testID='notification-preference-view-alert' right={() => this.renderPicker('desktopNotifications')} + theme={theme} /> - <Separator /> - <Info info={I18n.t('In_App_and_Desktop_Alert_info')} /> + <Separator theme={theme} /> + <Info info={I18n.t('In_App_and_Desktop_Alert_info')} theme={theme} /> - <SectionSeparator /> - <SectionTitle title={I18n.t('PUSH_NOTIFICATIONS')} /> - <Separator /> + <SectionSeparator theme={theme} /> + <SectionTitle title={I18n.t('PUSH_NOTIFICATIONS')} theme={theme} /> + <Separator theme={theme} /> <ListItem title={I18n.t('Alert')} testID='notification-preference-view-push-notification' right={() => this.renderPicker('mobilePushNotifications')} + theme={theme} /> - <Separator /> - <Info info={I18n.t('Push_Notifications_Alert_Info')} /> + <Separator theme={theme} /> + <Info info={I18n.t('Push_Notifications_Alert_Info')} theme={theme} /> - <SectionSeparator /> - <SectionTitle title={I18n.t('DESKTOP_OPTIONS')} /> - <Separator /> + <SectionSeparator theme={theme} /> + <SectionTitle title={I18n.t('DESKTOP_OPTIONS')} theme={theme} /> + <Separator theme={theme} /> <ListItem title={I18n.t('Audio')} testID='notification-preference-view-audio' right={() => this.renderPicker('audioNotifications')} + theme={theme} /> - <Separator /> + <Separator theme={theme} /> <ListItem title={I18n.t('Sound')} testID='notification-preference-view-sound' right={() => this.renderPicker('audioNotificationValue')} + theme={theme} /> - <Separator /> + <Separator theme={theme} /> <ListItem title={I18n.t('Notification_Duration')} testID='notification-preference-view-notification-duration' right={() => this.renderPicker('desktopNotificationDuration')} + theme={theme} /> - <Separator /> + <Separator theme={theme} /> - <SectionSeparator /> - <SectionTitle title={I18n.t('EMAIL')} /> - <Separator /> + <SectionSeparator theme={theme} /> + <SectionTitle title={I18n.t('EMAIL')} theme={theme} /> + <Separator theme={theme} /> <ListItem title={I18n.t('Alert')} testID='notification-preference-view-email-alert' right={() => this.renderPicker('emailNotifications')} + theme={theme} /> - <Separator /> + <Separator theme={theme} /> - <View style={styles.marginBottom} /> + <View style={[styles.marginBottom, { backgroundColor: themes[theme].auxiliaryBackground }]} /> </ScrollView> </SafeAreaView> ); } } + +export default withTheme(NotificationPreferencesView); diff --git a/app/views/NotificationPreferencesView/styles.js b/app/views/NotificationPreferencesView/styles.js index d01d019e6c..61b39cb6da 100644 --- a/app/views/NotificationPreferencesView/styles.js +++ b/app/views/NotificationPreferencesView/styles.js @@ -1,43 +1,34 @@ import { StyleSheet } from 'react-native'; -import { COLOR_BACKGROUND_CONTAINER, COLOR_PRIMARY, COLOR_WHITE } from '../../constants/colors'; import sharedStyles from '../Styles'; export default StyleSheet.create({ sectionSeparatorBorder: { - backgroundColor: COLOR_BACKGROUND_CONTAINER, height: 10 }, marginBottom: { - height: 30, - backgroundColor: COLOR_BACKGROUND_CONTAINER + height: 30 }, contentContainer: { - backgroundColor: COLOR_WHITE, marginVertical: 10 }, infoText: { ...sharedStyles.textRegular, - ...sharedStyles.textColorNormal, fontSize: 13, paddingHorizontal: 15, - paddingVertical: 10, - backgroundColor: COLOR_BACKGROUND_CONTAINER + paddingVertical: 10 }, sectionTitle: { ...sharedStyles.separatorBottom, paddingHorizontal: 15, - backgroundColor: COLOR_BACKGROUND_CONTAINER, paddingVertical: 10, - fontSize: 14, - ...sharedStyles.textColorNormal + fontSize: 14 }, viewContainer: { justifyContent: 'center' }, pickerText: { ...sharedStyles.textRegular, - fontSize: 16, - color: COLOR_PRIMARY + fontSize: 16 } }); diff --git a/app/views/OnboardingView/Button.js b/app/views/OnboardingView/Button.js index c890bc0f0e..4fb8ca02db 100644 --- a/app/views/OnboardingView/Button.js +++ b/app/views/OnboardingView/Button.js @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import { View, Text, TouchableWithoutFeedback } from 'react-native'; import styles from './styles'; +import { themes } from '../../constants/colors'; import DisclosureIndicator from '../../containers/DisclosureIndicator'; export default class Button extends React.PureComponent { @@ -10,6 +11,7 @@ export default class Button extends React.PureComponent { title: PropTypes.string, subtitle: PropTypes.string, type: PropTypes.string, + theme: PropTypes.string, icon: PropTypes.node.isRequired, testID: PropTypes.string.isRequired, onPress: PropTypes.func @@ -27,10 +29,15 @@ export default class Button extends React.PureComponent { render() { const { - title, subtitle, type, onPress, icon, testID + title, subtitle, type, onPress, icon, testID, theme } = this.props; const { active } = this.state; const activeStyle = active && styles.buttonActive; + const isPrimary = (type === 'primary'); + const buttonContainerStyle = { + backgroundColor: isPrimary ? themes[theme].actionTintColor : themes[theme].focusedBackground, + borderColor: isPrimary ? themes[theme].actionTintColor : themes[theme].borderColor + }; return ( <TouchableWithoutFeedback onPress={onPress} @@ -38,15 +45,15 @@ export default class Button extends React.PureComponent { onPressOut={() => this.setState({ active: false })} testID={testID} > - <View style={[styles.buttonContainer, styles[`button_container_${ type }`]]}> + <View style={[styles.buttonContainer, buttonContainerStyle]}> <View style={styles.buttonIconContainer}> {icon} </View> <View style={styles.buttonCenter}> - <Text style={[styles.buttonTitle, styles[`button_text_${ type }`], activeStyle]}>{title}</Text> - {subtitle ? <Text style={[styles.buttonSubtitle, activeStyle]}>{subtitle}</Text> : null} + <Text style={[styles.buttonTitle, { color: isPrimary ? themes[theme].buttonText : themes[theme].tintColor }, activeStyle]}>{title}</Text> + {subtitle ? <Text style={[styles.buttonSubtitle, activeStyle, { color: themes[theme].auxiliaryText }]}>{subtitle}</Text> : null} </View> - {type === 'secondary' ? <DisclosureIndicator /> : null} + {type === 'secondary' ? <DisclosureIndicator theme={theme} /> : null} </View> </TouchableWithoutFeedback> ); diff --git a/app/views/OnboardingView/index.js b/app/views/OnboardingView/index.js index c54a6eea63..c2fa36674f 100644 --- a/app/views/OnboardingView/index.js +++ b/app/views/OnboardingView/index.js @@ -13,11 +13,13 @@ import I18n from '../../i18n'; import openLink from '../../utils/openLink'; import Button from './Button'; import styles from './styles'; -import { isIOS, isNotch } from '../../utils/deviceInfo'; +import { isIOS, isNotch, isTablet } from '../../utils/deviceInfo'; import EventEmitter from '../../utils/events'; import { CustomIcon } from '../../lib/Icons'; import StatusBar from '../../containers/StatusBar'; -import { COLOR_PRIMARY, COLOR_WHITE } from '../../constants/colors'; +import { themes } from '../../constants/colors'; +import { withTheme } from '../../theme'; +import sharedStyles from '../Styles'; class OnboardingView extends React.Component { static navigationOptions = () => ({ @@ -31,14 +33,17 @@ class OnboardingView extends React.Component { currentServer: PropTypes.string, initAdd: PropTypes.func, finishAdd: PropTypes.func, - appStart: PropTypes.func + appStart: PropTypes.func, + theme: PropTypes.string } constructor(props) { super(props); BackHandler.addEventListener('hardwareBackPress', this.handleBackPress); this.previousServer = props.navigation.getParam('previousServer'); - Orientation.lockToPortrait(); + if (!isTablet) { + Orientation.lockToPortrait(); + } } componentDidMount() { @@ -49,7 +54,11 @@ class OnboardingView extends React.Component { EventEmitter.addEventListener('NewServer', this.handleNewServerEvent); } - shouldComponentUpdate() { + shouldComponentUpdate(nextProps) { + const { theme } = this.props; + if (theme !== nextProps.theme) { + return true; + } return false; } @@ -97,10 +106,12 @@ class OnboardingView extends React.Component { } createWorkspace = () => { - openLink('https://cloud.rocket.chat/trial'); + const { theme } = this.props; + openLink('https://cloud.rocket.chat/trial', theme); } renderClose = () => { + const { theme } = this.props; if (this.previousServer) { let top = 15; if (isIOS) { @@ -115,7 +126,7 @@ class OnboardingView extends React.Component { <CustomIcon name='cross' size={30} - color={COLOR_PRIMARY} + color={themes[theme].actionTintColor} /> </TouchableOpacity> ); @@ -124,19 +135,27 @@ class OnboardingView extends React.Component { } render() { + const { theme } = this.props; return ( - <SafeAreaView style={styles.container} testID='onboarding-view'> - <StatusBar light /> + <SafeAreaView + style={[ + styles.container, + { backgroundColor: themes[theme].backgroundColor } + ]} + testID='onboarding-view' + > + <StatusBar theme={theme} /> <Image style={styles.onboarding} source={{ uri: 'onboarding' }} fadeDuration={0} /> - <Text style={styles.title}>{I18n.t('Welcome_to_RocketChat')}</Text> - <Text style={styles.subtitle}>{I18n.t('Open_Source_Communication')}</Text> - <View style={styles.buttonsContainer}> + <Text style={[styles.title, { color: themes[theme].titleText }]}>{I18n.t('Welcome_to_RocketChat')}</Text> + <Text style={[styles.subtitle, { color: themes[theme].auxiliaryText }]}>{I18n.t('Open_Source_Communication')}</Text> + <View style={[styles.buttonsContainer, isTablet && sharedStyles.tabletScreenContent]}> <Button type='secondary' title={I18n.t('Connect_to_a_server')} - icon={<CustomIcon name='permalink' size={30} color={COLOR_PRIMARY} />} + icon={<CustomIcon name='permalink' size={30} color={themes[theme].actionTintColor} />} onPress={this.connectServer} testID='connect-server-button' + theme={theme} /> <Button type='secondary' @@ -145,13 +164,15 @@ class OnboardingView extends React.Component { icon={<Image source={{ uri: 'logo_onboarding' }} style={{ width: 32, height: 27 }} fadeDuration={0} />} onPress={this.joinCommunity} testID='join-community-button' + theme={theme} /> <Button type='primary' title={I18n.t('Create_a_new_workspace')} - icon={<CustomIcon name='plus' size={30} color={COLOR_WHITE} />} + icon={<CustomIcon name='plus' size={30} color={themes[theme].buttonText} />} onPress={this.createWorkspace} testID='create-workspace-button' + theme={theme} /> </View> {this.renderClose()} @@ -172,4 +193,4 @@ const mapDispatchToProps = dispatch => ({ appStart: root => dispatch(appStartAction(root)) }); -export default connect(mapStateToProps, mapDispatchToProps)(OnboardingView); +export default connect(mapStateToProps, mapDispatchToProps)(withTheme(OnboardingView)); diff --git a/app/views/OnboardingView/styles.js b/app/views/OnboardingView/styles.js index 65cfac5c09..2de8f4dde5 100644 --- a/app/views/OnboardingView/styles.js +++ b/app/views/OnboardingView/styles.js @@ -1,25 +1,14 @@ import { StyleSheet } from 'react-native'; import { verticalScale, moderateScale } from '../../utils/scaling'; +import { isTablet } from '../../utils/deviceInfo'; import sharedStyles from '../Styles'; -import { COLOR_PRIMARY, COLOR_BORDER, COLOR_WHITE } from '../../constants/colors'; - -const colors = { - backgroundPrimary: COLOR_PRIMARY, - backgroundSecondary: 'white', - - textColorPrimary: 'white', - textColorSecondary: COLOR_PRIMARY, - - borderColorPrimary: COLOR_PRIMARY, - borderColorSecondary: COLOR_BORDER -}; export default StyleSheet.create({ container: { flex: 1, flexDirection: 'column', - backgroundColor: COLOR_WHITE + justifyContent: isTablet ? 'center' : 'flex-start' }, onboarding: { alignSelf: 'center', @@ -32,7 +21,6 @@ export default StyleSheet.create({ }, title: { ...sharedStyles.textBold, - ...sharedStyles.textColorNormal, letterSpacing: 0, fontSize: moderateScale(24), alignSelf: 'center', @@ -68,7 +56,6 @@ export default StyleSheet.create({ }, buttonSubtitle: { ...sharedStyles.textRegular, - ...sharedStyles.textColorDescription, fontSize: 15 }, buttonIconContainer: { @@ -84,20 +71,6 @@ export default StyleSheet.create({ buttonActive: { opacity: 0.5 }, - button_container_primary: { - backgroundColor: colors.backgroundPrimary, - borderColor: colors.borderColorPrimary - }, - button_container_secondary: { - backgroundColor: colors.backgroundSecondary, - borderColor: colors.borderColorSecondary - }, - button_text_primary: { - color: colors.textColorPrimary - }, - button_text_secondary: { - color: colors.textColorSecondary - }, closeModal: { position: 'absolute', left: 15 diff --git a/app/views/ProfileView/index.js b/app/views/ProfileView/index.js index aab3c76d3a..1f89d017f1 100644 --- a/app/views/ProfileView/index.js +++ b/app/views/ProfileView/index.js @@ -7,8 +7,10 @@ import SHA256 from 'js-sha256'; import ImagePicker from 'react-native-image-crop-picker'; import RNPickerSelect from 'react-native-picker-select'; import { SafeAreaView } from 'react-navigation'; +import { HeaderBackButton } from 'react-navigation-stack'; import equal from 'deep-equal'; +import Touch from '../../utils/touch'; import KeyboardView from '../../presentation/KeyboardView'; import sharedStyles from '../Styles'; import styles from './styles'; @@ -22,16 +24,25 @@ import log from '../../utils/log'; import I18n from '../../i18n'; import Button from '../../containers/Button'; import Avatar from '../../containers/Avatar'; -import Touch from '../../utils/touch'; import { setUser as setUserAction } from '../../actions/login'; import { CustomIcon } from '../../lib/Icons'; import { DrawerButton } from '../../containers/HeaderButton'; import StatusBar from '../../containers/StatusBar'; -import { COLOR_TEXT } from '../../constants/colors'; +import { themes } from '../../constants/colors'; +import { withTheme } from '../../theme'; +import { themedHeader } from '../../utils/navigation'; class ProfileView extends React.Component { - static navigationOptions = ({ navigation }) => ({ - headerLeft: <DrawerButton navigation={navigation} />, + static navigationOptions = ({ navigation, screenProps }) => ({ + ...themedHeader(screenProps.theme), + headerLeft: screenProps.split ? ( + <HeaderBackButton + onPress={() => navigation.navigate('SettingsView')} + tintColor={themes[screenProps.theme].headerTintColor} + /> + ) : ( + <DrawerButton navigation={navigation} /> + ), title: I18n.t('Profile') }) @@ -39,7 +50,8 @@ class ProfileView extends React.Component { baseUrl: PropTypes.string, user: PropTypes.object, Accounts_CustomFields: PropTypes.string, - setUser: PropTypes.func + setUser: PropTypes.func, + theme: PropTypes.string } state = { @@ -249,26 +261,25 @@ class ProfileView extends React.Component { renderAvatarButton = ({ key, child, onPress, disabled = false - }) => ( - <Touch - key={key} - testID={key} - onPress={onPress} - underlayColor='rgba(255, 255, 255, 0.5)' - activeOpacity={0.3} - disabled={disabled} - > - <View - style={[styles.avatarButton, { opacity: disabled ? 0.5 : 1 }]} + }) => { + const { theme } = this.props; + return ( + <Touch + key={key} + testID={key} + onPress={onPress} + style={[styles.avatarButton, { opacity: disabled ? 0.5 : 1 }, { backgroundColor: themes[theme].borderColor }]} + enabled={!disabled} + theme={theme} > {child} - </View> - </Touch> - ) + </Touch> + ); + } renderAvatarButtons = () => { const { avatarUrl, avatarSuggestions } = this.state; - const { user, baseUrl } = this.props; + const { user, baseUrl, theme } = this.props; return ( <View style={styles.avatarButtons}> @@ -278,12 +289,12 @@ class ProfileView extends React.Component { key: 'profile-view-reset-avatar' })} {this.renderAvatarButton({ - child: <CustomIcon name='upload' size={30} color={COLOR_TEXT} />, + child: <CustomIcon name='upload' size={30} color={themes[theme].bodyText} />, onPress: () => this.pickImage(), key: 'profile-view-upload-avatar' })} {this.renderAvatarButton({ - child: <CustomIcon name='permalink' size={30} color={COLOR_TEXT} />, + child: <CustomIcon name='permalink' size={30} color={themes[theme].bodyText} />, onPress: () => this.setAvatar({ url: avatarUrl, data: avatarUrl, service: 'url' }), disabled: !avatarUrl, key: 'profile-view-avatar-url-button' @@ -304,7 +315,7 @@ class ProfileView extends React.Component { renderCustomFields = () => { const { customFields } = this.state; - const { Accounts_CustomFields } = this.props; + const { Accounts_CustomFields, theme } = this.props; if (!Accounts_CustomFields) { return null; @@ -331,6 +342,7 @@ class ProfileView extends React.Component { placeholder={key} value={customFields[key]} testID='settings-view-language' + theme={theme} /> </RNPickerSelect> ); @@ -354,6 +366,7 @@ class ProfileView extends React.Component { } this.avatarUrl.focus(); }} + theme={theme} /> ); }); @@ -366,20 +379,23 @@ class ProfileView extends React.Component { const { name, username, email, newPassword, avatarUrl, customFields, avatar, saving, showPasswordAlert } = this.state; - const { baseUrl, user } = this.props; + const { + baseUrl, user, theme, Accounts_CustomFields + } = this.props; return ( <KeyboardView + style={{ backgroundColor: themes[theme].auxiliaryBackground }} contentContainerStyle={sharedStyles.container} keyboardVerticalOffset={128} > - <StatusBar /> - <ScrollView - contentContainerStyle={sharedStyles.containerScrollView} - testID='profile-view-list' - {...scrollPersistTaps} - > - <SafeAreaView style={sharedStyles.container} testID='profile-view' forceInset={{ vertical: 'never' }}> + <StatusBar theme={theme} /> + <SafeAreaView style={sharedStyles.container} testID='profile-view' forceInset={{ vertical: 'never' }}> + <ScrollView + contentContainerStyle={sharedStyles.containerScrollView} + testID='profile-view-list' + {...scrollPersistTaps} + > <View style={styles.avatarContainer} testID='profile-view-avatar'> <Avatar text={username} @@ -398,6 +414,7 @@ class ProfileView extends React.Component { onChangeText={value => this.setState({ name: value })} onSubmitEditing={() => { this.username.focus(); }} testID='profile-view-name' + theme={theme} /> <RCTextInput inputRef={(e) => { this.username = e; }} @@ -407,6 +424,7 @@ class ProfileView extends React.Component { onChangeText={value => this.setState({ username: value })} onSubmitEditing={() => { this.email.focus(); }} testID='profile-view-username' + theme={theme} /> <RCTextInput inputRef={(e) => { this.email = e; }} @@ -416,6 +434,7 @@ class ProfileView extends React.Component { onChangeText={value => this.setState({ email: value })} onSubmitEditing={() => { this.newPassword.focus(); }} testID='profile-view-email' + theme={theme} /> <RCTextInput inputRef={(e) => { this.newPassword = e; }} @@ -424,13 +443,14 @@ class ProfileView extends React.Component { value={newPassword} onChangeText={value => this.setState({ newPassword: value })} onSubmitEditing={() => { - if (Object.keys(customFields).length) { + if (Accounts_CustomFields && Object.keys(customFields).length) { return this[Object.keys(customFields)[0]].focus(); } this.avatarUrl.focus(); }} secureTextEntry testID='profile-view-new-password' + theme={theme} /> {this.renderCustomFields()} <RCTextInput @@ -441,6 +461,7 @@ class ProfileView extends React.Component { onChangeText={value => this.setState({ avatarUrl: value })} onSubmitEditing={this.submit} testID='profile-view-avatar-url' + theme={theme} /> {this.renderAvatarButtons()} <Button @@ -450,6 +471,7 @@ class ProfileView extends React.Component { disabled={!this.formIsChanged()} testID='profile-view-submit' loading={saving} + theme={theme} /> <Dialog.Container visible={showPasswordAlert}> <Dialog.Title> @@ -467,8 +489,8 @@ class ProfileView extends React.Component { <Dialog.Button label={I18n.t('Cancel')} onPress={this.closePasswordAlert} /> <Dialog.Button label={I18n.t('Save')} onPress={this.submit} /> </Dialog.Container> - </SafeAreaView> - </ScrollView> + </ScrollView> + </SafeAreaView> </KeyboardView> ); } @@ -491,4 +513,4 @@ const mapDispatchToProps = dispatch => ({ setUser: params => dispatch(setUserAction(params)) }); -export default connect(mapStateToProps, mapDispatchToProps)(ProfileView); +export default connect(mapStateToProps, mapDispatchToProps)(withTheme(ProfileView)); diff --git a/app/views/ReadReceiptView/index.js b/app/views/ReadReceiptView/index.js index 7d01574dd8..d5d90fcd13 100644 --- a/app/views/ReadReceiptView/index.js +++ b/app/views/ReadReceiptView/index.js @@ -8,22 +8,27 @@ import { connect } from 'react-redux'; import Avatar from '../../containers/Avatar'; import styles from './styles'; -import RCActivityIndicator from '../../containers/ActivityIndicator'; +import ActivityIndicator from '../../containers/ActivityIndicator'; import I18n from '../../i18n'; import RocketChat from '../../lib/rocketchat'; import StatusBar from '../../containers/StatusBar'; +import { withTheme } from '../../theme'; +import { themedHeader } from '../../utils/navigation'; +import { themes } from '../../constants/colors'; class ReadReceiptView extends React.Component { - static navigationOptions = { - title: I18n.t('Read_Receipt') - } + static navigationOptions = ({ screenProps }) => ({ + title: I18n.t('Read_Receipt'), + ...themedHeader(screenProps.theme) + }) static propTypes = { navigation: PropTypes.object, Message_TimeFormat: PropTypes.string, baseUrl: PropTypes.string, userId: PropTypes.string, - token: PropTypes.string + token: PropTypes.string, + theme: PropTypes.string } constructor(props) { @@ -41,6 +46,10 @@ class ReadReceiptView extends React.Component { shouldComponentUpdate(nextProps, nextState) { const { loading, receipts } = this.state; + const { theme } = this.props; + if (nextProps.theme !== theme) { + return true; + } if (nextState.loading !== loading) { return true; } @@ -72,19 +81,22 @@ class ReadReceiptView extends React.Component { } } - renderEmpty = () => ( - <View style={styles.listEmptyContainer} testID='read-receipt-view'> - <Text>{I18n.t('No_Read_Receipts')}</Text> - </View> - ) + renderEmpty = () => { + const { theme } = this.props; + return ( + <View style={[styles.listEmptyContainer, { backgroundColor: themes[theme].chatComponentBackground }]} testID='read-receipt-view'> + <Text style={{ color: themes[theme].titleText }}>{I18n.t('No_Read_Receipts')}</Text> + </View> + ); + } renderItem = ({ item }) => { const { - Message_TimeFormat, userId, baseUrl, token + Message_TimeFormat, userId, baseUrl, token, theme } = this.props; const time = moment(item.ts).format(Message_TimeFormat); return ( - <View style={styles.itemContainer}> + <View style={[styles.itemContainer, { backgroundColor: themes[theme].backgroundColor }]}> <Avatar text={item.user.username} size={40} @@ -94,14 +106,14 @@ class ReadReceiptView extends React.Component { /> <View style={styles.infoContainer}> <View style={styles.item}> - <Text style={styles.name}> + <Text style={[styles.name, { color: themes[theme].titleText }]}> {item.user.name} </Text> - <Text> + <Text style={{ color: themes[theme].auxiliaryText }}> {time} </Text> </View> - <Text> + <Text style={{ color: themes[theme].auxiliaryText }}> {`@${ item.user.username }`} </Text> </View> @@ -109,27 +121,41 @@ class ReadReceiptView extends React.Component { ); } - renderSeparator = () => <View style={styles.separator} />; + renderSeparator = () => { + const { theme } = this.props; + return <View style={[styles.separator, { backgroundColor: themes[theme].separatorColor }]} />; + } render() { const { receipts, loading } = this.state; + const { theme } = this.props; if (!loading && receipts.length === 0) { return this.renderEmpty(); } return ( - <SafeAreaView style={styles.container} testID='read-receipt-view' forceInset={{ bottom: 'always' }}> - <StatusBar /> + <SafeAreaView + style={[styles.container, { backgroundColor: themes[theme].chatComponentBackground }]} + forceInset={{ bottom: 'always' }} + testID='read-receipt-view' + > + <StatusBar theme={theme} /> <View> {loading - ? <RCActivityIndicator /> + ? <ActivityIndicator theme={theme} /> : ( <FlatList data={receipts} renderItem={this.renderItem} ItemSeparatorComponent={this.renderSeparator} - style={styles.list} + style={[ + styles.list, + { + backgroundColor: themes[theme].chatComponentBackground, + borderColor: themes[theme].separatorColor + } + ]} keyExtractor={item => item._id} /> )} @@ -146,4 +172,4 @@ const mapStateToProps = state => ({ token: state.login.user && state.login.user.token }); -export default connect(mapStateToProps)(ReadReceiptView); +export default connect(mapStateToProps)(withTheme(ReadReceiptView)); diff --git a/app/views/ReadReceiptView/styles.js b/app/views/ReadReceiptView/styles.js index 731fe8f1dc..a0013531c4 100644 --- a/app/views/ReadReceiptView/styles.js +++ b/app/views/ReadReceiptView/styles.js @@ -1,13 +1,11 @@ import { StyleSheet } from 'react-native'; -import { COLOR_SEPARATOR, COLOR_WHITE, COLOR_BACKGROUND_CONTAINER } from '../../constants/colors'; import sharedStyles from '../Styles'; export default StyleSheet.create({ listEmptyContainer: { flex: 1, alignItems: 'center', - justifyContent: 'center', - backgroundColor: COLOR_BACKGROUND_CONTAINER + justifyContent: 'center' }, item: { flex: 1, @@ -15,20 +13,12 @@ export default StyleSheet.create({ justifyContent: 'space-between' }, separator: { - height: StyleSheet.hairlineWidth, - backgroundColor: COLOR_SEPARATOR + height: StyleSheet.hairlineWidth }, name: { ...sharedStyles.textRegular, - ...sharedStyles.textColorTitle, fontSize: 17 }, - username: { - flex: 1, - ...sharedStyles.textRegular, - ...sharedStyles.textColorDescription, - fontSize: 14 - }, infoContainer: { flex: 1, marginLeft: 10 @@ -36,12 +26,10 @@ export default StyleSheet.create({ itemContainer: { flex: 1, flexDirection: 'row', - padding: 10, - backgroundColor: COLOR_WHITE + padding: 10 }, container: { - flex: 1, - backgroundColor: COLOR_BACKGROUND_CONTAINER + flex: 1 }, list: { ...sharedStyles.separatorVertical, diff --git a/app/views/RegisterView.js b/app/views/RegisterView.js index f1b34498f7..12e79b633b 100644 --- a/app/views/RegisterView.js +++ b/app/views/RegisterView.js @@ -20,13 +20,18 @@ import isValidEmail from '../utils/isValidEmail'; import { LegalButton } from '../containers/HeaderButton'; import StatusBar from '../containers/StatusBar'; import log from '../utils/log'; +import { withTheme } from '../theme'; +import { themes } from '../constants/colors'; +import { themedHeader } from '../utils/navigation'; +import { isTablet } from '../utils/deviceInfo'; const shouldUpdateState = ['name', 'email', 'password', 'username', 'saving']; class RegisterView extends React.Component { - static navigationOptions = ({ navigation }) => { + static navigationOptions = ({ navigation, screenProps }) => { const title = navigation.getParam('title', 'Rocket.Chat'); return { + ...themedHeader(screenProps.theme), title, headerRight: <LegalButton testID='register-view-more' navigation={navigation} /> }; @@ -36,7 +41,8 @@ class RegisterView extends React.Component { navigation: PropTypes.object, loginRequest: PropTypes.func, Site_Name: PropTypes.string, - Accounts_CustomFields: PropTypes.string + Accounts_CustomFields: PropTypes.string, + theme: PropTypes.string } constructor(props) { @@ -67,6 +73,10 @@ class RegisterView extends React.Component { shouldComponentUpdate(nextProps, nextState) { const { customFields } = this.state; + const { theme } = this.props; + if (nextProps.theme !== theme) { + return true; + } if (!equal(nextState.customFields, customFields)) { return true; } @@ -124,7 +134,7 @@ class RegisterView extends React.Component { renderCustomFields = () => { const { customFields } = this.state; - const { Accounts_CustomFields } = this.props; + const { Accounts_CustomFields, theme } = this.props; if (!Accounts_CustomFields) { return null; } @@ -149,6 +159,7 @@ class RegisterView extends React.Component { value={customFields[key]} iconLeft='flag' testID='register-view-custom-picker' + theme={theme} /> </RNPickerSelect> ); @@ -172,6 +183,7 @@ class RegisterView extends React.Component { } this.avatarUrl.focus(); }} + theme={theme} /> ); }); @@ -182,12 +194,16 @@ class RegisterView extends React.Component { render() { const { saving } = this.state; + const { theme } = this.props; return ( - <KeyboardView contentContainerStyle={sharedStyles.container}> - <StatusBar /> + <KeyboardView + style={{ backgroundColor: themes[theme].backgroundColor }} + contentContainerStyle={sharedStyles.container} + > + <StatusBar theme={theme} /> <ScrollView {...scrollPersistTaps} contentContainerStyle={sharedStyles.containerScrollView}> - <SafeAreaView style={sharedStyles.container} testID='register-view' forceInset={{ vertical: 'never' }}> - <Text style={[sharedStyles.loginTitle, sharedStyles.textBold]}>{I18n.t('Sign_Up')}</Text> + <SafeAreaView style={[sharedStyles.container, isTablet && sharedStyles.tabletScreenContent]} testID='register-view' forceInset={{ vertical: 'never' }}> + <Text style={[sharedStyles.loginTitle, sharedStyles.textBold, { color: themes[theme].titleText }]}>{I18n.t('Sign_Up')}</Text> <TextInput autoFocus placeholder={I18n.t('Name')} @@ -196,6 +212,7 @@ class RegisterView extends React.Component { onChangeText={name => this.setState({ name })} onSubmitEditing={() => { this.usernameInput.focus(); }} testID='register-view-name' + theme={theme} /> <TextInput inputRef={(e) => { this.usernameInput = e; }} @@ -205,6 +222,7 @@ class RegisterView extends React.Component { onChangeText={username => this.setState({ username })} onSubmitEditing={() => { this.emailInput.focus(); }} testID='register-view-username' + theme={theme} /> <TextInput inputRef={(e) => { this.emailInput = e; }} @@ -215,6 +233,7 @@ class RegisterView extends React.Component { onChangeText={email => this.setState({ email })} onSubmitEditing={() => { this.passwordInput.focus(); }} testID='register-view-email' + theme={theme} /> <TextInput inputRef={(e) => { this.passwordInput = e; }} @@ -226,6 +245,7 @@ class RegisterView extends React.Component { onSubmitEditing={this.submit} testID='register-view-password' containerStyle={sharedStyles.inputLastChild} + theme={theme} /> {this.renderCustomFields()} @@ -237,6 +257,7 @@ class RegisterView extends React.Component { testID='register-view-submit' disabled={!this.valid()} loading={saving} + theme={theme} /> </SafeAreaView> </ScrollView> @@ -253,4 +274,4 @@ const mapDispatchToProps = dispatch => ({ loginRequest: params => dispatch(loginRequestAction(params)) }); -export default connect(mapStateToProps, mapDispatchToProps)(RegisterView); +export default connect(mapStateToProps, mapDispatchToProps)(withTheme(RegisterView)); diff --git a/app/views/RoomActionsView/index.js b/app/views/RoomActionsView/index.js index e40ff68a4e..9a0a893018 100644 --- a/app/views/RoomActionsView/index.js +++ b/app/views/RoomActionsView/index.js @@ -6,12 +6,12 @@ import { import { connect } from 'react-redux'; import { SafeAreaView } from 'react-navigation'; +import Touch from '../../utils/touch'; import { leaveRoom as leaveRoomAction } from '../../actions/room'; import styles from './styles'; import sharedStyles from '../Styles'; import Avatar from '../../containers/Avatar'; import Status from '../../containers/Status'; -import Touch from '../../utils/touch'; import RocketChat from '../../lib/rocketchat'; import log from '../../utils/log'; import RoomTypeIcon from '../../containers/RoomTypeIcon'; @@ -20,13 +20,21 @@ import scrollPersistTaps from '../../utils/scrollPersistTaps'; import { CustomIcon } from '../../lib/Icons'; import DisclosureIndicator from '../../containers/DisclosureIndicator'; import StatusBar from '../../containers/StatusBar'; -import { COLOR_WHITE } from '../../constants/colors'; - -const renderSeparator = () => <View style={styles.separator} />; +import { themes } from '../../constants/colors'; +import { withTheme } from '../../theme'; +import { themedHeader } from '../../utils/navigation'; +import { CloseModalButton } from '../../containers/HeaderButton'; class RoomActionsView extends React.Component { - static navigationOptions = { - title: I18n.t('Actions') + static navigationOptions = ({ navigation, screenProps }) => { + const options = { + ...themedHeader(screenProps.theme), + title: I18n.t('Actions') + }; + if (screenProps.split) { + options.headerLeft = <CloseModalButton navigation={navigation} testID='room-actions-view-close' />; + } + return options; } static propTypes = { @@ -37,7 +45,8 @@ class RoomActionsView extends React.Component { token: PropTypes.string }), leaveRoom: PropTypes.func, - jitsiEnabled: PropTypes.bool + jitsiEnabled: PropTypes.bool, + theme: PropTypes.string } constructor(props) { @@ -325,6 +334,11 @@ class RoomActionsView extends React.Component { return sections; } + renderSeparator = () => { + const { theme } = this.props; + return <View style={[styles.separator, { backgroundColor: themes[theme].separatorColor }]} />; + } + updateRoomMember = async() => { const { room } = this.state; const { rid } = room; @@ -385,7 +399,7 @@ class RoomActionsView extends React.Component { renderRoomInfo = ({ item }) => { const { room, member } = this.state; const { name, t, topic } = room; - const { baseUrl, user } = this.props; + const { baseUrl, user, theme } = this.props; return ( this.renderTouchableItem([ @@ -403,70 +417,77 @@ class RoomActionsView extends React.Component { </Avatar>, <View key='name' style={styles.roomTitleContainer}> {room.t === 'd' - ? <Text style={styles.roomTitle}>{room.fname}</Text> + ? <Text style={[styles.roomTitle, { color: themes[theme].titleText }]} numberOfLines={1}>{room.fname}</Text> : ( <View style={styles.roomTitleRow}> - <RoomTypeIcon type={room.prid ? 'discussion' : room.t} /> - <Text style={styles.roomTitle}>{room.prid ? room.fname : room.name}</Text> + <RoomTypeIcon type={room.prid ? 'discussion' : room.t} theme={theme} /> + <Text style={[styles.roomTitle, { color: themes[theme].titleText }]} numberOfLines={1}>{room.prid ? room.fname : room.name}</Text> </View> ) } - <Text style={styles.roomDescription} ellipsizeMode='tail' numberOfLines={1}>{t === 'd' ? `@${ name }` : topic}</Text> + <Text style={[styles.roomDescription, { color: themes[theme].auxiliaryText }]} ellipsizeMode='tail' numberOfLines={1}>{t === 'd' ? `@${ name }` : topic}</Text> </View>, - <DisclosureIndicator key='disclosure-indicator' /> + <DisclosureIndicator theme={theme} key='disclosure-indicator' /> ], item) ); } - renderTouchableItem = (subview, item) => ( - <Touch - onPress={() => this.onPressTouchable(item)} - underlayColor={COLOR_WHITE} - activeOpacity={0.5} - accessibilityLabel={item.name} - accessibilityTraits='button' - testID={item.testID} - > - <View style={[styles.sectionItem, item.disabled && styles.sectionItemDisabled]}> - {subview} - </View> - </Touch> - ) + renderTouchableItem = (subview, item) => { + const { theme } = this.props; + return ( + <Touch + onPress={() => this.onPressTouchable(item)} + style={{ backgroundColor: themes[theme].backgroundColor }} + accessibilityLabel={item.name} + accessibilityTraits='button' + testID={item.testID} + theme={theme} + > + <View style={[styles.sectionItem, item.disabled && styles.sectionItemDisabled]}> + {subview} + </View> + </Touch> + ); + } renderItem = ({ item }) => { + const { theme } = this.props; + const colorDanger = { color: themes[theme].dangerColor }; const subview = item.type === 'danger' ? [ - <CustomIcon key='icon' name={item.icon} size={24} style={[styles.sectionItemIcon, styles.textColorDanger]} />, - <Text key='name' style={[styles.sectionItemName, styles.textColorDanger]}>{ item.name }</Text> + <CustomIcon key='icon' name={item.icon} size={24} style={[styles.sectionItemIcon, colorDanger]} />, + <Text key='name' style={[styles.sectionItemName, colorDanger]}>{ item.name }</Text> ] : [ - <CustomIcon key='left-icon' name={item.icon} size={24} style={styles.sectionItemIcon} />, - <Text key='name' style={styles.sectionItemName}>{ item.name }</Text>, - item.description ? <Text key='description' style={styles.sectionItemDescription}>{ item.description }</Text> : null, - <DisclosureIndicator key='disclosure-indicator' /> + <CustomIcon key='left-icon' name={item.icon} size={24} style={[styles.sectionItemIcon, { color: themes[theme].bodyText }]} />, + <Text key='name' style={[styles.sectionItemName, { color: themes[theme].bodyText }]}>{ item.name }</Text>, + item.description ? <Text key='description' style={[styles.sectionItemDescription, { color: themes[theme].auxiliaryText }]}>{ item.description }</Text> : null, + <DisclosureIndicator theme={theme} key='disclosure-indicator' /> ]; return this.renderTouchableItem(subview, item); } renderSectionSeparator = (data) => { + const { theme } = this.props; if (data.trailingItem) { - return <View style={[styles.sectionSeparator, data.leadingSection && styles.sectionSeparatorBorder]} />; + return <View style={[styles.sectionSeparator, data.leadingSection && styles.sectionSeparatorBorder, { backgroundColor: themes[theme].auxiliaryBackground, borderColor: themes[theme].separatorColor }]} />; } if (!data.trailingSection) { - return <View style={styles.sectionSeparatorBorder} />; + return <View style={[styles.sectionSeparatorBorder, { backgroundColor: themes[theme].auxiliaryBackground, borderColor: themes[theme].separatorColor }]} />; } return null; } render() { + const { theme } = this.props; return ( <SafeAreaView style={styles.container} testID='room-actions-view' forceInset={{ vertical: 'never' }}> - <StatusBar /> + <StatusBar theme={theme} /> <SectionList - contentContainerStyle={styles.contentContainer} - style={styles.container} + contentContainerStyle={[styles.contentContainer, { backgroundColor: themes[theme].auxiliaryBackground }]} + style={[styles.container, { backgroundColor: themes[theme].auxiliaryBackground }]} stickySectionHeadersEnabled={false} sections={this.sections} SectionSeparatorComponent={this.renderSectionSeparator} - ItemSeparatorComponent={renderSeparator} + ItemSeparatorComponent={this.renderSeparator} keyExtractor={item => item.name} testID='room-actions-list' {...scrollPersistTaps} @@ -489,4 +510,4 @@ const mapDispatchToProps = dispatch => ({ leaveRoom: (rid, t) => dispatch(leaveRoomAction(rid, t)) }); -export default connect(mapStateToProps, mapDispatchToProps)(RoomActionsView); +export default connect(mapStateToProps, mapDispatchToProps)(withTheme(RoomActionsView)); diff --git a/app/views/RoomActionsView/styles.js b/app/views/RoomActionsView/styles.js index ee0939aba9..1461cba378 100644 --- a/app/views/RoomActionsView/styles.js +++ b/app/views/RoomActionsView/styles.js @@ -1,7 +1,4 @@ import { StyleSheet } from 'react-native'; -import { - COLOR_SEPARATOR, COLOR_BORDER, COLOR_DANGER, COLOR_WHITE -} from '../../constants/colors'; import sharedStyles from '../Styles'; @@ -10,12 +7,10 @@ export default StyleSheet.create({ paddingBottom: 30 }, container: { - flex: 1, - backgroundColor: '#F6F7F9' + flex: 1 }, sectionItem: { - backgroundColor: COLOR_WHITE, - paddingVertical: 16, + paddingVertical: 11, flexDirection: 'row', alignItems: 'center' }, @@ -24,34 +19,26 @@ export default StyleSheet.create({ }, sectionItemIcon: { width: 56, - textAlign: 'center', - ...sharedStyles.textColorNormal + textAlign: 'center' }, sectionItemName: { flex: 1, fontSize: 14, - ...sharedStyles.textColorNormal, ...sharedStyles.textRegular }, sectionItemDescription: { fontSize: 14, - ...sharedStyles.textColorDescription, ...sharedStyles.textRegular }, separator: { - height: StyleSheet.hairlineWidth, - backgroundColor: COLOR_SEPARATOR + height: StyleSheet.hairlineWidth }, sectionSeparator: { - height: 10, - backgroundColor: '#F6F7F9' + borderBottomWidth: StyleSheet.hairlineWidth, + height: 36 }, sectionSeparatorBorder: { - borderColor: COLOR_BORDER, - borderTopWidth: 1 - }, - textColorDanger: { - color: COLOR_DANGER + borderTopWidth: StyleSheet.hairlineWidth }, avatar: { marginHorizontal: 16 @@ -61,12 +48,11 @@ export default StyleSheet.create({ }, roomTitle: { fontSize: 16, - ...sharedStyles.textColorNormal, + paddingRight: 16, ...sharedStyles.textMedium }, roomDescription: { fontSize: 13, - ...sharedStyles.textColorDescription, ...sharedStyles.textRegular }, roomTitleRow: { diff --git a/app/views/RoomInfoEditView/SwitchContainer.js b/app/views/RoomInfoEditView/SwitchContainer.js index 6f32660980..5b877552da 100644 --- a/app/views/RoomInfoEditView/SwitchContainer.js +++ b/app/views/RoomInfoEditView/SwitchContainer.js @@ -3,8 +3,7 @@ import { View, Text, Switch } from 'react-native'; import PropTypes from 'prop-types'; import styles from './styles'; -import sharedStyles from '../Styles'; -import { SWITCH_TRACK_COLOR } from '../../constants/colors'; +import { SWITCH_TRACK_COLOR, themes } from '../../constants/colors'; export default class SwitchContainer extends React.PureComponent { static propTypes = { @@ -15,19 +14,20 @@ export default class SwitchContainer extends React.PureComponent { rightLabelPrimary: PropTypes.string, rightLabelSecondary: PropTypes.string, onValueChange: PropTypes.func, + theme: PropTypes.string, testID: PropTypes.string } render() { const { - value, disabled, onValueChange, leftLabelPrimary, leftLabelSecondary, rightLabelPrimary, rightLabelSecondary, testID + value, disabled, onValueChange, leftLabelPrimary, leftLabelSecondary, rightLabelPrimary, rightLabelSecondary, theme, testID } = this.props; return ( [ <View key='switch-container' style={styles.switchContainer}> - <View style={[styles.switchLabelContainer, sharedStyles.alignItemsFlexEnd]}> - <Text style={styles.switchLabelPrimary}>{leftLabelPrimary}</Text> - <Text style={[styles.switchLabelSecondary, sharedStyles.textAlignRight]}>{leftLabelSecondary}</Text> + <View style={styles.switchLabelContainer}> + <Text style={[styles.switchLabelPrimary, { color: themes[theme].titleText }]}>{leftLabelPrimary}</Text> + <Text style={[styles.switchLabelSecondary, { color: themes[theme].titleText }]}>{leftLabelSecondary}</Text> </View> <Switch style={styles.switch} @@ -38,11 +38,11 @@ export default class SwitchContainer extends React.PureComponent { testID={testID} /> <View style={styles.switchLabelContainer}> - <Text style={styles.switchLabelPrimary}>{rightLabelPrimary}</Text> - <Text style={styles.switchLabelSecondary}>{rightLabelSecondary}</Text> + <Text style={[styles.switchLabelPrimary, { color: themes[theme].titleText }]}>{rightLabelPrimary}</Text> + <Text style={[styles.switchLabelSecondary, { color: themes[theme].titleText }]}>{rightLabelSecondary}</Text> </View> </View>, - <View key='switch-divider' style={styles.divider} /> + <View key='switch-divider' style={[styles.divider, { borderColor: themes[theme].separatorColor }]} /> ] ); } diff --git a/app/views/RoomInfoEditView/index.js b/app/views/RoomInfoEditView/index.js index 8bb3da77b5..3d6a61e8ca 100644 --- a/app/views/RoomInfoEditView/index.js +++ b/app/views/RoomInfoEditView/index.js @@ -24,6 +24,9 @@ import random from '../../utils/random'; import log from '../../utils/log'; import I18n from '../../i18n'; import StatusBar from '../../containers/StatusBar'; +import { themedHeader } from '../../utils/navigation'; +import { themes } from '../../constants/colors'; +import { withTheme } from '../../theme'; const PERMISSION_SET_READONLY = 'set-readonly'; const PERMISSION_SET_REACT_WHEN_READONLY = 'set-react-when-readonly'; @@ -41,13 +44,15 @@ const PERMISSIONS_ARRAY = [ ]; class RoomInfoEditView extends React.Component { - static navigationOptions = { - title: I18n.t('Room_Info_Edit') - } + static navigationOptions = ({ screenProps }) => ({ + title: I18n.t('Room_Info_Edit'), + ...themedHeader(screenProps.theme) + }) static propTypes = { navigation: PropTypes.object, - eraseRoom: PropTypes.func + eraseRoom: PropTypes.func, + theme: PropTypes.string }; constructor(props) { @@ -145,11 +150,12 @@ class RoomInfoEditView extends React.Component { const { room, name, description, topic, announcement, t, ro, reactWhenReadOnly, joinCode } = this.state; + const { joinCodeRequired } = room; return !(room.name === name && room.description === description && room.topic === topic && room.announcement === announcement - && this.randomValue === joinCode + && (joinCodeRequired ? this.randomValue : '') === joinCode && room.t === 'p' === t && room.ro === ro && room.reactWhenReadOnly === reactWhenReadOnly @@ -296,12 +302,15 @@ class RoomInfoEditView extends React.Component { const { name, nameError, description, topic, announcement, t, ro, reactWhenReadOnly, room, joinCode, saving, permissions, archived } = this.state; + const { theme } = this.props; + const { dangerColor } = themes[theme]; return ( <KeyboardView + style={{ backgroundColor: themes[theme].backgroundColor }} contentContainerStyle={sharedStyles.container} keyboardVerticalOffset={128} > - <StatusBar /> + <StatusBar theme={theme} /> <ScrollView contentContainerStyle={sharedStyles.containerScrollView} testID='room-info-edit-view-list' @@ -315,6 +324,7 @@ class RoomInfoEditView extends React.Component { onChangeText={value => this.setState({ name: value })} onSubmitEditing={() => { this.description.focus(); }} error={nameError} + theme={theme} testID='room-info-edit-view-name' /> <RCTextInput @@ -323,6 +333,7 @@ class RoomInfoEditView extends React.Component { value={description} onChangeText={value => this.setState({ description: value })} onSubmitEditing={() => { this.topic.focus(); }} + theme={theme} testID='room-info-edit-view-description' /> <RCTextInput @@ -331,6 +342,7 @@ class RoomInfoEditView extends React.Component { value={topic} onChangeText={value => this.setState({ topic: value })} onSubmitEditing={() => { this.announcement.focus(); }} + theme={theme} testID='room-info-edit-view-topic' /> <RCTextInput @@ -339,6 +351,7 @@ class RoomInfoEditView extends React.Component { value={announcement} onChangeText={value => this.setState({ announcement: value })} onSubmitEditing={() => { this.joinCode.focus(); }} + theme={theme} testID='room-info-edit-view-announcement' /> <RCTextInput @@ -348,6 +361,7 @@ class RoomInfoEditView extends React.Component { onChangeText={value => this.setState({ joinCode: value })} onSubmitEditing={this.submit} secureTextEntry + theme={theme} testID='room-info-edit-view-password' /> <SwitchContainer @@ -357,6 +371,7 @@ class RoomInfoEditView extends React.Component { rightLabelPrimary={I18n.t('Private')} rightLabelSecondary={I18n.t('Just_invited_people_can_access_this_channel')} onValueChange={value => this.setState({ t: value })} + theme={theme} testID='room-info-edit-view-t' /> <SwitchContainer @@ -367,6 +382,7 @@ class RoomInfoEditView extends React.Component { rightLabelSecondary={I18n.t('Only_authorized_users_can_write_new_messages')} onValueChange={value => this.setState({ ro: value })} disabled={!permissions[PERMISSION_SET_READONLY] || room.broadcast} + theme={theme} testID='room-info-edit-view-ro' /> {ro && !room.broadcast @@ -379,6 +395,7 @@ class RoomInfoEditView extends React.Component { rightLabelSecondary={I18n.t('Reactions_are_enabled')} onValueChange={value => this.setState({ reactWhenReadOnly: value })} disabled={!permissions[PERMISSION_SET_REACT_WHEN_READONLY]} + theme={theme} testID='room-info-edit-view-react-when-ro' /> ) @@ -387,55 +404,89 @@ class RoomInfoEditView extends React.Component { {room.broadcast ? [ <Text style={styles.broadcast}>{I18n.t('Broadcast_Channel')}</Text>, - <View style={styles.divider} /> + <View style={[styles.divider, { borderColor: themes[theme].separatorColor }]} /> ] : null } <TouchableOpacity - style={[sharedStyles.buttonContainer, !this.formIsChanged() && styles.buttonContainerDisabled]} + style={[ + styles.buttonContainer, + { backgroundColor: themes[theme].buttonBackground }, + !this.formIsChanged() && styles.buttonContainerDisabled + ]} onPress={this.submit} disabled={!this.formIsChanged()} testID='room-info-edit-view-submit' > - <Text style={sharedStyles.button} accessibilityTraits='button'>{I18n.t('SAVE')}</Text> + <Text style={[styles.button, { color: themes[theme].buttonText }]} accessibilityTraits='button'>{I18n.t('SAVE')}</Text> </TouchableOpacity> <View style={{ flexDirection: 'row' }}> <TouchableOpacity - style={[sharedStyles.buttonContainer_inverted, styles.buttonInverted, { flex: 1 }]} + style={[ + styles.buttonContainer_inverted, + styles.buttonInverted, + { flex: 1, borderColor: themes[theme].auxiliaryText } + ]} onPress={this.reset} testID='room-info-edit-view-reset' > - <Text style={sharedStyles.button_inverted} accessibilityTraits='button'>{I18n.t('RESET')}</Text> + <Text + style={[ + styles.button, + styles.button_inverted, + { color: themes[theme].bodyText } + ]} + accessibilityTraits='button' + > + {I18n.t('RESET')} + </Text> </TouchableOpacity> <TouchableOpacity style={[ - sharedStyles.buttonContainer_inverted, - styles.buttonDanger, + styles.buttonInverted, + styles.buttonContainer_inverted, !this.hasArchivePermission() && sharedStyles.opacity5, - { flex: 1, marginLeft: 10 } + { flex: 1, marginLeft: 10, borderColor: dangerColor } ]} onPress={this.toggleArchive} disabled={!this.hasArchivePermission()} testID='room-info-edit-view-archive' > - <Text style={[sharedStyles.button_inverted, styles.colorDanger]} accessibilityTraits='button'> + <Text + style={[ + styles.button, + styles.button_inverted, + { color: dangerColor } + ]} + accessibilityTraits='button' + > { archived ? I18n.t('UNARCHIVE') : I18n.t('ARCHIVE') } </Text> </TouchableOpacity> </View> - <View style={styles.divider} /> + <View style={[styles.divider, { borderColor: themes[theme].separatorColor }]} /> <TouchableOpacity style={[ - sharedStyles.buttonContainer_inverted, - sharedStyles.buttonContainerLastChild, + styles.buttonContainer_inverted, + styles.buttonContainerLastChild, styles.buttonDanger, + { borderColor: dangerColor }, !this.hasDeletePermission() && sharedStyles.opacity5 ]} onPress={this.delete} disabled={!this.hasDeletePermission()} testID='room-info-edit-view-delete' > - <Text style={[sharedStyles.button_inverted, styles.colorDanger]} accessibilityTraits='button'>{I18n.t('DELETE')}</Text> + <Text + style={[ + styles.button, + styles.button_inverted, + { color: dangerColor } + ]} + accessibilityTraits='button' + > + {I18n.t('DELETE')} + </Text> </TouchableOpacity> <Loading visible={saving} /> </SafeAreaView> @@ -449,4 +500,4 @@ const mapDispatchToProps = dispatch => ({ eraseRoom: (rid, t) => dispatch(eraseRoomAction(rid, t)) }); -export default connect(null, mapDispatchToProps)(RoomInfoEditView); +export default connect(null, mapDispatchToProps)(withTheme(RoomInfoEditView)); diff --git a/app/views/RoomInfoEditView/styles.js b/app/views/RoomInfoEditView/styles.js index cbe6f50cba..b63ae99876 100644 --- a/app/views/RoomInfoEditView/styles.js +++ b/app/views/RoomInfoEditView/styles.js @@ -1,56 +1,67 @@ import { StyleSheet } from 'react-native'; -import { COLOR_DANGER, COLOR_SEPARATOR } from '../../constants/colors'; import sharedStyles from '../Styles'; export default StyleSheet.create({ + button: { + ...sharedStyles.textAlignCenter, + ...sharedStyles.textBold + }, buttonInverted: { - borderColor: 'rgba(0,0,0,.15)', borderWidth: 2, borderRadius: 2 }, buttonContainerDisabled: { - backgroundColor: 'rgba(65, 72, 82, 0.7)' + opacity: 0.7 + }, + buttonContainer_inverted: { + paddingVertical: 15, + marginBottom: 0 + }, + button_inverted: { + flexGrow: 1 + }, + buttonContainerLastChild: { + marginBottom: 40 + }, + buttonContainer: { + paddingVertical: 15, + marginBottom: 20, + borderRadius: 2 }, buttonDanger: { - borderColor: COLOR_DANGER, borderWidth: 2, borderRadius: 2 }, - colorDanger: { - color: COLOR_DANGER - }, switchContainer: { flexDirection: 'row', alignItems: 'flex-start' }, switchLabelContainer: { flex: 1, - paddingHorizontal: 10 + paddingHorizontal: 10, + alignItems: 'flex-end' }, switchLabelPrimary: { fontSize: 16, paddingBottom: 6, - ...sharedStyles.textRegular, - ...sharedStyles.textColorNormal + ...sharedStyles.textRegular }, switchLabelSecondary: { fontSize: 12, ...sharedStyles.textRegular, - ...sharedStyles.textColorNormal + textAlign: 'right' }, switch: { alignSelf: 'center' }, divider: { height: StyleSheet.hairlineWidth, - borderColor: COLOR_SEPARATOR, borderBottomWidth: StyleSheet.hairlineWidth, marginVertical: 20 }, broadcast: { - textAlign: 'center', - ...sharedStyles.textSemibold, - ...sharedStyles.textColorNormal + ...sharedStyles.textAlignCenter, + ...sharedStyles.textSemibold } }); diff --git a/app/views/RoomInfoView/index.js b/app/views/RoomInfoView/index.js index e7dcd7ea0a..e2da34a96c 100644 --- a/app/views/RoomInfoView/index.js +++ b/app/views/RoomInfoView/index.js @@ -16,26 +16,30 @@ import I18n from '../../i18n'; import { CustomHeaderButtons, Item } from '../../containers/HeaderButton'; import StatusBar from '../../containers/StatusBar'; import log from '../../utils/log'; +import { themes } from '../../constants/colors'; +import { withTheme } from '../../theme'; +import { themedHeader } from '../../utils/navigation'; const PERMISSION_EDIT_ROOM = 'edit-room'; const camelize = str => str.replace(/^(.)/, (match, chr) => chr.toUpperCase()); -const getRoomTitle = (room, type, name) => (type === 'd' - ? <Text testID='room-info-view-name' style={styles.roomTitle}>{name}</Text> +const getRoomTitle = (room, type, name, theme) => (type === 'd' + ? <Text testID='room-info-view-name' style={[styles.roomTitle, { color: themes[theme].titleText }]}>{name}</Text> : ( <View style={styles.roomTitleRow}> - <RoomTypeIcon type={room.prid ? 'discussion' : room.t} key='room-info-type' /> - <Text testID='room-info-view-name' style={styles.roomTitle} key='room-info-name'>{room.prid ? room.fname : room.name}</Text> + <RoomTypeIcon type={room.prid ? 'discussion' : room.t} key='room-info-type' theme={theme} /> + <Text testID='room-info-view-name' style={[styles.roomTitle, { color: themes[theme].titleText }]} key='room-info-name'>{room.prid ? room.fname : room.name}</Text> </View> ) ); class RoomInfoView extends React.Component { - static navigationOptions = ({ navigation }) => { + static navigationOptions = ({ navigation, screenProps }) => { const showEdit = navigation.getParam('showEdit'); const rid = navigation.getParam('rid'); return { title: I18n.t('Room_Info'), + ...themedHeader(screenProps.theme), headerRight: showEdit ? ( <CustomHeaderButtons> @@ -53,7 +57,8 @@ class RoomInfoView extends React.Component { token: PropTypes.string }), baseUrl: PropTypes.string, - Message_TimeFormat: PropTypes.string + Message_TimeFormat: PropTypes.string, + theme: PropTypes.string } constructor(props) { @@ -138,21 +143,25 @@ class RoomInfoView extends React.Component { isDirect = () => this.t === 'd' - renderItem = (key, room) => ( - <View style={styles.item}> - <Text style={styles.itemLabel}>{I18n.t(camelize(key))}</Text> - <Text - style={[styles.itemContent, !room[key] && styles.itemContent__empty]} - testID={`room-info-view-${ key }`} - >{ room[key] ? room[key] : I18n.t(`No_${ key }_provided`) } - </Text> - </View> - ); + renderItem = (key, room) => { + const { theme } = this.props; + return ( + <View style={styles.item}> + <Text style={[styles.itemLabel, { color: themes[theme].titleText }]}>{I18n.t(camelize(key))}</Text> + <Text + style={[styles.itemContent, !room[key] && styles.itemContent__empty, { color: themes[theme].auxiliaryText }]} + testID={`room-info-view-${ key }`} + >{ room[key] ? room[key] : I18n.t(`No_${ key }_provided`) } + </Text> + </View> + ); + } renderRole = (description) => { + const { theme } = this.props; if (description) { return ( - <View style={styles.roleBadge} key={description}> + <View style={[styles.roleBadge, { backgroundColor: themes[theme].focusedBackground }]} key={description}> <Text style={styles.role}>{ description }</Text> </View> ); @@ -177,7 +186,7 @@ class RoomInfoView extends React.Component { renderTimezone = () => { const { roomUser } = this.state; - const { Message_TimeFormat } = this.props; + const { Message_TimeFormat, theme } = this.props; if (roomUser) { const { utcOffset } = roomUser; @@ -187,8 +196,8 @@ class RoomInfoView extends React.Component { } return ( <View style={styles.item}> - <Text style={styles.itemLabel}>{I18n.t('Timezone')}</Text> - <Text style={styles.itemContent}>{moment().utcOffset(utcOffset).format(Message_TimeFormat)} (UTC { utcOffset })</Text> + <Text style={[styles.itemLabel, { color: themes[theme].titleText }]}>{I18n.t('Timezone')}</Text> + <Text style={[styles.itemContent, { color: themes[theme].auxiliaryText }]}>{moment().utcOffset(utcOffset).format(Message_TimeFormat)} (UTC { utcOffset })</Text> </View> ); } @@ -275,16 +284,21 @@ class RoomInfoView extends React.Component { render() { const { room, roomUser } = this.state; + const { theme } = this.props; if (!room) { return <View />; } return ( - <ScrollView style={styles.scroll}> - <StatusBar /> - <SafeAreaView style={styles.container} testID='room-info-view' forceInset={{ vertical: 'never' }}> + <ScrollView style={[styles.scroll, { backgroundColor: themes[theme].backgroundColor }]}> + <StatusBar theme={theme} /> + <SafeAreaView + style={[styles.container, { backgroundColor: themes[theme].backgroundColor }]} + forceInset={{ vertical: 'never' }} + testID='room-info-view' + > <View style={styles.avatarContainer}> {this.renderAvatar(room, roomUser)} - <View style={styles.roomTitleContainer}>{ getRoomTitle(room, this.t, roomUser && roomUser.name) }</View> + <View style={styles.roomTitleContainer}>{ getRoomTitle(room, this.t, roomUser && roomUser.name, theme) }</View> </View> {this.isDirect() ? this.renderDirect() : this.renderChannel()} </SafeAreaView> @@ -302,4 +316,4 @@ const mapStateToProps = state => ({ Message_TimeFormat: state.settings.Message_TimeFormat }); -export default connect(mapStateToProps)(RoomInfoView); +export default connect(mapStateToProps)(withTheme(RoomInfoView)); diff --git a/app/views/RoomInfoView/styles.js b/app/views/RoomInfoView/styles.js index faeaf9101c..00901410a5 100644 --- a/app/views/RoomInfoView/styles.js +++ b/app/views/RoomInfoView/styles.js @@ -1,17 +1,14 @@ import { StyleSheet } from 'react-native'; import sharedStyles from '../Styles'; -import { COLOR_BACKGROUND_CONTAINER, COLOR_WHITE } from '../../constants/colors'; export default StyleSheet.create({ container: { - flex: 1, - backgroundColor: COLOR_WHITE + flex: 1 }, scroll: { flex: 1, flexDirection: 'column', - backgroundColor: COLOR_WHITE, padding: 10 }, item: { @@ -33,7 +30,6 @@ export default StyleSheet.create({ }, roomTitle: { fontSize: 18, - ...sharedStyles.textColorNormal, ...sharedStyles.textMedium }, roomTitleRow: { @@ -48,12 +44,10 @@ export default StyleSheet.create({ itemLabel: { marginBottom: 10, fontSize: 14, - ...sharedStyles.textColorNormal, ...sharedStyles.textMedium }, itemContent: { fontSize: 14, - ...sharedStyles.textColorDescription, ...sharedStyles.textRegular }, itemContent__empty: { @@ -65,14 +59,12 @@ export default StyleSheet.create({ }, roleBadge: { padding: 6, - backgroundColor: COLOR_BACKGROUND_CONTAINER, borderRadius: 2, marginRight: 6, marginBottom: 6 }, role: { fontSize: 14, - ...sharedStyles.textColorNormal, ...sharedStyles.textRegular } }); diff --git a/app/views/RoomMembersView/index.js b/app/views/RoomMembersView/index.js index 25476297be..30be1624d2 100644 --- a/app/views/RoomMembersView/index.js +++ b/app/views/RoomMembersView/index.js @@ -1,6 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { FlatList, View, ActivityIndicator } from 'react-native'; +import { FlatList, View } from 'react-native'; import ActionSheet from 'react-native-action-sheet'; import { connect } from 'react-redux'; import { SafeAreaView } from 'react-navigation'; @@ -20,16 +20,21 @@ import SearchBox from '../../containers/SearchBox'; import protectedFunction from '../../lib/methods/helpers/protectedFunction'; import { CustomHeaderButtons, Item } from '../../containers/HeaderButton'; import StatusBar from '../../containers/StatusBar'; +import ActivityIndicator from '../../containers/ActivityIndicator'; +import { withTheme } from '../../theme'; +import { themedHeader } from '../../utils/navigation'; +import { themes } from '../../constants/colors'; const PAGE_SIZE = 25; class RoomMembersView extends React.Component { - static navigationOptions = ({ navigation }) => { + static navigationOptions = ({ navigation, screenProps }) => { const toggleStatus = navigation.getParam('toggleStatus', () => {}); const allUsers = navigation.getParam('allUsers'); const toggleText = allUsers ? I18n.t('Online') : I18n.t('All'); return { title: I18n.t('Members'), + ...themedHeader(screenProps.theme), headerRight: ( <CustomHeaderButtons> <Item title={toggleText} onPress={toggleStatus} testID='room-members-view-toggle-status' /> @@ -47,7 +52,8 @@ class RoomMembersView extends React.Component { user: PropTypes.shape({ id: PropTypes.string, token: PropTypes.string - }) + }), + theme: PropTypes.string } constructor(props) { @@ -226,10 +232,13 @@ class RoomMembersView extends React.Component { <SearchBox onChangeText={text => this.onSearchChangeText(text)} testID='room-members-view-search' /> ) - renderSeparator = () => <View style={styles.separator} />; + renderSeparator = () => { + const { theme } = this.props; + return <View style={[styles.separator, { backgroundColor: themes[theme].separatorColor }]} />; + } renderItem = ({ item }) => { - const { baseUrl, user } = this.props; + const { baseUrl, user, theme } = this.props; return ( <UserItem @@ -240,6 +249,7 @@ class RoomMembersView extends React.Component { baseUrl={baseUrl} testID={`room-members-view-item-${ item.username }`} user={user} + theme={theme} /> ); } @@ -248,22 +258,20 @@ class RoomMembersView extends React.Component { const { filtering, members, membersFiltered, isLoading } = this.state; - // if (isLoading) { - // return <ActivityIndicator style={styles.loading} />; - // } + const { theme } = this.props; return ( <SafeAreaView style={styles.list} testID='room-members-view' forceInset={{ vertical: 'never' }}> - <StatusBar /> + <StatusBar theme={theme} /> <FlatList data={filtering ? membersFiltered : members} renderItem={this.renderItem} - style={styles.list} + style={[styles.list, { backgroundColor: themes[theme].backgroundColor }]} keyExtractor={item => item._id} ItemSeparatorComponent={this.renderSeparator} ListHeaderComponent={this.renderSearchBar} ListFooterComponent={() => { if (isLoading) { - return <ActivityIndicator style={styles.loading} />; + return <ActivityIndicator theme={theme} />; } return null; }} @@ -286,4 +294,4 @@ const mapStateToProps = state => ({ } }); -export default connect(mapStateToProps)(RoomMembersView); +export default connect(mapStateToProps)(withTheme(RoomMembersView)); diff --git a/app/views/RoomMembersView/styles.js b/app/views/RoomMembersView/styles.js index 75ae5e17d2..d183ebb097 100644 --- a/app/views/RoomMembersView/styles.js +++ b/app/views/RoomMembersView/styles.js @@ -1,10 +1,8 @@ import { StyleSheet } from 'react-native'; -import { COLOR_SEPARATOR, COLOR_WHITE } from '../../constants/colors'; export default StyleSheet.create({ list: { - flex: 1, - backgroundColor: COLOR_WHITE + flex: 1 }, item: { flexDirection: 'row', @@ -17,10 +15,6 @@ export default StyleSheet.create({ }, separator: { height: StyleSheet.hairlineWidth, - backgroundColor: COLOR_SEPARATOR, marginLeft: 60 - }, - loading: { - flex: 1 } }); diff --git a/app/views/RoomView/EmptyRoom.js b/app/views/RoomView/EmptyRoom.js index 7251e29d77..2559405282 100644 --- a/app/views/RoomView/EmptyRoom.js +++ b/app/views/RoomView/EmptyRoom.js @@ -10,15 +10,24 @@ const styles = StyleSheet.create({ } }); -const EmptyRoom = React.memo(({ length, mounted }) => { - if (length === 0 && mounted) { - return <ImageBackground source={{ uri: 'message_empty' }} style={styles.image} />; +const EmptyRoom = React.memo(({ + length, mounted, theme, rid +}) => { + if ((length === 0 && mounted) || !rid) { + return ( + <ImageBackground + source={{ uri: `message_empty_${ theme }` }} + style={styles.image} + /> + ); } return null; }); EmptyRoom.propTypes = { length: PropTypes.number.isRequired, - mounted: PropTypes.bool + mounted: PropTypes.bool, + theme: PropTypes.string, + rid: PropTypes.string }; export default EmptyRoom; diff --git a/app/views/RoomView/Header/Header.js b/app/views/RoomView/Header/Header.js index 802a2a3910..4a915280f1 100644 --- a/app/views/RoomView/Header/Header.js +++ b/app/views/RoomView/Header/Header.js @@ -1,16 +1,18 @@ import React from 'react'; import PropTypes from 'prop-types'; import { - View, Text, StyleSheet, ScrollView + View, Text, StyleSheet, ScrollView, TouchableOpacity } from 'react-native'; import { shortnameToUnicode } from 'emoji-toolkit'; import removeMarkdown from 'remove-markdown'; import I18n from '../../../i18n'; import sharedStyles from '../../Styles'; -import { isIOS, isAndroid } from '../../../utils/deviceInfo'; +import { isAndroid, isTablet } from '../../../utils/deviceInfo'; import Icon from './Icon'; -import { COLOR_TEXT_DESCRIPTION, HEADER_TITLE, COLOR_WHITE } from '../../../constants/colors'; +import { themes } from '../../../constants/colors'; + +const androidMarginLeft = isTablet ? 0 : 10; const TITLE_SIZE = 16; const styles = StyleSheet.create({ @@ -18,7 +20,7 @@ const styles = StyleSheet.create({ flex: 1, height: '100%', marginRight: isAndroid ? 15 : 5, - marginLeft: isAndroid ? 10 : 0 + marginLeft: isAndroid ? androidMarginLeft : -12 }, titleContainer: { flex: 6, @@ -29,7 +31,6 @@ const styles = StyleSheet.create({ }, title: { ...sharedStyles.textSemibold, - color: HEADER_TITLE, fontSize: TITLE_SIZE }, scroll: { @@ -37,7 +38,6 @@ const styles = StyleSheet.create({ }, typing: { ...sharedStyles.textRegular, - color: isIOS ? COLOR_TEXT_DESCRIPTION : COLOR_WHITE, fontSize: 12, flex: 4 }, @@ -46,7 +46,7 @@ const styles = StyleSheet.create({ } }); -const Typing = React.memo(({ usersTyping }) => { +const Typing = React.memo(({ usersTyping, theme }) => { let usersText; if (!usersTyping.length) { return null; @@ -56,7 +56,7 @@ const Typing = React.memo(({ usersTyping }) => { usersText = usersTyping.join(', '); } return ( - <Text style={styles.typing} numberOfLines={1}> + <Text style={[styles.typing, { color: themes[theme].headerTitleColor }]} numberOfLines={1}> <Text style={styles.typingUsers}>{usersText} </Text> { usersTyping.length > 1 ? I18n.t('are_typing') : I18n.t('is_typing') }... </Text> @@ -64,18 +64,19 @@ const Typing = React.memo(({ usersTyping }) => { }); Typing.propTypes = { - usersTyping: PropTypes.array + usersTyping: PropTypes.array, + theme: PropTypes.string }; const HeaderTitle = React.memo(({ - title, scale, connecting + title, scale, connecting, theme }) => { if (connecting) { title = I18n.t('Connecting'); } return ( <Text - style={[styles.title, { fontSize: TITLE_SIZE * scale }]} + style={[styles.title, { fontSize: TITLE_SIZE * scale, color: themes[theme].headerTitleColor }]} numberOfLines={1} testID={`room-view-title-${ title }`} >{title} @@ -86,16 +87,17 @@ const HeaderTitle = React.memo(({ HeaderTitle.propTypes = { title: PropTypes.string, scale: PropTypes.number, - connecting: PropTypes.bool + connecting: PropTypes.bool, + theme: PropTypes.string }; const Header = React.memo(({ - title, type, status, usersTyping, width, height, prid, tmid, widthOffset, connecting + title, type, status, usersTyping, width, height, prid, tmid, widthOffset, connecting, goRoomActionsView, theme }) => { const portrait = height > width; let scale = 1; - if (!portrait) { + if (!portrait && !tmid) { if (usersTyping.length > 0) { scale = 0.8; } @@ -107,8 +109,14 @@ const Header = React.memo(({ } } + const onPress = () => { + if (!tmid) { + goRoomActionsView(); + } + }; + return ( - <View style={[styles.container, { width: width - widthOffset }]}> + <TouchableOpacity onPress={onPress} style={[styles.container, { width: width - widthOffset }]}> <View style={[styles.titleContainer, tmid && styles.threadContainer]}> <ScrollView showsHorizontalScrollIndicator={false} @@ -116,19 +124,17 @@ const Header = React.memo(({ bounces={false} contentContainerStyle={styles.scroll} > - <Icon type={prid ? 'discussion' : type} status={status} /> + <Icon type={prid ? 'discussion' : type} status={status} theme={theme} /> <HeaderTitle - prid={prid} - type={type} - status={status} title={title} scale={scale} connecting={connecting} + theme={theme} /> </ScrollView> </View> - {type === 'thread' ? null : <Typing usersTyping={usersTyping} />} - </View> + {type === 'thread' ? null : <Typing usersTyping={usersTyping} theme={theme} />} + </TouchableOpacity> ); }); @@ -140,9 +146,11 @@ Header.propTypes = { prid: PropTypes.string, tmid: PropTypes.string, status: PropTypes.string, + theme: PropTypes.string, usersTyping: PropTypes.array, widthOffset: PropTypes.number, - connecting: PropTypes.bool + connecting: PropTypes.bool, + goRoomActionsView: PropTypes.func }; Header.defaultProps = { diff --git a/app/views/RoomView/Header/Icon.js b/app/views/RoomView/Header/Icon.js index 945f6a246a..7247d88fed 100644 --- a/app/views/RoomView/Header/Icon.js +++ b/app/views/RoomView/Header/Icon.js @@ -2,10 +2,10 @@ import React from 'react'; import { StyleSheet } from 'react-native'; import PropTypes from 'prop-types'; -import { STATUS_COLORS, COLOR_TEXT_DESCRIPTION, COLOR_WHITE } from '../../../constants/colors'; +import { STATUS_COLORS, themes } from '../../../constants/colors'; import { CustomIcon } from '../../../lib/Icons'; import Status from '../../../containers/Status/Status'; -import { isIOS } from '../../../utils/deviceInfo'; +import { isAndroid } from '../../../utils/deviceInfo'; const ICON_SIZE = 18; @@ -13,8 +13,7 @@ const styles = StyleSheet.create({ type: { width: ICON_SIZE, height: ICON_SIZE, - marginRight: 8, - color: isIOS ? COLOR_TEXT_DESCRIPTION : COLOR_WHITE + marginRight: 8 }, status: { marginLeft: 4, @@ -22,11 +21,18 @@ const styles = StyleSheet.create({ } }); -const Icon = React.memo(({ type, status }) => { +const Icon = React.memo(({ type, status, theme }) => { if (type === 'd') { return <Status size={10} style={styles.status} status={status} />; } + let colorStyle = {}; + if (type === 'd') { + colorStyle = { color: STATUS_COLORS[status] }; + } else { + colorStyle = { color: isAndroid && theme === 'light' ? themes[theme].buttonText : themes[theme].auxiliaryText }; + } + let icon; if (type === 'discussion') { icon = 'chat'; @@ -47,7 +53,7 @@ const Icon = React.memo(({ type, status }) => { width: ICON_SIZE * 1, height: ICON_SIZE * 1 }, - type === 'd' && { color: STATUS_COLORS[status] } + colorStyle ]} /> ); @@ -55,6 +61,7 @@ const Icon = React.memo(({ type, status }) => { Icon.propTypes = { type: PropTypes.string, - status: PropTypes.string + status: PropTypes.string, + theme: PropTypes.string }; export default Icon; diff --git a/app/views/RoomView/Header/RightButtons.js b/app/views/RoomView/Header/RightButtons.js index aca52a7267..87a4d6d153 100644 --- a/app/views/RoomView/Header/RightButtons.js +++ b/app/views/RoomView/Header/RightButtons.js @@ -1,24 +1,10 @@ import React from 'react'; -import { StyleSheet } from 'react-native'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { CustomHeaderButtons, Item } from '../../../containers/HeaderButton'; import database from '../../../lib/database'; -const styles = StyleSheet.create({ - more: { - marginHorizontal: 0, - marginLeft: 0, - marginRight: 5 - }, - thread: { - marginHorizontal: 0, - marginLeft: 0, - marginRight: 15 - } -}); - class RightButtonsContainer extends React.PureComponent { static propTypes = { userId: PropTypes.string, @@ -27,8 +13,7 @@ class RightButtonsContainer extends React.PureComponent { t: PropTypes.string, tmid: PropTypes.string, navigation: PropTypes.object, - toggleFollowThread: PropTypes.func, - room: PropTypes.object + toggleFollowThread: PropTypes.func }; constructor(props) { @@ -39,15 +24,15 @@ class RightButtonsContainer extends React.PureComponent { } async componentDidMount() { - const { tmid, userId } = this.props; + const { tmid } = this.props; if (tmid) { const db = database.active; - const threadObservable = await db.collections.get('messages').findAndObserve(tmid); - this.threadSubscription = threadObservable.subscribe((thread) => { - this.setState({ - isFollowingThread: thread.replies && !!thread.replies.find(t => t === userId) - }); - }); + try { + const threadRecord = await db.collections.get('messages').find(tmid); + this.observeThead(threadRecord); + } catch (e) { + console.log('Can\'t find message to observe.'); + } } } @@ -57,10 +42,16 @@ class RightButtonsContainer extends React.PureComponent { } } - updateThread = () => { + observeThead = (threadRecord) => { + const threadObservable = threadRecord.observe(); + this.threadSubscription = threadObservable + .subscribe(thread => this.updateThread(thread)); + } + + updateThread = (thread) => { const { userId } = this.props; this.setState({ - isFollowingThread: this.thread.replies && !!this.thread.replies.find(t => t === userId) + isFollowingThread: thread.replies && !!thread.replies.find(t => t === userId) }); } @@ -69,13 +60,6 @@ class RightButtonsContainer extends React.PureComponent { navigation.navigate('ThreadMessagesView', { rid, t }); } - goRoomActionsView = () => { - const { - rid, t, navigation, room - } = this.props; - navigation.navigate('RoomActionsView', { rid, t, room }); - } - toggleFollowThread = () => { const { isFollowingThread } = this.state; const { toggleFollowThread } = this.props; @@ -110,16 +94,8 @@ class RightButtonsContainer extends React.PureComponent { iconName='thread' onPress={this.goThreadsView} testID='room-view-header-threads' - buttonStyle={styles.thread} /> ) : null} - <Item - title='more' - iconName='menu' - onPress={this.goRoomActionsView} - testID='room-view-header-actions' - buttonStyle={styles.more} - /> </CustomHeaderButtons> ); } diff --git a/app/views/RoomView/Header/RoomHeaderLeft.js b/app/views/RoomView/Header/RoomHeaderLeft.js new file mode 100644 index 0000000000..85b8db3148 --- /dev/null +++ b/app/views/RoomView/Header/RoomHeaderLeft.js @@ -0,0 +1,62 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { StyleSheet } from 'react-native'; +import { HeaderBackButton } from 'react-navigation-stack'; + +import { isIOS } from '../../../utils/deviceInfo'; +import { themes } from '../../../constants/colors'; +import Avatar from '../../../containers/Avatar'; + +const styles = StyleSheet.create({ + avatar: { + borderRadius: 10, + marginHorizontal: 16 + } +}); + +const RoomHeaderLeft = ({ + tmid, unreadsCount, navigation, baseUrl, userId, token, title, t, theme, goRoomActionsView, split +}) => { + if (!split || tmid) { + return ( + <HeaderBackButton + title={unreadsCount > 999 ? '+999' : unreadsCount || ' '} + backTitleVisible={isIOS} + onPress={() => navigation.goBack()} + tintColor={themes[theme].headerTintColor} + /> + ); + } + if (baseUrl && userId && token) { + return ( + <Avatar + text={title} + size={30} + type={t} + baseUrl={baseUrl} + style={styles.avatar} + userId={userId} + token={token} + theme={theme} + onPress={goRoomActionsView} + /> + ); + } + return null; +}; + +RoomHeaderLeft.propTypes = { + tmid: PropTypes.string, + unreadsCount: PropTypes.number, + navigation: PropTypes.object, + baseUrl: PropTypes.string, + userId: PropTypes.string, + token: PropTypes.string, + title: PropTypes.string, + t: PropTypes.string, + theme: PropTypes.string, + goRoomActionsView: PropTypes.func, + split: PropTypes.bool +}; + +export default RoomHeaderLeft; diff --git a/app/views/RoomView/Header/index.js b/app/views/RoomView/Header/index.js index 311eafb848..4911be2d3a 100644 --- a/app/views/RoomView/Header/index.js +++ b/app/views/RoomView/Header/index.js @@ -6,6 +6,8 @@ import equal from 'deep-equal'; import Header from './Header'; import RightButtons from './RightButtons'; +import { withTheme } from '../../../theme'; +import RoomHeaderLeft from './RoomHeaderLeft'; class RoomHeaderView extends Component { static propTypes = { @@ -17,14 +19,18 @@ class RoomHeaderView extends Component { window: PropTypes.object, status: PropTypes.string, connecting: PropTypes.bool, - widthOffset: PropTypes.number + theme: PropTypes.string, + widthOffset: PropTypes.number, + goRoomActionsView: PropTypes.func }; shouldComponentUpdate(nextProps) { - const { usersTyping } = this.props; const { - type, title, status, window, connecting + type, title, status, window, connecting, goRoomActionsView, usersTyping, theme } = this.props; + if (nextProps.theme !== theme) { + return true; + } if (nextProps.type !== type) { return true; } @@ -46,12 +52,15 @@ class RoomHeaderView extends Component { if (!equal(nextProps.usersTyping, usersTyping)) { return true; } + if (nextProps.goRoomActionsView !== goRoomActionsView) { + return true; + } return false; } render() { const { - window, title, type, prid, tmid, widthOffset, status = 'offline', connecting, usersTyping + window, title, type, prid, tmid, widthOffset, status = 'offline', connecting, usersTyping, goRoomActionsView, theme } = this.props; return ( @@ -63,8 +72,10 @@ class RoomHeaderView extends Component { status={status} width={window.width} height={window.height} + theme={theme} usersTyping={usersTyping} widthOffset={widthOffset} + goRoomActionsView={goRoomActionsView} connecting={connecting} /> ); @@ -89,6 +100,6 @@ const mapStateToProps = (state, ownProps) => { }; }; -export default responsive(connect(mapStateToProps)(RoomHeaderView)); +export default responsive(connect(mapStateToProps)(withTheme(RoomHeaderView))); -export { RightButtons }; +export { RightButtons, RoomHeaderLeft }; diff --git a/app/views/RoomView/List.js b/app/views/RoomView/List.js index 4bae8096af..8c4e360997 100644 --- a/app/views/RoomView/List.js +++ b/app/views/RoomView/List.js @@ -1,12 +1,8 @@ import React from 'react'; -import { - ActivityIndicator, FlatList, InteractionManager -} from 'react-native'; +import { FlatList, InteractionManager } from 'react-native'; import PropTypes from 'prop-types'; -import debounce from 'lodash/debounce'; import orderBy from 'lodash/orderBy'; import { Q } from '@nozbe/watermelondb'; -import isEqual from 'lodash/isEqual'; import styles from './styles'; import database from '../../lib/database'; @@ -16,8 +12,10 @@ import log from '../../utils/log'; import EmptyRoom from './EmptyRoom'; import { isIOS } from '../../utils/deviceInfo'; import { animateNextTransition } from '../../utils/layoutAnimation'; +import ActivityIndicator from '../../containers/ActivityIndicator'; +import debounce from '../../utils/debounce'; -export class List extends React.Component { +class List extends React.Component { static propTypes = { onEndReached: PropTypes.func, renderFooter: PropTypes.func, @@ -25,7 +23,9 @@ export class List extends React.Component { rid: PropTypes.string, t: PropTypes.string, tmid: PropTypes.string, - animated: PropTypes.bool + animated: PropTypes.bool, + theme: PropTypes.string, + listRef: PropTypes.func }; constructor(props) { @@ -63,34 +63,32 @@ export class List extends React.Component { } this.messagesObservable = db.collections .get('thread_messages') - .query( - Q.where('rid', tmid) - ) - .observeWithColumns(['_updated_at']); - } else { + .query(Q.where('rid', tmid)) + .observe(); + } else if (rid) { this.messagesObservable = db.collections .get('messages') - .query( - Q.where('rid', rid) - ) - .observeWithColumns(['_updated_at']); + .query(Q.where('rid', rid)) + .observe(); } - this.messagesSubscription = this.messagesObservable - .subscribe((data) => { - this.interaction = InteractionManager.runAfterInteractions(() => { - if (tmid) { - data = [this.thread, ...data]; - } - const messages = orderBy(data, ['ts'], ['desc']); - if (this.mounted) { - animateNextTransition(); - this.setState({ messages }); - } else { - this.state.messages = messages; - } + if (rid) { + this.unsubscribeMessages(); + this.messagesSubscription = this.messagesObservable + .subscribe((data) => { + this.interaction = InteractionManager.runAfterInteractions(() => { + if (tmid) { + data = [this.thread, ...data]; + } + const messages = orderBy(data, ['ts'], ['desc']); + if (this.mounted) { + this.setState({ messages }, () => this.update()); + } else { + this.state.messages = messages; + } + }); }); - }); + } } // this.state.loading works for this.onEndReached and RoomView.init @@ -104,23 +102,22 @@ export class List extends React.Component { } shouldComponentUpdate(nextProps, nextState) { - const { messages, loading, end } = this.state; - if (loading !== nextState.loading) { + const { loading, end } = this.state; + const { theme } = this.props; + if (theme !== nextProps.theme) { return true; } - if (end !== nextState.end) { + if (loading !== nextState.loading) { return true; } - if (!isEqual(messages, nextState.messages)) { + if (end !== nextState.end) { return true; } return false; } componentWillUnmount() { - if (this.messagesSubscription && this.messagesSubscription.unsubscribe) { - this.messagesSubscription.unsubscribe(); - } + this.unsubscribeMessages(); if (this.interaction && this.interaction.cancel) { this.interaction.cancel(); } @@ -156,10 +153,31 @@ export class List extends React.Component { } }, 300) + // eslint-disable-next-line react/sort-comp + update = () => { + animateNextTransition(); + this.forceUpdate(); + }; + + unsubscribeMessages = () => { + if (this.messagesSubscription && this.messagesSubscription.unsubscribe) { + this.messagesSubscription.unsubscribe(); + } + } + + getLastMessage = () => { + const { messages } = this.state; + if (messages.length > 0) { + return messages[0]; + } + return null; + } + renderFooter = () => { const { loading } = this.state; - if (loading) { - return <ActivityIndicator style={styles.loading} />; + const { rid, theme } = this.props; + if (loading && rid) { + return <ActivityIndicator theme={theme} />; } return null; } @@ -172,13 +190,15 @@ export class List extends React.Component { render() { console.count(`${ this.constructor.name }.render calls`); + const { rid, listRef } = this.props; const { messages } = this.state; + const { theme } = this.props; return ( <> - <EmptyRoom length={messages.length} mounted={this.mounted} /> + <EmptyRoom rid={rid} length={messages.length} mounted={this.mounted} theme={theme} /> <FlatList testID='room-view-messages' - ref={ref => this.list = ref} + ref={listRef} keyExtractor={item => item.id} data={messages} extraData={this.state} @@ -187,7 +207,7 @@ export class List extends React.Component { style={styles.list} inverted removeClippedSubviews={isIOS} - // initialNumToRender={7} + initialNumToRender={7} onEndReached={this.onEndReached} // onEndReachedThreshold={5} // maxToRenderPerBatch={5} @@ -199,3 +219,5 @@ export class List extends React.Component { ); } } + +export default List; diff --git a/app/views/RoomView/ReactionPicker.js b/app/views/RoomView/ReactionPicker.js index ca138cc435..1c158ab9aa 100644 --- a/app/views/RoomView/ReactionPicker.js +++ b/app/views/RoomView/ReactionPicker.js @@ -8,9 +8,10 @@ import { responsive } from 'react-native-responsive-ui'; import EmojiPicker from '../../containers/EmojiPicker'; import styles from './styles'; import { isAndroid } from '../../utils/deviceInfo'; +import { withSplit } from '../../split'; const margin = isAndroid ? 40 : 20; -const tabEmojiStyle = { fontSize: 15 }; +const maxSize = 400; class ReactionPicker extends React.Component { static propTypes = { @@ -19,15 +20,16 @@ class ReactionPicker extends React.Component { message: PropTypes.object, show: PropTypes.bool, reactionClose: PropTypes.func, - onEmojiSelected: PropTypes.func + onEmojiSelected: PropTypes.func, + split: PropTypes.bool }; shouldComponentUpdate(nextProps) { - const { show, window } = this.props; - return nextProps.show !== show || window.width !== nextProps.window.width; + const { show, window, split } = this.props; + return nextProps.show !== show || window.width !== nextProps.window.width || nextProps.split !== split; } - onEmojiSelected(emoji, shortname) { + onEmojiSelected = (emoji, shortname) => { // standard emojis: `emoji` is unicode and `shortname` is :joy: // custom emojis: only `emoji` is returned with shortname type (:joy:) // to set reactions, we need shortname type @@ -37,9 +39,16 @@ class ReactionPicker extends React.Component { render() { const { - window: { width, height }, show, baseUrl, reactionClose + window: { width, height }, show, baseUrl, reactionClose, split } = this.props; + let widthStyle = width - margin; + let heightStyle = Math.min(width, height) - (margin * 2); + if (split) { + widthStyle = maxSize; + heightStyle = maxSize; + } + return (show ? ( <Modal @@ -51,13 +60,18 @@ class ReactionPicker extends React.Component { animationOut='fadeOut' > <View - style={[styles.reactionPickerContainer, { width: width - margin, height: Math.min(width, height) - (margin * 2) }]} + style={[ + styles.reactionPickerContainer, + { + width: widthStyle, + height: heightStyle + } + ]} testID='reaction-picker' > <EmojiPicker - tabEmojiStyle={tabEmojiStyle} - width={Math.min(width, height) - margin} - onEmojiSelected={(emoji, shortname) => this.onEmojiSelected(emoji, shortname)} + // tabEmojiStyle={tabEmojiStyle} + onEmojiSelected={this.onEmojiSelected} baseUrl={baseUrl} /> </View> @@ -72,4 +86,4 @@ const mapStateToProps = state => ({ baseUrl: state.settings.Site_Url || state.server ? state.server.server : '' }); -export default responsive(connect(mapStateToProps)(ReactionPicker)); +export default responsive(connect(mapStateToProps)(withSplit(ReactionPicker))); diff --git a/app/views/RoomView/Separator.js b/app/views/RoomView/Separator.js index ea772b11f2..8e2e7a16b9 100644 --- a/app/views/RoomView/Separator.js +++ b/app/views/RoomView/Separator.js @@ -5,7 +5,7 @@ import moment from 'moment'; import I18n from '../../i18n'; import sharedStyles from '../Styles'; -import { COLOR_DANGER, COLOR_TEXT_DESCRIPTION } from '../../constants/colors'; +import { themes } from '../../constants/colors'; const styles = StyleSheet.create({ container: { @@ -16,20 +16,12 @@ const styles = StyleSheet.create({ marginHorizontal: 14 }, line: { - backgroundColor: COLOR_TEXT_DESCRIPTION, height: 1, flex: 1 }, text: { fontSize: 14, - ...sharedStyles.textMedium, - ...sharedStyles.textColorDescription - }, - unreadLine: { - backgroundColor: COLOR_DANGER - }, - unreadText: { - color: COLOR_DANGER + ...sharedStyles.textMedium }, marginLeft: { marginLeft: 14 @@ -42,36 +34,39 @@ const styles = StyleSheet.create({ } }); -const DateSeparator = React.memo(({ ts, unread }) => { +const DateSeparator = React.memo(({ ts, unread, theme }) => { const date = ts ? moment(ts).format('MMM DD, YYYY') : null; + const unreadLine = { backgroundColor: themes[theme].dangerColor }; + const unreadText = { color: themes[theme].dangerColor }; if (ts && unread) { return ( <View style={styles.container}> - <Text style={[styles.text, styles.unreadText]}>{I18n.t('unread_messages')}</Text> - <View style={[styles.line, styles.unreadLine, styles.marginHorizontal]} /> - <Text style={[styles.text, styles.unreadText]}>{date}</Text> + <Text style={[styles.text, unreadText]}>{I18n.t('unread_messages')}</Text> + <View style={[styles.line, unreadLine, styles.marginHorizontal]} /> + <Text style={[styles.text, unreadText]}>{date}</Text> </View> ); } if (ts) { return ( <View style={styles.container}> - <View style={styles.line} /> - <Text style={[styles.text, styles.marginLeft]}>{date}</Text> + <View style={[styles.line, { backgroundColor: themes[theme].borderColor }]} /> + <Text style={[styles.text, { color: themes[theme].auxiliaryText }, styles.marginLeft]}>{date}</Text> </View> ); } return ( <View style={styles.container}> - <Text style={[styles.text, styles.unreadText, styles.marginRight]}>{I18n.t('unread_messages')}</Text> - <View style={[styles.line, styles.unreadLine]} /> + <Text style={[styles.text, unreadText, styles.marginRight]}>{I18n.t('unread_messages')}</Text> + <View style={[styles.line, unreadLine]} /> </View> ); }); DateSeparator.propTypes = { ts: PropTypes.instanceOf(Date), - unread: PropTypes.bool + unread: PropTypes.bool, + theme: PropTypes.string }; export default DateSeparator; diff --git a/app/views/RoomView/UploadProgress.js b/app/views/RoomView/UploadProgress.js index aa62f1b62a..ae0ca9dc91 100644 --- a/app/views/RoomView/UploadProgress.js +++ b/app/views/RoomView/UploadProgress.js @@ -11,10 +11,9 @@ import RocketChat from '../../lib/rocketchat'; import log from '../../utils/log'; import I18n from '../../i18n'; import { CustomIcon } from '../../lib/Icons'; -import { - COLOR_SEPARATOR, COLOR_PRIMARY, COLOR_BACKGROUND_CONTAINER, COLOR_TEXT_DESCRIPTION, COLOR_DANGER -} from '../../constants/colors'; +import { themes } from '../../constants/colors'; import sharedStyles from '../Styles'; +import { withTheme } from '../../theme'; const styles = StyleSheet.create({ container: { @@ -24,10 +23,8 @@ const styles = StyleSheet.create({ maxHeight: 246 }, item: { - backgroundColor: COLOR_BACKGROUND_CONTAINER, height: 54, borderBottomWidth: StyleSheet.hairlineWidth, - borderColor: COLOR_SEPARATOR, justifyContent: 'center', paddingHorizontal: 20 }, @@ -43,17 +40,14 @@ const styles = StyleSheet.create({ descriptionText: { fontSize: 16, lineHeight: 20, - ...sharedStyles.textColorDescription, ...sharedStyles.textRegular }, progress: { position: 'absolute', bottom: 0, - backgroundColor: COLOR_PRIMARY, height: 3 }, tryAgainButtonText: { - color: COLOR_PRIMARY, fontSize: 16, lineHeight: 20, ...sharedStyles.textMedium @@ -64,6 +58,7 @@ class UploadProgress extends Component { static propTypes = { window: PropTypes.object, rid: PropTypes.string, + theme: PropTypes.string, user: PropTypes.shape({ id: PropTypes.string.isRequired, username: PropTypes.string.isRequired, @@ -94,6 +89,7 @@ class UploadProgress extends Component { init = () => { const { rid } = this.props; + if (!rid) { return; } const db = database.active; this.uploadsObservable = db.collections @@ -171,42 +167,56 @@ class UploadProgress extends Component { } renderItemContent = (item) => { - const { window } = this.props; + const { window, theme } = this.props; if (!item.error) { return ( [ <View key='row' style={styles.row}> - <CustomIcon name='file-generic' size={20} color={COLOR_TEXT_DESCRIPTION} /> - <Text style={[styles.descriptionContainer, styles.descriptionText]} ellipsizeMode='tail' numberOfLines={1}> + <CustomIcon name='file-generic' size={20} color={themes[theme].auxiliaryText} /> + <Text style={[styles.descriptionContainer, styles.descriptionText, { color: themes[theme].auxiliaryText }]} ellipsizeMode='tail' numberOfLines={1}> {I18n.t('Uploading')} {item.name} </Text> - <CustomIcon name='cross' size={20} color={COLOR_TEXT_DESCRIPTION} onPress={() => this.cancelUpload(item)} /> + <CustomIcon name='cross' size={20} color={themes[theme].auxiliaryText} onPress={() => this.cancelUpload(item)} /> </View>, - <View key='progress' style={[styles.progress, { width: (window.width * item.progress) / 100 }]} /> + <View key='progress' style={[styles.progress, { width: (window.width * item.progress) / 100, backgroundColor: themes[theme].tintColor }]} /> ] ); } return ( <View style={styles.row}> - <CustomIcon name='warning' size={20} color={COLOR_DANGER} /> + <CustomIcon name='warning' size={20} color={themes[theme].dangerColor} /> <View style={styles.descriptionContainer}> - <Text style={styles.descriptionText}>{I18n.t('Error_uploading')} {item.name}</Text> + <Text style={[styles.descriptionText, { color: themes[theme].auxiliaryText }]}>{I18n.t('Error_uploading')} {item.name}</Text> <TouchableOpacity onPress={() => this.tryAgain(item)}> - <Text style={styles.tryAgainButtonText}>{I18n.t('Try_again')}</Text> + <Text style={[styles.tryAgainButtonText, { color: themes[theme].tintColor }]}>{I18n.t('Try_again')}</Text> </TouchableOpacity> </View> - <CustomIcon name='cross' size={20} color={COLOR_TEXT_DESCRIPTION} onPress={() => this.deleteUpload(item)} /> + <CustomIcon name='cross' size={20} color={themes[theme].auxiliaryText} onPress={() => this.deleteUpload(item)} /> </View> ); } // TODO: transform into stateless and update based on its own observable changes - renderItem = (item, index) => ( - <View key={item.path} style={[styles.item, index !== 0 ? { marginTop: 10 } : {}]}> - {this.renderItemContent(item)} - </View> - ); + renderItem = (item, index) => { + const { theme } = this.props; + + return ( + <View + key={item.path} + style={[ + styles.item, + index !== 0 ? { marginTop: 10 } : {}, + { + backgroundColor: themes[theme].chatComponentBackground, + borderColor: themes[theme].borderColor + } + ]} + > + {this.renderItemContent(item)} + </View> + ); + } render() { const { uploads } = this.state; @@ -218,4 +228,4 @@ class UploadProgress extends Component { } } -export default responsive(UploadProgress); +export default responsive(withTheme(UploadProgress)); diff --git a/app/views/RoomView/index.js b/app/views/RoomView/index.js index 31e9f40acb..bb549a9094 100644 --- a/app/views/RoomView/index.js +++ b/app/views/RoomView/index.js @@ -2,19 +2,18 @@ import React from 'react'; import PropTypes from 'prop-types'; import { Text, View, InteractionManager } from 'react-native'; import { connect } from 'react-redux'; -import { RectButton } from 'react-native-gesture-handler'; import { SafeAreaView } from 'react-navigation'; -import { HeaderBackButton } from 'react-navigation-stack'; import { sanitizedRaw } from '@nozbe/watermelondb/RawRecord'; import moment from 'moment'; import * as Haptics from 'expo-haptics'; import { Q } from '@nozbe/watermelondb'; import isEqual from 'lodash/isEqual'; +import Touch from '../../utils/touch'; import { replyBroadcast as replyBroadcastAction } from '../../actions/messages'; -import { List } from './List'; +import List from './List'; import database from '../../lib/database'; import RocketChat from '../../lib/rocketchat'; import Message from '../../containers/message'; @@ -27,17 +26,27 @@ import styles from './styles'; import log from '../../utils/log'; import EventEmitter from '../../utils/events'; import I18n from '../../i18n'; -import RoomHeaderView, { RightButtons } from './Header'; +import RoomHeaderView, { RightButtons, RoomHeaderLeft } from './Header'; import StatusBar from '../../containers/StatusBar'; import Separator from './Separator'; -import { COLOR_WHITE, HEADER_BACK } from '../../constants/colors'; +import { themes } from '../../constants/colors'; import debounce from '../../utils/debounce'; import FileModal from '../../containers/FileModal'; import ReactionsModal from '../../containers/ReactionsModal'; import { LISTENER } from '../../containers/Toast'; import { isReadOnly, isBlocked } from '../../utils/room'; -import { isIOS } from '../../utils/deviceInfo'; +import { isIOS, isTablet } from '../../utils/deviceInfo'; import { showErrorAlert } from '../../utils/info'; +import { withTheme } from '../../theme'; +import { themedHeader } from '../../utils/navigation'; +import { + KEY_COMMAND, + handleCommandScroll, + handleCommandRoomActions, + handleCommandSearchMessages, + handleCommandReplyLatest +} from '../../commands'; +import ModalNavigation from '../../lib/ModalNavigation'; const stateAttrsUpdate = [ 'joined', @@ -55,16 +64,26 @@ const stateAttrsUpdate = [ const roomAttrsUpdate = ['f', 'ro', 'blocked', 'blocker', 'archived', 'muted', 'jitsiTimeout']; class RoomView extends React.Component { - static navigationOptions = ({ navigation }) => { - const rid = navigation.getParam('rid'); + static navigationOptions = ({ navigation, screenProps }) => { + const rid = navigation.getParam('rid', null); const prid = navigation.getParam('prid'); const title = navigation.getParam('name'); const t = navigation.getParam('t'); const tmid = navigation.getParam('tmid'); - const room = navigation.getParam('room'); + const baseUrl = navigation.getParam('baseUrl'); + const userId = navigation.getParam('userId'); + const token = navigation.getParam('token'); + const avatar = navigation.getParam('avatar'); const toggleFollowThread = navigation.getParam('toggleFollowThread', () => {}); + const goRoomActionsView = navigation.getParam('goRoomActionsView', () => {}); const unreadsCount = navigation.getParam('unreadsCount', null); + if (!rid) { + return { + ...themedHeader(screenProps.theme) + }; + } return { + ...themedHeader(screenProps.theme), headerTitle: ( <RoomHeaderView rid={rid} @@ -73,24 +92,31 @@ class RoomView extends React.Component { title={title} type={t} widthOffset={tmid ? 95 : 130} + goRoomActionsView={goRoomActionsView} /> ), headerRight: ( <RightButtons rid={rid} tmid={tmid} - room={room} t={t} navigation={navigation} toggleFollowThread={toggleFollowThread} /> ), headerLeft: ( - <HeaderBackButton - title={unreadsCount > 999 ? '+999' : unreadsCount || ' '} - backTitleVisible={isIOS} - onPress={() => navigation.goBack()} - tintColor={HEADER_BACK} + <RoomHeaderLeft + tmid={tmid} + unreadsCount={unreadsCount} + navigation={navigation} + baseUrl={baseUrl} + userId={userId} + token={token} + title={avatar} + theme={screenProps.theme} + t={t} + goRoomActionsView={goRoomActionsView} + split={screenProps.split} /> ) }; @@ -111,7 +137,9 @@ class RoomView extends React.Component { Message_Read_Receipt_Enabled: PropTypes.bool, baseUrl: PropTypes.string, customEmojis: PropTypes.object, + screenProps: PropTypes.object, useMarkdown: PropTypes.bool, + theme: PropTypes.string, replyBroadcast: PropTypes.func }; @@ -124,9 +152,13 @@ class RoomView extends React.Component { this.tmid = props.navigation.getParam('tmid', null); const room = props.navigation.getParam('room'); const selectedMessage = props.navigation.getParam('message'); + const name = props.navigation.getParam('name'); + const fname = props.navigation.getParam('fname'); this.state = { joined: true, - room: room || { rid: this.rid, t: this.t }, + room: room || { + rid: this.rid, t: this.t, name, fname + }, roomUpdate: {}, lastOpen: null, photoModalVisible: false, @@ -145,13 +177,14 @@ class RoomView extends React.Component { if (room && room.observe) { this.observeRoom(room); - } else { + } else if (this.rid) { this.findAndObserveRoom(this.rid); } this.beginAnimating = false; this.didFocusListener = props.navigation.addListener('didFocus', () => this.beginAnimating = true); this.messagebox = React.createRef(); + this.list = React.createRef(); this.willBlurListener = props.navigation.addListener('willBlur', () => this.mounted = false); this.mounted = false; console.timeEnd(`${ this.constructor.name } init`); @@ -159,32 +192,48 @@ class RoomView extends React.Component { componentDidMount() { this.mounted = true; + this.offset = 0; this.didMountInteraction = InteractionManager.runAfterInteractions(() => { const { room } = this.state; - const { navigation, isAuthenticated } = this.props; - if (room.id && !this.tmid) { - navigation.setParams({ name: this.getRoomTitle(room), t: room.t }); + const { + navigation, isAuthenticated, user, baseUrl + } = this.props; + if ((room.id || room.rid) && !this.tmid) { + navigation.setParams({ + name: this.getRoomTitle(room), + avatar: room.name, + t: room.t, + token: user.token, + userId: user.id, + goRoomActionsView: this.goRoomActionsView, + baseUrl + }); } if (this.tmid) { - navigation.setParams({ toggleFollowThread: this.toggleFollowThread }); + navigation.setParams({ toggleFollowThread: this.toggleFollowThread, goRoomActionsView: this.goRoomActionsView }); } - if (isAuthenticated) { + if (isAuthenticated && this.rid) { this.init(); - } else { + } else if (this.rid) { EventEmitter.addEventListener('connected', this.handleConnected); } - if (isIOS) { + if (isIOS && this.rid) { this.updateUnreadCount(); } }); - + if (isTablet) { + EventEmitter.addEventListener(KEY_COMMAND, this.handleCommands); + } console.timeEnd(`${ this.constructor.name } mount`); } shouldComponentUpdate(nextProps, nextState) { const { state } = this; const { roomUpdate } = state; - const { appState } = this.props; + const { appState, theme } = this.props; + if (theme !== nextProps.theme) { + return true; + } if (appState !== nextProps.appState) { return true; } @@ -198,9 +247,13 @@ class RoomView extends React.Component { componentDidUpdate(prevProps) { const { appState } = this.props; - if (appState === 'foreground' && appState !== prevProps.appState) { + if (appState === 'foreground' && appState !== prevProps.appState && this.rid) { this.onForegroundInteraction = InteractionManager.runAfterInteractions(() => { this.init(); + // Fire List.init() just to keep observables working + if (this.list && this.list.current) { + this.list.current.init(); + } }); } if (appState === 'background' && appState !== prevProps.appState) { @@ -260,9 +313,19 @@ class RoomView extends React.Component { this.queryUnreads.unsubscribe(); } EventEmitter.removeListener('connected', this.handleConnected); + if (isTablet) { + EventEmitter.removeListener(KEY_COMMAND, this.handleCommands); + } console.countReset(`${ this.constructor.name }.render calls`); } + // eslint-disable-next-line react/sort-comp + goRoomActionsView = () => { + const { room } = this.state; + const { navigation } = this.props; + navigation.navigate('RoomActionsView', { rid: this.rid, t: this.t, room }); + } + // eslint-disable-next-line react/sort-comp init = () => { try { @@ -312,7 +375,7 @@ class RoomView extends React.Component { if (this.t !== 'd') { console.log('Room not found'); this.internalSetState({ joined: false }); - } else { + } else if (this.rid) { // We navigate to RoomView before the DM is inserted to the local db // So we retry just to make sure we have the right content this.retryFindCount = this.retryFindCount + 1 || 1; @@ -496,6 +559,9 @@ class RoomView extends React.Component { sendMessage = (message, tmid) => { const { user } = this.props; RocketChat.sendMessage(this.rid, message, this.tmid || tmid, user).then(() => { + if (this.list && this.list.current) { + this.list.current.update(); + } this.setLastOpen(null); }); }; @@ -599,11 +665,17 @@ class RoomView extends React.Component { } navToRoomInfo = (navParam) => { - const { navigation, user } = this.props; + const { room } = this.state; + const { navigation, user, screenProps } = this.props; if (navParam.rid === user.id) { return; } - navigation.navigate('RoomInfoView', navParam); + if (screenProps && screenProps.split) { + navigation.navigate('RoomActionsView', { rid: this.rid, t: this.t, room }); + ModalNavigation.navigate('RoomInfoView', navParam); + } else { + navigation.navigate('RoomInfoView', navParam); + } } callJitsi = () => { @@ -616,6 +688,29 @@ class RoomView extends React.Component { } }; + handleCommands = ({ event }) => { + if (this.rid) { + const { room } = this.state; + const { navigation } = this.props; + const { input } = event; + if (handleCommandScroll(event)) { + const offset = input === 'UIKeyInputUpArrow' ? 100 : -100; + this.offset += offset; + this.flatList.scrollToOffset({ offset: this.offset }); + } else if (handleCommandRoomActions(event)) { + navigation.navigate('RoomActionsView', { rid: this.rid, t: this.t, room }); + } else if (handleCommandSearchMessages(event)) { + navigation.navigate('RoomActionsView', { rid: this.rid, t: this.t, room }); + ModalNavigation.navigate('SearchMessagesView', { rid: this.rid }); + } else if (handleCommandReplyLatest(event)) { + if (this.list && this.list.current) { + const message = this.list.current.getLastMessage(); + this.onReplyInit(message, false); + } + } + } + } + get isReadOnly() { const { room } = this.state; const { user } = this.props; @@ -625,7 +720,7 @@ class RoomView extends React.Component { renderItem = (item, previousItem) => { const { room, lastOpen, canAutoTranslate } = this.state; const { - user, Message_GroupingPeriod, Message_TimeFormat, useRealName, baseUrl, useMarkdown, Message_Read_Receipt_Enabled + user, Message_GroupingPeriod, Message_TimeFormat, useRealName, baseUrl, useMarkdown, Message_Read_Receipt_Enabled, theme } = this.props; let dateSeparator = null; let showUnreadSeparator = false; @@ -682,6 +777,7 @@ class RoomView extends React.Component { <Separator ts={dateSeparator} unread={showUnreadSeparator} + theme={theme} /> </> ); @@ -694,34 +790,36 @@ class RoomView extends React.Component { const { joined, room, selectedMessage, editing, replying, replyWithMention } = this.state; - const { navigation } = this.props; + const { navigation, theme } = this.props; + if (!this.rid) { + return null; + } if (!joined && !this.tmid) { return ( <View style={styles.joinRoomContainer} key='room-view-join' testID='room-view-join'> - <Text style={styles.previewMode}>{I18n.t('You_are_in_preview_mode')}</Text> - <RectButton + <Text style={[styles.previewMode, { color: themes[theme].titleText }]}>{I18n.t('You_are_in_preview_mode')}</Text> + <Touch onPress={this.joinRoom} - style={styles.joinRoomButton} - activeOpacity={0.5} - underlayColor={COLOR_WHITE} + style={[styles.joinRoomButton, { backgroundColor: themes[theme].actionTintColor }]} + theme={theme} > - <Text style={styles.joinRoomText} testID='room-view-join-button'>{I18n.t('Join')}</Text> - </RectButton> + <Text style={[styles.joinRoomText, { color: themes[theme].buttonText }]} testID='room-view-join-button'>{I18n.t('Join')}</Text> + </Touch> </View> ); } if (this.isReadOnly) { return ( <View style={styles.readOnly}> - <Text style={styles.previewMode}>{I18n.t('This_room_is_read_only')}</Text> + <Text style={[styles.previewMode, { color: themes[theme].titleText }]}>{I18n.t('This_room_is_read_only')}</Text> </View> ); } if (isBlocked(room)) { return ( <View style={styles.readOnly}> - <Text style={styles.previewMode}>{I18n.t('This_room_is_blocked')}</Text> + <Text style={[styles.previewMode, { color: themes[theme].titleText }]}>{I18n.t('This_room_is_blocked')}</Text> </View> ); } @@ -732,7 +830,7 @@ class RoomView extends React.Component { rid={this.rid} tmid={this.tmid} roomType={room.t} - isFocused={navigation.isFocused()} + isFocused={navigation.isFocused} message={selectedMessage} editing={editing} editRequest={this.onEditRequest} @@ -775,6 +873,7 @@ class RoomView extends React.Component { } {showErrorActions ? ( <MessageErrorActions + tmid={this.tmid} message={selectedMessage} actionsHide={this.onErrorActionsHide} /> @@ -783,21 +882,33 @@ class RoomView extends React.Component { ); } + setListRef = ref => this.flatList = ref; + render() { console.count(`${ this.constructor.name }.render calls`); const { room, photoModalVisible, reactionsModalVisible, selectedAttachment, selectedMessage, loading, reacting } = this.state; - const { user, baseUrl } = this.props; + const { user, baseUrl, theme } = this.props; const { rid, t } = room; return ( - <SafeAreaView style={styles.container} testID='room-view' forceInset={{ vertical: 'never' }}> - <StatusBar /> + <SafeAreaView + style={[ + styles.container, + { backgroundColor: themes[theme].backgroundColor } + ]} + testID='room-view' + forceInset={{ vertical: 'never' }} + > + <StatusBar theme={theme} /> <List + ref={this.list} + listRef={this.setListRef} rid={rid} t={t} tmid={this.tmid} + theme={theme} room={room} renderRow={this.renderItem} loading={loading} @@ -853,4 +964,4 @@ const mapDispatchToProps = dispatch => ({ replyBroadcast: message => dispatch(replyBroadcastAction(message)) }); -export default connect(mapStateToProps, mapDispatchToProps)(RoomView); +export default connect(mapStateToProps, mapDispatchToProps)(withTheme(RoomView)); diff --git a/app/views/RoomView/styles.js b/app/views/RoomView/styles.js index 11fcfd6707..9f011413eb 100644 --- a/app/views/RoomView/styles.js +++ b/app/views/RoomView/styles.js @@ -1,14 +1,10 @@ import { StyleSheet } from 'react-native'; -import { - COLOR_SEPARATOR, COLOR_PRIMARY, COLOR_WHITE, COLOR_TEXT_DESCRIPTION -} from '../../constants/colors'; import sharedStyles from '../Styles'; export default StyleSheet.create({ container: { - flex: 1, - backgroundColor: COLOR_WHITE + flex: 1 }, safeAreaView: { flex: 1 @@ -19,26 +15,15 @@ export default StyleSheet.create({ contentContainer: { paddingTop: 10 }, - separator: { - height: 1, - backgroundColor: COLOR_SEPARATOR - }, - loading: { - flex: 1, - padding: 15, - color: COLOR_TEXT_DESCRIPTION - }, readOnly: { justifyContent: 'flex-end', alignItems: 'center', marginVertical: 15 }, reactionPickerContainer: { - // width: width - 20, - // height: width - 20, - backgroundColor: '#F7F7F7', borderRadius: 4, - flexDirection: 'column' + flexDirection: 'column', + overflow: 'hidden' }, joinRoomContainer: { justifyContent: 'flex-end', @@ -52,17 +37,14 @@ export default StyleSheet.create({ flexDirection: 'row', alignItems: 'center', justifyContent: 'center', - backgroundColor: COLOR_PRIMARY, borderRadius: 2 }, joinRoomText: { - color: COLOR_WHITE, fontSize: 14, ...sharedStyles.textMedium }, previewMode: { fontSize: 16, - ...sharedStyles.textMedium, - ...sharedStyles.textColorNormal + ...sharedStyles.textMedium } }); diff --git a/app/views/RoomsListView/Header/Header.android.js b/app/views/RoomsListView/Header/Header.android.js index f331e81a6a..b40a9442d7 100644 --- a/app/views/RoomsListView/Header/Header.android.js +++ b/app/views/RoomsListView/Header/Header.android.js @@ -3,11 +3,11 @@ import { Text, View, TouchableOpacity, Image, StyleSheet } from 'react-native'; import PropTypes from 'prop-types'; -import { TextInput } from 'react-native-gesture-handler'; +import TextInput from '../../../presentation/TextInput'; import I18n from '../../../i18n'; import sharedStyles from '../../Styles'; -import { COLOR_WHITE } from '../../../constants/colors'; +import { themes } from '../../../constants/colors'; const styles = StyleSheet.create({ container: { @@ -20,7 +20,6 @@ const styles = StyleSheet.create({ }, server: { fontSize: 20, - color: COLOR_WHITE, ...sharedStyles.textRegular }, serverSmall: { @@ -28,7 +27,6 @@ const styles = StyleSheet.create({ }, updating: { fontSize: 14, - color: COLOR_WHITE, ...sharedStyles.textRegular }, disclosure: { @@ -43,17 +41,19 @@ const styles = StyleSheet.create({ }); const Header = React.memo(({ - connecting, isFetching, serverName, showServerDropdown, showSearchHeader, onSearchChangeText, onPress + connecting, isFetching, serverName, showServerDropdown, showSearchHeader, theme, onSearchChangeText, onPress }) => { + const titleColorStyle = { color: themes[theme].headerTitleColor }; + const isLight = theme === 'light'; if (showSearchHeader) { return ( <View style={styles.container}> <TextInput autoFocus - style={styles.server} + style={[styles.server, isLight && titleColorStyle]} placeholder='Search' - placeholderTextColor='rgba(255, 255, 255, 0.5)' onChangeText={onSearchChangeText} + theme={theme} /> </View> ); @@ -65,11 +65,18 @@ const Header = React.memo(({ testID='rooms-list-header-server-dropdown-button' disabled={connecting || isFetching} > - {connecting ? <Text style={styles.updating}>{I18n.t('Connecting')}</Text> : null} - {isFetching ? <Text style={styles.updating}>{I18n.t('Updating')}</Text> : null} + {connecting ? <Text style={[styles.updating, titleColorStyle]}>{I18n.t('Connecting')}</Text> : null} + {isFetching ? <Text style={[styles.updating, titleColorStyle]}>{I18n.t('Updating')}</Text> : null} <View style={styles.button}> - <Text style={[styles.server, isFetching && styles.serverSmall]}>{serverName}</Text> - <Image style={[styles.disclosure, showServerDropdown && styles.upsideDown]} source={{ uri: 'disclosure_indicator_server' }} /> + <Text style={[styles.server, isFetching && styles.serverSmall, titleColorStyle]}>{serverName}</Text> + <Image + style={[ + styles.disclosure, + showServerDropdown && styles.upsideDown, + { tintColor: themes[theme].headerTitleColor } + ]} + source={{ uri: 'disclosure_indicator_server' }} + /> </View> </TouchableOpacity> </View> @@ -83,7 +90,8 @@ Header.propTypes = { onSearchChangeText: PropTypes.func.isRequired, connecting: PropTypes.bool, isFetching: PropTypes.bool, - serverName: PropTypes.string + serverName: PropTypes.string, + theme: PropTypes.string }; Header.defaultProps = { diff --git a/app/views/RoomsListView/Header/Header.ios.js b/app/views/RoomsListView/Header/Header.ios.js index 09adacfec1..31f887cf57 100644 --- a/app/views/RoomsListView/Header/Header.ios.js +++ b/app/views/RoomsListView/Header/Header.ios.js @@ -6,7 +6,7 @@ import PropTypes from 'prop-types'; import I18n from '../../../i18n'; import sharedStyles from '../../Styles'; -import { COLOR_PRIMARY } from '../../../constants/colors'; +import { themes } from '../../../constants/colors'; const styles = StyleSheet.create({ container: { @@ -19,12 +19,10 @@ const styles = StyleSheet.create({ }, title: { fontSize: 14, - ...sharedStyles.textColorTitle, ...sharedStyles.textRegular }, server: { fontSize: 12, - color: COLOR_PRIMARY, ...sharedStyles.textRegular }, disclosure: { @@ -39,7 +37,7 @@ const styles = StyleSheet.create({ } }); -const HeaderTitle = React.memo(({ connecting, isFetching }) => { +const HeaderTitle = React.memo(({ connecting, isFetching, theme }) => { let title = I18n.t('Messages'); if (connecting) { title = I18n.t('Connecting'); @@ -47,11 +45,11 @@ const HeaderTitle = React.memo(({ connecting, isFetching }) => { if (isFetching) { title = I18n.t('Updating'); } - return <Text style={styles.title}>{title}</Text>; + return <Text style={[styles.title, { color: themes[theme].headerTitleColor }]}>{title}</Text>; }); const Header = React.memo(({ - connecting, isFetching, serverName, showServerDropdown, onPress + connecting, isFetching, serverName, showServerDropdown, onPress, theme }) => ( <View style={styles.container}> <TouchableOpacity @@ -60,9 +58,9 @@ const Header = React.memo(({ style={styles.container} disabled={connecting || isFetching} > - <HeaderTitle connecting={connecting} isFetching={isFetching} /> + <HeaderTitle connecting={connecting} isFetching={isFetching} theme={theme} /> <View style={styles.button}> - <Text style={styles.server}>{serverName}</Text> + <Text style={[styles.server, { color: themes[theme].headerTintColor }]}>{serverName}</Text> <Image style={[styles.disclosure, showServerDropdown && styles.upsideDown]} source={{ uri: 'disclosure_indicator_server' }} /> </View> </TouchableOpacity> @@ -73,6 +71,7 @@ Header.propTypes = { connecting: PropTypes.bool, isFetching: PropTypes.bool, serverName: PropTypes.string, + theme: PropTypes.string, showServerDropdown: PropTypes.bool.isRequired, onPress: PropTypes.func.isRequired }; @@ -83,7 +82,8 @@ Header.defaultProps = { HeaderTitle.propTypes = { connecting: PropTypes.bool, - isFetching: PropTypes.bool + isFetching: PropTypes.bool, + theme: PropTypes.string }; export default Header; diff --git a/app/views/RoomsListView/Header/index.js b/app/views/RoomsListView/Header/index.js index db169eca7d..294cf9eb62 100644 --- a/app/views/RoomsListView/Header/index.js +++ b/app/views/RoomsListView/Header/index.js @@ -6,6 +6,10 @@ import { toggleServerDropdown, closeServerDropdown, closeSortDropdown, setSearch as setSearchAction } from '../../../actions/rooms'; import Header from './Header'; +import { withTheme } from '../../../theme'; +import EventEmitter from '../../../utils/events'; +import { KEY_COMMAND, handleCommandOpenServerDropdown } from '../../../commands'; +import { isTablet } from '../../../utils/deviceInfo'; class RoomsListHeaderView extends PureComponent { static propTypes = { @@ -15,12 +19,31 @@ class RoomsListHeaderView extends PureComponent { serverName: PropTypes.string, connecting: PropTypes.bool, isFetching: PropTypes.bool, + theme: PropTypes.string, open: PropTypes.func, close: PropTypes.func, closeSort: PropTypes.func, setSearch: PropTypes.func } + componentDidMount() { + if (isTablet) { + EventEmitter.addEventListener(KEY_COMMAND, this.handleCommands); + } + } + + componentWillUnmount() { + if (isTablet) { + EventEmitter.removeListener(KEY_COMMAND, this.handleCommands); + } + } + + handleCommands = ({ event }) => { + if (handleCommandOpenServerDropdown(event)) { + this.onPress(); + } + } + onSearchChangeText = (text) => { const { setSearch } = this.props; setSearch(text.trim()); @@ -44,11 +67,12 @@ class RoomsListHeaderView extends PureComponent { render() { const { - serverName, showServerDropdown, showSearchHeader, connecting, isFetching + serverName, showServerDropdown, showSearchHeader, connecting, isFetching, theme } = this.props; return ( <Header + theme={theme} serverName={serverName} showServerDropdown={showServerDropdown} showSearchHeader={showSearchHeader} @@ -77,4 +101,4 @@ const mapDispatchtoProps = dispatch => ({ setSearch: searchText => dispatch(setSearchAction(searchText)) }); -export default connect(mapStateToProps, mapDispatchtoProps)(RoomsListHeaderView); +export default connect(mapStateToProps, mapDispatchtoProps)(withTheme(RoomsListHeaderView)); diff --git a/app/views/RoomsListView/ListHeader/Directory.js b/app/views/RoomsListView/ListHeader/Directory.js index 0e83ec1753..477f1a6cb8 100644 --- a/app/views/RoomsListView/ListHeader/Directory.js +++ b/app/views/RoomsListView/ListHeader/Directory.js @@ -1,30 +1,40 @@ import React from 'react'; -import { View, Text } from 'react-native'; +import { View, Text, StyleSheet } from 'react-native'; import PropTypes from 'prop-types'; +import Touch from '../../../utils/touch'; import { CustomIcon } from '../../../lib/Icons'; import I18n from '../../../i18n'; -import Touch from '../../../utils/touch'; import styles from '../styles'; import DisclosureIndicator from '../../../containers/DisclosureIndicator'; +import { themes } from '../../../constants/colors'; +import { withTheme } from '../../../theme'; - -const Directory = React.memo(({ goDirectory }) => ( - <Touch - key='rooms-list-view-sort' - onPress={goDirectory} - style={styles.dropdownContainerHeader} - > - <View style={styles.sortItemContainer}> - <CustomIcon style={styles.directoryIcon} size={22} name='discover' /> - <Text style={styles.directoryText}>{I18n.t('Directory')}</Text> - <DisclosureIndicator /> - </View> - </Touch> -)); +const Directory = React.memo(({ goDirectory, theme }) => { + const color = { color: themes[theme].headerSecondaryText }; + return ( + <Touch + onPress={goDirectory} + theme={theme} + style={{ backgroundColor: themes[theme].headerSecondaryBackground }} + > + <View + style={[ + styles.dropdownContainerHeader, + { borderBottomWidth: StyleSheet.hairlineWidth, borderColor: themes[theme].separatorColor } + ]} + > + <CustomIcon style={[styles.directoryIcon, color]} size={22} name='discover' /> + <Text style={[styles.directoryText, color]}>{I18n.t('Directory')}</Text> + <DisclosureIndicator theme={theme} /> + </View> + </Touch> + ); +}); Directory.propTypes = { - goDirectory: PropTypes.func + goDirectory: PropTypes.func, + theme: PropTypes.string }; -export default Directory; +export default withTheme(Directory); diff --git a/app/views/RoomsListView/ListHeader/SearchBar.js b/app/views/RoomsListView/ListHeader/SearchBar.js index 31e0372d33..d183937939 100644 --- a/app/views/RoomsListView/ListHeader/SearchBar.js +++ b/app/views/RoomsListView/ListHeader/SearchBar.js @@ -3,16 +3,26 @@ import PropTypes from 'prop-types'; import SearchBox from '../../../containers/SearchBox'; import { isIOS } from '../../../utils/deviceInfo'; +import { withTheme } from '../../../theme'; -const SearchBar = React.memo(({ onChangeSearchText }) => { +const SearchBar = React.memo(({ theme, onChangeSearchText, inputRef }) => { if (isIOS) { - return <SearchBox onChangeText={onChangeSearchText} testID='rooms-list-view-search' key='rooms-list-view-search' />; + return ( + <SearchBox + onChangeText={onChangeSearchText} + testID='rooms-list-view-search' + inputRef={inputRef} + theme={theme} + /> + ); } return null; }); SearchBar.propTypes = { + theme: PropTypes.string, + inputRef: PropTypes.func, onChangeSearchText: PropTypes.func }; -export default SearchBar; +export default withTheme(SearchBar); diff --git a/app/views/RoomsListView/ListHeader/Sort.js b/app/views/RoomsListView/ListHeader/Sort.js index 087724289c..f5ec8820c8 100644 --- a/app/views/RoomsListView/ListHeader/Sort.js +++ b/app/views/RoomsListView/ListHeader/Sort.js @@ -1,26 +1,35 @@ import React from 'react'; -import { View, Text } from 'react-native'; +import { View, Text, StyleSheet } from 'react-native'; import PropTypes from 'prop-types'; +import Touch from '../../../utils/touch'; import { CustomIcon } from '../../../lib/Icons'; import I18n from '../../../i18n'; -import Touch from '../../../utils/touch'; import styles from '../styles'; +import { themes } from '../../../constants/colors'; +import { withTheme } from '../../../theme'; -const Sort = React.memo(({ searchLength, sortBy, toggleSort }) => { +const Sort = React.memo(({ + searchLength, sortBy, toggleSort, theme +}) => { if (searchLength > 0) { return null; } return ( <Touch - key='rooms-list-view-sort' onPress={toggleSort} - style={styles.dropdownContainerHeader} + theme={theme} + style={{ backgroundColor: themes[theme].headerSecondaryBackground }} > - <View style={styles.sortItemContainer}> - <Text style={styles.sortToggleText}>{I18n.t('Sorting_by', { key: I18n.t(sortBy === 'alphabetical' ? 'name' : 'activity') })}</Text> - <CustomIcon style={styles.sortIcon} size={22} name='sort1' /> + <View + style={[ + styles.dropdownContainerHeader, + { borderBottomWidth: StyleSheet.hairlineWidth, borderColor: themes[theme].separatorColor } + ]} + > + <Text style={[styles.sortToggleText, { color: themes[theme].auxiliaryText }]}>{I18n.t('Sorting_by', { key: I18n.t(sortBy === 'alphabetical' ? 'name' : 'activity') })}</Text> + <CustomIcon style={[styles.sortIcon, { color: themes[theme].auxiliaryText }]} size={22} name='sort1' /> </View> </Touch> ); @@ -29,7 +38,8 @@ const Sort = React.memo(({ searchLength, sortBy, toggleSort }) => { Sort.propTypes = { searchLength: PropTypes.number, sortBy: PropTypes.string, + theme: PropTypes.string, toggleSort: PropTypes.func }; -export default Sort; +export default withTheme(Sort); diff --git a/app/views/RoomsListView/ListHeader/index.js b/app/views/RoomsListView/ListHeader/index.js index bdef7d1cc7..106d80c71b 100644 --- a/app/views/RoomsListView/ListHeader/index.js +++ b/app/views/RoomsListView/ListHeader/index.js @@ -6,10 +6,10 @@ import Directory from './Directory'; import Sort from './Sort'; const ListHeader = React.memo(({ - searchLength, sortBy, onChangeSearchText, toggleSort, goDirectory + searchLength, sortBy, onChangeSearchText, toggleSort, goDirectory, inputRef }) => ( <> - <SearchBar onChangeSearchText={onChangeSearchText} /> + <SearchBar onChangeSearchText={onChangeSearchText} inputRef={inputRef} /> <Directory goDirectory={goDirectory} /> <Sort searchLength={searchLength} sortBy={sortBy} toggleSort={toggleSort} /> </> @@ -20,7 +20,8 @@ ListHeader.propTypes = { sortBy: PropTypes.string, onChangeSearchText: PropTypes.func, toggleSort: PropTypes.func, - goDirectory: PropTypes.func + goDirectory: PropTypes.func, + inputRef: PropTypes.func }; export default ListHeader; diff --git a/app/views/RoomsListView/ServerDropdown.js b/app/views/RoomsListView/ServerDropdown.js index b7daac0a89..88fe271175 100644 --- a/app/views/RoomsListView/ServerDropdown.js +++ b/app/views/RoomsListView/ServerDropdown.js @@ -18,6 +18,11 @@ import I18n from '../../i18n'; import EventEmitter from '../../utils/events'; import Check from '../../containers/Check'; import database from '../../lib/database'; +import { themes } from '../../constants/colors'; +import { withTheme } from '../../theme'; +import { KEY_COMMAND, handleCommandSelectServer } from '../../commands'; +import { isTablet } from '../../utils/deviceInfo'; +import { withSplit } from '../../split'; const ROW_HEIGHT = 68; const ANIMATION_DURATION = 200; @@ -26,7 +31,9 @@ class ServerDropdown extends Component { static propTypes = { navigation: PropTypes.object, closeServerDropdown: PropTypes.bool, + split: PropTypes.bool, server: PropTypes.string, + theme: PropTypes.string, toggleServerDropdown: PropTypes.func, selectServerRequest: PropTypes.func, appStart: PropTypes.func @@ -56,13 +63,19 @@ class ServerDropdown extends Component { duration: ANIMATION_DURATION, easing: Easing.inOut(Easing.quad), useNativeDriver: true - }, + } ).start(); + if (isTablet) { + EventEmitter.addEventListener(KEY_COMMAND, this.handleCommands); + } } shouldComponentUpdate(nextProps, nextState) { const { servers } = this.state; - const { closeServerDropdown, server } = this.props; + const { closeServerDropdown, server, theme } = this.props; + if (nextProps.theme !== theme) { + return true; + } if (nextProps.closeServerDropdown !== closeServerDropdown) { return true; } @@ -90,6 +103,9 @@ class ServerDropdown extends Component { if (this.subscription && this.subscription.unsubscribe) { this.subscription.unsubscribe(); } + if (isTablet) { + EventEmitter.removeListener(KEY_COMMAND, this.handleCommands); + } } close = () => { @@ -116,12 +132,15 @@ class ServerDropdown extends Component { select = async(server) => { const { - server: currentServer, selectServerRequest, appStart + server: currentServer, selectServerRequest, appStart, navigation, split } = this.props; this.close(); if (currentServer !== server) { const userId = await RNUserDefaults.get(`${ RocketChat.TOKEN_KEY }-${ server }`); + if (split) { + navigation.navigate('RoomView'); + } if (!userId) { appStart(); this.newServerTimeout = setTimeout(() => { @@ -133,13 +152,32 @@ class ServerDropdown extends Component { } } - renderSeparator = () => <View style={styles.serverSeparator} />; + handleCommands = ({ event }) => { + const { servers } = this.state; + const { navigation } = this.props; + const { input } = event; + if (handleCommandSelectServer(event)) { + if (servers[input - 1]) { + this.select(servers[input - 1].id); + navigation.navigate('RoomView'); + } + } + } + + renderSeparator = () => { + const { theme } = this.props; + return <View style={[styles.serverSeparator, { backgroundColor: themes[theme].separatorColor }]} />; + } renderServer = ({ item }) => { - const { server } = this.props; + const { server, theme } = this.props; return ( - <Touch onPress={() => this.select(item.id)} style={styles.serverItem} testID={`rooms-list-header-server-${ item.id }`}> + <Touch + onPress={() => this.select(item.id)} + testID={`rooms-list-header-server-${ item.id }`} + theme={theme} + > <View style={styles.serverItemContainer}> {item.iconURL ? ( @@ -158,10 +196,10 @@ class ServerDropdown extends Component { ) } <View style={styles.serverTextContainer}> - <Text style={styles.serverName}>{item.name || item.id}</Text> - <Text style={styles.serverUrl}>{item.id}</Text> + <Text style={[styles.serverName, { color: themes[theme].titleText }]}>{item.name || item.id}</Text> + <Text style={[styles.serverUrl, { color: themes[theme].auxiliaryText }]}>{item.id}</Text> </View> - {item.id === server ? <Check /> : null} + {item.id === server ? <Check theme={theme} /> : null} </View> </Touch> ); @@ -169,6 +207,7 @@ class ServerDropdown extends Component { render() { const { servers } = this.state; + const { theme } = this.props; const maxRows = 4; const initialTop = 41 + (Math.min(servers.length, maxRows) * ROW_HEIGHT); const translateY = this.animatedValue.interpolate({ @@ -177,22 +216,34 @@ class ServerDropdown extends Component { }); const backdropOpacity = this.animatedValue.interpolate({ inputRange: [0, 1], - outputRange: [0, 0.3] + outputRange: [0, 0.6] }); return ( - [ - <TouchableWithoutFeedback key='sort-backdrop' onPress={this.close}> - <Animated.View style={[styles.backdrop, { opacity: backdropOpacity }]} /> - </TouchableWithoutFeedback>, + <> + <TouchableWithoutFeedback onPress={this.close}> + <Animated.View style={[styles.backdrop, { backgroundColor: themes[theme].backdropColor, opacity: backdropOpacity }]} /> + </TouchableWithoutFeedback> <Animated.View - key='sort-container' - style={[styles.dropdownContainer, { transform: [{ translateY }] }]} + style={[ + styles.dropdownContainer, + { + transform: [{ translateY }], + backgroundColor: themes[theme].backgroundColor, + borderColor: themes[theme].separatorColor + } + ]} testID='rooms-list-header-server-dropdown' > - <View style={[styles.dropdownContainerHeader, styles.serverHeader]}> - <Text style={styles.serverHeaderText}>{I18n.t('Server')}</Text> + <View + style={[ + styles.dropdownContainerHeader, + styles.serverHeader, + { borderColor: themes[theme].separatorColor } + ]} + > + <Text style={[styles.serverHeaderText, { color: themes[theme].auxiliaryText }]}>{I18n.t('Server')}</Text> <TouchableOpacity onPress={this.addServer} testID='rooms-list-header-server-add'> - <Text style={styles.serverHeaderAdd}>{I18n.t('Add_Server')}</Text> + <Text style={[styles.serverHeaderAdd, { color: themes[theme].tintColor }]}>{I18n.t('Add_Server')}</Text> </TouchableOpacity> </View> <FlatList @@ -201,9 +252,10 @@ class ServerDropdown extends Component { keyExtractor={item => item.id} renderItem={this.renderServer} ItemSeparatorComponent={this.renderSeparator} + keyboardShouldPersistTaps='always' /> </Animated.View> - ] + </> ); } } @@ -219,4 +271,4 @@ const mapDispatchToProps = dispatch => ({ appStart: () => dispatch(appStartAction('outside')) }); -export default withNavigation(connect(mapStateToProps, mapDispatchToProps)(ServerDropdown)); +export default withNavigation(connect(mapStateToProps, mapDispatchToProps)(withTheme(withSplit(ServerDropdown)))); diff --git a/app/views/RoomsListView/SortDropdown.js b/app/views/RoomsListView/SortDropdown.js index e11d980e8f..caa4d41f5d 100644 --- a/app/views/RoomsListView/SortDropdown.js +++ b/app/views/RoomsListView/SortDropdown.js @@ -40,7 +40,7 @@ class Sort extends PureComponent { duration: ANIMATION_DURATION, easing: Easing.inOut(Easing.quad), useNativeDriver: true - }, + } ).start(); } @@ -96,7 +96,7 @@ class Sort extends PureComponent { duration: ANIMATION_DURATION, easing: Easing.inOut(Easing.quad), useNativeDriver: true - }, + } ).start(() => close()); } diff --git a/app/views/RoomsListView/SortDropdown/Item.js b/app/views/RoomsListView/SortDropdown/Item.js new file mode 100644 index 0000000000..b842b3f72e --- /dev/null +++ b/app/views/RoomsListView/SortDropdown/Item.js @@ -0,0 +1,46 @@ +import React from 'react'; +import { View, Text, Image } from 'react-native'; +import PropTypes from 'prop-types'; + +import styles from '../styles'; +import Touch from '../../../utils/touch'; +import I18n from '../../../i18n'; +import { CustomIcon } from '../../../lib/Icons'; +import Check from '../../../containers/Check'; +import { themes } from '../../../constants/colors'; + + +export const SortItemButton = ({ children, onPress, theme }) => ( + <Touch + style={styles.sortItemButton} + onPress={onPress} + theme={theme} + > + {children} + </Touch> +); + +SortItemButton.propTypes = { + theme: PropTypes.string, + children: PropTypes.node, + onPress: PropTypes.func +}; + +export const SortItemContent = ({ + label, icon, imageUri, checked, theme +}) => ( + <View style={styles.sortItemContainer}> + {icon && <CustomIcon style={[styles.sortIcon, { color: themes[theme].controlText }]} size={22} name={icon} />} + {imageUri && <Image style={[styles.sortIcon, { tintColor: themes[theme].controlText }]} source={{ uri: imageUri }} />} + <Text style={[styles.sortItemText, { color: themes[theme].controlText }]}>{I18n.t(label)}</Text> + {checked ? <Check theme={theme} /> : null} + </View> +); + +SortItemContent.propTypes = { + theme: PropTypes.string, + label: PropTypes.string, + icon: PropTypes.string, + imageUri: PropTypes.string, + checked: PropTypes.bool +}; diff --git a/app/views/RoomsListView/SortDropdown/index.js b/app/views/RoomsListView/SortDropdown/index.js new file mode 100644 index 0000000000..3f68fef0e5 --- /dev/null +++ b/app/views/RoomsListView/SortDropdown/index.js @@ -0,0 +1,200 @@ +import React, { PureComponent } from 'react'; +import { + View, Text, Animated, Easing, TouchableWithoutFeedback +} from 'react-native'; +import PropTypes from 'prop-types'; +import { connect } from 'react-redux'; + +import styles from '../styles'; +import Touch from '../../../utils/touch'; +import RocketChat from '../../../lib/rocketchat'; +import { setPreference } from '../../../actions/sortPreferences'; +import log from '../../../utils/log'; +import I18n from '../../../i18n'; +import { CustomIcon } from '../../../lib/Icons'; +import { withTheme } from '../../../theme'; +import { themes } from '../../../constants/colors'; +import { SortItemButton, SortItemContent } from './Item'; + +const ANIMATION_DURATION = 200; + +class Sort extends PureComponent { + static propTypes = { + closeSortDropdown: PropTypes.bool, + close: PropTypes.func, + sortBy: PropTypes.string, + groupByType: PropTypes.bool, + showFavorites: PropTypes.bool, + showUnread: PropTypes.bool, + theme: PropTypes.string, + setSortPreference: PropTypes.func + } + + constructor(props) { + super(props); + this.animatedValue = new Animated.Value(0); + } + + componentDidMount() { + Animated.timing( + this.animatedValue, + { + toValue: 1, + duration: ANIMATION_DURATION, + easing: Easing.inOut(Easing.quad), + useNativeDriver: true + } + ).start(); + } + + componentDidUpdate(prevProps) { + const { closeSortDropdown } = this.props; + if (prevProps.closeSortDropdown !== closeSortDropdown) { + this.close(); + } + } + + setSortPreference = (param) => { + const { setSortPreference } = this.props; + + try { + setSortPreference(param); + RocketChat.saveSortPreference(param); + } catch (e) { + log(e); + } + } + + sortByName = () => { + this.setSortPreference({ sortBy: 'alphabetical' }); + this.close(); + } + + sortByActivity = () => { + this.setSortPreference({ sortBy: 'activity' }); + this.close(); + } + + toggleGroupByType = () => { + const { groupByType } = this.props; + this.setSortPreference({ groupByType: !groupByType }); + } + + toggleGroupByFavorites = () => { + const { showFavorites } = this.props; + this.setSortPreference({ showFavorites: !showFavorites }); + } + + toggleUnread = () => { + const { showUnread } = this.props; + this.setSortPreference({ showUnread: !showUnread }); + } + + close = () => { + const { close } = this.props; + Animated.timing( + this.animatedValue, + { + toValue: 0, + duration: ANIMATION_DURATION, + easing: Easing.inOut(Easing.quad), + useNativeDriver: true + } + ).start(() => close()); + } + + render() { + const translateY = this.animatedValue.interpolate({ + inputRange: [0, 1], + outputRange: [-326, 0] + }); + const backdropOpacity = this.animatedValue.interpolate({ + inputRange: [0, 1], + outputRange: [0, 0.3] + }); + const { + sortBy, groupByType, showFavorites, showUnread, theme + } = this.props; + + return ( + <> + <TouchableWithoutFeedback onPress={this.close}> + <Animated.View style={[styles.backdrop, { backgroundColor: themes[theme].backdropColor, opacity: backdropOpacity }]} /> + </TouchableWithoutFeedback> + <Animated.View + style={[ + styles.dropdownContainer, + { + transform: [{ translateY }], + backgroundColor: themes[theme].backgroundColor, + borderColor: themes[theme].separatorColor + } + ]} + > + <Touch + onPress={this.close} + theme={theme} + > + <View style={[styles.dropdownContainerHeader, { borderColor: themes[theme].separatorColor }]}> + <View style={styles.sortItemContainer}> + <Text style={[styles.sortToggleText, { color: themes[theme].auxiliaryText }]}>{I18n.t('Sorting_by', { key: I18n.t(sortBy === 'alphabetical' ? 'name' : 'activity') })}</Text> + <CustomIcon style={[styles.sortIcon, { color: themes[theme].auxiliaryText }]} size={22} name='sort1' /> + </View> + </View> + </Touch> + <SortItemButton onPress={this.sortByName} theme={theme}> + <SortItemContent + icon='sort' + label='Alphabetical' + checked={sortBy === 'alphabetical'} + theme={theme} + /> + </SortItemButton> + <SortItemButton onPress={this.sortByActivity} theme={theme}> + <SortItemContent + imageUri='sort_activity' + label='Activity' + checked={sortBy === 'activity'} + theme={theme} + /> + </SortItemButton> + <View style={[styles.sortSeparator, { backgroundColor: themes[theme].separatorColor }]} /> + <SortItemButton onPress={this.toggleGroupByType} theme={theme}> + <SortItemContent + icon='sort1' + label='Group_by_type' + checked={groupByType} + theme={theme} + /> + </SortItemButton> + <SortItemButton onPress={this.toggleGroupByFavorites} theme={theme}> + <SortItemContent + icon='star' + label='Group_by_favorites' + checked={showFavorites} + theme={theme} + /> + </SortItemButton> + <SortItemButton onPress={this.toggleUnread} theme={theme}> + <SortItemContent + icon='eye-off' + label='Unread_on_top' + checked={showUnread} + theme={theme} + /> + </SortItemButton> + </Animated.View> + </> + ); + } +} + +const mapStateToProps = state => ({ + closeSortDropdown: state.rooms.closeSortDropdown +}); + +const mapDispatchToProps = dispatch => ({ + setSortPreference: preference => dispatch(setPreference(preference)) +}); + +export default connect(mapStateToProps, mapDispatchToProps)(withTheme(Sort)); diff --git a/app/views/RoomsListView/index.js b/app/views/RoomsListView/index.js index f3f25a6e56..fa21c26800 100644 --- a/app/views/RoomsListView/index.js +++ b/app/views/RoomsListView/index.js @@ -4,9 +4,7 @@ import { View, FlatList, BackHandler, - ActivityIndicator, Text, - ScrollView, Keyboard, Dimensions } from 'react-native'; @@ -28,11 +26,12 @@ import { toggleSortDropdown as toggleSortDropdownAction, openSearchHeader as openSearchHeaderAction, closeSearchHeader as closeSearchHeaderAction, - roomsRequest as roomsRequestAction + roomsRequest as roomsRequestAction, + closeServerDropdown as closeServerDropdownAction } from '../../actions/rooms'; import { appStart as appStartAction } from '../../actions'; import debounce from '../../utils/debounce'; -import { isIOS, isAndroid } from '../../utils/deviceInfo'; +import { isIOS, isAndroid, isTablet } from '../../utils/deviceInfo'; import RoomsListHeaderView from './Header'; import { DrawerButton, @@ -40,11 +39,39 @@ import { Item } from '../../containers/HeaderButton'; import StatusBar from '../../containers/StatusBar'; +import ActivityIndicator from '../../containers/ActivityIndicator'; import ListHeader from './ListHeader'; import { selectServerRequest as selectServerRequestAction } from '../../actions/server'; import { animateNextTransition } from '../../utils/layoutAnimation'; +import { withTheme } from '../../theme'; +import { themes } from '../../constants/colors'; +import { themedHeader } from '../../utils/navigation'; +import EventEmitter from '../../utils/events'; +import { + KEY_COMMAND, + handleCommandShowPreferences, + handleCommandSearching, + handleCommandSelectRoom, + handleCommandPreviousRoom, + handleCommandNextRoom, + handleCommandShowNewMessage, + handleCommandAddNewServer +} from '../../commands'; +import { MAX_SIDEBAR_WIDTH } from '../../constants/tablet'; +import { withSplit } from '../../split'; const SCROLL_OFFSET = 56; +const INITIAL_NUM_TO_RENDER = isTablet ? 20 : 12; +const CHATS_HEADER = 'Chats'; +const UNREAD_HEADER = 'Unread'; +const FAVORITES_HEADER = 'Favorites'; +const DISCUSSIONS_HEADER = 'Discussions'; +const CHANNELS_HEADER = 'Channels'; +const DM_HEADER = 'Direct_Messages'; +const GROUPS_HEADER = 'Private_Groups'; + +const filterIsUnread = s => (s.unread > 0 || s.alert) && !s.hideUnreadStatus; +const filterIsFavorite = s => s.f; const shouldUpdateProps = [ 'searchText', @@ -57,7 +84,9 @@ const shouldUpdateProps = [ 'showUnread', 'useRealName', 'StoreLastMessage', - 'appState' + 'appState', + 'theme', + 'split' ]; const getItemLayout = (data, index) => ({ length: ROW_HEIGHT, @@ -67,7 +96,7 @@ const getItemLayout = (data, index) => ({ const keyExtractor = item => item.rid; class RoomsListView extends React.Component { - static navigationOptions = ({ navigation }) => { + static navigationOptions = ({ navigation, screenProps }) => { const searching = navigation.getParam('searching'); const cancelSearchingAndroid = navigation.getParam( 'cancelSearchingAndroid' @@ -79,6 +108,7 @@ class RoomsListView extends React.Component { ); return { + ...themedHeader(screenProps.theme), headerLeft: searching ? ( <CustomHeaderButtons left> <Item @@ -134,11 +164,14 @@ class RoomsListView extends React.Component { useRealName: PropTypes.bool, StoreLastMessage: PropTypes.bool, appState: PropTypes.string, + theme: PropTypes.string, toggleSortDropdown: PropTypes.func, openSearchHeader: PropTypes.func, closeSearchHeader: PropTypes.func, appStart: PropTypes.func, - roomsRequest: PropTypes.func + roomsRequest: PropTypes.func, + closeServerDropdown: PropTypes.func, + split: PropTypes.bool }; constructor(props) { @@ -146,6 +179,7 @@ class RoomsListView extends React.Component { console.time(`${ this.constructor.name } init`); console.time(`${ this.constructor.name } mount`); + this.gotSubscriptions = false; const { width } = Dimensions.get('window'); this.state = { searching: false, @@ -153,57 +187,57 @@ class RoomsListView extends React.Component { loading: true, allChats: [], chats: [], - unread: [], - favorites: [], - discussions: [], - channels: [], - privateGroup: [], - direct: [], width }; - Orientation.unlockAllOrientations(); - this.willFocusListener = props.navigation.addListener('willFocus', () => { - // Check if there were changes while not focused (it's set on sCU) - if (this.shouldUpdate) { - // animateNextTransition(); - this.forceUpdate(); - this.shouldUpdate = false; - } - }); - this.didFocusListener = props.navigation.addListener('didFocus', () => { - BackHandler.addEventListener( - 'hardwareBackPress', - this.handleBackPress - ); - }); - this.willBlurListener = props.navigation.addListener('willBlur', () => BackHandler.addEventListener( - 'hardwareBackPress', - this.handleBackPress - )); } componentDidMount() { this.getSubscriptions(); - const { navigation } = this.props; + const { navigation, closeServerDropdown } = this.props; navigation.setParams({ onPressItem: this._onPressItem, initSearchingAndroid: this.initSearchingAndroid, cancelSearchingAndroid: this.cancelSearchingAndroid }); + if (isTablet) { + EventEmitter.addEventListener(KEY_COMMAND, this.handleCommands); + } Dimensions.addEventListener('change', this.onDimensionsChange); + Orientation.unlockAllOrientations(); + this.willFocusListener = navigation.addListener('willFocus', () => { + // Check if there were changes while not focused (it's set on sCU) + if (this.shouldUpdate) { + // animateNextTransition(); + this.forceUpdate(); + this.shouldUpdate = false; + } + }); + this.didFocusListener = navigation.addListener('didFocus', () => { + this.backHandler = BackHandler.addEventListener('hardwareBackPress', this.handleBackPress); + }); + this.willBlurListener = navigation.addListener('willBlur', () => { + closeServerDropdown(); + if (this.backHandler && this.backHandler.remove) { + this.backHandler.remove(); + } + }); console.timeEnd(`${ this.constructor.name } mount`); } componentWillReceiveProps(nextProps) { - const { loadingServer, searchText } = this.props; + const { loadingServer, searchText, server } = this.props; if (nextProps.server && loadingServer !== nextProps.loadingServer) { if (nextProps.loadingServer) { - this.internalSetState({ loading: true }); + this.setState({ loading: true }); } else { this.getSubscriptions(); } - } else if (searchText !== nextProps.searchText) { + } + if (server && server !== nextProps.server) { + this.gotSubscriptions = false; + } + if (searchText !== nextProps.searchText) { this.search(nextProps.searchText); } } @@ -273,7 +307,7 @@ class RoomsListView extends React.Component { && prevProps.showUnread === showUnread ) ) { - this.getSubscriptions(); + this.getSubscriptions(true); } else if ( appState === 'foreground' && appState !== prevProps.appState @@ -283,9 +317,6 @@ class RoomsListView extends React.Component { } componentWillUnmount() { - if (this.getSubscriptions && this.getSubscriptions.stop) { - this.getSubscriptions.stop(); - } if (this.querySubscription && this.querySubscription.unsubscribe) { this.querySubscription.unsubscribe(); } @@ -298,6 +329,9 @@ class RoomsListView extends React.Component { if (this.willBlurListener && this.willBlurListener.remove) { this.willBlurListener.remove(); } + if (isTablet) { + EventEmitter.removeListener(KEY_COMMAND, this.handleCommands); + } Dimensions.removeEventListener('change', this.onDimensionsChange); console.countReset(`${ this.constructor.name }.render calls`); } @@ -313,11 +347,28 @@ class RoomsListView extends React.Component { this.setState(...args); }; - getSubscriptions = debounce(async() => { + addRoomsGroup = (data, header, allData) => { + if (data.length > 0) { + if (header) { + allData.push({ rid: header, separator: true }); + } + allData = allData.concat(data); + } + return allData; + } + + getSubscriptions = async(force = false) => { + if (this.gotSubscriptions && !force) { + return; + } + this.gotSubscriptions = true; + if (this.querySubscription && this.querySubscription.unsubscribe) { this.querySubscription.unsubscribe(); } + this.setState({ loading: true }); + const { sortBy, showUnread, @@ -336,13 +387,8 @@ class RoomsListView extends React.Component { .observeWithColumns(['room_updated_at', 'unread', 'alert', 'user_mentions', 'f', 't']); this.querySubscription = observable.subscribe((data) => { + let tempChats = []; let chats = []; - let unread = []; - let favorites = []; - let discussions = []; - let channels = []; - let privateGroup = []; - let direct = []; if (sortBy === 'alphabetical') { chats = orderBy(data, ['name'], ['asc']); } else { @@ -367,41 +413,41 @@ class RoomsListView extends React.Component { // unread if (showUnread) { - unread = chats.filter(s => s.unread > 0 || s.alert); - } else { - unread = []; + const unread = chats.filter(s => filterIsUnread(s)); + chats = chats.filter(s => !filterIsUnread(s)); + tempChats = this.addRoomsGroup(unread, UNREAD_HEADER, tempChats); } // favorites if (showFavorites) { - favorites = chats.filter(s => s.f); - } else { - favorites = []; + const favorites = chats.filter(s => filterIsFavorite(s)); + chats = chats.filter(s => !filterIsFavorite(s)); + tempChats = this.addRoomsGroup(favorites, FAVORITES_HEADER, tempChats); } // type if (groupByType) { - discussions = chats.filter(s => s.prid); - channels = chats.filter(s => s.t === 'c' && !s.prid); - privateGroup = chats.filter(s => s.t === 'p' && !s.prid); - direct = chats.filter(s => s.t === 'd' && !s.prid); - } else if (showUnread) { - chats = chats.filter(s => !s.unread && !s.alert); + const discussions = chats.filter(s => s.prid); + const channels = chats.filter(s => s.t === 'c' && !s.prid); + const privateGroup = chats.filter(s => s.t === 'p' && !s.prid); + const direct = chats.filter(s => s.t === 'd' && !s.prid); + 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) { + tempChats = this.addRoomsGroup(chats, CHATS_HEADER, tempChats); + } else { + tempChats = chats; } this.internalSetState({ + chats: tempChats, allChats, - chats, - unread, - favorites, - discussions, - channels, - privateGroup, - direct, loading: false }); }); - }, 300, true); + } initSearchingAndroid = () => { const { openSearchHeader, navigation } = this.props; @@ -417,8 +463,8 @@ class RoomsListView extends React.Component { navigation.setParams({ searching: false }); closeSearchHeader(); this.internalSetState({ search: [] }); - Keyboard.dismiss(); } + Keyboard.dismiss(); }; handleBackPress = () => { @@ -448,6 +494,7 @@ class RoomsListView extends React.Component { goRoom = (item) => { this.cancelSearchingAndroid(); const { navigation } = this.props; + this.item = item; navigation.navigate('RoomView', { rid: item.rid, name: this.getRoomTitle(item), @@ -564,6 +611,70 @@ class RoomsListView extends React.Component { navigation.navigate('DirectoryView'); }; + goRoomByIndex = (index) => { + const { chats } = this.state; + const filteredChats = chats.filter(c => !c.separator); + const room = filteredChats[index - 1]; + if (room) { + this.goRoom(room); + } + } + + findOtherRoom = (index, sign) => { + const { chats } = this.state; + const otherIndex = index + sign; + const otherRoom = chats[otherIndex]; + if (!otherRoom) { + return; + } + if (otherRoom.separator) { + return this.findOtherRoom(otherIndex, sign); + } else { + return otherRoom; + } + } + + // Go to previous or next room based on sign (-1 or 1) + // It's used by iPad key commands + goOtherRoom = (sign) => { + if (!this.item) { + return; + } + // Don't run during search + const { search } = this.state; + if (search.length > 0) { + return; + } + + const { chats } = this.state; + const index = chats.findIndex(c => c.rid === this.item.rid); + const otherRoom = this.findOtherRoom(index, sign); + if (otherRoom) { + this.goRoom(otherRoom); + } + } + + handleCommands = ({ event }) => { + const { navigation, server } = this.props; + const { input } = event; + if (handleCommandShowPreferences(event)) { + navigation.toggleDrawer(); + } else if (handleCommandSearching(event)) { + this.scroll.scrollToOffset({ animated: true, offset: 0 }); + this.inputRef.focus(); + } else if (handleCommandSelectRoom(event)) { + this.goRoomByIndex(input); + } else if (handleCommandPreviousRoom(event)) { + this.goOtherRoom(-1); + } else if (handleCommandNextRoom(event)) { + this.goOtherRoom(1); + } else if (handleCommandShowNewMessage(event)) { + navigation.navigate('NewMessageView', { onPressItem: this._onPressItem }); + } else if (handleCommandAddNewServer(event)) { + navigation.navigate('OnboardingView', { previousServer: server }); + } + }; + getScrollRef = ref => (this.scroll = ref); renderListHeader = () => { @@ -571,6 +682,7 @@ class RoomsListView extends React.Component { const { sortBy } = this.props; return ( <ListHeader + inputRef={(ref) => { this.inputRef = ref; }} searchLength={search.length} sortBy={sortBy} onChangeSearchText={this.search} @@ -587,20 +699,28 @@ class RoomsListView extends React.Component { }; renderItem = ({ item }) => { + if (item.separator) { + return this.renderSectionHeader(item.rid); + } + const { width } = this.state; const { userId, username, token, baseUrl, - StoreLastMessage + StoreLastMessage, + theme, + split } = this.props; const id = item.rid.replace(userId, '').trim(); return ( <RoomItem + theme={theme} alert={item.alert} unread={item.unread} + hideUnreadStatus={item.hideUnreadStatus} userMentions={item.userMentions} isRead={this.getIsRead(item)} favorite={item.f} @@ -620,7 +740,7 @@ class RoomsListView extends React.Component { showLastMessage={StoreLastMessage} onPress={() => this._onPressItem(item)} testID={`rooms-list-view-item-${ item.name }`} - width={width} + width={split ? MAX_SIDEBAR_WIDTH : width} toggleFav={this.toggleFav} toggleRead={this.toggleRead} hideChannel={this.hideChannel} @@ -628,135 +748,39 @@ class RoomsListView extends React.Component { ); }; - renderSectionHeader = header => ( - <View style={styles.groupTitleContainer}> - <Text style={styles.groupTitle}>{I18n.t(header)}</Text> - </View> - ); - - renderSection = (data, header) => { - const { showUnread, showFavorites, groupByType } = this.props; - - if (header === 'Unread' && !showUnread) { - return null; - } else if (header === 'Favorites' && !showFavorites) { - return null; - } else if ( - [ - 'Discussions', - 'Channels', - 'Direct_Messages', - 'Private_Groups' - ].includes(header) - && !groupByType - ) { - return null; - } else if (header === 'Chats' && groupByType) { - return null; - } - if (data && data.length > 0) { - return ( - <FlatList - data={data} - extraData={data} - keyExtractor={keyExtractor} - style={styles.list} - renderItem={this.renderItem} - ListHeaderComponent={() => this.renderSectionHeader(header)} - getItemLayout={getItemLayout} - enableEmptySections - removeClippedSubviews={isIOS} - keyboardShouldPersistTaps='always' - initialNumToRender={12} - windowSize={7} - /> - ); - } - return null; - }; - - renderList = () => { - const { - search, - chats, - unread, - favorites, - discussions, - channels, - direct, - privateGroup - } = this.state; - - if (search.length > 0) { - return ( - <FlatList - data={search} - extraData={search} - keyExtractor={keyExtractor} - style={styles.list} - renderItem={this.renderItem} - getItemLayout={getItemLayout} - enableEmptySections - removeClippedSubviews={isIOS} - keyboardShouldPersistTaps='always' - initialNumToRender={12} - windowSize={7} - /> - ); - } - + renderSectionHeader = (header) => { + const { theme } = this.props; return ( - <View style={styles.container}> - {this.renderSection(unread, 'Unread')} - {this.renderSection(favorites, 'Favorites')} - {this.renderSection(discussions, 'Discussions')} - {this.renderSection(channels, 'Channels')} - {this.renderSection(direct, 'Direct_Messages')} - {this.renderSection(privateGroup, 'Private_Groups')} - {this.renderSection(chats, 'Chats')} + <View style={[styles.groupTitleContainer, { backgroundColor: themes[theme].backgroundColor }]}> + <Text style={[styles.groupTitle, { color: themes[theme].controlText }]}>{I18n.t(header)}</Text> </View> ); }; renderScroll = () => { - const { loading } = this.state; + const { loading, chats, search } = this.state; + const { theme } = this.props; if (loading) { - return <ActivityIndicator style={styles.loading} />; - } - - const { showUnread, showFavorites, groupByType } = this.props; - if (!(showUnread || showFavorites || groupByType)) { - const { chats, search } = this.state; - return ( - <FlatList - ref={this.getScrollRef} - data={search.length ? search : chats} - extraData={search.length ? search : chats} - contentOffset={isIOS ? { x: 0, y: SCROLL_OFFSET } : {}} - keyExtractor={keyExtractor} - style={styles.list} - renderItem={this.renderItem} - ListHeaderComponent={this.renderListHeader} - getItemLayout={getItemLayout} - removeClippedSubviews={isIOS} - keyboardShouldPersistTaps='always' - initialNumToRender={9} - windowSize={9} - /> - ); + return <ActivityIndicator theme={theme} />; } return ( - <ScrollView + <FlatList ref={this.getScrollRef} + data={search.length ? search : chats} + extraData={search.length ? search : chats} contentOffset={isIOS ? { x: 0, y: SCROLL_OFFSET } : {}} + keyExtractor={keyExtractor} + style={[styles.list, { backgroundColor: themes[theme].backgroundColor }]} + renderItem={this.renderItem} + ListHeaderComponent={this.renderListHeader} + getItemLayout={getItemLayout} + removeClippedSubviews={isIOS} keyboardShouldPersistTaps='always' - testID='rooms-list-view-list' - > - {this.renderListHeader()} - {this.renderList()} - </ScrollView> + initialNumToRender={INITIAL_NUM_TO_RENDER} + windowSize={9} + /> ); }; @@ -768,16 +792,17 @@ class RoomsListView extends React.Component { showFavorites, showUnread, showServerDropdown, - showSortDropdown + showSortDropdown, + theme } = this.props; return ( <SafeAreaView - style={styles.container} + style={[styles.container, { backgroundColor: themes[theme].backgroundColor }]} testID='rooms-list-view' forceInset={{ vertical: 'never' }} > - <StatusBar /> + <StatusBar theme={theme} /> {this.renderScroll()} {showSortDropdown ? ( <SortDropdown @@ -819,7 +844,8 @@ const mapDispatchToProps = dispatch => ({ closeSearchHeader: () => dispatch(closeSearchHeaderAction()), appStart: () => dispatch(appStartAction()), roomsRequest: () => dispatch(roomsRequestAction()), - selectServerRequest: server => dispatch(selectServerRequestAction(server)) + selectServerRequest: server => dispatch(selectServerRequestAction(server)), + closeServerDropdown: () => dispatch(closeServerDropdownAction()) }); -export default connect(mapStateToProps, mapDispatchToProps)(RoomsListView); +export default connect(mapStateToProps, mapDispatchToProps)(withTheme(withSplit(RoomsListView))); diff --git a/app/views/RoomsListView/styles.js b/app/views/RoomsListView/styles.js index 0c19c11ee4..9deb03dc12 100644 --- a/app/views/RoomsListView/styles.js +++ b/app/views/RoomsListView/styles.js @@ -1,34 +1,18 @@ import { StyleSheet } from 'react-native'; -import { isIOS } from '../../utils/deviceInfo'; -import { - COLOR_SEPARATOR, COLOR_TEXT, COLOR_PRIMARY, COLOR_WHITE, COLOR_TEXT_DESCRIPTION -} from '../../constants/colors'; import sharedStyles from '../Styles'; export default StyleSheet.create({ container: { - flex: 1, - backgroundColor: isIOS ? COLOR_WHITE : '#E1E5E8' + flex: 1 }, list: { - width: '100%', - backgroundColor: COLOR_WHITE - }, - actionButtonIcon: { - fontSize: 20, - height: 22, - color: 'white' - }, - loading: { - flex: 1 + width: '100%' }, dropdownContainerHeader: { height: 41, borderBottomWidth: StyleSheet.hairlineWidth, - borderColor: COLOR_SEPARATOR, alignItems: 'center', - backgroundColor: isIOS ? COLOR_WHITE : '#54585E', flexDirection: 'row' }, sortToggleContainerClose: { @@ -37,17 +21,16 @@ export default StyleSheet.create({ width: '100%' }, sortToggleText: { - fontSize: 15, + fontSize: 16, flex: 1, marginLeft: 15, - ...sharedStyles.textColorDescription, ...sharedStyles.textRegular }, dropdownContainer: { - backgroundColor: COLOR_WHITE, width: '100%', position: 'absolute', - top: 0 + top: 0, + borderBottomWidth: StyleSheet.hairlineWidth }, sortItemButton: { height: 57, @@ -60,51 +43,43 @@ export default StyleSheet.create({ sortItemText: { fontSize: 18, flex: 1, - ...sharedStyles.textColorNormal, ...sharedStyles.textRegular }, backdrop: { - ...StyleSheet.absoluteFill, - backgroundColor: '#000000' + ...StyleSheet.absoluteFill }, sortSeparator: { height: StyleSheet.hairlineWidth, - backgroundColor: COLOR_SEPARATOR, marginHorizontal: 15, flex: 1 }, sortIcon: { width: 22, height: 22, - marginHorizontal: 15, - ...sharedStyles.textColorDescription + marginHorizontal: 15 }, groupTitleContainer: { paddingHorizontal: 15, paddingTop: 17, - paddingBottom: 10, - backgroundColor: isIOS ? COLOR_WHITE : '#9ea2a8' + paddingBottom: 10 }, groupTitle: { - color: isIOS ? COLOR_TEXT : '#54585E', - fontSize: isIOS ? 22 : 15, + fontSize: 16, letterSpacing: 0.27, flex: 1, - lineHeight: isIOS ? 41 : 24, + lineHeight: 24, ...sharedStyles.textBold }, serverHeader: { justifyContent: 'space-between' }, serverHeaderText: { - fontSize: 15, + fontSize: 16, marginLeft: 15, - ...sharedStyles.textColorDescription, ...sharedStyles.textRegular }, serverHeaderAdd: { - color: isIOS ? COLOR_PRIMARY : COLOR_WHITE, - fontSize: 15, + fontSize: 16, marginRight: 15, paddingVertical: 10, ...sharedStyles.textRegular @@ -114,7 +89,8 @@ export default StyleSheet.create({ }, serverItemContainer: { flexDirection: 'row', - alignItems: 'center' + alignItems: 'center', + height: 68 }, serverIcon: { width: 42, @@ -131,33 +107,24 @@ export default StyleSheet.create({ }, serverName: { fontSize: 18, - ...sharedStyles.textColorNormal, ...sharedStyles.textSemibold }, serverUrl: { - fontSize: 15, - ...sharedStyles.textColorDescription, + fontSize: 16, ...sharedStyles.textRegular }, - checkIcon: { - marginHorizontal: 15, - color: COLOR_PRIMARY - }, serverSeparator: { height: StyleSheet.hairlineWidth, - backgroundColor: COLOR_SEPARATOR, marginLeft: 72 }, directoryIcon: { width: 22, height: 22, - marginHorizontal: 15, - color: isIOS ? COLOR_PRIMARY : COLOR_TEXT_DESCRIPTION + marginHorizontal: 15 }, directoryText: { - fontSize: 15, + fontSize: 16, flex: 1, - color: isIOS ? COLOR_PRIMARY : COLOR_TEXT_DESCRIPTION, ...sharedStyles.textRegular } }); diff --git a/app/views/SearchMessagesView/index.js b/app/views/SearchMessagesView/index.js index 5d7f33d0f1..1a50e34664 100644 --- a/app/views/SearchMessagesView/index.js +++ b/app/views/SearchMessagesView/index.js @@ -6,7 +6,7 @@ import { SafeAreaView } from 'react-navigation'; import equal from 'deep-equal'; import RCTextInput from '../../containers/TextInput'; -import RCActivityIndicator from '../../containers/ActivityIndicator'; +import ActivityIndicator from '../../containers/ActivityIndicator'; import styles from './styles'; import Markdown from '../../containers/markdown'; import debounce from '../../utils/debounce'; @@ -16,17 +16,22 @@ import scrollPersistTaps from '../../utils/scrollPersistTaps'; import I18n from '../../i18n'; import StatusBar from '../../containers/StatusBar'; import log from '../../utils/log'; +import { themes } from '../../constants/colors'; +import { withTheme } from '../../theme'; +import { themedHeader } from '../../utils/navigation'; class SearchMessagesView extends React.Component { - static navigationOptions = { - title: I18n.t('Search') - } + static navigationOptions = ({ screenProps }) => ({ + title: I18n.t('Search'), + ...themedHeader(screenProps.theme) + }) static propTypes = { navigation: PropTypes.object, user: PropTypes.object, baseUrl: PropTypes.string, - customEmojis: PropTypes.object + customEmojis: PropTypes.object, + theme: PropTypes.string } constructor(props) { @@ -41,6 +46,10 @@ class SearchMessagesView extends React.Component { shouldComponentUpdate(nextProps, nextState) { const { loading, searchText, messages } = this.state; + const { theme } = this.props; + if (nextProps.theme !== theme) { + return true; + } if (nextState.loading !== loading) { return true; } @@ -84,14 +93,17 @@ class SearchMessagesView extends React.Component { return null; } - renderEmpty = () => ( - <View style={styles.listEmptyContainer}> - <Text style={styles.noDataFound}>{I18n.t('No_results_found')}</Text> - </View> - ) + renderEmpty = () => { + const { theme } = this.props; + return ( + <View style={[styles.listEmptyContainer, { backgroundColor: themes[theme].backgroundColor }]}> + <Text style={[styles.noDataFound, { color: themes[theme].titleText }]}>{I18n.t('No_results_found')}</Text> + </View> + ); + } renderItem = ({ item }) => { - const { user, baseUrl } = this.props; + const { user, baseUrl, theme } = this.props; return ( <Message baseUrl={baseUrl} @@ -105,12 +117,14 @@ class SearchMessagesView extends React.Component { isHeader onOpenFileModal={() => {}} getCustomEmoji={this.getCustomEmoji} + theme={theme} /> ); } renderList = () => { const { messages, loading, searchText } = this.state; + const { theme } = this.props; if (!loading && messages.length === 0 && searchText.length) { return this.renderEmpty(); @@ -120,19 +134,20 @@ class SearchMessagesView extends React.Component { <FlatList data={messages} renderItem={this.renderItem} - style={styles.list} + style={[styles.list, { backgroundColor: themes[theme].backgroundColor }]} keyExtractor={item => item._id} onEndReached={this.load} - ListFooterComponent={loading ? <RCActivityIndicator /> : null} + ListFooterComponent={loading ? <ActivityIndicator theme={theme} /> : null} {...scrollPersistTaps} /> ); } render() { + const { theme } = this.props; return ( - <SafeAreaView style={styles.container} testID='search-messages-view' forceInset={{ vertical: 'never' }}> - <StatusBar /> + <SafeAreaView style={[styles.container, { backgroundColor: themes[theme].backgroundColor }]} testID='search-messages-view' forceInset={{ vertical: 'never' }}> + <StatusBar theme={theme} /> <View style={styles.searchContainer}> <RCTextInput autoFocus @@ -140,9 +155,10 @@ class SearchMessagesView extends React.Component { onChangeText={this.search} placeholder={I18n.t('Search_Messages')} testID='search-message-view-input' + theme={theme} /> - <Markdown msg={I18n.t('You_can_search_using_RegExp_eg')} username='' baseUrl='' /> - <View style={styles.divider} /> + <Markdown msg={I18n.t('You_can_search_using_RegExp_eg')} username='' baseUrl='' theme={theme} /> + <View style={[styles.divider, { backgroundColor: themes[theme].separatorColor }]} /> </View> {this.renderList()} </SafeAreaView> @@ -160,4 +176,4 @@ const mapStateToProps = state => ({ customEmojis: state.customEmojis }); -export default connect(mapStateToProps)(SearchMessagesView); +export default connect(mapStateToProps)(withTheme(SearchMessagesView)); diff --git a/app/views/SearchMessagesView/styles.js b/app/views/SearchMessagesView/styles.js index 620ec0af17..7c5cdd82c7 100644 --- a/app/views/SearchMessagesView/styles.js +++ b/app/views/SearchMessagesView/styles.js @@ -1,36 +1,30 @@ import { StyleSheet } from 'react-native'; -import { COLOR_SEPARATOR, COLOR_WHITE } from '../../constants/colors'; import sharedStyles from '../Styles'; export default StyleSheet.create({ container: { - flex: 1, - backgroundColor: COLOR_WHITE + flex: 1 }, searchContainer: { padding: 20, paddingBottom: 0 }, list: { - flex: 1, - backgroundColor: COLOR_WHITE + flex: 1 }, divider: { width: '100%', height: StyleSheet.hairlineWidth, - backgroundColor: COLOR_SEPARATOR, marginVertical: 20 }, listEmptyContainer: { flex: 1, alignItems: 'center', - justifyContent: 'flex-start', - backgroundColor: COLOR_WHITE + justifyContent: 'flex-start' }, noDataFound: { fontSize: 14, - ...sharedStyles.textRegular, - ...sharedStyles.textColorNormal + ...sharedStyles.textRegular } }); diff --git a/app/views/SelectServerView.js b/app/views/SelectServerView.js index 29d59b1b60..2016429058 100644 --- a/app/views/SelectServerView.js +++ b/app/views/SelectServerView.js @@ -8,19 +8,20 @@ import { SafeAreaView } from 'react-navigation'; import I18n from '../i18n'; import StatusBar from '../containers/StatusBar'; -import { COLOR_BACKGROUND_CONTAINER } from '../constants/colors'; +import { themes } from '../constants/colors'; import Navigation from '../lib/ShareNavigation'; import ServerItem, { ROW_HEIGHT } from '../presentation/ServerItem'; import sharedStyles from './Styles'; import RocketChat from '../lib/rocketchat'; +import { withTheme } from '../theme'; +import { themedHeader } from '../utils/navigation'; const getItemLayout = (data, index) => ({ length: ROW_HEIGHT, offset: ROW_HEIGHT * index, index }); const keyExtractor = item => item.id; const styles = StyleSheet.create({ container: { - flex: 1, - backgroundColor: COLOR_BACKGROUND_CONTAINER + flex: 1 }, list: { marginVertical: 32, @@ -33,13 +34,15 @@ const styles = StyleSheet.create({ }); class SelectServerView extends React.Component { - static navigationOptions = () => ({ + static navigationOptions = ({ screenProps }) => ({ + ...themedHeader(screenProps.theme), title: I18n.t('Select_Server') }) static propTypes = { server: PropTypes.string, - navigation: PropTypes.object + navigation: PropTypes.object, + theme: PropTypes.string } constructor(props) { @@ -64,33 +67,39 @@ class SelectServerView extends React.Component { } renderItem = ({ item }) => { - const { server } = this.props; + const { server, theme } = this.props; return ( <ServerItem server={server} onPress={() => this.select(item.id)} item={item} hasCheck + theme={theme} /> ); } - renderSeparator = () => <View style={styles.separator} />; + renderSeparator = () => { + const { theme } = this.props; + return <View style={[styles.separator, { borderColor: themes[theme].separatorColor }]} />; + } render() { const { servers } = this.state; + const { theme } = this.props; return ( <SafeAreaView - style={styles.container} + style={[styles.container, { backgroundColor: themes[theme].auxiliaryBackground }]} forceInset={{ vertical: 'never' }} > - <StatusBar /> - <View style={styles.list}> + <StatusBar theme={theme} /> + <View style={[styles.list, { borderColor: themes[theme].separatorColor }]}> <FlatList data={servers} keyExtractor={keyExtractor} renderItem={this.renderItem} getItemLayout={getItemLayout} + contentContainerStyle={{ backgroundColor: themes[theme].backgroundColor }} ItemSeparatorComponent={this.renderSeparator} enableEmptySections removeClippedSubviews @@ -108,4 +117,4 @@ const mapStateToProps = (({ share }) => ({ server: share.server })); -export default connect(mapStateToProps)(SelectServerView); +export default connect(mapStateToProps)(withTheme(SelectServerView)); diff --git a/app/views/SelectedUsersView.js b/app/views/SelectedUsersView.js index b9209f7d7c..82055075d3 100644 --- a/app/views/SelectedUsersView.js +++ b/app/views/SelectedUsersView.js @@ -17,21 +17,18 @@ import Loading from '../containers/Loading'; import debounce from '../utils/debounce'; import I18n from '../i18n'; import log from '../utils/log'; -import { isIOS } from '../utils/deviceInfo'; import SearchBox from '../containers/SearchBox'; import sharedStyles from './Styles'; import { Item, CustomHeaderButtons } from '../containers/HeaderButton'; import StatusBar from '../containers/StatusBar'; -import { COLOR_WHITE } from '../constants/colors'; +import { themes } from '../constants/colors'; import { animateNextTransition } from '../utils/layoutAnimation'; +import { withTheme } from '../theme'; +import { themedHeader } from '../utils/navigation'; const styles = StyleSheet.create({ safeAreaView: { - flex: 1, - backgroundColor: isIOS ? '#F7F8FA' : '#E1E5E8' - }, - header: { - backgroundColor: COLOR_WHITE + flex: 1 }, separator: { marginLeft: 60 @@ -39,10 +36,11 @@ const styles = StyleSheet.create({ }); class SelectedUsersView extends React.Component { - static navigationOptions = ({ navigation }) => { + static navigationOptions = ({ navigation, screenProps }) => { const title = navigation.getParam('title'); const nextAction = navigation.getParam('nextAction', () => {}); return { + ...themedHeader(screenProps.theme), title, headerRight: ( <CustomHeaderButtons> @@ -64,7 +62,8 @@ class SelectedUsersView extends React.Component { user: PropTypes.shape({ id: PropTypes.string, token: PropTypes.string - }) + }), + theme: PropTypes.string }; constructor(props) { @@ -83,7 +82,10 @@ class SelectedUsersView extends React.Component { shouldComponentUpdate(nextProps, nextState) { const { search, chats } = this.state; - const { users, loading } = this.props; + const { users, loading, theme } = this.props; + if (nextProps.theme !== theme) { + return true; + } if (nextProps.loading !== loading) { return true; } @@ -186,15 +188,18 @@ class SelectedUsersView extends React.Component { _onPressSelectedItem = item => this.toggleUser(item); - renderHeader = () => ( - <View style={styles.header}> - <SearchBox onChangeText={text => this.onSearchChangeText(text)} testID='select-users-view-search' /> - {this.renderSelected()} - </View> - ) + renderHeader = () => { + const { theme } = this.props; + return ( + <View style={{ backgroundColor: themes[theme].backgroundColor }}> + <SearchBox onChangeText={text => this.onSearchChangeText(text)} testID='select-users-view-search' /> + {this.renderSelected()} + </View> + ); + } renderSelected = () => { - const { users } = this.props; + const { users, theme } = this.props; if (users.length === 0) { return null; @@ -203,7 +208,7 @@ class SelectedUsersView extends React.Component { <FlatList data={users} keyExtractor={item => item._id} - style={[styles.list, sharedStyles.separatorTop]} + style={[sharedStyles.separatorTop, { borderColor: themes[theme].separatorColor }]} contentContainerStyle={{ marginVertical: 5 }} renderItem={this.renderSelectedItem} enableEmptySections @@ -214,7 +219,7 @@ class SelectedUsersView extends React.Component { } renderSelectedItem = ({ item }) => { - const { baseUrl, user } = this.props; + const { baseUrl, user, theme } = this.props; return ( <UserItem name={item.fname} @@ -224,21 +229,25 @@ class SelectedUsersView extends React.Component { baseUrl={baseUrl} style={{ paddingRight: 15 }} user={user} + theme={theme} /> ); } - renderSeparator = () => <View style={[sharedStyles.separator, styles.separator]} /> + renderSeparator = () => { + const { theme } = this.props; + return <View style={[sharedStyles.separator, styles.separator, { backgroundColor: themes[theme].separatorColor }]} />; + } renderItem = ({ item, index }) => { const { search, chats } = this.state; - const { baseUrl, user } = this.props; + const { baseUrl, user, theme } = this.props; const name = item.search ? item.name : item.fname; const username = item.search ? item.username : item.name; - let style = {}; + let style = { borderColor: themes[theme].separatorColor }; if (index === 0) { - style = { ...sharedStyles.separatorTop }; + style = { ...style, ...sharedStyles.separatorTop }; } if (search.length > 0 && index === search.length - 1) { style = { ...style, ...sharedStyles.separatorBottom }; @@ -256,12 +265,14 @@ class SelectedUsersView extends React.Component { baseUrl={baseUrl} style={style} user={user} + theme={theme} /> ); } renderList = () => { const { search, chats } = this.state; + const { theme } = this.props; return ( <FlatList data={search.length > 0 ? search : chats} @@ -270,6 +281,7 @@ class SelectedUsersView extends React.Component { renderItem={this.renderItem} ItemSeparatorComponent={this.renderSeparator} ListHeaderComponent={this.renderHeader} + contentContainerStyle={{ backgroundColor: themes[theme].backgroundColor }} enableEmptySections keyboardShouldPersistTaps='always' /> @@ -277,10 +289,14 @@ class SelectedUsersView extends React.Component { } render = () => { - const { loading } = this.props; + const { loading, theme } = this.props; return ( - <SafeAreaView style={styles.safeAreaView} testID='select-users-view' forceInset={{ vertical: 'never' }}> - <StatusBar /> + <SafeAreaView + style={[styles.safeAreaView, { backgroundColor: themes[theme].auxiliaryBackground }]} + forceInset={{ vertical: 'never' }} + testID='select-users-view' + > + <StatusBar theme={theme} /> {this.renderList()} <Loading visible={loading} /> </SafeAreaView> @@ -305,4 +321,4 @@ const mapDispatchToProps = dispatch => ({ setLoadingInvite: loading => dispatch(setLoadingAction(loading)) }); -export default connect(mapStateToProps, mapDispatchToProps)(SelectedUsersView); +export default connect(mapStateToProps, mapDispatchToProps)(withTheme(SelectedUsersView)); diff --git a/app/views/SetUsernameView.js b/app/views/SetUsernameView.js index f7122f4667..4c3c37abbb 100644 --- a/app/views/SetUsernameView.js +++ b/app/views/SetUsernameView.js @@ -17,6 +17,10 @@ import I18n from '../i18n'; import RocketChat from '../lib/rocketchat'; import StatusBar from '../containers/StatusBar'; import log from '../utils/log'; +import { themedHeader } from '../utils/navigation'; +import { withTheme } from '../theme'; +import { themes } from '../constants/colors'; +import { isTablet } from '../utils/deviceInfo'; const styles = StyleSheet.create({ loginTitle: { @@ -26,9 +30,10 @@ const styles = StyleSheet.create({ }); class SetUsernameView extends React.Component { - static navigationOptions = ({ navigation }) => { + static navigationOptions = ({ navigation, screenProps }) => { const title = navigation.getParam('title'); return { + ...themedHeader(screenProps.theme), title }; } @@ -38,7 +43,8 @@ class SetUsernameView extends React.Component { server: PropTypes.string, userId: PropTypes.string, loginRequest: PropTypes.func, - token: PropTypes.string + token: PropTypes.string, + theme: PropTypes.string } constructor(props) { @@ -49,7 +55,9 @@ class SetUsernameView extends React.Component { }; const { server } = this.props; props.navigation.setParams({ title: server }); - Orientation.lockToPortrait(); + if (!isTablet) { + Orientation.lockToPortrait(); + } } async componentDidMount() { @@ -61,6 +69,10 @@ class SetUsernameView extends React.Component { shouldComponentUpdate(nextProps, nextState) { const { username, saving } = this.state; + const { theme } = this.props; + if (nextProps.theme !== theme) { + return true; + } if (nextState.username !== username) { return true; } @@ -90,13 +102,34 @@ class SetUsernameView extends React.Component { render() { const { username, saving } = this.state; + const { theme } = this.props; return ( - <KeyboardView contentContainerStyle={sharedStyles.container}> - <StatusBar /> + <KeyboardView + style={{ backgroundColor: themes[theme].auxiliaryBackground }} + contentContainerStyle={sharedStyles.container} + > + <StatusBar theme={theme} /> <ScrollView {...scrollPersistTaps} contentContainerStyle={sharedStyles.containerScrollView}> <SafeAreaView style={sharedStyles.container} testID='set-username-view' forceInset={{ vertical: 'never' }}> - <Text style={[sharedStyles.loginTitle, sharedStyles.textBold, styles.loginTitle]}>{I18n.t('Username')}</Text> - <Text style={[sharedStyles.loginSubtitle, sharedStyles.textRegular]}>{I18n.t('Set_username_subtitle')}</Text> + <Text + style={[ + sharedStyles.loginTitle, + sharedStyles.textBold, + styles.loginTitle, + { color: themes[theme].titleText } + ]} + > + {I18n.t('Username')} + </Text> + <Text + style={[ + sharedStyles.loginSubtitle, + sharedStyles.textRegular, + { color: themes[theme].titleText } + ]} + > + {I18n.t('Set_username_subtitle')} + </Text> <TextInput autoFocus placeholder={I18n.t('Username')} @@ -108,6 +141,7 @@ class SetUsernameView extends React.Component { testID='set-username-view-input' clearButtonMode='while-editing' containerStyle={sharedStyles.inputLastChild} + theme={theme} /> <Button title={I18n.t('Register')} @@ -116,6 +150,7 @@ class SetUsernameView extends React.Component { testID='set-username-view-submit' disabled={!username} loading={saving} + theme={theme} /> </SafeAreaView> </ScrollView> @@ -133,4 +168,4 @@ const mapDispatchToProps = dispatch => ({ loginRequest: params => dispatch(loginRequestAction(params)) }); -export default connect(mapStateToProps, mapDispatchToProps)(SetUsernameView); +export default connect(mapStateToProps, mapDispatchToProps)(withTheme(SetUsernameView)); diff --git a/app/views/SettingsView/index.js b/app/views/SettingsView/index.js index a21fb545ea..b4cf64ee6a 100644 --- a/app/views/SettingsView/index.js +++ b/app/views/SettingsView/index.js @@ -5,17 +5,20 @@ import { import PropTypes from 'prop-types'; import { connect } from 'react-redux'; +import { logout as logoutAction } from '../../actions/login'; import { toggleMarkdown as toggleMarkdownAction } from '../../actions/markdown'; import { toggleCrashReport as toggleCrashReportAction } from '../../actions/crashReport'; -import { SWITCH_TRACK_COLOR } from '../../constants/colors'; -import { DrawerButton } from '../../containers/HeaderButton'; +import { SWITCH_TRACK_COLOR, themes } from '../../constants/colors'; +import { DrawerButton, CloseModalButton } from '../../containers/HeaderButton'; import StatusBar from '../../containers/StatusBar'; import ListItem from '../../containers/ListItem'; import { DisclosureImage } from '../../containers/DisclosureIndicator'; import Separator from '../../containers/Separator'; import I18n from '../../i18n'; import { MARKDOWN_KEY, CRASH_REPORT_KEY } from '../../lib/rocketchat'; -import { getReadableVersion, getDeviceModel, isAndroid } from '../../utils/deviceInfo'; +import { + getReadableVersion, getDeviceModel, isAndroid +} from '../../utils/deviceInfo'; import openLink from '../../utils/openLink'; import scrollPersistTaps from '../../utils/scrollPersistTaps'; import { showErrorAlert } from '../../utils/info'; @@ -23,20 +26,45 @@ import styles from './styles'; import sharedStyles from '../Styles'; import { loggerConfig, analytics } from '../../utils/log'; import { PLAY_MARKET_LINK, APP_STORE_LINK, LICENSE_LINK } from '../../constants/links'; +import { withTheme } from '../../theme'; +import { themedHeader } from '../../utils/navigation'; +import SidebarView from '../SidebarView'; +import { withSplit } from '../../split'; +import Navigation from '../../lib/Navigation'; -const SectionSeparator = React.memo(() => <View style={styles.sectionSeparatorBorder} />); -const ItemInfo = React.memo(({ info }) => ( - <View style={styles.infoContainer}> - <Text style={styles.infoText}>{info}</Text> +const SectionSeparator = React.memo(({ theme }) => ( + <View + style={[ + styles.sectionSeparatorBorder, + { + borderColor: themes[theme].separatorColor, + backgroundColor: themes[theme].auxiliaryBackground + } + ]} + /> +)); +SectionSeparator.propTypes = { + theme: PropTypes.string +}; + +const ItemInfo = React.memo(({ info, theme }) => ( + <View style={[styles.infoContainer, { backgroundColor: themes[theme].auxiliaryBackground }]}> + <Text style={[styles.infoText, { color: themes[theme].infoText }]}>{info}</Text> </View> )); ItemInfo.propTypes = { - info: PropTypes.string + info: PropTypes.string, + theme: PropTypes.string }; class SettingsView extends React.Component { - static navigationOptions = ({ navigation }) => ({ - headerLeft: <DrawerButton navigation={navigation} />, + static navigationOptions = ({ navigation, screenProps }) => ({ + ...themedHeader(screenProps.theme), + headerLeft: screenProps.split ? ( + <CloseModalButton navigation={navigation} testID='settings-view-close' /> + ) : ( + <DrawerButton navigation={navigation} /> + ), title: I18n.t('Settings') }); @@ -46,7 +74,18 @@ class SettingsView extends React.Component { useMarkdown: PropTypes.bool, allowCrashReport: PropTypes.bool, toggleMarkdown: PropTypes.func, - toggleCrashReport: PropTypes.func + toggleCrashReport: PropTypes.func, + theme: PropTypes.string, + split: PropTypes.bool, + logout: PropTypes.func.isRequired + } + + logout = () => { + const { logout, split } = this.props; + if (split) { + Navigation.navigate('RoomView'); + } + logout(); } toggleMarkdown = (value) => { @@ -92,9 +131,39 @@ class SettingsView extends React.Component { Share.share({ message: isAndroid ? PLAY_MARKET_LINK : APP_STORE_LINK }); } - onPressLicense = () => openLink(LICENSE_LINK) + changeTheme = () => { + const { navigation } = this.props; + navigation.navigate('ThemeView'); + } - renderDisclosure = () => <DisclosureImage /> + onPressLicense = () => { + const { theme } = this.props; + openLink(LICENSE_LINK, theme); + } + + renderDisclosure = () => { + const { theme } = this.props; + return <DisclosureImage theme={theme} />; + } + + renderLogout = () => { + const { theme } = this.props; + return ( + <> + <Separator theme={theme} /> + <ListItem + title={I18n.t('Logout')} + testID='settings-logout' + onPress={this.logout} + right={this.renderDisclosure} + color={themes[theme].dangerColor} + theme={theme} + /> + <Separator theme={theme} /> + <ItemInfo theme={theme} /> + </> + ); + } renderMarkdownSwitch = () => { const { useMarkdown } = this.props; @@ -119,49 +188,77 @@ class SettingsView extends React.Component { } render() { - const { server } = this.props; + const { server, split, theme } = this.props; return ( - <SafeAreaView style={sharedStyles.listSafeArea} testID='settings-view'> - <StatusBar /> + <SafeAreaView + style={[sharedStyles.container, { backgroundColor: themes[theme].auxiliaryBackground }]} + testID='settings-view' + > + <StatusBar theme={theme} /> <ScrollView {...scrollPersistTaps} - contentContainerStyle={[sharedStyles.listContentContainer, styles.listWithoutBorderBottom]} + contentContainerStyle={[ + sharedStyles.listContentContainer, + styles.listWithoutBorderBottom, + { borderColor: themes[theme].separatorColor } + ]} showsVerticalScrollIndicator={false} testID='settings-view-list' > + {split ? ( + <> + <SidebarView theme={theme} /> + <SectionSeparator theme={theme} /> + <ListItem + title={I18n.t('Profile')} + onPress={() => this.navigateToRoom('ProfileView')} + showActionIndicator + testID='settings-profile' + right={this.renderDisclosure} + theme={theme} + /> + <Separator theme={theme} /> + </> + ) : null} + <ListItem title={I18n.t('Contact_us')} onPress={this.sendEmail} showActionIndicator testID='settings-view-contact' right={this.renderDisclosure} + theme={theme} /> - <Separator /> + <Separator theme={theme} /> <ListItem title={I18n.t('Language')} onPress={() => this.navigateToRoom('LanguageView')} showActionIndicator testID='settings-view-language' right={this.renderDisclosure} + theme={theme} /> - <Separator /> + <Separator theme={theme} /> <ListItem title={I18n.t('Share_this_app')} showActionIndicator onPress={this.shareApp} testID='settings-view-share-app' right={this.renderDisclosure} + theme={theme} /> - <Separator /> + <Separator theme={theme} /> <ListItem title={I18n.t('Theme')} showActionIndicator - disabled + onPress={this.changeTheme} testID='settings-view-theme' + right={this.renderDisclosure} + theme={theme} /> - <Separator /> + <Separator theme={theme} /> - <SectionSeparator /> + <SectionSeparator theme={theme} /> <ListItem title={I18n.t('License')} @@ -169,35 +266,42 @@ class SettingsView extends React.Component { showActionIndicator testID='settings-view-license' right={this.renderDisclosure} + theme={theme} /> - <Separator /> - <ListItem title={I18n.t('Version_no', { version: getReadableVersion })} testID='settings-view-version' /> - <Separator /> + <Separator theme={theme} /> + <ListItem title={I18n.t('Version_no', { version: getReadableVersion })} testID='settings-view-version' theme={theme} /> + <Separator theme={theme} /> <ListItem title={I18n.t('Server_version', { version: server.version })} subtitle={`${ server.server.split('//')[1] }`} testID='settings-view-server-version' + theme={theme} /> - <SectionSeparator /> + <SectionSeparator theme={theme} /> <ListItem title={I18n.t('Enable_markdown')} testID='settings-view-markdown' right={() => this.renderMarkdownSwitch()} + theme={theme} /> - <SectionSeparator /> + <SectionSeparator theme={theme} /> <ListItem title={I18n.t('Send_crash_report')} testID='settings-view-crash-report' right={() => this.renderCrashReportSwitch()} + theme={theme} /> - <Separator /> + <Separator theme={theme} /> <ItemInfo info={I18n.t('Crash_report_disclaimer')} + theme={theme} /> + + { split ? this.renderLogout() : null } </ScrollView> </SafeAreaView> ); @@ -211,8 +315,9 @@ const mapStateToProps = state => ({ }); const mapDispatchToProps = dispatch => ({ + logout: () => dispatch(logoutAction()), toggleMarkdown: params => dispatch(toggleMarkdownAction(params)), toggleCrashReport: params => dispatch(toggleCrashReportAction(params)) }); -export default connect(mapStateToProps, mapDispatchToProps)(SettingsView); +export default connect(mapStateToProps, mapDispatchToProps)(withTheme(withSplit(SettingsView))); diff --git a/app/views/SettingsView/styles.js b/app/views/SettingsView/styles.js index 864d5c5d8e..64c393fe64 100644 --- a/app/views/SettingsView/styles.js +++ b/app/views/SettingsView/styles.js @@ -1,25 +1,21 @@ import { StyleSheet } from 'react-native'; -import { COLOR_BACKGROUND_CONTAINER } from '../../constants/colors'; import sharedStyles from '../Styles'; export default StyleSheet.create({ sectionSeparatorBorder: { ...sharedStyles.separatorVertical, - backgroundColor: COLOR_BACKGROUND_CONTAINER, - height: 10 + height: 36 }, listWithoutBorderBottom: { borderBottomWidth: 0 }, infoContainer: { padding: 15, - paddingBottom: 40, - backgroundColor: COLOR_BACKGROUND_CONTAINER + marginBottom: 40 }, infoText: { fontSize: 14, - ...sharedStyles.textColorNormal, ...sharedStyles.textRegular } }); diff --git a/app/views/ShareListView/Header/Header.android.js b/app/views/ShareListView/Header/Header.android.js index 55720d9200..a7fcd0351c 100644 --- a/app/views/ShareListView/Header/Header.android.js +++ b/app/views/ShareListView/Header/Header.android.js @@ -1,11 +1,10 @@ import React from 'react'; -import { - View, StyleSheet, Text, TextInput -} from 'react-native'; +import { View, StyleSheet, Text } from 'react-native'; import PropTypes from 'prop-types'; +import TextInput from '../../../presentation/TextInput'; import I18n from '../../../i18n'; -import { COLOR_WHITE, HEADER_TITLE } from '../../../constants/colors'; +import { themes } from '../../../constants/colors'; import sharedStyles from '../../Styles'; const styles = StyleSheet.create({ @@ -15,38 +14,39 @@ const styles = StyleSheet.create({ }, search: { fontSize: 20, - color: COLOR_WHITE, ...sharedStyles.textRegular, marginHorizontal: 14 }, title: { fontSize: 20, ...sharedStyles.textBold, - color: HEADER_TITLE, marginHorizontal: 16 } }); -const Header = React.memo(({ searching, onChangeSearchText }) => { +const Header = React.memo(({ searching, onChangeSearchText, theme }) => { + const titleColorStyle = { color: themes[theme].headerTintColor }; + const isLight = theme === 'light'; if (searching) { return ( <View style={styles.container}> <TextInput - style={styles.search} + style={[styles.search, isLight && titleColorStyle]} placeholder={I18n.t('Search')} - placeholderTextColor='rgba(255, 255, 255, 0.5)' onChangeText={onChangeSearchText} + theme={theme} autoFocus /> </View> ); } - return <Text style={styles.title}>{I18n.t('Send_to')}</Text>; + return <Text style={[styles.title, titleColorStyle]}>{I18n.t('Send_to')}</Text>; }); Header.propTypes = { searching: PropTypes.bool, - onChangeSearchText: PropTypes.func + onChangeSearchText: PropTypes.func, + theme: PropTypes.string }; export default Header; diff --git a/app/views/ShareListView/Header/Header.ios.js b/app/views/ShareListView/Header/Header.ios.js index d673488181..c539479145 100644 --- a/app/views/ShareListView/Header/Header.ios.js +++ b/app/views/ShareListView/Header/Header.ios.js @@ -5,21 +5,20 @@ import ShareExtension from 'rn-extensions-share'; import SearchBox from '../../../containers/SearchBox'; import { CloseShareExtensionButton } from '../../../containers/HeaderButton'; -import { HEADER_BACKGROUND } from '../../../constants/colors'; +import { themes } from '../../../constants/colors'; import sharedStyles from '../../Styles'; import { animateNextTransition } from '../../../utils/layoutAnimation'; const styles = StyleSheet.create({ container: { - backgroundColor: HEADER_BACKGROUND, flexDirection: 'row', ...sharedStyles.separatorBottom } }); const Header = React.memo(({ - searching, onChangeSearchText, initSearch, cancelSearch + searching, onChangeSearchText, initSearch, cancelSearch, theme }) => { const [text, setText] = useState(''); @@ -41,7 +40,15 @@ const Header = React.memo(({ }; return ( - <View style={styles.container}> + <View + style={[ + styles.container, + { + borderColor: themes[theme].separatorColor, + backgroundColor: themes[theme].headerBackground + } + ]} + > { !searching ? ( @@ -69,7 +76,8 @@ Header.propTypes = { searching: PropTypes.bool, onChangeSearchText: PropTypes.func, initSearch: PropTypes.func, - cancelSearch: PropTypes.func + cancelSearch: PropTypes.func, + theme: PropTypes.string }; export default Header; diff --git a/app/views/ShareListView/Header/index.js b/app/views/ShareListView/Header/index.js index 3cca590fa7..eff18acda4 100644 --- a/app/views/ShareListView/Header/index.js +++ b/app/views/ShareListView/Header/index.js @@ -4,7 +4,7 @@ import PropTypes from 'prop-types'; import Header from './Header'; const ShareListHeader = React.memo(({ - searching, initSearch, cancelSearch, search + searching, initSearch, cancelSearch, search, theme }) => { const onSearchChangeText = (text) => { search(text.trim()); @@ -12,6 +12,7 @@ const ShareListHeader = React.memo(({ return ( <Header + theme={theme} searching={searching} initSearch={initSearch} cancelSearch={cancelSearch} @@ -24,7 +25,8 @@ ShareListHeader.propTypes = { searching: PropTypes.bool, initSearch: PropTypes.func, cancelSearch: PropTypes.func, - search: PropTypes.func + search: PropTypes.func, + theme: PropTypes.string }; export default ShareListHeader; diff --git a/app/views/ShareListView/index.js b/app/views/ShareListView/index.js index f419ffc600..ee500231c0 100644 --- a/app/views/ShareListView/index.js +++ b/app/views/ShareListView/index.js @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { - View, Text, FlatList, ActivityIndicator, Keyboard, BackHandler + View, Text, FlatList, Keyboard, BackHandler } from 'react-native'; import { SafeAreaView } from 'react-navigation'; import ShareExtension from 'rn-extensions-share'; @@ -22,17 +22,21 @@ import DirectoryItem, { ROW_HEIGHT } from '../../presentation/DirectoryItem'; import ServerItem from '../../presentation/ServerItem'; import { CloseShareExtensionButton, CustomHeaderButtons, Item } from '../../containers/HeaderButton'; import ShareListHeader from './Header'; +import ActivityIndicator from '../../containers/ActivityIndicator'; import styles from './styles'; import StatusBar from '../../containers/StatusBar'; +import { themes } from '../../constants/colors'; import { animateNextTransition } from '../../utils/layoutAnimation'; +import { withTheme } from '../../theme'; +import { themedHeader } from '../../utils/navigation'; const LIMIT = 50; const getItemLayout = (data, index) => ({ length: ROW_HEIGHT, offset: ROW_HEIGHT * index, index }); const keyExtractor = item => item.rid; class ShareListView extends React.Component { - static navigationOptions = ({ navigation }) => { + static navigationOptions = ({ navigation, screenProps }) => { const searching = navigation.getParam('searching'); const initSearch = navigation.getParam('initSearch', () => {}); const cancelSearch = navigation.getParam('cancelSearch', () => {}); @@ -40,19 +44,21 @@ class ShareListView extends React.Component { if (isIOS) { return { + headerStyle: { backgroundColor: themes[screenProps.theme].headerBackground }, headerTitle: ( <ShareListHeader searching={searching} initSearch={initSearch} cancelSearch={cancelSearch} search={search} + theme={screenProps.theme} /> ) }; } return { - headerBackTitle: null, + ...themedHeader(screenProps.theme), headerLeft: searching ? ( <CustomHeaderButtons left> @@ -65,7 +71,7 @@ class ShareListView extends React.Component { testID='share-extension-close' /> ), - headerTitle: <ShareListHeader searching={searching} search={search} />, + headerTitle: <ShareListHeader searching={searching} search={search} theme={screenProps.theme} />, headerRight: ( searching ? null @@ -83,7 +89,8 @@ class ShareListView extends React.Component { server: PropTypes.string, baseUrl: PropTypes.string, token: PropTypes.string, - userId: PropTypes.string + userId: PropTypes.string, + theme: PropTypes.string } constructor(props) { @@ -160,10 +167,13 @@ class ShareListView extends React.Component { return true; } - const { server } = this.props; + const { server, theme } = this.props; if (server !== nextProps.server) { return true; } + if (theme !== nextProps.theme) { + return true; + } const { searchResults } = this.state; if (!isEqual(nextState.searchResults, searchResults)) { @@ -198,7 +208,13 @@ class ShareListView extends React.Component { const serversCollection = serversDB.collections.get('servers'); this.servers = await serversCollection.query().fetch(); this.chats = this.data.slice(0, LIMIT); - const serverInfo = await serversCollection.find(server); + let serverInfo = {}; + try { + serverInfo = await serversCollection.find(server); + } catch (error) { + // Do nothing + } + const canUploadFileResult = canUploadFile(fileInfo || fileData, serverInfo); this.internalSetState({ @@ -267,13 +283,14 @@ class ShareListView extends React.Component { renderSectionHeader = (header) => { const { searching } = this.state; + const { theme } = this.props; if (searching) { return null; } return ( - <View style={styles.headerContainer}> - <Text style={styles.headerText}> + <View style={[styles.headerContainer, { backgroundColor: themes[theme].auxiliaryBackground }]}> + <Text style={[styles.headerText, { color: themes[theme].titleText }]}> {I18n.t(header)} </Text> </View> @@ -281,11 +298,13 @@ class ShareListView extends React.Component { } renderItem = ({ item }) => { - const { userId, token, baseUrl } = this.props; + const { + userId, token, baseUrl, theme + } = this.props; return ( <DirectoryItem user={{ - userId, + id: userId, token }} title={this.getRoomTitle(item)} @@ -299,37 +318,56 @@ class ShareListView extends React.Component { type={item.t} onPress={() => this.shareMessage(item)} testID={`share-extension-item-${ item.name }`} + theme={theme} /> ); } - renderSeparator = () => <View style={styles.separator} />; + renderSeparator = () => { + const { theme } = this.props; + return <View style={[styles.separator, { borderColor: themes[theme].separatorColor }]} />; + } - renderBorderBottom = () => <View style={styles.borderBottom} />; + renderBorderBottom = () => { + const { theme } = this.props; + return <View style={[styles.borderBottom, { borderColor: themes[theme].separatorColor }]} />; + } renderSelectServer = () => { const { servers } = this.state; - const { server } = this.props; + const { server, theme } = this.props; const currentServer = servers.find(serverFiltered => serverFiltered.id === server); return currentServer ? ( <> {this.renderSectionHeader('Select_Server')} - <View style={styles.bordered}> + <View + style={[ + styles.bordered, + { + borderColor: themes[theme].separatorColor, + backgroundColor: themes[theme].auxiliaryBackground + } + ]} + > <ServerItem server={server} onPress={() => Navigation.navigate('SelectServerView', { servers: this.servers })} item={currentServer} + theme={theme} /> </View> </> ) : null; } - renderEmptyComponent = () => ( - <View style={[styles.container, styles.emptyContainer]}> - <Text style={styles.title}>{I18n.t('No_results_found')}</Text> - </View> - ); + renderEmptyComponent = () => { + const { theme } = this.props; + return ( + <View style={[styles.container, styles.emptyContainer, { backgroundColor: themes[theme].auxiliaryBackground }]}> + <Text style={[styles.title, { color: themes[theme].titleText }]}>{I18n.t('No_results_found')}</Text> + </View> + ); + } renderHeader = () => { const { searching } = this.state; @@ -352,22 +390,24 @@ class ShareListView extends React.Component { const { chats, mediaLoading, loading, searchResults, searching, searchText } = this.state; + const { theme } = this.props; if (mediaLoading || loading) { - return <ActivityIndicator style={styles.loading} />; + return <ActivityIndicator theme={theme} />; } return ( <FlatList data={searching ? searchResults : chats} keyExtractor={keyExtractor} - style={styles.flatlist} + style={[styles.flatlist, { backgroundColor: themes[theme].auxiliaryBackground }]} + contentContainerStyle={{ backgroundColor: themes[theme].backgroundColor }} renderItem={this.renderItem} getItemLayout={getItemLayout} ItemSeparatorComponent={this.renderSeparator} ListHeaderComponent={this.renderHeader} ListFooterComponent={!searching && this.renderBorderBottom} - ListHeaderComponentStyle={!searching ? styles.borderBottom : {}} + ListHeaderComponentStyle={!searching ? { ...styles.borderBottom, borderColor: themes[theme].separatorColor } : {}} ListEmptyComponent={searching && searchText ? this.renderEmptyComponent : null} enableEmptySections removeClippedSubviews @@ -382,13 +422,14 @@ class ShareListView extends React.Component { const { fileInfo: file, loading, searching, error } = this.state; + const { theme } = this.props; if (loading) { - return <ActivityIndicator style={styles.loading} />; + return <ActivityIndicator theme={theme} />; } return ( - <View style={styles.container}> + <View style={[styles.container, { backgroundColor: themes[theme].auxiliaryBackground }]}> { !searching ? ( <> @@ -397,10 +438,10 @@ class ShareListView extends React.Component { ) : null } - <View style={[styles.container, styles.centered]}> - <Text style={styles.title}>{I18n.t(error)}</Text> - <CustomIcon name='circle-cross' size={120} style={styles.errorIcon} /> - <Text style={styles.fileMime}>{ file.mime }</Text> + <View style={[styles.container, styles.centered, { backgroundColor: themes[theme].auxiliaryBackground }]}> + <Text style={[styles.title, { color: themes[theme].titleText }]}>{I18n.t(error)}</Text> + <CustomIcon name='circle-cross' size={120} color={themes[theme].dangerColor} /> + <Text style={[styles.fileMime, { color: themes[theme].titleText }]}>{ file.mime }</Text> </View> </View> ); @@ -408,9 +449,10 @@ class ShareListView extends React.Component { render() { const { showError } = this.state; + const { theme } = this.props; return ( - <SafeAreaView style={styles.container} forceInset={{ vertical: 'never' }}> - <StatusBar /> + <SafeAreaView style={[styles.container, { backgroundColor: themes[theme].auxiliaryBackground }]} forceInset={{ vertical: 'never' }}> + <StatusBar theme={theme} /> { showError ? this.renderError() : this.renderContent() } </SafeAreaView> ); @@ -424,4 +466,4 @@ const mapStateToProps = (({ share }) => ({ baseUrl: share ? share.server : '' })); -export default connect(mapStateToProps)(ShareListView); +export default connect(mapStateToProps)(withTheme(ShareListView)); diff --git a/app/views/ShareListView/styles.js b/app/views/ShareListView/styles.js index 63d7e39ff8..59cecb736c 100644 --- a/app/views/ShareListView/styles.js +++ b/app/views/ShareListView/styles.js @@ -2,14 +2,9 @@ import { StyleSheet } from 'react-native'; import { isIOS } from '../../utils/deviceInfo'; import sharedStyles from '../Styles'; -import { - COLOR_BACKGROUND_CONTAINER, COLOR_WHITE, COLOR_DANGER -} from '../../constants/colors'; - export default StyleSheet.create({ container: { - flex: 1, - backgroundColor: COLOR_BACKGROUND_CONTAINER + flex: 1 }, emptyContainer: { padding: 20, @@ -18,7 +13,6 @@ export default StyleSheet.create({ }, content: { flex: 1, - backgroundColor: isIOS ? COLOR_WHITE : '#E1E5E8', justifyContent: 'center', alignItems: 'center' }, @@ -28,8 +22,7 @@ export default StyleSheet.create({ }, flatlist: { marginTop: isIOS ? 6 : 0, // the height of the navigation bar with the searchbar is larger - width: '100%', - backgroundColor: COLOR_BACKGROUND_CONTAINER + width: '100%' }, bordered: { ...sharedStyles.separatorVertical @@ -39,12 +32,10 @@ export default StyleSheet.create({ }, headerContainer: { paddingHorizontal: 15, - backgroundColor: COLOR_BACKGROUND_CONTAINER, paddingBottom: 10, paddingTop: 17 }, headerText: { - ...sharedStyles.textColorNormal, ...sharedStyles.textRegular, fontSize: 17, letterSpacing: 0.27 @@ -53,14 +44,7 @@ export default StyleSheet.create({ ...sharedStyles.separatorBottom, marginLeft: 48 }, - loading: { - flex: 1 - }, - errorIcon: { - color: COLOR_DANGER - }, fileMime: { - ...sharedStyles.textColorNormal, ...sharedStyles.textBold, ...sharedStyles.textAlignCenter, fontSize: 20, @@ -68,7 +52,6 @@ export default StyleSheet.create({ }, title: { fontSize: 14, - ...sharedStyles.textColorTitle, ...sharedStyles.textBold } }); diff --git a/app/views/ShareView/Loading.js b/app/views/ShareView/Loading.js deleted file mode 100644 index 82c3e2a817..0000000000 --- a/app/views/ShareView/Loading.js +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -import { - StyleSheet, ActivityIndicator, View -} from 'react-native'; -import { COLOR_TEXT } from '../../constants/colors'; - -const styles = StyleSheet.create({ - container: { - height: '100%', - width: '100%', - position: 'absolute', - justifyContent: 'center', - alignItems: 'center' - } -}); - -const Loading = React.memo(() => ( - <View style={styles.container}> - <ActivityIndicator size='large' color={COLOR_TEXT} /> - </View> -)); - -export default Loading; diff --git a/app/views/ShareView/index.js b/app/views/ShareView/index.js index ee0857599d..5047e69260 100644 --- a/app/views/ShareView/index.js +++ b/app/views/ShareView/index.js @@ -1,29 +1,29 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { - View, Text, TextInput, Image -} from 'react-native'; +import { View, Text, Image } from 'react-native'; import { connect } from 'react-redux'; import ShareExtension from 'rn-extensions-share'; -import { - COLOR_TEXT_DESCRIPTION -} from '../../constants/colors'; +import { themes } from '../../constants/colors'; import I18n from '../../i18n'; import RocketChat from '../../lib/rocketchat'; import { CustomIcon } from '../../lib/Icons'; import log from '../../utils/log'; import styles from './styles'; -import Loading from './Loading'; +import TextInput from '../../containers/TextInput'; +import ActivityIndicator from '../../containers/ActivityIndicator'; import { CustomHeaderButtons, Item } from '../../containers/HeaderButton'; import { isReadOnly, isBlocked } from '../../utils/room'; +import { withTheme } from '../../theme'; +import { themedHeader } from '../../utils/navigation'; class ShareView extends React.Component { - static navigationOptions = ({ navigation }) => { + static navigationOptions = ({ navigation, screenProps }) => { const canSend = navigation.getParam('canSend', true); return ({ title: I18n.t('Share'), + ...themedHeader(screenProps.theme), headerRight: canSend ? ( @@ -42,6 +42,7 @@ class ShareView extends React.Component { static propTypes = { navigation: PropTypes.object, + theme: PropTypes.string, user: PropTypes.shape({ id: PropTypes.string.isRequired, username: PropTypes.string.isRequired, @@ -133,6 +134,7 @@ class ShareView extends React.Component { renderPreview = () => { const { fileInfo } = this.state; + const { theme } = this.props; const icon = fileInfo.mime.match(/image/) ? <Image source={{ isStatic: true, uri: fileInfo.path }} style={styles.mediaImage} /> @@ -143,11 +145,19 @@ class ShareView extends React.Component { ); return ( - <View style={styles.mediaContent}> + <View + style={[ + styles.mediaContent, + { + borderColor: themes[theme].separatorColor, + backgroundColor: themes[theme].auxiliaryBackground + } + ]} + > {icon} <View style={styles.mediaInfo}> - <Text style={styles.mediaText} numberOfLines={1}>{fileInfo.name}</Text> - <Text style={styles.mediaText}>{this.bytesToSize(fileInfo.size)}</Text> + <Text style={[styles.mediaText, { color: themes[theme].titleText }]} numberOfLines={1}>{fileInfo.name}</Text> + <Text style={[styles.mediaText, { color: themes[theme].titleText }]}>{this.bytesToSize(fileInfo.size)}</Text> </View> </View> ); @@ -155,28 +165,42 @@ class ShareView extends React.Component { renderMediaContent = () => { const { fileInfo, file } = this.state; + const { theme } = this.props; + const inputStyle = { + backgroundColor: themes[theme].focusedBackground, + borderColor: themes[theme].separatorColor + }; return fileInfo ? ( <View style={styles.mediaContainer}> {this.renderPreview()} <View style={styles.mediaInputContent}> <TextInput - style={[styles.mediaNameInput, styles.input]} + inputStyle={[ + styles.mediaNameInput, + styles.input, + styles.firstInput, + inputStyle + ]} placeholder={I18n.t('File_name')} onChangeText={name => this.setState({ file: { ...file, name } })} - underlineColorAndroid='transparent' defaultValue={file.name} - placeholderTextColor={COLOR_TEXT_DESCRIPTION} + containerStyle={styles.inputContainer} + theme={theme} /> <TextInput - style={[styles.mediaDescriptionInput, styles.input]} + inputStyle={[ + styles.mediaDescriptionInput, + styles.input, + inputStyle + ]} placeholder={I18n.t('File_description')} onChangeText={description => this.setState({ file: { ...file, description } })} - underlineColorAndroid='transparent' defaultValue={file.description} multiline textAlignVertical='top' - placeholderTextColor={COLOR_TEXT_DESCRIPTION} autoFocus + containerStyle={styles.inputContainer} + theme={theme} /> </View> </View> @@ -185,17 +209,25 @@ class ShareView extends React.Component { renderInput = () => { const { value } = this.state; + const { theme } = this.props; return ( <TextInput - style={[styles.input, styles.textInput]} + containerStyle={[styles.content, styles.inputContainer]} + inputStyle={[ + styles.input, + styles.textInput, + { + borderColor: themes[theme].separatorColor, + backgroundColor: themes[theme].focusedBackground + } + ]} placeholder='' onChangeText={handleText => this.setState({ value: handleText })} - underlineColorAndroid='transparent' defaultValue={value} multiline textAlignVertical='top' - placeholderTextColor={COLOR_TEXT_DESCRIPTION} autoFocus + theme={theme} /> ); } @@ -214,7 +246,7 @@ class ShareView extends React.Component { } render() { - const { user } = this.props; + const { user, theme } = this.props; const { username } = user; const { name, loading, isMedia, room @@ -225,17 +257,28 @@ class ShareView extends React.Component { } return ( - <View style={styles.container}> - <View style={isMedia ? styles.toContent : styles.toContentText}> + <View style={[styles.container, { backgroundColor: themes[theme].auxiliaryBackground }]}> + <View + style={[ + isMedia + ? styles.toContent + : styles.toContentText, + { + backgroundColor: isMedia + ? themes[theme].focusedBackground + : themes[theme].auxiliaryBackground + } + ]} + > <Text style={styles.text} numberOfLines={1}> - <Text style={styles.to}>{`${ I18n.t('To') }: `}</Text> - <Text style={styles.name}>{`${ name }`}</Text> + <Text style={[styles.to, { color: themes[theme].auxiliaryText }]}>{`${ I18n.t('To') }: `}</Text> + <Text style={[styles.name, { color: themes[theme].titleText }]}>{`${ name }`}</Text> </Text> </View> - <View style={styles.content}> + <View style={[styles.content, { backgroundColor: themes[theme].auxiliaryBackground }]}> {isMedia ? this.renderMediaContent() : this.renderInput()} </View> - { loading ? <Loading /> : null } + { loading ? <ActivityIndicator size='large' theme={theme} absolute /> : null } </View> ); } @@ -250,4 +293,4 @@ const mapStateToProps = (({ share }) => ({ baseUrl: share ? share.server : '' })); -export default connect(mapStateToProps)(ShareView); +export default connect(mapStateToProps)(withTheme(ShareView)); diff --git a/app/views/ShareView/styles.js b/app/views/ShareView/styles.js index a7c77fda2d..d4659d6056 100644 --- a/app/views/ShareView/styles.js +++ b/app/views/ShareView/styles.js @@ -1,14 +1,10 @@ import { StyleSheet } from 'react-native'; import sharedStyles from '../Styles'; -import { - COLOR_BACKGROUND_CONTAINER, COLOR_WHITE -} from '../../constants/colors'; export default StyleSheet.create({ container: { - flex: 1, - backgroundColor: COLOR_BACKGROUND_CONTAINER + flex: 1 }, centered: { justifyContent: 'center', @@ -17,54 +13,44 @@ export default StyleSheet.create({ title: { fontSize: 18, ...sharedStyles.textBold, - ...sharedStyles.textColorNormal, ...sharedStyles.textAlignCenter }, text: { paddingHorizontal: 16, paddingVertical: 8, - ...sharedStyles.textColorNormal, ...sharedStyles.textRegular }, to: { - ...sharedStyles.textColorDescription, ...sharedStyles.textRegular }, toContent: { - width: '100%', - backgroundColor: COLOR_WHITE + width: '100%' }, toContentText: { width: '100%', - backgroundColor: COLOR_BACKGROUND_CONTAINER, - ...sharedStyles.textColorNormal, ...sharedStyles.textRegular }, name: { - ...sharedStyles.textRegular, - ...sharedStyles.textColorTitle + ...sharedStyles.textRegular }, content: { - flex: 1, - backgroundColor: COLOR_WHITE + flex: 1 }, mediaContainer: { - flex: 1, - backgroundColor: COLOR_BACKGROUND_CONTAINER + flex: 1 }, mediaContent: { flexDirection: 'row', padding: 16, - backgroundColor: COLOR_BACKGROUND_CONTAINER, - alignItems: 'center' + alignItems: 'center', + ...sharedStyles.separatorTop }, mediaImage: { height: 64, width: 64 }, mediaIcon: { - fontSize: 64, - ...sharedStyles.textColorNormal + fontSize: 64 }, mediaIconContainer: { alignItems: 'center', @@ -76,40 +62,36 @@ export default StyleSheet.create({ }, mediaText: { fontSize: 16, - ...sharedStyles.textColorNormal, ...sharedStyles.textRegular }, mediaInputContent: { - width: '100%', - ...sharedStyles.separatorVertical, - backgroundColor: COLOR_WHITE + width: '100%' }, input: { fontSize: 16, - ...sharedStyles.textColorNormal, - ...sharedStyles.textRegular, - backgroundColor: COLOR_WHITE + ...sharedStyles.textRegular + }, + inputContainer: { + marginBottom: 0 + }, + firstInput: { + borderBottomWidth: 0 }, textInput: { - flex: 1, - paddingHorizontal: 16 + height: '100%' }, mediaNameInput: { - marginLeft: 16, + paddingLeft: 16, paddingRight: 16, - paddingVertical: 8, - backgroundColor: COLOR_WHITE, - ...sharedStyles.separatorBottom + paddingVertical: 8 }, mediaDescriptionInput: { - marginLeft: 16, + paddingLeft: 16, paddingRight: 16, - marginVertical: 8, - backgroundColor: COLOR_WHITE, + paddingVertical: 8, height: 100 }, send: { - ...sharedStyles.textColorHeaderBack, ...sharedStyles.textSemibold, fontSize: 16 } diff --git a/app/views/SidebarView/SidebarItem.js b/app/views/SidebarView/SidebarItem.js index e75ad98587..c0eadea63e 100644 --- a/app/views/SidebarView/SidebarItem.js +++ b/app/views/SidebarView/SidebarItem.js @@ -1,31 +1,31 @@ import React from 'react'; import { View, Text } from 'react-native'; import PropTypes from 'prop-types'; -import { RectButton } from 'react-native-gesture-handler'; import styles from './styles'; -import { COLOR_TEXT } from '../../constants/colors'; +import Touch from '../../utils/touch'; +import { themes } from '../../constants/colors'; +import { withTheme } from '../../theme'; const Item = React.memo(({ - left, text, onPress, testID, current + left, text, onPress, testID, current, theme }) => ( - <RectButton + <Touch key={testID} testID={testID} onPress={onPress} - underlayColor={COLOR_TEXT} - activeOpacity={0.1} - style={[styles.item, current && styles.itemCurrent]} + theme={theme} + style={[styles.item, current && { backgroundColor: themes[theme].borderColor }]} > <View style={styles.itemLeft}> {left} </View> <View style={styles.itemCenter}> - <Text style={styles.itemText}> + <Text style={[styles.itemText, { color: themes[theme].titleText }]}> {text} </Text> </View> - </RectButton> + </Touch> )); Item.propTypes = { @@ -33,7 +33,8 @@ Item.propTypes = { text: PropTypes.string, current: PropTypes.bool, onPress: PropTypes.func, - testID: PropTypes.string + testID: PropTypes.string, + theme: PropTypes.string }; -export default Item; +export default withTheme(Item); diff --git a/app/views/SidebarView/index.js b/app/views/SidebarView/index.js index fa077befb0..78b789abfc 100644 --- a/app/views/SidebarView/index.js +++ b/app/views/SidebarView/index.js @@ -5,9 +5,9 @@ import { } from 'react-native'; import { connect } from 'react-redux'; import equal from 'deep-equal'; -import { RectButton } from 'react-native-gesture-handler'; import { Q } from '@nozbe/watermelondb'; +import Touch from '../../utils/touch'; import { logout as logoutAction } from '../../actions/login'; import Avatar from '../../containers/Avatar'; import Status from '../../containers/Status/Status'; @@ -18,13 +18,18 @@ import scrollPersistTaps from '../../utils/scrollPersistTaps'; import { CustomIcon } from '../../lib/Icons'; import styles from './styles'; import SidebarItem from './SidebarItem'; -import { COLOR_TEXT } from '../../constants/colors'; +import { themes } from '../../constants/colors'; import database from '../../lib/database'; import { animateNextTransition } from '../../utils/layoutAnimation'; +import { withTheme } from '../../theme'; +import { withSplit } from '../../split'; const keyExtractor = item => item.id; -const Separator = React.memo(() => <View style={styles.separator} />); +const Separator = React.memo(({ theme }) => <View style={[styles.separator, { borderColor: themes[theme].separatorColor }]} />); +Separator.propTypes = { + theme: PropTypes.string +}; const permissions = [ 'view-statistics', @@ -41,7 +46,9 @@ class Sidebar extends Component { user: PropTypes.object, logout: PropTypes.func.isRequired, activeItemKey: PropTypes.string, - loadingServer: PropTypes.bool + theme: PropTypes.string, + loadingServer: PropTypes.bool, + split: PropTypes.bool } constructor(props) { @@ -71,7 +78,7 @@ class Sidebar extends Component { shouldComponentUpdate(nextProps, nextState) { const { status, showStatus, isAdmin } = this.state; const { - Site_Name, user, baseUrl, activeItemKey + Site_Name, user, baseUrl, activeItemKey, split, theme } = this.props; if (nextState.showStatus !== showStatus) { return true; @@ -88,6 +95,9 @@ class Sidebar extends Component { if (nextProps.activeItemKey !== activeItemKey) { return true; } + if (nextProps.theme !== theme) { + return true; + } if (nextProps.user && user) { if (nextProps.user.language !== user.language) { return true; @@ -99,6 +109,9 @@ class Sidebar extends Component { return true; } } + if (nextProps.split !== split) { + return true; + } if (!equal(nextState.status, status)) { return true; } @@ -182,26 +195,26 @@ class Sidebar extends Component { renderNavigation = () => { const { isAdmin } = this.state; - const { activeItemKey } = this.props; + const { activeItemKey, theme } = this.props; return ( <> <SidebarItem text={I18n.t('Chats')} - left={<CustomIcon name='message' size={20} color={COLOR_TEXT} />} + left={<CustomIcon name='message' size={20} color={themes[theme].titleText} />} onPress={() => this.sidebarNavigate('RoomsListView')} testID='sidebar-chats' current={activeItemKey === 'ChatsStack'} /> <SidebarItem text={I18n.t('Profile')} - left={<CustomIcon name='user' size={20} color={COLOR_TEXT} />} + left={<CustomIcon name='user' size={20} color={themes[theme].titleText} />} onPress={() => this.sidebarNavigate('ProfileView')} testID='sidebar-profile' current={activeItemKey === 'ProfileStack'} /> <SidebarItem text={I18n.t('Settings')} - left={<CustomIcon name='cog' size={20} color={COLOR_TEXT} />} + left={<CustomIcon name='cog' size={20} color={themes[theme].titleText} />} onPress={() => this.sidebarNavigate('SettingsView')} testID='sidebar-settings' current={activeItemKey === 'SettingsStack'} @@ -209,16 +222,16 @@ class Sidebar extends Component { {isAdmin ? ( <SidebarItem text={I18n.t('Admin_Panel')} - left={<CustomIcon name='shield-alt' size={20} color={COLOR_TEXT} />} + left={<CustomIcon name='shield-alt' size={20} color={themes[theme].titleText} />} onPress={() => this.sidebarNavigate('AdminPanelView')} testID='sidebar-settings' current={activeItemKey === 'AdminPanelStack'} /> ) : null} - <Separator key='separator-logout' /> + <Separator theme={theme} /> <SidebarItem text={I18n.t('Logout')} - left={<CustomIcon name='sign-out' size={20} color={COLOR_TEXT} />} + left={<CustomIcon name='sign-out' size={20} color={themes[theme].titleText} />} onPress={this.logout} testID='sidebar-logout' /> @@ -231,7 +244,6 @@ class Sidebar extends Component { const { user } = this.props; return ( <FlatList - key='status-list' data={status} extraData={user} renderItem={this.renderStatusItem} @@ -242,20 +254,31 @@ class Sidebar extends Component { render() { const { showStatus } = this.state; - const { user, Site_Name, baseUrl } = this.props; + const { + user, Site_Name, baseUrl, split, theme + } = this.props; if (!user) { return null; } return ( - <SafeAreaView testID='sidebar-view' style={styles.container}> - <ScrollView style={styles.container} {...scrollPersistTaps}> - <RectButton + <SafeAreaView testID='sidebar-view' style={[styles.container, { backgroundColor: themes[theme].focusedBackground }]}> + <ScrollView + style={[ + styles.container, + { + backgroundColor: split + ? themes[theme].backgroundColor + : themes[theme].focusedBackground + } + ]} + {...scrollPersistTaps} + > + <Touch onPress={this.toggleStatus} - underlayColor={COLOR_TEXT} - activeOpacity={0.1} testID='sidebar-toggle-status' style={styles.header} + theme={theme} > <Avatar text={user.username} @@ -268,16 +291,16 @@ class Sidebar extends Component { <View style={styles.headerTextContainer}> <View style={styles.headerUsername}> <Status style={styles.status} size={12} status={user && user.status} /> - <Text numberOfLines={1} style={styles.username}>{user.username}</Text> + <Text numberOfLines={1} style={[styles.username, { color: themes[theme].titleText }]}>{user.username}</Text> </View> - <Text style={styles.currentServerText} numberOfLines={1}>{Site_Name}</Text> + <Text style={[styles.currentServerText, { color: themes[theme].titleText }]} numberOfLines={1}>{Site_Name}</Text> </View> - <CustomIcon name='arrow-down' size={20} style={[styles.headerIcon, showStatus && styles.inverted]} /> - </RectButton> + <CustomIcon name='arrow-down' size={20} style={[styles.headerIcon, showStatus && styles.inverted, { color: themes[theme].titleText }]} /> + </Touch> - <Separator key='separator-header' /> + {!split || showStatus ? <Separator theme={theme} /> : null} - {!showStatus ? this.renderNavigation() : null} + {!showStatus && !split ? this.renderNavigation() : null} {showStatus ? this.renderStatus() : null} </ScrollView> </SafeAreaView> @@ -303,4 +326,4 @@ const mapDispatchToProps = dispatch => ({ logout: () => dispatch(logoutAction()) }); -export default connect(mapStateToProps, mapDispatchToProps)(Sidebar); +export default connect(mapStateToProps, mapDispatchToProps)(withTheme(withSplit(Sidebar))); diff --git a/app/views/SidebarView/styles.js b/app/views/SidebarView/styles.js index 98a7d54ef8..b3b07f7877 100644 --- a/app/views/SidebarView/styles.js +++ b/app/views/SidebarView/styles.js @@ -1,12 +1,10 @@ import { StyleSheet } from 'react-native'; -import { COLOR_SEPARATOR, COLOR_WHITE } from '../../constants/colors'; import sharedStyles from '../Styles'; export default StyleSheet.create({ container: { - flex: 1, - backgroundColor: COLOR_WHITE + flex: 1 }, item: { flexDirection: 'row', @@ -26,12 +24,10 @@ export default StyleSheet.create({ itemText: { marginVertical: 16, fontSize: 14, - ...sharedStyles.textSemibold, - ...sharedStyles.textColorNormal + ...sharedStyles.textSemibold }, separator: { borderBottomWidth: StyleSheet.hairlineWidth, - borderColor: COLOR_SEPARATOR, marginVertical: 4 }, header: { @@ -50,12 +46,10 @@ export default StyleSheet.create({ }, username: { fontSize: 14, - ...sharedStyles.textColorNormal, ...sharedStyles.textMedium }, headerIcon: { - paddingHorizontal: 10, - ...sharedStyles.textColorNormal + paddingHorizontal: 10 }, avatar: { marginHorizontal: 10 @@ -65,14 +59,12 @@ export default StyleSheet.create({ }, currentServerText: { fontSize: 14, - ...sharedStyles.textColorNormal, ...sharedStyles.textSemibold }, version: { marginHorizontal: 10, marginBottom: 10, fontSize: 13, - ...sharedStyles.textColorNormal, ...sharedStyles.textSemibold }, inverted: { diff --git a/app/views/Styles.js b/app/views/Styles.js index 4861380afb..b47df72c55 100644 --- a/app/views/Styles.js +++ b/app/views/Styles.js @@ -1,56 +1,37 @@ import { StyleSheet, Platform } from 'react-native'; -import { - COLOR_DANGER, COLOR_BUTTON_PRIMARY, COLOR_SEPARATOR, COLOR_TEXT, COLOR_TEXT_DESCRIPTION, COLOR_TITLE, COLOR_BACKGROUND_CONTAINER, COLOR_WHITE, COLOR_PRIMARY, HEADER_BACK -} from '../constants/colors'; +import { MAX_SCREEN_CONTENT_WIDTH, MAX_CONTENT_WIDTH } from '../constants/tablet'; export default StyleSheet.create({ root: { flex: 1 }, container: { - backgroundColor: 'white', flex: 1 }, containerScrollView: { padding: 15, paddingBottom: 30 }, - buttonContainerLastChild: { - marginBottom: 40 - }, - buttonContainer: { - paddingVertical: 15, - backgroundColor: '#414852', - marginBottom: 20, - borderRadius: 2 - }, - buttonContainer_inverted: { - paddingVertical: 15, - marginBottom: 0 - }, - button: { - textAlign: 'center', - color: 'white', - fontWeight: '700' + containerSplitView: { + flex: 1, + flexDirection: 'row' }, - button_inverted: { - textAlign: 'center', - color: '#414852', - fontWeight: '700', - flexGrow: 1 + tabletContent: { + maxWidth: MAX_CONTENT_WIDTH }, - error: { - textAlign: 'center', - color: COLOR_DANGER, - paddingTop: 5 + tabletScreenContent: { + alignSelf: 'center', + width: MAX_SCREEN_CONTENT_WIDTH }, - loading: { - flex: 1, - position: 'absolute', - backgroundColor: 'rgba(255,255,255,.2)', - left: 0, - top: 0 + modal: { + // Following UIModalPresentationFormSheet size + // this not change on different iPad sizes + width: 540, + height: 620, + alignSelf: 'center', + borderRadius: 10, + overflow: 'hidden' }, status: { position: 'absolute', @@ -59,22 +40,6 @@ export default StyleSheet.create({ borderWidth: 3, borderColor: '#fff' }, - link: { - fontWeight: 'bold', - color: COLOR_BUTTON_PRIMARY - }, - alignItemsFlexEnd: { - alignItems: 'flex-end' - }, - alignItemsFlexStart: { - alignItems: 'flex-start' - }, - alignItemsCenter: { - alignItems: 'center' - }, - textAlignRight: { - textAlign: 'right' - }, textAlignCenter: { textAlign: 'center' }, @@ -84,39 +49,29 @@ export default StyleSheet.create({ loginTitle: { fontSize: 20, marginVertical: 15, - color: COLOR_TITLE, lineHeight: 28 }, loginSubtitle: { fontSize: 16, - color: COLOR_TITLE, lineHeight: 20, marginBottom: 15 }, - headerButton: { - backgroundColor: 'transparent', - height: 44, - width: 44, - alignItems: 'center', - justifyContent: 'center' - }, separator: { - height: StyleSheet.hairlineWidth, - backgroundColor: COLOR_SEPARATOR + height: StyleSheet.hairlineWidth }, separatorTop: { - borderColor: COLOR_SEPARATOR, borderTopWidth: StyleSheet.hairlineWidth }, separatorBottom: { - borderColor: COLOR_SEPARATOR, borderBottomWidth: StyleSheet.hairlineWidth }, separatorVertical: { - borderColor: COLOR_SEPARATOR, borderTopWidth: StyleSheet.hairlineWidth, borderBottomWidth: StyleSheet.hairlineWidth }, + separatorLeft: { + borderLeftWidth: StyleSheet.hairlineWidth + }, textRegular: { backgroundColor: 'transparent', ...Platform.select({ @@ -173,38 +128,16 @@ export default StyleSheet.create({ } }) }, - textColorTitle: { - color: COLOR_TITLE - }, - textColorNormal: { - color: COLOR_TEXT - }, - textColorDescription: { - color: COLOR_TEXT_DESCRIPTION - }, - textColorHeaderBack: { - color: HEADER_BACK - }, - colorPrimary: { - color: COLOR_PRIMARY - }, inputLastChild: { marginBottom: 15 }, - listSafeArea: { - flex: 1, - backgroundColor: COLOR_BACKGROUND_CONTAINER - }, listContentContainer: { - borderColor: COLOR_SEPARATOR, borderTopWidth: StyleSheet.hairlineWidth, borderBottomWidth: StyleSheet.hairlineWidth, - backgroundColor: COLOR_WHITE, - marginVertical: 10 + marginVertical: 36 }, notchLandscapeContainer: { marginTop: -34, - paddingHorizontal: 30, - backgroundColor: COLOR_BACKGROUND_CONTAINER + paddingHorizontal: 30 } }); diff --git a/app/views/TableView.js b/app/views/TableView.js deleted file mode 100644 index 6f61fee43c..0000000000 --- a/app/views/TableView.js +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react'; -import { ScrollView } from 'react-native'; -import PropTypes from 'prop-types'; - -import I18n from '../i18n'; -import { isIOS } from '../utils/deviceInfo'; - -export default class TableView extends React.Component { - static navigationOptions = () => ({ - title: I18n.t('Table') - }); - - static propTypes = { - navigation: PropTypes.object - } - - render() { - const { navigation } = this.props; - const renderRows = navigation.getParam('renderRows'); - const tableWidth = navigation.getParam('tableWidth'); - - if (isIOS) { - return ( - <ScrollView contentContainerStyle={{ width: tableWidth }}> - {renderRows()} - </ScrollView> - ); - } - - return ( - <ScrollView> - <ScrollView horizontal> - {renderRows()} - </ScrollView> - </ScrollView> - ); - } -} diff --git a/app/views/ThemeView.js b/app/views/ThemeView.js new file mode 100644 index 0000000000..e6634be16f --- /dev/null +++ b/app/views/ThemeView.js @@ -0,0 +1,196 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { + FlatList, Text, View, StyleSheet +} from 'react-native'; +import { SafeAreaView } from 'react-navigation'; +import RNUserDefaults from 'rn-user-defaults'; + +import I18n from '../i18n'; +import { themedHeader } from '../utils/navigation'; +import { withTheme } from '../theme'; +import { themes } from '../constants/colors'; +import sharedStyles from './Styles'; +import StatusBar from '../containers/StatusBar'; +import Separator from '../containers/Separator'; +import ListItem from '../containers/ListItem'; +import { CustomIcon } from '../lib/Icons'; +import { THEME_PREFERENCES_KEY } from '../lib/rocketchat'; +import { supportSystemTheme } from '../utils/deviceInfo'; + +const THEME_GROUP = 'THEME_GROUP'; +const DARK_GROUP = 'DARK_GROUP'; + +const SYSTEM_THEME = { + label: I18n.t('Automatic'), + value: 'automatic', + group: THEME_GROUP +}; + +const THEMES = [ + { + label: I18n.t('Light'), + value: 'light', + group: THEME_GROUP + }, { + label: I18n.t('Dark'), + value: 'dark', + group: THEME_GROUP + }, { + label: I18n.t('Dark'), + value: 'dark', + separator: true, + header: I18n.t('Dark_level'), + group: DARK_GROUP + }, { + label: I18n.t('Black'), + value: 'black', + group: DARK_GROUP + } +]; + +const styles = StyleSheet.create({ + list: { + paddingBottom: 18 + }, + info: { + paddingTop: 25, + paddingBottom: 18, + paddingHorizontal: 16 + }, + infoText: { + fontSize: 16, + ...sharedStyles.textRegular + } +}); + +class ThemeView extends React.Component { + static navigationOptions = ({ screenProps }) => ({ + title: I18n.t('Theme'), + ...themedHeader(screenProps.theme) + }) + + static propTypes = { + theme: PropTypes.string, + themePreferences: PropTypes.object, + setTheme: PropTypes.func + } + + constructor(props) { + super(props); + if (supportSystemTheme()) { + THEMES.unshift(SYSTEM_THEME); + } + } + + isSelected = (item) => { + const { themePreferences } = this.props; + const { group } = item; + const { darkLevel, currentTheme } = themePreferences; + if (group === THEME_GROUP) { + return item.value === currentTheme; + } + if (group === DARK_GROUP) { + return item.value === darkLevel; + } + } + + onClick = (item) => { + const { themePreferences } = this.props; + const { darkLevel, currentTheme } = themePreferences; + const { value, group } = item; + let changes = {}; + if (group === THEME_GROUP && currentTheme !== value) { + changes = { currentTheme: value }; + } + if (group === DARK_GROUP && darkLevel !== value) { + changes = { darkLevel: value }; + } + this.setTheme(changes); + } + + setTheme = async(theme) => { + const { setTheme, themePreferences } = this.props; + const newTheme = { ...themePreferences, ...theme }; + setTheme(newTheme); + await RNUserDefaults.setObjectForKey(THEME_PREFERENCES_KEY, newTheme); + }; + + renderSeparator = () => { + const { theme } = this.props; + return <Separator theme={theme} />; + } + + renderIcon = () => { + const { theme } = this.props; + return <CustomIcon name='check' size={20} color={themes[theme].tintColor} />; + } + + renderItem = ({ item, index }) => { + const { theme } = this.props; + const { label, value } = item; + const isFirst = index === 0; + return ( + <> + {item.separator || isFirst ? this.renderSectionHeader(item.header) : null} + <ListItem + title={label} + onPress={() => this.onClick(item)} + testID={`theme-view-${ value }`} + right={this.isSelected(item) ? this.renderIcon : null} + theme={theme} + /> + </> + ); + } + + renderSectionHeader = (header = I18n.t('Theme')) => { + const { theme } = this.props; + return ( + <> + <View style={styles.info}> + <Text style={[styles.infoText, { color: themes[theme].infoText }]}>{header}</Text> + </View> + {this.renderSeparator()} + </> + ); + } + + renderFooter = () => { + const { theme } = this.props; + return ( + <View style={[styles.info, sharedStyles.separatorTop, { borderColor: themes[theme].separatorColor }]}> + <Text style={{ color: themes[theme].infoText }}> + {I18n.t('Applying_a_theme_will_change_how_the_app_looks')} + </Text> + </View> + ); + } + + render() { + const { theme } = this.props; + return ( + <SafeAreaView + style={[sharedStyles.container, { backgroundColor: themes[theme].auxiliaryBackground }]} + forceInset={{ vertical: 'never' }} + testID='theme-view' + > + <StatusBar theme={theme} /> + <FlatList + data={THEMES} + keyExtractor={item => item.value} + contentContainerStyle={[ + styles.list, + { borderColor: themes[theme].separatorColor } + ]} + renderItem={this.renderItem} + ListHeaderComponent={this.renderHeader} + ListFooterComponent={this.renderFooter} + ItemSeparatorComponent={this.renderSeparator} + /> + </SafeAreaView> + ); + } +} + +export default withTheme(ThemeView); diff --git a/app/views/ThreadMessagesView/index.js b/app/views/ThreadMessagesView/index.js index 05e6c78210..0d3c841955 100644 --- a/app/views/ThreadMessagesView/index.js +++ b/app/views/ThreadMessagesView/index.js @@ -12,7 +12,7 @@ import { sanitizedRaw } from '@nozbe/watermelondb/RawRecord'; import styles from './styles'; import Message from '../../containers/message'; -import RCActivityIndicator from '../../containers/ActivityIndicator'; +import ActivityIndicator from '../../containers/ActivityIndicator'; import I18n from '../../i18n'; import RocketChat from '../../lib/rocketchat'; import database from '../../lib/database'; @@ -21,21 +21,32 @@ import buildMessage from '../../lib/methods/helpers/buildMessage'; import log from '../../utils/log'; import debounce from '../../utils/debounce'; import protectedFunction from '../../lib/methods/helpers/protectedFunction'; +import { themes } from '../../constants/colors'; +import { withTheme } from '../../theme'; +import { themedHeader } from '../../utils/navigation'; +import ModalNavigation from '../../lib/ModalNavigation'; + +const Separator = React.memo(({ theme }) => <View style={[styles.separator, { backgroundColor: themes[theme].separatorColor }]} />); +Separator.propTypes = { + theme: PropTypes.string +}; -const Separator = React.memo(() => <View style={styles.separator} />); const API_FETCH_COUNT = 50; class ThreadMessagesView extends React.Component { - static navigationOptions = { + static navigationOptions = ({ screenProps }) => ({ + ...themedHeader(screenProps.theme), title: I18n.t('Threads') - } + }); static propTypes = { user: PropTypes.object, navigation: PropTypes.object, baseUrl: PropTypes.string, useRealName: PropTypes.bool, - customEmojis: PropTypes.object + theme: PropTypes.string, + customEmojis: PropTypes.object, + screenProps: PropTypes.object } constructor(props) { @@ -249,13 +260,32 @@ class ThreadMessagesView extends React.Component { }); }, 1000, true) - renderSeparator = () => <Separator /> + renderSeparator = () => { + const { theme } = this.props; + return <Separator theme={theme} />; + } - renderEmpty = () => ( - <View style={styles.listEmptyContainer} testID='thread-messages-view'> - <Text style={styles.noDataFound}>{I18n.t('No_thread_messages')}</Text> - </View> - ) + renderEmpty = () => { + const { theme } = this.props; + return ( + <View style={[styles.listEmptyContainer, { backgroundColor: themes[theme].backgroundColor }]} testID='thread-messages-view'> + <Text style={[styles.noDataFound, { color: themes[theme].titleText }]}>{I18n.t('No_thread_messages')}</Text> + </View> + ); + } + + navToRoomInfo = (navParam) => { + const { navigation, user, screenProps } = this.props; + if (navParam.rid === user.id) { + return; + } + if (screenProps && screenProps.split) { + navigation.navigate('RoomActionsView', { rid: this.rid, t: this.t }); + ModalNavigation.navigate('RoomInfoView', navParam); + } else { + navigation.navigate('RoomInfoView', navParam); + } + } renderItem = ({ item }) => { const { @@ -276,12 +306,14 @@ class ThreadMessagesView extends React.Component { baseUrl={baseUrl} useRealName={useRealName} getCustomEmoji={this.getCustomEmoji} + navToRoomInfo={this.navToRoomInfo} /> ); } render() { const { loading, messages } = this.state; + const { theme } = this.props; if (!loading && messages.length === 0) { return this.renderEmpty(); @@ -289,12 +321,12 @@ class ThreadMessagesView extends React.Component { return ( <SafeAreaView style={styles.list} testID='thread-messages-view' forceInset={{ vertical: 'never' }}> - <StatusBar /> + <StatusBar theme={theme} /> <FlatList data={messages} extraData={this.state} renderItem={this.renderItem} - style={styles.list} + style={[styles.list, { backgroundColor: themes[theme].backgroundColor }]} contentContainerStyle={styles.contentContainer} keyExtractor={item => item.id} onEndReached={this.load} @@ -302,7 +334,7 @@ class ThreadMessagesView extends React.Component { maxToRenderPerBatch={5} initialNumToRender={1} ItemSeparatorComponent={this.renderSeparator} - ListFooterComponent={loading ? <RCActivityIndicator /> : null} + ListFooterComponent={loading ? <ActivityIndicator theme={theme} /> : null} /> </SafeAreaView> ); @@ -320,4 +352,4 @@ const mapStateToProps = state => ({ customEmojis: state.customEmojis }); -export default connect(mapStateToProps)(ThreadMessagesView); +export default connect(mapStateToProps)(withTheme(ThreadMessagesView)); diff --git a/app/views/ThreadMessagesView/styles.js b/app/views/ThreadMessagesView/styles.js index e1a77b9745..1bb0b0e140 100644 --- a/app/views/ThreadMessagesView/styles.js +++ b/app/views/ThreadMessagesView/styles.js @@ -1,23 +1,19 @@ import { StyleSheet } from 'react-native'; import sharedStyles from '../Styles'; -import { COLOR_WHITE, COLOR_SEPARATOR } from '../../constants/colors'; export default StyleSheet.create({ list: { - flex: 1, - backgroundColor: COLOR_WHITE + flex: 1 }, listEmptyContainer: { flex: 1, alignItems: 'center', - justifyContent: 'center', - backgroundColor: COLOR_WHITE + justifyContent: 'center' }, noDataFound: { fontSize: 14, - ...sharedStyles.textRegular, - ...sharedStyles.textColorNormal + ...sharedStyles.textRegular }, contentContainer: { paddingBottom: 30 @@ -26,7 +22,6 @@ export default StyleSheet.create({ height: StyleSheet.hairlineWidth, width: '100%', marginLeft: 60, - marginTop: 10, - backgroundColor: COLOR_SEPARATOR + marginTop: 10 } }); diff --git a/app/views/WithoutServersView.js b/app/views/WithoutServersView.js index cd763cc1b1..75b7968ed8 100644 --- a/app/views/WithoutServersView.js +++ b/app/views/WithoutServersView.js @@ -2,36 +2,37 @@ import React from 'react'; import { StyleSheet, View, Text } from 'react-native'; +import PropTypes from 'prop-types'; import ShareExtension from 'rn-extensions-share'; import { CloseShareExtensionButton } from '../containers/HeaderButton'; import sharedStyles from './Styles'; import I18n from '../i18n'; -import { COLOR_WHITE } from '../constants/colors'; +import { themes } from '../constants/colors'; +import { themedHeader } from '../utils/navigation'; +import { withTheme } from '../theme'; const styles = StyleSheet.create({ container: { flex: 1, - backgroundColor: COLOR_WHITE, justifyContent: 'center', alignItems: 'center', padding: 15 }, title: { fontSize: 18, - ...sharedStyles.textBold, - ...sharedStyles.textColorNormal + ...sharedStyles.textBold }, content: { fontSize: 14, ...sharedStyles.textAlignCenter, - ...sharedStyles.textColorNormal, ...sharedStyles.textRegular } }); -export default class WithoutServerView extends React.Component { - static navigationOptions = () => ({ +class WithoutServerView extends React.Component { + static navigationOptions = ({ screenProps }) => ({ + ...themedHeader(screenProps.theme), headerLeft: ( <CloseShareExtensionButton onPress={ShareExtension.close} @@ -40,12 +41,19 @@ export default class WithoutServerView extends React.Component { ) }) + static propTypes = { + theme: PropTypes.string + } + render() { + const { theme } = this.props; return ( - <View style={styles.container}> - <Text style={styles.title}>{I18n.t('Without_Servers')}</Text> - <Text style={styles.content}>{I18n.t('You_need_to_access_at_least_one_RocketChat_server_to_share_something')}</Text> + <View style={[styles.container, { backgroundColor: themes[theme].backgroundColor }]}> + <Text style={[styles.title, { color: themes[theme].titleText }]}>{I18n.t('Without_Servers')}</Text> + <Text style={[styles.content, { color: themes[theme].titleText }]}>{I18n.t('You_need_to_access_at_least_one_RocketChat_server_to_share_something')}</Text> </View> ); } } + +export default withTheme(WithoutServerView); diff --git a/icons/20x20/at.svg b/icons/20x20/at.svg deleted file mode 100644 index 0af789c1a6..0000000000 --- a/icons/20x20/at.svg +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> - <!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch --> - <title>20x20/at--dark - Created with Sketch. - - - - - - - - - - - - \ No newline at end of file diff --git a/icons/20x20/image.svg b/icons/20x20/image.svg deleted file mode 100644 index 8a1efb5ed6..0000000000 --- a/icons/20x20/image.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - 20x20/image--dark - Created with Sketch. - - - - - - - - - - - - \ No newline at end of file diff --git a/icons/20x20/location.svg b/icons/20x20/location.svg deleted file mode 100644 index 15acd15113..0000000000 --- a/icons/20x20/location.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - 20x20/locaiton--dark - Created with Sketch. - - - - - - - - - \ No newline at end of file diff --git a/icons/20x20/video.svg b/icons/20x20/video.svg deleted file mode 100644 index f40e7f2467..0000000000 --- a/icons/20x20/video.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - 20x20/video--dark - Created with Sketch. - - - - - - - - - - - \ No newline at end of file diff --git a/icons/20x20/volume.svg b/icons/20x20/volume.svg deleted file mode 100644 index f3d22ea4df..0000000000 --- a/icons/20x20/volume.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - 20x20/volume--dark - Created with Sketch. - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ios/Gemfile.lock b/ios/Gemfile.lock index 1767699971..bf26b8f450 100644 --- a/ios/Gemfile.lock +++ b/ios/Gemfile.lock @@ -1,12 +1,12 @@ GEM remote: https://rubygems.org/ specs: - CFPropertyList (3.0.0) - addressable (2.6.0) - public_suffix (>= 2.0.2, < 4.0) + CFPropertyList (3.0.1) + addressable (2.7.0) + public_suffix (>= 2.0.2, < 5.0) atomos (0.1.3) - babosa (1.0.2) - claide (1.0.2) + babosa (1.0.3) + claide (1.0.3) colored (1.2) colored2 (3.1.2) commander-fastlane (4.4.6) @@ -14,20 +14,20 @@ GEM declarative (0.0.10) declarative-option (0.1.0) digest-crc (0.4.1) - domain_name (0.5.20180417) + domain_name (0.5.20190701) unf (>= 0.0.5, < 1.0.0) - dotenv (2.7.4) + dotenv (2.7.5) emoji_regex (1.0.1) - excon (0.64.0) - faraday (0.15.4) + excon (0.68.0) + faraday (0.17.0) multipart-post (>= 1.2, < 3) faraday-cookie_jar (0.0.6) faraday (>= 0.7.4) http-cookie (~> 1.0.0) faraday_middleware (0.13.1) faraday (>= 0.7.4, < 1.0) - fastimage (2.1.5) - fastlane (2.126.0) + fastimage (2.1.7) + fastlane (2.134.0) CFPropertyList (>= 2.3, < 4.0.0) addressable (>= 2.3, < 3.0.0) babosa (>= 1.0.2, < 2.0.0) @@ -37,9 +37,9 @@ GEM dotenv (>= 2.1.1, < 3.0.0) emoji_regex (>= 0.1, < 2.0) excon (>= 0.45.0, < 1.0.0) - faraday (~> 0.9) + faraday (~> 0.17) faraday-cookie_jar (~> 0.0.6) - faraday_middleware (~> 0.9) + faraday_middleware (~> 0.13.1) fastimage (>= 2.1.0, < 3.0.0) gh_inspector (>= 1.1.2, < 2.0.0) google-api-client (>= 0.21.2, < 0.24.0) @@ -47,12 +47,12 @@ GEM highline (>= 1.7.2, < 2.0.0) json (< 3.0.0) jwt (~> 2.1.0) - mini_magick (~> 4.5.1) + mini_magick (>= 4.9.4, < 5.0.0) multi_xml (~> 0.5) multipart-post (~> 2.0.0) plist (>= 3.1.0, < 4.0.0) public_suffix (~> 2.0.0) - rubyzip (>= 1.2.2, < 2.0.0) + rubyzip (>= 1.3.0, < 2.0.0) security (= 0.1.3) simctl (~> 1.6.3) slack-notifier (>= 2.0.0, < 3.0.0) @@ -73,9 +73,9 @@ GEM representable (~> 3.0) retriable (>= 2.0, < 4.0) signet (~> 0.9) - google-cloud-core (1.3.0) + google-cloud-core (1.4.1) google-cloud-env (~> 1.0) - google-cloud-env (1.2.0) + google-cloud-env (1.3.0) faraday (~> 0.11) google-cloud-storage (1.16.0) digest-crc (~> 0.4) @@ -96,11 +96,11 @@ GEM json (2.2.0) jwt (2.1.0) memoist (0.16.0) - mime-types (3.2.2) + mime-types (3.3) mime-types-data (~> 3.2015) - mime-types-data (3.2019.0331) - mini_magick (4.5.1) - multi_json (1.13.1) + mime-types-data (3.2019.1009) + mini_magick (4.9.5) + multi_json (1.14.1) multi_xml (0.6.0) multipart-post (2.0.0) nanaimo (0.2.6) @@ -114,14 +114,14 @@ GEM uber (< 0.2.0) retriable (3.1.2) rouge (2.0.7) - rubyzip (1.2.3) + rubyzip (1.3.0) security (0.1.3) - signet (0.11.0) + signet (0.12.0) addressable (~> 2.3) faraday (~> 0.9) jwt (>= 1.5, < 3.0) multi_json (~> 1.10) - simctl (1.6.5) + simctl (1.6.6) CFPropertyList naturally slack-notifier (2.3.2) @@ -138,7 +138,7 @@ GEM unf_ext (0.0.7.6) unicode-display_width (1.6.0) word_wrap (1.0.0) - xcodeproj (1.10.0) + xcodeproj (1.13.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) diff --git a/ios/LaunchScreen.storyboard b/ios/LaunchScreen.storyboard new file mode 100644 index 0000000000..e84781fe8f --- /dev/null +++ b/ios/LaunchScreen.storyboard @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Podfile b/ios/Podfile index f9edbed916..cb86d4ae6d 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -36,6 +36,7 @@ target 'RocketChatRN' do use_native_modules! use_unimodules! + end target 'ShareRocketChatRN' do diff --git a/ios/Podfile.lock b/ios/Podfile.lock index e280640b61..e057c8ba9a 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,9 +1,9 @@ PODS: - boost-for-react-native (1.63.0) - - BugsnagReactNative (2.22.4): - - BugsnagReactNative/Core (= 2.22.4) + - BugsnagReactNative (2.23.2): + - BugsnagReactNative/Core (= 2.23.2) - React - - BugsnagReactNative/Core (2.22.4): + - BugsnagReactNative/Core (2.23.2): - React - Crashlytics (3.14.0): - Fabric (~> 1.10.2) @@ -26,14 +26,14 @@ PODS: - EXWebBrowser (6.0.0): - UMCore - Fabric (1.10.2) - - FBLazyVector (0.61.1) - - FBReactNativeSpec (0.61.1): + - FBLazyVector (0.61.3) + - FBReactNativeSpec (0.61.3): - Folly (= 2018.10.22.00) - - RCTRequired (= 0.61.1) - - RCTTypeSafety (= 0.61.1) - - React-Core (= 0.61.1) - - React-jsi (= 0.61.1) - - ReactCommon/turbomodule/core (= 0.61.1) + - RCTRequired (= 0.61.3) + - RCTTypeSafety (= 0.61.3) + - React-Core (= 0.61.3) + - React-jsi (= 0.61.3) + - ReactCommon/turbomodule/core (= 0.61.3) - Firebase/Core (6.8.1): - Firebase/CoreOnly - FirebaseAnalytics (= 6.1.1) @@ -102,6 +102,8 @@ PODS: - GoogleUtilities/UserDefaults (6.3.0): - GoogleUtilities/Logger - JitsiMeetSDK (2.4.0) + - KeyCommands (2.0.3): + - React - libwebp (1.0.3): - libwebp/demux (= 1.0.3) - libwebp/mux (= 1.0.3) @@ -117,169 +119,171 @@ PODS: - nanopb/decode (0.3.901) - nanopb/encode (0.3.901) - QBImagePickerController (3.4.0) - - RCTRequired (0.61.1) - - RCTTypeSafety (0.61.1): - - FBLazyVector (= 0.61.1) + - RCTRequired (0.61.3) + - RCTTypeSafety (0.61.3): + - FBLazyVector (= 0.61.3) - Folly (= 2018.10.22.00) - - RCTRequired (= 0.61.1) - - React-Core (= 0.61.1) - - React (0.61.1): - - React-Core (= 0.61.1) - - React-Core/DevSupport (= 0.61.1) - - React-Core/RCTWebSocket (= 0.61.1) - - React-RCTActionSheet (= 0.61.1) - - React-RCTAnimation (= 0.61.1) - - React-RCTBlob (= 0.61.1) - - React-RCTImage (= 0.61.1) - - React-RCTLinking (= 0.61.1) - - React-RCTNetwork (= 0.61.1) - - React-RCTSettings (= 0.61.1) - - React-RCTText (= 0.61.1) - - React-RCTVibration (= 0.61.1) - - React-Core (0.61.1): + - RCTRequired (= 0.61.3) + - React-Core (= 0.61.3) + - React (0.61.3): + - React-Core (= 0.61.3) + - React-Core/DevSupport (= 0.61.3) + - React-Core/RCTWebSocket (= 0.61.3) + - React-RCTActionSheet (= 0.61.3) + - React-RCTAnimation (= 0.61.3) + - React-RCTBlob (= 0.61.3) + - React-RCTImage (= 0.61.3) + - React-RCTLinking (= 0.61.3) + - React-RCTNetwork (= 0.61.3) + - React-RCTSettings (= 0.61.3) + - React-RCTText (= 0.61.3) + - React-RCTVibration (= 0.61.3) + - React-Core (0.61.3): - Folly (= 2018.10.22.00) - glog - - React-Core/Default (= 0.61.1) - - React-cxxreact (= 0.61.1) - - React-jsi (= 0.61.1) - - React-jsiexecutor (= 0.61.1) + - React-Core/Default (= 0.61.3) + - React-cxxreact (= 0.61.3) + - React-jsi (= 0.61.3) + - React-jsiexecutor (= 0.61.3) - Yoga - - React-Core/CoreModulesHeaders (0.61.1): + - React-Core/CoreModulesHeaders (0.61.3): - Folly (= 2018.10.22.00) - glog - React-Core/Default - - React-cxxreact (= 0.61.1) - - React-jsi (= 0.61.1) - - React-jsiexecutor (= 0.61.1) + - React-cxxreact (= 0.61.3) + - React-jsi (= 0.61.3) + - React-jsiexecutor (= 0.61.3) - Yoga - - React-Core/Default (0.61.1): + - React-Core/Default (0.61.3): - Folly (= 2018.10.22.00) - glog - - React-cxxreact (= 0.61.1) - - React-jsi (= 0.61.1) - - React-jsiexecutor (= 0.61.1) + - React-cxxreact (= 0.61.3) + - React-jsi (= 0.61.3) + - React-jsiexecutor (= 0.61.3) - Yoga - - React-Core/DevSupport (0.61.1): + - React-Core/DevSupport (0.61.3): - Folly (= 2018.10.22.00) - glog - - React-Core/Default (= 0.61.1) - - React-Core/RCTWebSocket (= 0.61.1) - - React-cxxreact (= 0.61.1) - - React-jsi (= 0.61.1) - - React-jsiexecutor (= 0.61.1) - - React-jsinspector (= 0.61.1) + - React-Core/Default (= 0.61.3) + - React-Core/RCTWebSocket (= 0.61.3) + - React-cxxreact (= 0.61.3) + - React-jsi (= 0.61.3) + - React-jsiexecutor (= 0.61.3) + - React-jsinspector (= 0.61.3) - Yoga - - React-Core/RCTActionSheetHeaders (0.61.1): + - React-Core/RCTActionSheetHeaders (0.61.3): - Folly (= 2018.10.22.00) - glog - React-Core/Default - - React-cxxreact (= 0.61.1) - - React-jsi (= 0.61.1) - - React-jsiexecutor (= 0.61.1) + - React-cxxreact (= 0.61.3) + - React-jsi (= 0.61.3) + - React-jsiexecutor (= 0.61.3) - Yoga - - React-Core/RCTAnimationHeaders (0.61.1): + - React-Core/RCTAnimationHeaders (0.61.3): - Folly (= 2018.10.22.00) - glog - React-Core/Default - - React-cxxreact (= 0.61.1) - - React-jsi (= 0.61.1) - - React-jsiexecutor (= 0.61.1) + - React-cxxreact (= 0.61.3) + - React-jsi (= 0.61.3) + - React-jsiexecutor (= 0.61.3) - Yoga - - React-Core/RCTBlobHeaders (0.61.1): + - React-Core/RCTBlobHeaders (0.61.3): - Folly (= 2018.10.22.00) - glog - React-Core/Default - - React-cxxreact (= 0.61.1) - - React-jsi (= 0.61.1) - - React-jsiexecutor (= 0.61.1) + - React-cxxreact (= 0.61.3) + - React-jsi (= 0.61.3) + - React-jsiexecutor (= 0.61.3) - Yoga - - React-Core/RCTImageHeaders (0.61.1): + - React-Core/RCTImageHeaders (0.61.3): - Folly (= 2018.10.22.00) - glog - React-Core/Default - - React-cxxreact (= 0.61.1) - - React-jsi (= 0.61.1) - - React-jsiexecutor (= 0.61.1) + - React-cxxreact (= 0.61.3) + - React-jsi (= 0.61.3) + - React-jsiexecutor (= 0.61.3) - Yoga - - React-Core/RCTLinkingHeaders (0.61.1): + - React-Core/RCTLinkingHeaders (0.61.3): - Folly (= 2018.10.22.00) - glog - React-Core/Default - - React-cxxreact (= 0.61.1) - - React-jsi (= 0.61.1) - - React-jsiexecutor (= 0.61.1) + - React-cxxreact (= 0.61.3) + - React-jsi (= 0.61.3) + - React-jsiexecutor (= 0.61.3) - Yoga - - React-Core/RCTNetworkHeaders (0.61.1): + - React-Core/RCTNetworkHeaders (0.61.3): - Folly (= 2018.10.22.00) - glog - React-Core/Default - - React-cxxreact (= 0.61.1) - - React-jsi (= 0.61.1) - - React-jsiexecutor (= 0.61.1) + - React-cxxreact (= 0.61.3) + - React-jsi (= 0.61.3) + - React-jsiexecutor (= 0.61.3) - Yoga - - React-Core/RCTSettingsHeaders (0.61.1): + - React-Core/RCTSettingsHeaders (0.61.3): - Folly (= 2018.10.22.00) - glog - React-Core/Default - - React-cxxreact (= 0.61.1) - - React-jsi (= 0.61.1) - - React-jsiexecutor (= 0.61.1) + - React-cxxreact (= 0.61.3) + - React-jsi (= 0.61.3) + - React-jsiexecutor (= 0.61.3) - Yoga - - React-Core/RCTTextHeaders (0.61.1): + - React-Core/RCTTextHeaders (0.61.3): - Folly (= 2018.10.22.00) - glog - React-Core/Default - - React-cxxreact (= 0.61.1) - - React-jsi (= 0.61.1) - - React-jsiexecutor (= 0.61.1) + - React-cxxreact (= 0.61.3) + - React-jsi (= 0.61.3) + - React-jsiexecutor (= 0.61.3) - Yoga - - React-Core/RCTVibrationHeaders (0.61.1): + - React-Core/RCTVibrationHeaders (0.61.3): - Folly (= 2018.10.22.00) - glog - React-Core/Default - - React-cxxreact (= 0.61.1) - - React-jsi (= 0.61.1) - - React-jsiexecutor (= 0.61.1) + - React-cxxreact (= 0.61.3) + - React-jsi (= 0.61.3) + - React-jsiexecutor (= 0.61.3) - Yoga - - React-Core/RCTWebSocket (0.61.1): + - React-Core/RCTWebSocket (0.61.3): - Folly (= 2018.10.22.00) - glog - - React-Core/Default (= 0.61.1) - - React-cxxreact (= 0.61.1) - - React-jsi (= 0.61.1) - - React-jsiexecutor (= 0.61.1) + - React-Core/Default (= 0.61.3) + - React-cxxreact (= 0.61.3) + - React-jsi (= 0.61.3) + - React-jsiexecutor (= 0.61.3) - Yoga - - React-CoreModules (0.61.1): - - FBReactNativeSpec (= 0.61.1) + - React-CoreModules (0.61.3): + - FBReactNativeSpec (= 0.61.3) - Folly (= 2018.10.22.00) - - RCTTypeSafety (= 0.61.1) - - React-Core/CoreModulesHeaders (= 0.61.1) - - React-RCTImage (= 0.61.1) - - ReactCommon/turbomodule/core (= 0.61.1) - - React-cxxreact (0.61.1): + - RCTTypeSafety (= 0.61.3) + - React-Core/CoreModulesHeaders (= 0.61.3) + - React-RCTImage (= 0.61.3) + - ReactCommon/turbomodule/core (= 0.61.3) + - React-cxxreact (0.61.3): - boost-for-react-native (= 1.63.0) - DoubleConversion - Folly (= 2018.10.22.00) - glog - - React-jsinspector (= 0.61.1) - - React-jsi (0.61.1): + - React-jsinspector (= 0.61.3) + - React-jsi (0.61.3): - boost-for-react-native (= 1.63.0) - DoubleConversion - Folly (= 2018.10.22.00) - glog - - React-jsi/Default (= 0.61.1) - - React-jsi/Default (0.61.1): + - React-jsi/Default (= 0.61.3) + - React-jsi/Default (0.61.3): - boost-for-react-native (= 1.63.0) - DoubleConversion - Folly (= 2018.10.22.00) - glog - - React-jsiexecutor (0.61.1): + - React-jsiexecutor (0.61.3): - DoubleConversion - Folly (= 2018.10.22.00) - glog - - React-cxxreact (= 0.61.1) - - React-jsi (= 0.61.1) - - React-jsinspector (0.61.1) + - React-cxxreact (= 0.61.3) + - React-jsi (= 0.61.3) + - React-jsinspector (0.61.3) + - react-native-appearance (0.3.1): + - React - react-native-background-timer (2.1.1): - React - react-native-document-picker (3.2.4): @@ -295,55 +299,55 @@ PODS: - React - react-native-orientation-locker (1.1.6): - React - - react-native-slider (2.0.1): + - react-native-slider (2.0.5): - React - react-native-splash-screen (3.2.0): - React - - react-native-video (5.0.0): + - react-native-video (5.0.2): - React - - react-native-video/Video (= 5.0.0) - - react-native-video/Video (5.0.0): + - react-native-video/Video (= 5.0.2) + - react-native-video/Video (5.0.2): - React - - react-native-webview (6.8.0): + - react-native-webview (7.5.1): - React - - React-RCTActionSheet (0.61.1): - - React-Core/RCTActionSheetHeaders (= 0.61.1) - - React-RCTAnimation (0.61.1): - - React-Core/RCTAnimationHeaders (= 0.61.1) - - React-RCTBlob (0.61.1): - - React-Core/RCTBlobHeaders (= 0.61.1) - - React-Core/RCTWebSocket (= 0.61.1) - - React-jsi (= 0.61.1) - - React-RCTNetwork (= 0.61.1) - - React-RCTImage (0.61.1): - - React-Core/RCTImageHeaders (= 0.61.1) - - React-RCTNetwork (= 0.61.1) - - React-RCTLinking (0.61.1): - - React-Core/RCTLinkingHeaders (= 0.61.1) - - React-RCTNetwork (0.61.1): - - React-Core/RCTNetworkHeaders (= 0.61.1) - - React-RCTSettings (0.61.1): - - React-Core/RCTSettingsHeaders (= 0.61.1) - - React-RCTText (0.61.1): - - React-Core/RCTTextHeaders (= 0.61.1) - - React-RCTVibration (0.61.1): - - React-Core/RCTVibrationHeaders (= 0.61.1) - - ReactCommon/jscallinvoker (0.61.1): + - React-RCTActionSheet (0.61.3): + - React-Core/RCTActionSheetHeaders (= 0.61.3) + - React-RCTAnimation (0.61.3): + - React-Core/RCTAnimationHeaders (= 0.61.3) + - React-RCTBlob (0.61.3): + - React-Core/RCTBlobHeaders (= 0.61.3) + - React-Core/RCTWebSocket (= 0.61.3) + - React-jsi (= 0.61.3) + - React-RCTNetwork (= 0.61.3) + - React-RCTImage (0.61.3): + - React-Core/RCTImageHeaders (= 0.61.3) + - React-RCTNetwork (= 0.61.3) + - React-RCTLinking (0.61.3): + - React-Core/RCTLinkingHeaders (= 0.61.3) + - React-RCTNetwork (0.61.3): + - React-Core/RCTNetworkHeaders (= 0.61.3) + - React-RCTSettings (0.61.3): + - React-Core/RCTSettingsHeaders (= 0.61.3) + - React-RCTText (0.61.3): + - React-Core/RCTTextHeaders (= 0.61.3) + - React-RCTVibration (0.61.3): + - React-Core/RCTVibrationHeaders (= 0.61.3) + - ReactCommon/jscallinvoker (0.61.3): - DoubleConversion - Folly (= 2018.10.22.00) - glog - - React-cxxreact (= 0.61.1) - - ReactCommon/turbomodule/core (0.61.1): + - React-cxxreact (= 0.61.3) + - ReactCommon/turbomodule/core (0.61.3): - DoubleConversion - Folly (= 2018.10.22.00) - glog - - React-Core (= 0.61.1) - - React-cxxreact (= 0.61.1) - - React-jsi (= 0.61.1) - - ReactCommon/jscallinvoker (= 0.61.1) + - React-Core (= 0.61.3) + - React-cxxreact (= 0.61.3) + - React-jsi (= 0.61.3) + - ReactCommon/jscallinvoker (= 0.61.3) - rn-extensions-share (2.3.10): - React - - rn-fetch-blob (0.10.16): + - rn-fetch-blob (0.11.2): - React-Core - RNAudio (4.3.0): - React @@ -362,16 +366,18 @@ PODS: - Fabric - Firebase/Core - React - - RNGestureHandler (1.4.1): + - RNGestureHandler (1.5.0): - React - - RNImageCropPicker (0.25.0): + - RNImageCropPicker (0.26.1): - QBImagePickerController - React-Core - React-RCTImage - RSKImageCropper - - RNLocalize (1.1.4): + - RNLocalize (1.3.1): + - React + - RNReanimated (1.4.0): - React - - RNReanimated (1.3.0): + - RNRootView (1.0.3): - React - RNScreens (2.0.0-alpha.3): - React @@ -418,6 +424,7 @@ DEPENDENCIES: - Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - JitsiMeetSDK (from `https://github.com/RocketChat/jitsi-meet-ios-sdk-releases.git`) + - KeyCommands (from `../node_modules/react-native-keycommands`) - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) - React (from `../node_modules/react-native/`) @@ -429,6 +436,7 @@ DEPENDENCIES: - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) + - react-native-appearance (from `../node_modules/react-native-appearance`) - react-native-background-timer (from `../node_modules/react-native-background-timer`) - react-native-document-picker (from `../node_modules/react-native-document-picker`) - react-native-jitsi-meet (from `../node_modules/react-native-jitsi-meet`) @@ -461,6 +469,7 @@ DEPENDENCIES: - RNImageCropPicker (from `../node_modules/react-native-image-crop-picker`) - RNLocalize (from `../node_modules/react-native-localize`) - RNReanimated (from `../node_modules/react-native-reanimated`) + - RNRootView (from `../node_modules/rn-root-view`) - RNScreens (from `../node_modules/react-native-screens`) - RNUserDefaults (from `../node_modules/rn-user-defaults`) - RNVectorIcons (from `../node_modules/react-native-vector-icons`) @@ -479,7 +488,7 @@ DEPENDENCIES: - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) SPEC REPOS: - https://github.com/cocoapods/specs.git: + https://github.com/CocoaPods/Specs.git: - boost-for-react-native - Crashlytics - Fabric @@ -536,6 +545,8 @@ EXTERNAL SOURCES: :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" JitsiMeetSDK: :git: https://github.com/RocketChat/jitsi-meet-ios-sdk-releases.git + KeyCommands: + :path: "../node_modules/react-native-keycommands" RCTRequired: :path: "../node_modules/react-native/Libraries/RCTRequired" RCTTypeSafety: @@ -554,6 +565,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/jsiexecutor" React-jsinspector: :path: "../node_modules/react-native/ReactCommon/jsinspector" + react-native-appearance: + :path: "../node_modules/react-native-appearance" react-native-background-timer: :path: "../node_modules/react-native-background-timer" react-native-document-picker: @@ -616,6 +629,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-localize" RNReanimated: :path: "../node_modules/react-native-reanimated" + RNRootView: + :path: "../node_modules/rn-root-view" RNScreens: :path: "../node_modules/react-native-screens" RNUserDefaults: @@ -668,7 +683,7 @@ CHECKOUT OPTIONS: SPEC CHECKSUMS: boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c - BugsnagReactNative: 2114356c3acac0a71fb4b8962d3d1afdeb35f4d9 + BugsnagReactNative: 0a24a1dd2cac88862d67b938f809bec8274130a9 Crashlytics: 540b7e5f5da5a042647227a5e3ac51d85eed06df DoubleConversion: 5805e889d232975c086db112ece9ed034df7a0b2 EXAppLoaderProvider: 7a8185228d8ba9e689a0e2d6d957fe9bdd49c8a0 @@ -679,8 +694,8 @@ SPEC CHECKSUMS: EXPermissions: 99e52dc3e5f8e55153f1958004f6df2a30a1f2f5 EXWebBrowser: def838b95aa9d396f9ce71ace4e614ee16e7ee30 Fabric: 706c8b8098fff96c33c0db69cbf81f9c551d0d74 - FBLazyVector: 0846affdb2924b01093eb696766ecb0104e409e0 - FBReactNativeSpec: c4cf958af1b97799b524f63a26a1c509c0295b04 + FBLazyVector: 5bc5b1606fc9a7ac6956de049f6e30901ed31c49 + FBReactNativeSpec: f7be9bcc5ce259f7c39509f3f4caf59020d11d4c Firebase: 9cbe4e5b5eaafa05dc932be58b7c8c3820d71e88 FirebaseAnalytics: 843c7f64a8f9c79f0d03281197ebe7bb1d58d477 FirebaseCore: e9d9bd1dae61c1e82bc1e0e617a9d832392086a0 @@ -694,18 +709,20 @@ SPEC CHECKSUMS: GoogleDataTransportCCTSupport: 7455d07b98851aa63e4c05a34dad356ca588479e GoogleUtilities: 9c2c544202301110b29f7974a82e77fdcf12bf51 JitsiMeetSDK: d4a3aeed1a75fd57e6a78e5d202b6051dfcb9320 + KeyCommands: f66c535f698ed14b3d3a4e58859d79a827ea907e libwebp: 057912d6d0abfb6357d8bb05c0ea470301f5d61e nanopb: 2901f78ea1b7b4015c860c2fdd1ea2fee1a18d48 QBImagePickerController: d54cf93db6decf26baf6ed3472f336ef35cae022 - RCTRequired: 53825815218847d3e9c7b6d92ad2d197a926d51e - RCTTypeSafety: d886540c518e53064dfa081bf7693fd650699b92 - React: 5dea58967c421bd1fdf6b94c18b9ed0f5134683c - React-Core: b381e65aa0da9b94b9dcdc4a99298075b1c3876c - React-CoreModules: 4ed224e29848ba76d26aacb8e3fe85712d3c4fe1 - React-cxxreact: 52c98f5c1fb4e4d9f4b588742718350a55f4f088 - React-jsi: 61ff417c95e6c3af50fb96399037e80752fb5ce7 - React-jsiexecutor: ee45274419eb95614bbbadb98e20684c5f29996e - React-jsinspector: 574d597112f9ea3d1b717f6fb62aef764c70dd6f + RCTRequired: a72523286ea3381f97b28d87529c265baad3ad7d + RCTTypeSafety: e3cc0537400222250f0be37bd69f4b339d3c0a0f + React: 3dc877fc32548b0c7108ca7f301466f4956cbff8 + React-Core: ca94e2e7d22cdcc266a405c4d2ad5e5675145776 + React-CoreModules: aa415458b5d7dacd10ac1b324d679f6e17cd8685 + React-cxxreact: bac5da3d62ee98abd3c1bf7338a7cc6205da7f69 + React-jsi: 8bcf5836caa8a759c135ab9ef97f3e023a7b94af + React-jsiexecutor: ae078e9df9c65bcdcf68f9a17656657932d95528 + React-jsinspector: a8939cc6909607eb5e8a5ecfff7c6226984e174d + react-native-appearance: 368f9d1160e3f1d7ecb5945e704affe018deef46 react-native-background-timer: 1b6e6b4e10f1b74c367a1fdc3c72b67c619b222b react-native-document-picker: c36bf5f067a581657ecaf7124dcd921a8be19061 react-native-jitsi-meet: 1ca89538b8ef3158bfd306d60325d7f11ca1451a @@ -713,30 +730,31 @@ SPEC CHECKSUMS: react-native-keyboard-tracking-view: 1ebd24a2b6ca2314549aa51775995678094bffa1 react-native-notifications: 163ddedac6fcc8d850ea15b06abdadcacdff00f1 react-native-orientation-locker: 23918c400376a7043e752c639c122fcf6bce8f1c - react-native-slider: ecc7f4cb0ccb9fa1346707ce76eb8618c9c2b598 + react-native-slider: 39208600e44f885e2d2c0510b5c6435a0f62d087 react-native-splash-screen: 200d11d188e2e78cea3ad319964f6142b6384865 - react-native-video: 6555881252c8ca039760e1cd6df28ac28ffb2baf - react-native-webview: 9f588ea09ede9bd1f5443f4aa4ddfadeb51fcd28 - React-RCTActionSheet: af4d951113b1e068bb30611f91b984a7a73597ff - React-RCTAnimation: 4f518d70bb6890b7c3d9d732f84786d6693ca297 - React-RCTBlob: 072a4888c08de0eef6d04eaa727d25e577e6ff26 - React-RCTImage: 78c5cdf1b2de6cd3cd650dd741868fad19a35528 - React-RCTLinking: 486ed1c9a659c7f9fea213868f8930b9a0a79f07 - React-RCTNetwork: e79599f3160b459da03447e32b8bcca1a0f0f797 - React-RCTSettings: 48b7c5a64ffe0c54c39d59eb7d9036e72305f95a - React-RCTText: 81b62b4e7f11531a5154e4daa5617670d5a2d5de - React-RCTVibration: 8be61459e3749d1fb02cf414edd05b3007622882 - ReactCommon: 4fba5be89efdf0b5720e0adb3d8d7edf6e532db0 + react-native-video: d01ed7ff1e38fa7dcc6c15c94cf505e661b7bfd0 + react-native-webview: 2aadbfef6b9eaa9e89b306ae3e31e6e870a6306d + React-RCTActionSheet: 94671eef55b01a93be735605822ef712d5ea208e + React-RCTAnimation: 524ae33e73de9c0fe6501a7a4bda8e01d26499d9 + React-RCTBlob: 5481c2db702f57207af7e7a9b32d90524b821b72 + React-RCTImage: b472cc0606f8a7c1ac270d6ccc57123a09439a32 + React-RCTLinking: 9cfc7bfdfda078489736695ac476de1f265b9f82 + React-RCTNetwork: 967547e4eeac92e55d41573a82da7fff4003052a + React-RCTSettings: 6ab7911172056b5077dacd9240f057eeeb1b121b + React-RCTText: b8f895b94aa0e7778fef28d13f3d71eed4a10c3d + React-RCTVibration: 262588c97551b0b1c675468cda857466ba5af18f + ReactCommon: c2c63d9290b422ca6ad5b3663073a015dd892ae9 rn-extensions-share: 4bfee75806ad54aadeff1dfa535697a6345a50b8 - rn-fetch-blob: 651b8d076b43d0d7aa294a3d9ec16c00aab8bef9 + rn-fetch-blob: f525a73a78df9ed5d35e67ea65e79d53c15255bc RNAudio: cae2991f2dccb75163f260b60da8051717b959fa RNDeviceInfo: 17e34f6dd902f08d88cbe2c0b7a01be948d43641 RNFastImage: 9b0c22643872bb7494c8d87bbbb66cc4c0d9e7a2 RNFirebase: ac0de8b24c6f91ae9459575491ed6a77327619c6 - RNGestureHandler: 4cb47a93019c1a201df2644413a0a1569a51c8aa - RNImageCropPicker: 0a731d984e64ee4c28bddaa7ce52262e4b80979f - RNLocalize: 62a949d2ec5bee0eb8f39a80a48f01e2f4f67080 - RNReanimated: 6abbbae2e5e72609d85aabd92a982a94566885f1 + RNGestureHandler: a4ddde1ffc6e590c8127b8b7eabfdade45475c74 + RNImageCropPicker: e1d8c3381e5b05a1bdcd13ea57a4f1c020a09cef + RNLocalize: 07eb7a91d10021cdf59d80061ebf3adb8a5b5688 + RNReanimated: b2ab0b693dddd2339bd2f300e770f6302d2e960c + RNRootView: 895a4813dedeaca82db2fa868ca1c333d790e494 RNScreens: 402a99b0a27c0c32f079cec12d3ccbd35e20cd7f RNUserDefaults: 8a4928443510aa99e4ccb3b53f1bf186593d690b RNVectorIcons: 0bb4def82230be1333ddaeee9fcba45f0b288ed4 @@ -755,8 +773,8 @@ SPEC CHECKSUMS: UMReactNativeAdapter: 131ea2b944ade8035f0b54c6570c405f6000548d UMSensorsInterface: 0ed023ce9b96f2ca6fada7bda05b7760da60b293 UMTaskManagerInterface: 8664abd37a00715727e60df9ecd65e42ba47b548 - Yoga: d8c572ddec8d05b7dba08e4e5f1924004a177078 + Yoga: 02036f6383c0008edb7ef0773a0e6beb6ce82bd1 -PODFILE CHECKSUM: 6f25ad58fac2bb13a90b79abad32d214a1bdb256 +PODFILE CHECKSUM: 18d0b080112c72e9cc76a381c1baba1172c6ca4d -COCOAPODS: 1.6.2 +COCOAPODS: 1.8.4 diff --git a/ios/Pods/Headers/Private/BugsnagReactNative/BSG_KSCrashIdentifier.h b/ios/Pods/Headers/Private/BugsnagReactNative/BSG_KSCrashIdentifier.h new file mode 120000 index 0000000000..4ced5a6522 --- /dev/null +++ b/ios/Pods/Headers/Private/BugsnagReactNative/BSG_KSCrashIdentifier.h @@ -0,0 +1 @@ +../../../../../node_modules/bugsnag-react-native/cocoa/vendor/bugsnag-cocoa/Source/KSCrash/Source/KSCrash/Recording/BSG_KSCrashIdentifier.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/KeyCommands/RCTKeyCommandConstants.h b/ios/Pods/Headers/Private/KeyCommands/RCTKeyCommandConstants.h new file mode 120000 index 0000000000..f413098aef --- /dev/null +++ b/ios/Pods/Headers/Private/KeyCommands/RCTKeyCommandConstants.h @@ -0,0 +1 @@ +../../../../../node_modules/react-native-keycommands/ios/KeyCommands/RCTKeyCommandConstants.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/KeyCommands/RCTKeyCommandsManager.h b/ios/Pods/Headers/Private/KeyCommands/RCTKeyCommandsManager.h new file mode 120000 index 0000000000..3ddea8fb69 --- /dev/null +++ b/ios/Pods/Headers/Private/KeyCommands/RCTKeyCommandsManager.h @@ -0,0 +1 @@ +../../../../../node_modules/react-native-keycommands/ios/KeyCommands/RCTKeyCommandsManager.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/RNRootView/RootView.h b/ios/Pods/Headers/Private/RNRootView/RootView.h new file mode 120000 index 0000000000..9ba63a4bb3 --- /dev/null +++ b/ios/Pods/Headers/Private/RNRootView/RootView.h @@ -0,0 +1 @@ +../../../../../node_modules/rn-root-view/ios/RootView.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/Yoga/yoga/Bitfield.h b/ios/Pods/Headers/Private/Yoga/yoga/Bitfield.h new file mode 120000 index 0000000000..494037b5f6 --- /dev/null +++ b/ios/Pods/Headers/Private/Yoga/yoga/Bitfield.h @@ -0,0 +1 @@ +../../../../../../node_modules/react-native/ReactCommon/yoga/yoga/Bitfield.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/Yoga/yoga/CompactValue.h b/ios/Pods/Headers/Private/Yoga/yoga/CompactValue.h new file mode 120000 index 0000000000..5f9fcb5018 --- /dev/null +++ b/ios/Pods/Headers/Private/Yoga/yoga/CompactValue.h @@ -0,0 +1 @@ +../../../../../../node_modules/react-native/ReactCommon/yoga/yoga/CompactValue.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/Yoga/yoga/Utils.h b/ios/Pods/Headers/Private/Yoga/yoga/Utils.h new file mode 120000 index 0000000000..62eb08d8d6 --- /dev/null +++ b/ios/Pods/Headers/Private/Yoga/yoga/Utils.h @@ -0,0 +1 @@ +../../../../../../node_modules/react-native/ReactCommon/yoga/yoga/Utils.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/Yoga/yoga/YGConfig.h b/ios/Pods/Headers/Private/Yoga/yoga/YGConfig.h new file mode 120000 index 0000000000..e2ddc4b786 --- /dev/null +++ b/ios/Pods/Headers/Private/Yoga/yoga/YGConfig.h @@ -0,0 +1 @@ +../../../../../../node_modules/react-native/ReactCommon/yoga/yoga/YGConfig.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/Yoga/yoga/YGEnums.h b/ios/Pods/Headers/Private/Yoga/yoga/YGEnums.h new file mode 120000 index 0000000000..fd4047d3c5 --- /dev/null +++ b/ios/Pods/Headers/Private/Yoga/yoga/YGEnums.h @@ -0,0 +1 @@ +../../../../../../node_modules/react-native/ReactCommon/yoga/yoga/YGEnums.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/Yoga/yoga/YGFloatOptional.h b/ios/Pods/Headers/Private/Yoga/yoga/YGFloatOptional.h new file mode 120000 index 0000000000..cb603e3e7a --- /dev/null +++ b/ios/Pods/Headers/Private/Yoga/yoga/YGFloatOptional.h @@ -0,0 +1 @@ +../../../../../../node_modules/react-native/ReactCommon/yoga/yoga/YGFloatOptional.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/Yoga/yoga/YGLayout.h b/ios/Pods/Headers/Private/Yoga/yoga/YGLayout.h new file mode 120000 index 0000000000..f95b82a39a --- /dev/null +++ b/ios/Pods/Headers/Private/Yoga/yoga/YGLayout.h @@ -0,0 +1 @@ +../../../../../../node_modules/react-native/ReactCommon/yoga/yoga/YGLayout.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/Yoga/yoga/YGMacros.h b/ios/Pods/Headers/Private/Yoga/yoga/YGMacros.h new file mode 120000 index 0000000000..b9f1940aae --- /dev/null +++ b/ios/Pods/Headers/Private/Yoga/yoga/YGMacros.h @@ -0,0 +1 @@ +../../../../../../node_modules/react-native/ReactCommon/yoga/yoga/YGMacros.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/Yoga/yoga/YGNode.h b/ios/Pods/Headers/Private/Yoga/yoga/YGNode.h new file mode 120000 index 0000000000..6dab868afc --- /dev/null +++ b/ios/Pods/Headers/Private/Yoga/yoga/YGNode.h @@ -0,0 +1 @@ +../../../../../../node_modules/react-native/ReactCommon/yoga/yoga/YGNode.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/Yoga/yoga/YGNodePrint.h b/ios/Pods/Headers/Private/Yoga/yoga/YGNodePrint.h new file mode 120000 index 0000000000..fb4f6ebfad --- /dev/null +++ b/ios/Pods/Headers/Private/Yoga/yoga/YGNodePrint.h @@ -0,0 +1 @@ +../../../../../../node_modules/react-native/ReactCommon/yoga/yoga/YGNodePrint.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/Yoga/yoga/YGStyle.h b/ios/Pods/Headers/Private/Yoga/yoga/YGStyle.h new file mode 120000 index 0000000000..dfc50e60f6 --- /dev/null +++ b/ios/Pods/Headers/Private/Yoga/yoga/YGStyle.h @@ -0,0 +1 @@ +../../../../../../node_modules/react-native/ReactCommon/yoga/yoga/YGStyle.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/Yoga/yoga/YGValue.h b/ios/Pods/Headers/Private/Yoga/yoga/YGValue.h new file mode 120000 index 0000000000..8688457739 --- /dev/null +++ b/ios/Pods/Headers/Private/Yoga/yoga/YGValue.h @@ -0,0 +1 @@ +../../../../../../node_modules/react-native/ReactCommon/yoga/yoga/YGValue.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/Yoga/yoga/Yoga-internal.h b/ios/Pods/Headers/Private/Yoga/yoga/Yoga-internal.h new file mode 120000 index 0000000000..5b0d41ee28 --- /dev/null +++ b/ios/Pods/Headers/Private/Yoga/yoga/Yoga-internal.h @@ -0,0 +1 @@ +../../../../../../node_modules/react-native/ReactCommon/yoga/yoga/Yoga-internal.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/Yoga/yoga/Yoga.h b/ios/Pods/Headers/Private/Yoga/yoga/Yoga.h new file mode 120000 index 0000000000..9ea8cc5f07 --- /dev/null +++ b/ios/Pods/Headers/Private/Yoga/yoga/Yoga.h @@ -0,0 +1 @@ +../../../../../../node_modules/react-native/ReactCommon/yoga/yoga/Yoga.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/Yoga/yoga/event.h b/ios/Pods/Headers/Private/Yoga/yoga/event.h new file mode 120000 index 0000000000..eab97aef03 --- /dev/null +++ b/ios/Pods/Headers/Private/Yoga/yoga/event.h @@ -0,0 +1 @@ +../../../../../../node_modules/react-native/ReactCommon/yoga/yoga/event/event.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/Yoga/yoga/experiments-inl.h b/ios/Pods/Headers/Private/Yoga/yoga/experiments-inl.h new file mode 120000 index 0000000000..c3d7802de9 --- /dev/null +++ b/ios/Pods/Headers/Private/Yoga/yoga/experiments-inl.h @@ -0,0 +1 @@ +../../../../../../node_modules/react-native/ReactCommon/yoga/yoga/internal/experiments-inl.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/Yoga/yoga/experiments.h b/ios/Pods/Headers/Private/Yoga/yoga/experiments.h new file mode 120000 index 0000000000..d255008f27 --- /dev/null +++ b/ios/Pods/Headers/Private/Yoga/yoga/experiments.h @@ -0,0 +1 @@ +../../../../../../node_modules/react-native/ReactCommon/yoga/yoga/internal/experiments.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/Yoga/yoga/log.h b/ios/Pods/Headers/Private/Yoga/yoga/log.h new file mode 120000 index 0000000000..658bfcabdd --- /dev/null +++ b/ios/Pods/Headers/Private/Yoga/yoga/log.h @@ -0,0 +1 @@ +../../../../../../node_modules/react-native/ReactCommon/yoga/yoga/log.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/react-native-appearance/RNCAppearance.h b/ios/Pods/Headers/Private/react-native-appearance/RNCAppearance.h new file mode 120000 index 0000000000..c720d54c52 --- /dev/null +++ b/ios/Pods/Headers/Private/react-native-appearance/RNCAppearance.h @@ -0,0 +1 @@ +../../../../../node_modules/react-native-appearance/ios/Appearance/RNCAppearance.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/react-native-appearance/RNCAppearanceProvider.h b/ios/Pods/Headers/Private/react-native-appearance/RNCAppearanceProvider.h new file mode 120000 index 0000000000..e20e9a22c3 --- /dev/null +++ b/ios/Pods/Headers/Private/react-native-appearance/RNCAppearanceProvider.h @@ -0,0 +1 @@ +../../../../../node_modules/react-native-appearance/ios/Appearance/RNCAppearanceProvider.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/react-native-appearance/RNCAppearanceProviderManager.h b/ios/Pods/Headers/Private/react-native-appearance/RNCAppearanceProviderManager.h new file mode 120000 index 0000000000..5e0095d4aa --- /dev/null +++ b/ios/Pods/Headers/Private/react-native-appearance/RNCAppearanceProviderManager.h @@ -0,0 +1 @@ +../../../../../node_modules/react-native-appearance/ios/Appearance/RNCAppearanceProviderManager.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/react-native-webview/RNCUIWebView.h b/ios/Pods/Headers/Private/react-native-webview/RNCUIWebView.h deleted file mode 120000 index 8cc7df66a4..0000000000 --- a/ios/Pods/Headers/Private/react-native-webview/RNCUIWebView.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../node_modules/react-native-webview/ios/RNCUIWebView.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/react-native-webview/RNCUIWebViewManager.h b/ios/Pods/Headers/Private/react-native-webview/RNCUIWebViewManager.h deleted file mode 120000 index 842e4fdc6c..0000000000 --- a/ios/Pods/Headers/Private/react-native-webview/RNCUIWebViewManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../node_modules/react-native-webview/ios/RNCUIWebViewManager.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/react-native-webview/RNCWKWebView.h b/ios/Pods/Headers/Private/react-native-webview/RNCWKWebView.h deleted file mode 120000 index 939a424642..0000000000 --- a/ios/Pods/Headers/Private/react-native-webview/RNCWKWebView.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../node_modules/react-native-webview/ios/RNCWKWebView.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/react-native-webview/RNCWKWebViewManager.h b/ios/Pods/Headers/Private/react-native-webview/RNCWKWebViewManager.h deleted file mode 120000 index 03f019f16d..0000000000 --- a/ios/Pods/Headers/Private/react-native-webview/RNCWKWebViewManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../node_modules/react-native-webview/ios/RNCWKWebViewManager.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/react-native-webview/RNCWebView.h b/ios/Pods/Headers/Private/react-native-webview/RNCWebView.h new file mode 120000 index 0000000000..c814fcebc1 --- /dev/null +++ b/ios/Pods/Headers/Private/react-native-webview/RNCWebView.h @@ -0,0 +1 @@ +../../../../../node_modules/react-native-webview/ios/RNCWebView.h \ No newline at end of file diff --git a/ios/Pods/Headers/Private/react-native-webview/RNCWebViewManager.h b/ios/Pods/Headers/Private/react-native-webview/RNCWebViewManager.h new file mode 120000 index 0000000000..c20dd096ef --- /dev/null +++ b/ios/Pods/Headers/Private/react-native-webview/RNCWebViewManager.h @@ -0,0 +1 @@ +../../../../../node_modules/react-native-webview/ios/RNCWebViewManager.h \ No newline at end of file diff --git a/ios/Pods/Headers/Public/KeyCommands/RCTKeyCommandConstants.h b/ios/Pods/Headers/Public/KeyCommands/RCTKeyCommandConstants.h new file mode 120000 index 0000000000..f413098aef --- /dev/null +++ b/ios/Pods/Headers/Public/KeyCommands/RCTKeyCommandConstants.h @@ -0,0 +1 @@ +../../../../../node_modules/react-native-keycommands/ios/KeyCommands/RCTKeyCommandConstants.h \ No newline at end of file diff --git a/ios/Pods/Headers/Public/KeyCommands/RCTKeyCommandsManager.h b/ios/Pods/Headers/Public/KeyCommands/RCTKeyCommandsManager.h new file mode 120000 index 0000000000..3ddea8fb69 --- /dev/null +++ b/ios/Pods/Headers/Public/KeyCommands/RCTKeyCommandsManager.h @@ -0,0 +1 @@ +../../../../../node_modules/react-native-keycommands/ios/KeyCommands/RCTKeyCommandsManager.h \ No newline at end of file diff --git a/ios/Pods/Headers/Public/RNRootView/RootView.h b/ios/Pods/Headers/Public/RNRootView/RootView.h new file mode 120000 index 0000000000..9ba63a4bb3 --- /dev/null +++ b/ios/Pods/Headers/Public/RNRootView/RootView.h @@ -0,0 +1 @@ +../../../../../node_modules/rn-root-view/ios/RootView.h \ No newline at end of file diff --git a/ios/Pods/Headers/Public/Yoga/yoga/YGEnums.h b/ios/Pods/Headers/Public/Yoga/yoga/YGEnums.h new file mode 120000 index 0000000000..fd4047d3c5 --- /dev/null +++ b/ios/Pods/Headers/Public/Yoga/yoga/YGEnums.h @@ -0,0 +1 @@ +../../../../../../node_modules/react-native/ReactCommon/yoga/yoga/YGEnums.h \ No newline at end of file diff --git a/ios/Pods/Headers/Public/Yoga/yoga/YGMacros.h b/ios/Pods/Headers/Public/Yoga/yoga/YGMacros.h new file mode 120000 index 0000000000..b9f1940aae --- /dev/null +++ b/ios/Pods/Headers/Public/Yoga/yoga/YGMacros.h @@ -0,0 +1 @@ +../../../../../../node_modules/react-native/ReactCommon/yoga/yoga/YGMacros.h \ No newline at end of file diff --git a/ios/Pods/Headers/Public/Yoga/yoga/YGValue.h b/ios/Pods/Headers/Public/Yoga/yoga/YGValue.h new file mode 120000 index 0000000000..8688457739 --- /dev/null +++ b/ios/Pods/Headers/Public/Yoga/yoga/YGValue.h @@ -0,0 +1 @@ +../../../../../../node_modules/react-native/ReactCommon/yoga/yoga/YGValue.h \ No newline at end of file diff --git a/ios/Pods/Headers/Public/Yoga/yoga/Yoga.h b/ios/Pods/Headers/Public/Yoga/yoga/Yoga.h new file mode 120000 index 0000000000..9ea8cc5f07 --- /dev/null +++ b/ios/Pods/Headers/Public/Yoga/yoga/Yoga.h @@ -0,0 +1 @@ +../../../../../../node_modules/react-native/ReactCommon/yoga/yoga/Yoga.h \ No newline at end of file diff --git a/ios/Pods/Headers/Public/react-native-appearance/RNCAppearance.h b/ios/Pods/Headers/Public/react-native-appearance/RNCAppearance.h new file mode 120000 index 0000000000..c720d54c52 --- /dev/null +++ b/ios/Pods/Headers/Public/react-native-appearance/RNCAppearance.h @@ -0,0 +1 @@ +../../../../../node_modules/react-native-appearance/ios/Appearance/RNCAppearance.h \ No newline at end of file diff --git a/ios/Pods/Headers/Public/react-native-appearance/RNCAppearanceProvider.h b/ios/Pods/Headers/Public/react-native-appearance/RNCAppearanceProvider.h new file mode 120000 index 0000000000..e20e9a22c3 --- /dev/null +++ b/ios/Pods/Headers/Public/react-native-appearance/RNCAppearanceProvider.h @@ -0,0 +1 @@ +../../../../../node_modules/react-native-appearance/ios/Appearance/RNCAppearanceProvider.h \ No newline at end of file diff --git a/ios/Pods/Headers/Public/react-native-appearance/RNCAppearanceProviderManager.h b/ios/Pods/Headers/Public/react-native-appearance/RNCAppearanceProviderManager.h new file mode 120000 index 0000000000..5e0095d4aa --- /dev/null +++ b/ios/Pods/Headers/Public/react-native-appearance/RNCAppearanceProviderManager.h @@ -0,0 +1 @@ +../../../../../node_modules/react-native-appearance/ios/Appearance/RNCAppearanceProviderManager.h \ No newline at end of file diff --git a/ios/Pods/Headers/Public/react-native-webview/RNCUIWebView.h b/ios/Pods/Headers/Public/react-native-webview/RNCUIWebView.h deleted file mode 120000 index 8cc7df66a4..0000000000 --- a/ios/Pods/Headers/Public/react-native-webview/RNCUIWebView.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../node_modules/react-native-webview/ios/RNCUIWebView.h \ No newline at end of file diff --git a/ios/Pods/Headers/Public/react-native-webview/RNCUIWebViewManager.h b/ios/Pods/Headers/Public/react-native-webview/RNCUIWebViewManager.h deleted file mode 120000 index 842e4fdc6c..0000000000 --- a/ios/Pods/Headers/Public/react-native-webview/RNCUIWebViewManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../node_modules/react-native-webview/ios/RNCUIWebViewManager.h \ No newline at end of file diff --git a/ios/Pods/Headers/Public/react-native-webview/RNCWKWebView.h b/ios/Pods/Headers/Public/react-native-webview/RNCWKWebView.h deleted file mode 120000 index 939a424642..0000000000 --- a/ios/Pods/Headers/Public/react-native-webview/RNCWKWebView.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../node_modules/react-native-webview/ios/RNCWKWebView.h \ No newline at end of file diff --git a/ios/Pods/Headers/Public/react-native-webview/RNCWKWebViewManager.h b/ios/Pods/Headers/Public/react-native-webview/RNCWKWebViewManager.h deleted file mode 120000 index 03f019f16d..0000000000 --- a/ios/Pods/Headers/Public/react-native-webview/RNCWKWebViewManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../node_modules/react-native-webview/ios/RNCWKWebViewManager.h \ No newline at end of file diff --git a/ios/Pods/Headers/Public/react-native-webview/RNCWebView.h b/ios/Pods/Headers/Public/react-native-webview/RNCWebView.h new file mode 120000 index 0000000000..c814fcebc1 --- /dev/null +++ b/ios/Pods/Headers/Public/react-native-webview/RNCWebView.h @@ -0,0 +1 @@ +../../../../../node_modules/react-native-webview/ios/RNCWebView.h \ No newline at end of file diff --git a/ios/Pods/Headers/Public/react-native-webview/RNCWebViewManager.h b/ios/Pods/Headers/Public/react-native-webview/RNCWebViewManager.h new file mode 120000 index 0000000000..c20dd096ef --- /dev/null +++ b/ios/Pods/Headers/Public/react-native-webview/RNCWebViewManager.h @@ -0,0 +1 @@ +../../../../../node_modules/react-native-webview/ios/RNCWebViewManager.h \ No newline at end of file diff --git a/ios/Pods/Local Podspecs/BugsnagReactNative.podspec.json b/ios/Pods/Local Podspecs/BugsnagReactNative.podspec.json index c913222992..5412ef4596 100644 --- a/ios/Pods/Local Podspecs/BugsnagReactNative.podspec.json +++ b/ios/Pods/Local Podspecs/BugsnagReactNative.podspec.json @@ -1,6 +1,6 @@ { "name": "BugsnagReactNative", - "version": "2.22.4", + "version": "2.23.2", "license": "MIT", "summary": "Bugsnag crash and error reporting for React Native apps", "authors": { @@ -9,7 +9,7 @@ "homepage": "https://docs.bugsnag.com/platforms/react-native", "source": { "git": "https://github.com/bugsnag/bugsnag-react-native.git", - "tag": "v2.22.4" + "tag": "v2.23.2" }, "platforms": { "ios": "8.0" diff --git a/ios/Pods/Local Podspecs/FBLazyVector.podspec.json b/ios/Pods/Local Podspecs/FBLazyVector.podspec.json index af1743b697..8c140ca396 100644 --- a/ios/Pods/Local Podspecs/FBLazyVector.podspec.json +++ b/ios/Pods/Local Podspecs/FBLazyVector.podspec.json @@ -1,6 +1,6 @@ { "name": "FBLazyVector", - "version": "0.61.1", + "version": "0.61.3", "summary": "-", "homepage": "http://facebook.github.io/react-native/", "license": "MIT", @@ -11,7 +11,7 @@ }, "source": { "git": "https://github.com/facebook/react-native.git", - "tag": "v0.61.1" + "tag": "v0.61.3" }, "source_files": "**/*.{c,h,m,mm,cpp}", "header_dir": "FBLazyVector" diff --git a/ios/Pods/Local Podspecs/FBReactNativeSpec.podspec.json b/ios/Pods/Local Podspecs/FBReactNativeSpec.podspec.json index 3508615a68..01a90ecfa9 100644 --- a/ios/Pods/Local Podspecs/FBReactNativeSpec.podspec.json +++ b/ios/Pods/Local Podspecs/FBReactNativeSpec.podspec.json @@ -1,6 +1,6 @@ { "name": "FBReactNativeSpec", - "version": "0.61.1", + "version": "0.61.3", "summary": "-", "homepage": "http://facebook.github.io/react-native/", "license": "MIT", @@ -12,7 +12,7 @@ "compiler_flags": "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness", "source": { "git": "https://github.com/facebook/react-native.git", - "tag": "v0.61.1" + "tag": "v0.61.3" }, "source_files": "**/*.{c,h,m,mm,cpp}", "header_dir": "FBReactNativeSpec", @@ -26,19 +26,19 @@ "2018.10.22.00" ], "RCTRequired": [ - "0.61.1" + "0.61.3" ], "RCTTypeSafety": [ - "0.61.1" + "0.61.3" ], "React-Core": [ - "0.61.1" + "0.61.3" ], "React-jsi": [ - "0.61.1" + "0.61.3" ], "ReactCommon/turbomodule/core": [ - "0.61.1" + "0.61.3" ] } } diff --git a/ios/Pods/Local Podspecs/KeyCommands.podspec.json b/ios/Pods/Local Podspecs/KeyCommands.podspec.json new file mode 100644 index 0000000000..8c64f2a509 --- /dev/null +++ b/ios/Pods/Local Podspecs/KeyCommands.podspec.json @@ -0,0 +1,21 @@ +{ + "name": "KeyCommands", + "version": "2.0.3", + "summary": "iOS UIKeyCommands.", + "description": "iOS UIKeyCommands.", + "license": "MIT", + "authors": "djorkaeffalexandre", + "homepage": "https://github.com/RocketChat/react-native-keycommands", + "source": { + "git": "https://github.com/RocketChat/react-native-keycommands.git" + }, + "platforms": { + "ios": "7.0" + }, + "source_files": "ios/**/*.{h,m}", + "dependencies": { + "React": [ + + ] + } +} diff --git a/ios/Pods/Local Podspecs/RCTRequired.podspec.json b/ios/Pods/Local Podspecs/RCTRequired.podspec.json index 4fb7ebbd1d..5c3f65c46a 100644 --- a/ios/Pods/Local Podspecs/RCTRequired.podspec.json +++ b/ios/Pods/Local Podspecs/RCTRequired.podspec.json @@ -1,6 +1,6 @@ { "name": "RCTRequired", - "version": "0.61.1", + "version": "0.61.3", "summary": "-", "homepage": "http://facebook.github.io/react-native/", "license": "MIT", @@ -11,7 +11,7 @@ }, "source": { "git": "https://github.com/facebook/react-native.git", - "tag": "v0.61.1" + "tag": "v0.61.3" }, "source_files": "**/*.{c,h,m,mm,cpp}", "header_dir": "RCTRequired" diff --git a/ios/Pods/Local Podspecs/RCTTypeSafety.podspec.json b/ios/Pods/Local Podspecs/RCTTypeSafety.podspec.json index d8bb57473e..1022f24072 100644 --- a/ios/Pods/Local Podspecs/RCTTypeSafety.podspec.json +++ b/ios/Pods/Local Podspecs/RCTTypeSafety.podspec.json @@ -1,6 +1,6 @@ { "name": "RCTTypeSafety", - "version": "0.61.1", + "version": "0.61.3", "summary": "-", "homepage": "http://facebook.github.io/react-native/", "license": "MIT", @@ -12,7 +12,7 @@ "compiler_flags": "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32", "source": { "git": "https://github.com/facebook/react-native.git", - "tag": "v0.61.1" + "tag": "v0.61.3" }, "source_files": "**/*.{c,h,m,mm,cpp}", "header_dir": "RCTTypeSafety", @@ -23,16 +23,16 @@ }, "dependencies": { "FBLazyVector": [ - "0.61.1" + "0.61.3" ], "Folly": [ "2018.10.22.00" ], "RCTRequired": [ - "0.61.1" + "0.61.3" ], "React-Core": [ - "0.61.1" + "0.61.3" ] } } diff --git a/ios/Pods/Local Podspecs/RNGestureHandler.podspec.json b/ios/Pods/Local Podspecs/RNGestureHandler.podspec.json index 43d1d84f4a..28266ad462 100644 --- a/ios/Pods/Local Podspecs/RNGestureHandler.podspec.json +++ b/ios/Pods/Local Podspecs/RNGestureHandler.podspec.json @@ -1,6 +1,6 @@ { "name": "RNGestureHandler", - "version": "1.4.1", + "version": "1.5.0", "summary": "Experimental implementation of a new declarative API for gesture handling in react-native", "homepage": "https://github.com/kmagiera/react-native-gesture-handler", "license": "MIT", @@ -13,7 +13,7 @@ }, "source": { "git": "https://github.com/kmagiera/react-native-gesture-handler", - "tag": "1.4.1" + "tag": "1.5.0" }, "source_files": "ios/**/*.{h,m}", "dependencies": { diff --git a/ios/Pods/Local Podspecs/RNImageCropPicker.podspec.json b/ios/Pods/Local Podspecs/RNImageCropPicker.podspec.json index 1a7f4e9136..7927ba4207 100644 --- a/ios/Pods/Local Podspecs/RNImageCropPicker.podspec.json +++ b/ios/Pods/Local Podspecs/RNImageCropPicker.podspec.json @@ -1,6 +1,6 @@ { "name": "RNImageCropPicker", - "version": "0.25.0", + "version": "0.26.1", "summary": "Select single or multiple images, with cropping option", "requires_arc": true, "license": "MIT", diff --git a/ios/Pods/Local Podspecs/RNLocalize.podspec.json b/ios/Pods/Local Podspecs/RNLocalize.podspec.json index b0d6fd726b..c9bb9f2ad3 100644 --- a/ios/Pods/Local Podspecs/RNLocalize.podspec.json +++ b/ios/Pods/Local Podspecs/RNLocalize.podspec.json @@ -5,18 +5,19 @@ ] }, - "version": "1.1.4", + "version": "1.3.1", "license": "MIT", - "description": "A toolbox for your React Native app localization.", "summary": "A toolbox for your React Native app localization.", "authors": "Mathieu Acthernoene ", "homepage": "https://github.com/react-native-community/react-native-localize", "platforms": { - "ios": "9.0" + "ios": "9.0", + "tvos": "11.0" }, + "requires_arc": true, "source": { "git": "https://github.com/react-native-community/react-native-localize.git", - "tag": "1.1.4" + "tag": "1.3.1" }, "source_files": "ios/*.{h,m}" } diff --git a/ios/Pods/Local Podspecs/RNReanimated.podspec.json b/ios/Pods/Local Podspecs/RNReanimated.podspec.json index 9e510bf32d..5f7a608b8c 100644 --- a/ios/Pods/Local Podspecs/RNReanimated.podspec.json +++ b/ios/Pods/Local Podspecs/RNReanimated.podspec.json @@ -1,6 +1,6 @@ { "name": "RNReanimated", - "version": "1.3.0", + "version": "1.4.0", "summary": "More powerful alternative to Animated library for React Native.", "description": "RNReanimated", "homepage": "https://github.com/kmagiera/react-native-reanimated", @@ -9,11 +9,12 @@ "author": "author@domain.cn" }, "platforms": { - "ios": "9.0" + "ios": "9.0", + "tvos": "9.0" }, "source": { "git": "https://github.com/kmagiera/react-native-reanimated.git", - "tag": "1.3.0" + "tag": "1.4.0" }, "source_files": "ios/**/*.{h,m}", "requires_arc": true, diff --git a/ios/Pods/Local Podspecs/RNRootView.podspec.json b/ios/Pods/Local Podspecs/RNRootView.podspec.json new file mode 100644 index 0000000000..72c71753a0 --- /dev/null +++ b/ios/Pods/Local Podspecs/RNRootView.podspec.json @@ -0,0 +1,31 @@ +{ + "name": "RNRootView", + "version": "1.0.3", + "summary": "React Native Root View", + "description": "Change Root View Background color on React Native", + "license": "MIT", + "authors": { + "name": "Djorkaeff Alexandre", + "email": "djorkaeff.alexandre@rocket.chat" + }, + "homepage": "https://github.com/RocketChat/rn-root-view", + "source": { + "git": "https://github.com/RocketChat/rn-root-view.git", + "tag": "master" + }, + "requires_arc": true, + "platforms": { + "ios": "7.0" + }, + "preserve_paths": [ + "README.md", + "package.json", + "index.js" + ], + "source_files": "iOS/*.{h,m}", + "dependencies": { + "React": [ + + ] + } +} diff --git a/ios/Pods/Local Podspecs/React-Core.podspec.json b/ios/Pods/Local Podspecs/React-Core.podspec.json index 02d8cda1da..d3a5130ce6 100644 --- a/ios/Pods/Local Podspecs/React-Core.podspec.json +++ b/ios/Pods/Local Podspecs/React-Core.podspec.json @@ -1,6 +1,6 @@ { "name": "React-Core", - "version": "0.61.1", + "version": "0.61.3", "summary": "The core of React Native.", "homepage": "http://facebook.github.io/react-native/", "license": "MIT", @@ -11,7 +11,7 @@ }, "source": { "git": "https://github.com/facebook/react-native.git", - "tag": "v0.61.1" + "tag": "v0.61.3" }, "compiler_flags": "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation", "header_dir": "React", @@ -29,13 +29,13 @@ "2018.10.22.00" ], "React-cxxreact": [ - "0.61.1" + "0.61.3" ], "React-jsi": [ - "0.61.1" + "0.61.3" ], "React-jsiexecutor": [ - "0.61.1" + "0.61.3" ], "Yoga": [ @@ -78,13 +78,13 @@ ], "dependencies": { "React-Core/Default": [ - "0.61.1" + "0.61.3" ], "React-Core/RCTWebSocket": [ - "0.61.1" + "0.61.3" ], "React-jsinspector": [ - "0.61.1" + "0.61.3" ] } }, @@ -93,7 +93,7 @@ "source_files": "Libraries/WebSocket/*.{h,m}", "dependencies": { "React-Core/Default": [ - "0.61.1" + "0.61.3" ] } }, diff --git a/ios/Pods/Local Podspecs/React-CoreModules.podspec.json b/ios/Pods/Local Podspecs/React-CoreModules.podspec.json index 1e8948d2f6..b26f314b54 100644 --- a/ios/Pods/Local Podspecs/React-CoreModules.podspec.json +++ b/ios/Pods/Local Podspecs/React-CoreModules.podspec.json @@ -1,6 +1,6 @@ { "name": "React-CoreModules", - "version": "0.61.1", + "version": "0.61.3", "summary": "-", "homepage": "http://facebook.github.io/react-native/", "license": "MIT", @@ -12,7 +12,7 @@ "compiler_flags": "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-nullability-completeness", "source": { "git": "https://github.com/facebook/react-native.git", - "tag": "v0.61.1" + "tag": "v0.61.3" }, "source_files": "**/*.{c,m,mm,cpp}", "header_dir": "CoreModules", @@ -23,22 +23,22 @@ }, "dependencies": { "FBReactNativeSpec": [ - "0.61.1" + "0.61.3" ], "RCTTypeSafety": [ - "0.61.1" + "0.61.3" ], "React-RCTImage": [ - "0.61.1" + "0.61.3" ], "Folly": [ "2018.10.22.00" ], "React-Core/CoreModulesHeaders": [ - "0.61.1" + "0.61.3" ], "ReactCommon/turbomodule/core": [ - "0.61.1" + "0.61.3" ] } } diff --git a/ios/Pods/Local Podspecs/React-RCTActionSheet.podspec.json b/ios/Pods/Local Podspecs/React-RCTActionSheet.podspec.json index e3a2cd645f..07ca9da9b2 100644 --- a/ios/Pods/Local Podspecs/React-RCTActionSheet.podspec.json +++ b/ios/Pods/Local Podspecs/React-RCTActionSheet.podspec.json @@ -1,6 +1,6 @@ { "name": "React-RCTActionSheet", - "version": "0.61.1", + "version": "0.61.3", "summary": "An API for displaying iOS action sheets and share sheets.", "homepage": "http://facebook.github.io/react-native/", "documentation_url": "https://facebook.github.io/react-native/docs/actionsheetios", @@ -12,7 +12,7 @@ }, "source": { "git": "https://github.com/facebook/react-native.git", - "tag": "v0.61.1" + "tag": "v0.61.3" }, "source_files": "*.{m}", "preserve_paths": [ @@ -23,7 +23,7 @@ "header_dir": "RCTActionSheet", "dependencies": { "React-Core/RCTActionSheetHeaders": [ - "0.61.1" + "0.61.3" ] } } diff --git a/ios/Pods/Local Podspecs/React-RCTAnimation.podspec.json b/ios/Pods/Local Podspecs/React-RCTAnimation.podspec.json index 40a6737570..f0d5f8afb5 100644 --- a/ios/Pods/Local Podspecs/React-RCTAnimation.podspec.json +++ b/ios/Pods/Local Podspecs/React-RCTAnimation.podspec.json @@ -1,6 +1,6 @@ { "name": "React-RCTAnimation", - "version": "0.61.1", + "version": "0.61.3", "summary": "A native driver for the Animated API.", "homepage": "http://facebook.github.io/react-native/", "license": "MIT", @@ -11,7 +11,7 @@ }, "source": { "git": "https://github.com/facebook/react-native.git", - "tag": "v0.61.1" + "tag": "v0.61.3" }, "source_files": "{Drivers/*,Nodes/*,*}.{m}", "preserve_paths": [ @@ -22,7 +22,7 @@ "header_dir": "RCTAnimation", "dependencies": { "React-Core/RCTAnimationHeaders": [ - "0.61.1" + "0.61.3" ] } } diff --git a/ios/Pods/Local Podspecs/React-RCTBlob.podspec.json b/ios/Pods/Local Podspecs/React-RCTBlob.podspec.json index d36190d253..aaf9800e24 100644 --- a/ios/Pods/Local Podspecs/React-RCTBlob.podspec.json +++ b/ios/Pods/Local Podspecs/React-RCTBlob.podspec.json @@ -1,6 +1,6 @@ { "name": "React-RCTBlob", - "version": "0.61.1", + "version": "0.61.3", "summary": "An API for displaying iOS action sheets and share sheets.", "homepage": "http://facebook.github.io/react-native/", "license": "MIT", @@ -11,7 +11,7 @@ }, "source": { "git": "https://github.com/facebook/react-native.git", - "tag": "v0.61.1" + "tag": "v0.61.3" }, "source_files": [ "*.{m,mm}", @@ -25,16 +25,16 @@ "header_dir": "RCTBlob", "dependencies": { "React-Core/RCTBlobHeaders": [ - "0.61.1" + "0.61.3" ], "React-Core/RCTWebSocket": [ - "0.61.1" + "0.61.3" ], "React-RCTNetwork": [ - "0.61.1" + "0.61.3" ], "React-jsi": [ - "0.61.1" + "0.61.3" ] } } diff --git a/ios/Pods/Local Podspecs/React-RCTImage.podspec.json b/ios/Pods/Local Podspecs/React-RCTImage.podspec.json index f13557b194..48d0c64e06 100644 --- a/ios/Pods/Local Podspecs/React-RCTImage.podspec.json +++ b/ios/Pods/Local Podspecs/React-RCTImage.podspec.json @@ -1,6 +1,6 @@ { "name": "React-RCTImage", - "version": "0.61.1", + "version": "0.61.3", "summary": "A React component for displaying different types of images.", "homepage": "http://facebook.github.io/react-native/", "documentation_url": "https://facebook.github.io/react-native/docs/image", @@ -12,7 +12,7 @@ }, "source": { "git": "https://github.com/facebook/react-native.git", - "tag": "v0.61.1" + "tag": "v0.61.3" }, "source_files": "*.{m}", "preserve_paths": [ @@ -23,10 +23,10 @@ "header_dir": "RCTImage", "dependencies": { "React-Core/RCTImageHeaders": [ - "0.61.1" + "0.61.3" ], "React-RCTNetwork": [ - "0.61.1" + "0.61.3" ] } } diff --git a/ios/Pods/Local Podspecs/React-RCTLinking.podspec.json b/ios/Pods/Local Podspecs/React-RCTLinking.podspec.json index 5a08f67f98..0541f5ba58 100644 --- a/ios/Pods/Local Podspecs/React-RCTLinking.podspec.json +++ b/ios/Pods/Local Podspecs/React-RCTLinking.podspec.json @@ -1,6 +1,6 @@ { "name": "React-RCTLinking", - "version": "0.61.1", + "version": "0.61.3", "summary": "A general interface to interact with both incoming and outgoing app links.", "homepage": "http://facebook.github.io/react-native/", "documentation_url": "https://facebook.github.io/react-native/docs/linking", @@ -12,7 +12,7 @@ }, "source": { "git": "https://github.com/facebook/react-native.git", - "tag": "v0.61.1" + "tag": "v0.61.3" }, "source_files": "*.{m}", "preserve_paths": [ @@ -23,7 +23,7 @@ "header_dir": "RCTLinking", "dependencies": { "React-Core/RCTLinkingHeaders": [ - "0.61.1" + "0.61.3" ] } } diff --git a/ios/Pods/Local Podspecs/React-RCTNetwork.podspec.json b/ios/Pods/Local Podspecs/React-RCTNetwork.podspec.json index 0453312969..7cb7b473e4 100644 --- a/ios/Pods/Local Podspecs/React-RCTNetwork.podspec.json +++ b/ios/Pods/Local Podspecs/React-RCTNetwork.podspec.json @@ -1,6 +1,6 @@ { "name": "React-RCTNetwork", - "version": "0.61.1", + "version": "0.61.3", "summary": "The networking library of React Native.", "homepage": "http://facebook.github.io/react-native/", "license": "MIT", @@ -11,7 +11,7 @@ }, "source": { "git": "https://github.com/facebook/react-native.git", - "tag": "v0.61.1" + "tag": "v0.61.3" }, "source_files": "*.{m,mm}", "preserve_paths": [ @@ -22,7 +22,7 @@ "header_dir": "RCTNetwork", "dependencies": { "React-Core/RCTNetworkHeaders": [ - "0.61.1" + "0.61.3" ] } } diff --git a/ios/Pods/Local Podspecs/React-RCTSettings.podspec.json b/ios/Pods/Local Podspecs/React-RCTSettings.podspec.json index eff6745543..58107e855e 100644 --- a/ios/Pods/Local Podspecs/React-RCTSettings.podspec.json +++ b/ios/Pods/Local Podspecs/React-RCTSettings.podspec.json @@ -1,6 +1,6 @@ { "name": "React-RCTSettings", - "version": "0.61.1", + "version": "0.61.3", "summary": "A wrapper for NSUserDefaults, a persistent key-value store available only on iOS.", "homepage": "http://facebook.github.io/react-native/", "documentation_url": "https://facebook.github.io/react-native/docs/settings", @@ -12,7 +12,7 @@ }, "source": { "git": "https://github.com/facebook/react-native.git", - "tag": "v0.61.1" + "tag": "v0.61.3" }, "source_files": "*.{m}", "preserve_paths": [ @@ -23,7 +23,7 @@ "header_dir": "RCTSettings", "dependencies": { "React-Core/RCTSettingsHeaders": [ - "0.61.1" + "0.61.3" ] } } diff --git a/ios/Pods/Local Podspecs/React-RCTText.podspec.json b/ios/Pods/Local Podspecs/React-RCTText.podspec.json index 38196fff9a..327b66b32f 100644 --- a/ios/Pods/Local Podspecs/React-RCTText.podspec.json +++ b/ios/Pods/Local Podspecs/React-RCTText.podspec.json @@ -1,6 +1,6 @@ { "name": "React-RCTText", - "version": "0.61.1", + "version": "0.61.3", "summary": "A React component for displaying text.", "homepage": "http://facebook.github.io/react-native/", "documentation_url": "https://facebook.github.io/react-native/docs/text", @@ -12,7 +12,7 @@ }, "source": { "git": "https://github.com/facebook/react-native.git", - "tag": "v0.61.1" + "tag": "v0.61.3" }, "source_files": "**/*.{h,m}", "preserve_paths": [ @@ -23,7 +23,7 @@ "header_dir": "RCTText", "dependencies": { "React-Core/RCTTextHeaders": [ - "0.61.1" + "0.61.3" ] } } diff --git a/ios/Pods/Local Podspecs/React-RCTVibration.podspec.json b/ios/Pods/Local Podspecs/React-RCTVibration.podspec.json index dce4cff4a7..baf39c38f4 100644 --- a/ios/Pods/Local Podspecs/React-RCTVibration.podspec.json +++ b/ios/Pods/Local Podspecs/React-RCTVibration.podspec.json @@ -1,6 +1,6 @@ { "name": "React-RCTVibration", - "version": "0.61.1", + "version": "0.61.3", "summary": "An API for controlling the vibration hardware of the device.", "homepage": "http://facebook.github.io/react-native/", "documentation_url": "https://facebook.github.io/react-native/docs/vibration", @@ -12,7 +12,7 @@ }, "source": { "git": "https://github.com/facebook/react-native.git", - "tag": "v0.61.1" + "tag": "v0.61.3" }, "source_files": "*.{m}", "preserve_paths": [ @@ -23,7 +23,7 @@ "header_dir": "RCTVibration", "dependencies": { "React-Core/RCTVibrationHeaders": [ - "0.61.1" + "0.61.3" ] } } diff --git a/ios/Pods/Local Podspecs/React-cxxreact.podspec.json b/ios/Pods/Local Podspecs/React-cxxreact.podspec.json index 10de8adf25..472fa710a1 100644 --- a/ios/Pods/Local Podspecs/React-cxxreact.podspec.json +++ b/ios/Pods/Local Podspecs/React-cxxreact.podspec.json @@ -1,6 +1,6 @@ { "name": "React-cxxreact", - "version": "0.61.1", + "version": "0.61.3", "summary": "-", "homepage": "http://facebook.github.io/react-native/", "license": "MIT", @@ -11,7 +11,7 @@ }, "source": { "git": "https://github.com/facebook/react-native.git", - "tag": "v0.61.1" + "tag": "v0.61.3" }, "source_files": "*.{cpp,h}", "exclude_files": "SampleCxxModule.*", @@ -34,7 +34,7 @@ ], "React-jsinspector": [ - "0.61.1" + "0.61.3" ] } } diff --git a/ios/Pods/Local Podspecs/React-jsi.podspec.json b/ios/Pods/Local Podspecs/React-jsi.podspec.json index 3853cae044..a436429e22 100644 --- a/ios/Pods/Local Podspecs/React-jsi.podspec.json +++ b/ios/Pods/Local Podspecs/React-jsi.podspec.json @@ -1,6 +1,6 @@ { "name": "React-jsi", - "version": "0.61.1", + "version": "0.61.3", "summary": "-", "homepage": "http://facebook.github.io/react-native/", "license": "MIT", @@ -11,7 +11,7 @@ }, "source": { "git": "https://github.com/facebook/react-native.git", - "tag": "v0.61.1" + "tag": "v0.61.3" }, "source_files": "**/*.{cpp,h}", "exclude_files": "**/test/*", diff --git a/ios/Pods/Local Podspecs/React-jsiexecutor.podspec.json b/ios/Pods/Local Podspecs/React-jsiexecutor.podspec.json index e9630daa4d..b9b98da5ad 100644 --- a/ios/Pods/Local Podspecs/React-jsiexecutor.podspec.json +++ b/ios/Pods/Local Podspecs/React-jsiexecutor.podspec.json @@ -1,6 +1,6 @@ { "name": "React-jsiexecutor", - "version": "0.61.1", + "version": "0.61.3", "summary": "-", "homepage": "http://facebook.github.io/react-native/", "license": "MIT", @@ -11,7 +11,7 @@ }, "source": { "git": "https://github.com/facebook/react-native.git", - "tag": "v0.61.1" + "tag": "v0.61.3" }, "source_files": "jsireact/*.{cpp,h}", "compiler_flags": "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation", @@ -21,10 +21,10 @@ "header_dir": "jsireact", "dependencies": { "React-cxxreact": [ - "0.61.1" + "0.61.3" ], "React-jsi": [ - "0.61.1" + "0.61.3" ], "Folly": [ "2018.10.22.00" diff --git a/ios/Pods/Local Podspecs/React-jsinspector.podspec.json b/ios/Pods/Local Podspecs/React-jsinspector.podspec.json index b5c4c05e84..a72764c90d 100644 --- a/ios/Pods/Local Podspecs/React-jsinspector.podspec.json +++ b/ios/Pods/Local Podspecs/React-jsinspector.podspec.json @@ -1,6 +1,6 @@ { "name": "React-jsinspector", - "version": "0.61.1", + "version": "0.61.3", "summary": "-", "homepage": "http://facebook.github.io/react-native/", "license": "MIT", @@ -11,7 +11,7 @@ }, "source": { "git": "https://github.com/facebook/react-native.git", - "tag": "v0.61.1" + "tag": "v0.61.3" }, "source_files": "*.{cpp,h}", "header_dir": "jsinspector" diff --git a/ios/Pods/Local Podspecs/React.podspec.json b/ios/Pods/Local Podspecs/React.podspec.json index 97bfc82579..94a31602ed 100644 --- a/ios/Pods/Local Podspecs/React.podspec.json +++ b/ios/Pods/Local Podspecs/React.podspec.json @@ -1,6 +1,6 @@ { "name": "React", - "version": "0.61.1", + "version": "0.61.3", "summary": "A framework for building native apps using React", "description": "React Native apps are built using the React JS\nframework, and render directly to native UIKit\nelements using a fully asynchronous architecture.\nThere is no browser and no HTML. We have picked what\nwe think is the best set of features from these and\nother technologies to build what we hope to become\nthe best product development framework available,\nwith an emphasis on iteration speed, developer\ndelight, continuity of technology, and absolutely\nbeautiful and fast products with no compromises in\nquality or capability.", "homepage": "http://facebook.github.io/react-native/", @@ -12,7 +12,7 @@ }, "source": { "git": "https://github.com/facebook/react-native.git", - "tag": "v0.61.1" + "tag": "v0.61.3" }, "preserve_paths": [ "package.json", @@ -22,40 +22,40 @@ "cocoapods_version": ">= 1.2.0", "dependencies": { "React-Core": [ - "0.61.1" + "0.61.3" ], "React-Core/DevSupport": [ - "0.61.1" + "0.61.3" ], "React-Core/RCTWebSocket": [ - "0.61.1" + "0.61.3" ], "React-RCTActionSheet": [ - "0.61.1" + "0.61.3" ], "React-RCTAnimation": [ - "0.61.1" + "0.61.3" ], "React-RCTBlob": [ - "0.61.1" + "0.61.3" ], "React-RCTImage": [ - "0.61.1" + "0.61.3" ], "React-RCTLinking": [ - "0.61.1" + "0.61.3" ], "React-RCTNetwork": [ - "0.61.1" + "0.61.3" ], "React-RCTSettings": [ - "0.61.1" + "0.61.3" ], "React-RCTText": [ - "0.61.1" + "0.61.3" ], "React-RCTVibration": [ - "0.61.1" + "0.61.3" ] } } diff --git a/ios/Pods/Local Podspecs/ReactCommon.podspec.json b/ios/Pods/Local Podspecs/ReactCommon.podspec.json index a2887c013a..d4450ee0e9 100644 --- a/ios/Pods/Local Podspecs/ReactCommon.podspec.json +++ b/ios/Pods/Local Podspecs/ReactCommon.podspec.json @@ -1,7 +1,7 @@ { "name": "ReactCommon", "module_name": "ReactCommon", - "version": "0.61.1", + "version": "0.61.3", "summary": "-", "homepage": "http://facebook.github.io/react-native/", "license": "MIT", @@ -12,7 +12,7 @@ }, "source": { "git": "https://github.com/facebook/react-native.git", - "tag": "v0.61.1" + "tag": "v0.61.3" }, "header_dir": "ReactCommon", "compiler_flags": "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation", @@ -27,7 +27,7 @@ "source_files": "jscallinvoker/**/*.{cpp,h}", "dependencies": { "React-cxxreact": [ - "0.61.1" + "0.61.3" ], "DoubleConversion": [ @@ -44,16 +44,16 @@ "name": "turbomodule", "dependencies": { "ReactCommon/jscallinvoker": [ - "0.61.1" + "0.61.3" ], "React-Core": [ - "0.61.1" + "0.61.3" ], "React-cxxreact": [ - "0.61.1" + "0.61.3" ], "React-jsi": [ - "0.61.1" + "0.61.3" ], "Folly": [ "2018.10.22.00" @@ -81,7 +81,7 @@ ], "dependencies": { "ReactCommon/turbomodule/core": [ - "0.61.1" + "0.61.3" ] } } diff --git a/ios/Pods/Local Podspecs/Yoga.podspec.json b/ios/Pods/Local Podspecs/Yoga.podspec.json new file mode 100644 index 0000000000..eea9e63a50 --- /dev/null +++ b/ios/Pods/Local Podspecs/Yoga.podspec.json @@ -0,0 +1,33 @@ +{ + "name": "Yoga", + "version": "1.14.0", + "license": { + "type": "MIT" + }, + "homepage": "https://yogalayout.com", + "documentation_url": "https://yogalayout.com/docs/", + "summary": "Yoga is a cross-platform layout engine which implements Flexbox.", + "description": "Yoga is a cross-platform layout engine enabling maximum collaboration within your team by implementing an API many designers are familiar with, and opening it up to developers across different platforms.", + "authors": "Facebook", + "source": { + "git": "https://github.com/facebook/react-native.git", + "tag": "v0.61.3" + }, + "module_name": "yoga", + "header_dir": "yoga", + "requires_arc": false, + "compiler_flags": [ + "-fno-omit-frame-pointer", + "-fexceptions", + "-Wall", + "-Werror", + "-std=c++1y", + "-fPIC" + ], + "platforms": { + "ios": "9.0", + "tvos": "9.2" + }, + "source_files": "yoga/**/*.{cpp,h}", + "public_header_files": "yoga/{Yoga,YGEnums,YGMacros,YGValue}.h" +} diff --git a/ios/Pods/Local Podspecs/react-native-appearance.podspec.json b/ios/Pods/Local Podspecs/react-native-appearance.podspec.json new file mode 100644 index 0000000000..29e78eef78 --- /dev/null +++ b/ios/Pods/Local Podspecs/react-native-appearance.podspec.json @@ -0,0 +1,22 @@ +{ + "name": "react-native-appearance", + "version": "0.3.1", + "summary": "Polyfill for `Appearance` API which will be available in `react-native@0.62`.", + "license": "MIT", + "authors": "Brent Vatne ", + "homepage": "https://github.com/expo/react-native-appearance#readme", + "platforms": { + "ios": "9.0", + "tvos": "9.2" + }, + "source": { + "git": "https://github.com/expo/react-native-appearance.git", + "tag": "v0.3.1" + }, + "source_files": "ios/**/*.{h,m}", + "dependencies": { + "React": [ + + ] + } +} diff --git a/ios/Pods/Local Podspecs/react-native-slider.podspec.json b/ios/Pods/Local Podspecs/react-native-slider.podspec.json index f8c7140f09..511495dd4c 100644 --- a/ios/Pods/Local Podspecs/react-native-slider.podspec.json +++ b/ios/Pods/Local Podspecs/react-native-slider.podspec.json @@ -1,6 +1,6 @@ { "name": "react-native-slider", - "version": "2.0.1", + "version": "2.0.5", "summary": "React Native component used to select a single value from a range of values.", "license": "MIT", "authors": "react-native-community", @@ -10,7 +10,7 @@ }, "source": { "git": "https://github.com/react-native-community/react-native-slider.git", - "tag": "v2.0.1" + "tag": "v2.0.5" }, "source_files": "ios/**/*.{h,m}", "dependencies": { diff --git a/ios/Pods/Local Podspecs/react-native-video.podspec.json b/ios/Pods/Local Podspecs/react-native-video.podspec.json index 65d476f8d8..a30e87e7c9 100644 --- a/ios/Pods/Local Podspecs/react-native-video.podspec.json +++ b/ios/Pods/Local Podspecs/react-native-video.podspec.json @@ -1,6 +1,6 @@ { "name": "react-native-video", - "version": "5.0.0", + "version": "5.0.2", "summary": "A

vaVC(RGF4W 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 diff --git a/ios/RocketChatRN/Images.xcassets/Icons/message_empty_black.imageset/Contents.json b/ios/RocketChatRN/Images.xcassets/Icons/message_empty_black.imageset/Contents.json new file mode 100644 index 0000000000..8507827073 --- /dev/null +++ b/ios/RocketChatRN/Images.xcassets/Icons/message_empty_black.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Message Empty Black Theme.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ios/RocketChatRN/Images.xcassets/Icons/message_empty_black.imageset/Message Empty Black Theme.pdf b/ios/RocketChatRN/Images.xcassets/Icons/message_empty_black.imageset/Message Empty Black Theme.pdf new file mode 100644 index 0000000000000000000000000000000000000000..34b7e179c9750ef18d9c8a72f57f3b85c4920381 GIT binary patch literal 114477 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%0DF}%cf1T#n0 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 MG3n^U6(lhK5B(4T_y7O^ literal 0 HcmV?d00001 diff --git a/ios/RocketChatRN/Images.xcassets/Icons/message_empty_dark.imageset/Contents.json b/ios/RocketChatRN/Images.xcassets/Icons/message_empty_dark.imageset/Contents.json new file mode 100644 index 0000000000..d414a4c130 --- /dev/null +++ b/ios/RocketChatRN/Images.xcassets/Icons/message_empty_dark.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Message Empty Dark Theme.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ios/RocketChatRN/Images.xcassets/Icons/message_empty_dark.imageset/Message Empty Dark Theme.pdf b/ios/RocketChatRN/Images.xcassets/Icons/message_empty_dark.imageset/Message Empty Dark Theme.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a745739f3d3259d58f3bf7891ba8968d6d80aee4 GIT binary patch literal 114402 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⩝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 literal 0 HcmV?d00001 diff --git a/ios/RocketChatRN/Images.xcassets/Icons/message_empty_light.imageset/Contents.json b/ios/RocketChatRN/Images.xcassets/Icons/message_empty_light.imageset/Contents.json new file mode 100644 index 0000000000..d1ff3f57bb --- /dev/null +++ b/ios/RocketChatRN/Images.xcassets/Icons/message_empty_light.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "Message Empty.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/ios/RocketChatRN/Images.xcassets/Icons/message_empty_light.imageset/Message Empty.pdf b/ios/RocketChatRN/Images.xcassets/Icons/message_empty_light.imageset/Message Empty.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a1f3415d8ae6576c1e2400969892f2a72bb17179 GIT binary patch literal 114646 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 LNkvXXu0mjfDgHw` literal 0 HcmV?d00001 diff --git a/ios/RocketChatRN/Images.xcassets/Launch Screen Icon.imageset/icon@3x.png b/ios/RocketChatRN/Images.xcassets/Launch Screen Icon.imageset/icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..25dcfc787ff8231609023f42bb3d0a50c3bc19c4 GIT binary patch literal 17737 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 Y9}{VEN&j`i$N&HU07*qoM6N<$g4G$F=>Px# literal 0 HcmV?d00001 diff --git a/ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Contents.json b/ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index e45b2af7b3..0000000000 --- a/ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "images" : [ - { - "orientation": "portrait", - "idiom": "iphone", - "extent": "full-screen", - "minimum-system-version": "11.0", - "filename": "Default-Portrait-812h@3x.png", - "subtype": "2436h", - "scale": "3x" - }, - { - "orientation": "landscape", - "idiom": "iphone", - "extent": "full-screen", - "filename": "Default-Landscape-812h@3x.png", - "minimum-system-version": "11.0", - "subtype": "2436h", - "scale": "3x" - }, - { - "extent" : "full-screen", - "idiom" : "iphone", - "subtype" : "736h", - "filename" : "Default-Portrait-736h@3x.png", - "minimum-system-version" : "8.0", - "orientation" : "portrait", - "scale" : "3x" - }, - { - "extent" : "full-screen", - "idiom" : "iphone", - "subtype" : "736h", - "filename" : "Default-Landscape-736h@3x.png", - "minimum-system-version" : "8.0", - "orientation" : "landscape", - "scale" : "3x" - }, - { - "extent" : "full-screen", - "idiom" : "iphone", - "subtype" : "667h", - "filename" : "Default-667h@2x.png", - "minimum-system-version" : "8.0", - "orientation" : "portrait", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "filename" : "Default@2x.png", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "extent" : "full-screen", - "idiom" : "iphone", - "subtype" : "retina4", - "filename" : "Default-568h@2x.png", - "minimum-system-version" : "7.0", - "orientation" : "portrait", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "filename" : "Default-Landscape.png", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "1x" - }, - { - "orientation" : "landscape", - "idiom" : "ipad", - "filename" : "Default-Landscape@2x.png", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "iphone", - "extent" : "full-screen", - "subtype" : "retina4", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "filename" : "Default-Portrait.png", - "extent" : "full-screen", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "filename" : "Default-Portrait@2x.png", - "extent" : "full-screen", - "scale" : "2x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "filename" : "Default-Portrait.png", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "1x" - }, - { - "orientation" : "portrait", - "idiom" : "ipad", - "filename" : "Default-Portrait@2x.png", - "extent" : "full-screen", - "minimum-system-version" : "7.0", - "scale" : "2x" - }, - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png b/ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png deleted file mode 100644 index efd90bac870e814d3068d3a6aab223327ec6e654..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17261 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%0AC%si(X630(g zs=UE1EVEl5Yw2^JU?=>$I(haf_c;+C!2Y>W2i=zLX?uzckeHJ6w>q{hEp^@HOl4#Y zfbcS+@^UYY*G(XduF}5t!_K@>^a0Q5_Vv#jwW0ttCOQOyRs_>#62xj{UkY(qt=ipq z%mAlaE)sDF^+tnevsg-$gW*WmD%V`rqpz$Kz*7~PrLSgNqMoTP+-foPfQC7F6-ml9 zM$~;zn!D$3N!5%xFnh`RY4_=$&83B{VQH1D>c2sl|C^2){MUHP);7!Fphm0ZUOO39 zZ{$+XTspPY#s=w<%NGKQZ6C<2+GFE2yBE))q4t6BB}MzmQXlyd6-21xL>JOV?K1A32Jf zZ%2><4AB5$Sv7e%?WL>`p@*BdX#+vEg(-Y-Cc=+wS|?^PKesuH=TUd_v5wz$Ah^ph ze_o%W8^qvMDpzgN+tKTAxign~FIjX&-(lrL5cDMgcx4r*2O-q(1pd+p zL7*zcgY`3zq!pFA*JWHcIl_|i)!yYZPLv|lYT02%Om$jbi1o&To`EE6p6X`yk**C@ zQ@8W^1&y>b^!+Wqzh>4zHP-Y4Qzbsv{2h&HesM{yS{0v;o$big8oV(Mb!aMH%;$gA zh8)@;>xzWnClJ{kVYFF5kFM?Es7T|pEntg#3{vYqz5fI0!jX zVcS*60~0PYACsM)W@D*BH*=8hB8zf~jt65+%aDaYfOc^x6v7vsRi8Gr9bTF;H@M=) zP9pXv>?*(gL>wJK5%VCSBj@X7Wd>9&@Y(@{=#WAkC0My) z=*Me;8}cUCn}`?j&^?Ovt4c|;Pf!0~1DmiV5upNb@qDcB?Rf@b>=spVNHl3k0vlYf z%#sU;QkaxxZMh67BxIz_pLABtKPPuu!uUtHI`Z=ldC@b~NN5S@{sc}Mvq9)W65DXz zn=+H5NjD+FwrmwF+{JAJW_?01^3Mgwr8tgBn+UAux7I>i0h@togeRdMrh@nSMmrRb zkQWUJ*FW-T;SlHPvl%9Ocn>Hd`88TRQB?=28Cg(7jk@KCaV9in#0+K%ARv`2?8(@; zK0q+GoaTF&4Pl&ieV?m$iRl6S-PQq3$bb2A*1mS3YUw1{N{z!BlP8N#rD}rrtEvWS zRMz5HaxBVXC2zjz3v&~kV>*&)e5C#`N3K!7V{mPII!^gMWcpBM!nLr6eAjiKUAL;z zv1Ko(neHT`W`9vSP9*Zd>0!jT;i_^yi)QIbcKzkKdtLsAt5Y-SIgw-9q_Fx_h{zGuxq8*qCh>EpDu;i4Cq$gB(Pg|LY&y zfU)Xp1d|PE`7tm|22`Z0w?Meb)e8*3KDqrtqj!t|X2qQF<@_C8`4nt3&^=j{ znLW@Z^x#vF)Eab_j(03lSA;MGfbW!%1Og3Qa2gP9JorJ77lT}#bHR1fXQfRLrqz>y z9g6(!Z{M1c!;?@xk(1C@Q7RmH;qNYpO(O>QD>aoQnkhh!0z?3gBG(;-NykJDxa#|$ zySsX^2Z<>OPba&F=T-ch{_bB@2*a-nw{$d`@pV7oYN7TD2dL%ASY^auKsuy-__!r5 zDG9MZ!pF1>-`;jn*wiaT*nmml9V-nXky}FDmu08Q^egyFP7i1x%40!X7{=y*ffr3+ z%m}h0mHh@}UBuNAZDB*VxF`7i7XdXR;Jiacwcc;TCp!%^o2R0jw!()0)KYrn0SneRNZWJPzTaALrf_#osOwOc=gMpC}oESVdbHF9_ zu~}JjJWCKKfCfSICC1a)871k;g1n7JyRxq2w(#a4Hp9!8!%#^F6(NpXa+DZUEWE+V z4Za(Sx;#W;Ai`YR)HFQ&C@B_nsD^^*1~yBJ8iRAWah0@~Ly>2#`;~~=G0IU4-ImjO zw@&|NEh_X(7@JniYe(HxvNVAg2x-oLo&$IS!B~x;r4HvJ>(e)Mv=1|OMe>ZDyn?vX zg(JK$QKz#Yo6ctX$cP+TbD4tV#u+1AP?2I{PsWRy$Q{T)Kmi6i`HLkAhN3Npysh(( z%LVL&a#nH6)hZNP^*aWk?8|L+4yUc_(T)!iH8Wq7@B&==nfscOtHY9~2%N@YZIlob ziI#nXdB7vgE9v{i!K*Pz+X391wCTF|u~f(^x`6Z-+CUvcUX`j$S&T=<{*~l^3;zD) zaMXVRfG_t6UtnOq8ZqsPz*a}9!L_?DcO~GW9!0Wbo#QY&I-ZZ>W}D0vykJ?ERb@w2 z{;v<3(>$C#%X#@-Fy+pcm((tsRT&sr)Z`K~y>cQ-`+PY~LH9wL0V?^xqy_1pEXtfE zc6ypx;(R%rn`*O_bqV+7FZr^m*Yb?H56DgW8u-I56pFlbejmuX5mfTQhMu05KZ)70 zV4lfB^25lm1+1lTRE$_*t#+~awuiG~xqY`1WO$CsImsV|u-u#q@v7N?xaDSCD>DFQ z=KNx7J;Wq}cK;ciyjvIiW@RO3NKSmI$El?FlDxp%Y@IPF4@>Q-yjuyk1{>C9zRY@I z);k?oAwV%iB^2+4YI}1ZcVgOTU*mFS93mSn(Y~-KL=KTKN#b}h_u0PC&KU@H$p+b{ z^?H5n(2Wt~b8a%RR2eIkK65&_PfldF>d+W(ZLkZAjm znz-Hud@BC4yB3K0!y?r4>b9;bLg z<@*QsOPA+V=q8U^jdBgp(8ck0)|Kxi=qX)e$i3|*{9*ChztzbRGkBxz=5PeVw!afH})^GB#&-ytLZM>7@c2VdSk%Qu?wC5!PFP;Vuj*PGTDqr2X*pmC0tgUOgnGdtYCAmlK10>- z7gr8Jqqo3W7e`P+-tExlZKWZ^{OhHsvFFpsdJHfkLJh)I@2<7y1NoD{%Il7(_16y?}_Q`NTa-G?ftQaS`2;bRqW@FFy*?mE#dZwaoXj z7uY_jv>&bd*k#>5sJ)u;bpljxa5OS8zZ7MPW%=RvDoQ_`h^gpD>>kWaDHKdAVz)I&-1yE{R_Q=e44kd=;cT*&qUi+Jr4BP z%_9=+7qWN6Z&Uxi6m4=7qK}HGp4PGrwVrdXxhgtv25&5D}_>ax4IP&Sx>`wA& z2uM!~ecmJ`z{FZ{t{581<=weu>gYc4jMs`w2K463S;= zgnN1&vNIt0g3vMDSv0epB{jqB+=H~HijkylF0o1ujIVK#G^^bANIMv$faez<$yZGM z;+`P!URvb4Qu8rjsr-2!1&6#=;qdEvTKM?;Us1F=x?&~{;llu;*?*5oZ3XW>+}k&d zfYOc{xZdDo_6PsDHtbA;ecjZqc(c^1s^#ZHAT3m{2L)bSId%%WC>AjrV!4p#gEaiB zby~~MW(=mAWG^2IB-OGRDrPxV2kDETT1zAWGHgySTiGBAC7lhz$i~6*IBwjuCoX+Y z2DgILR^^vM;+={CF+vfE5_g=JK4(zMm3FOIeiT3r!n_F!-SsZtzCG!?Uj8?`rgUUu zDhzVa9oL)kO0fa&cC``vuM6sr8(=io#TE3E9B?;RdB()n&FOX35? zPbcq-b2Y<5jN?FP(#!+-(7{=kso&SpMn+R+TYkLx0vgeEfcnem9BI3V0yOV;*zveI zXi|$OGfoS+8dzEE<2Xlwq!#r5n(D$N83@DvV1#i5pkR(35(A``z~J^KRKOEb)Cc8}sFvcPTnh?4p=6!=Tl z!7S{CUFHYcH$vH{ZKA|UX*nl$5h5TE*2Y^|mz2=Anm=$=hzl2&8Hy9_#&}L9Okrts zctg^D!wyfB6NfrJ7<(9olc9R3wJ{bwG650TORmbx^vTg4>e?&dAc|Q4-A-AI@ihZS zk^qn?1yU$*^5yh;iv?D9OWRe8(vg4T!?`1#deBVpEXZ*9`U+AYlmQb0d0NnLkP3jh zWIHJ6z5IE*juposdeI0L6GUVIa=_ze8t4hX-Fx5>pR4smyfJrzd(jFRr|78}Uf6mF zwXk|K=D1qoD3=vO#Q%Pe$gaKLe`Uz`75Kga-&f%K3VdII? zi#=e7#Tp(sxc`8z;ei8+;|J>guQz!6UcTaX{%7^Ydk27uW5_y?=9eJ>&Y@~ojU6V zfgtxmAUAG7AQCWiV+I0AFo!@`p%948V+cg&T0!F(I|xL*-1D^e3Gjkasg%#oio3f7 zwY784o^k*DlbxPE1BXwAgp9knjX|OGBS+|#mNf7=e3)ioLHqe<+QEY~b91__?YN7} zWIzDp@?{nh$@%?v-d}(5|NdLp+$^Edlv1fuE?*iN5>!>q{_)4m_3IO!o+Eqqj2akx zJARxI8OizWxB0R%IgckDALrb;GkNYD)x=~vB7&QnyU@|05Q$_A#(a7C=-#~(9v+;# zcNf~)6iZ8@w{O3lI6*Zsn!{qHQ&YmGCT4v6xVt+yJDX~1%FEA}&CHBBI0#<7VqCg3 zx^Ext&>`u>grK^5IxI{nlg*cwjvYNZ?&><`=*WNZLb13wec=M##zs(6GZP!j{`FV6 zKrmlXG3nzY85!Xf7Ah4A>Ez_>g9lVIv+3|~8HXbxkr>g@qd)zmlt|?B^Gg&8^}qpz zSUlnFEuEg0u~>3GUm+CE#KkQQ4-4z-`6VTsd-qr<)KqBb#F;bSjvX5{G@QA1jeX;W zpstQ?ZLL^X;1?IqW@RxEh$$HCo0HSb)vI$)p9&ir7Y7Cu0s+9=pw7cVaM^)2@IFMj^afB8}}I?BFvYc?}; z>C2ae_V)49r)M8NTpAplID2*;j~BdtE$-~(K6=DVOq}rYT4-%$-@G~L=O^cKMMR>6 zP9OW_7ty~=zPeB}zw)jzDa*XsjA>%-2wC;n?WD(g}GsZG3C zuQLIGm@hdWKkA({JWFMeg2D;P^ZQSpS_xfgxGJXQx7Eu|@7jIm!LsWbzZgDUrZyzp z68)>A_wl>x&o*z^?Cn{#>&LsdZw6m6EJ?Cs^$W6O$ES)z7s~4*dOykiYw+yr+#Fsb zfNH_x2F89*ROYU%2b_Zti$jyt}8`7VU-n(*BUzFWa}EBI~&->u+( z(F)9Mz68VNIvy#VD|Fq9s`@|Ow;GDC>8}48`^DFcip-CJEzHkG0|{QWIqL7Bdm+^@!I9*i@pZ8J7s8#8)2FeHx+bH_8{H}RY_!cB zcGi`y*|Kce>e}9B4J}N3p{%w1n3f630usH)6C0k(Njg`=n&eHx7m-CyYV#{MN981E zn9W9FWYi5K%}<3fYRxws(-$7cO_mcWoes2<$rI1W;uUjt>dS{Oa7vzQW*eXppZ!Tfz|g4S3EZ8MGjPTq8}^x|Xg&4Z zQuO+nFhc4b18 zy4MqMk|Ctw?dr}z7rKG@Z6Lv-A0oAJp6!SOsOK%8_j+P)_Y7S#yiHD?Xu$C{KQ0CA z^oI;&co{ks`AOW<_q$*njdwOqU0XdRqvR32LN9ML>~m-Av?~BC9x4`AsC)eZcnYYE zKXp5HdN~gM!{c88i9ziRzA zASA;I>6Eb;#U6Q$lG<7(F`9h4M^nXvy)X-9<^&@6)!>snQp#|Z->1OjT+$}BZXn-^ z39TKzPlJ}=u<3@&(i71%0ZklCt>g}fFarmW{I!X@h5OyzMgu--MTjp6=B(7I- z?<99%gv4zV*-hk3ZK9+^yK^)4u1eJqidU25jMJLm7E_H2YnT9n&p! zKbq-kf6DE;y7b{Xu73T8pFFYM?WPBIZp*HdJZjJ<)Cn!slfg#AWtC>ZTT$j|Besce zN`&s}{$OxK3&(y2i{R8o@W}bACc$mS+UA(vQ*1+1Op0@9?z?UQ*^R_Zkc0dE%BCyp zp9yo-)xbLH2iYGC>v}rB%GMQb7<<~0hH zokKf^-IcCBiwIyo-uloZmAvU}=tpo*X<=n9#qY7BH3LpAa8u7aj_Dh&!I=-YVtq1F zON9&S%U5pRy1W8Cj^*ESIzfh-ABGmjD)VIYv0yf9C4XmTW-FW5B*hAv^hcSvE(0P%FbWmLF z2@(5F+U2|x1=%7UzL?+JZp*C zXlQP8Rqx7^%-(YgbH=1N>Wh=jtYN9xS}?PODquYVH)LzR5^UYU*3>b`2!1_XrI4@f zS*{d)6j!n+QB4jZNP4>3dO(I~`_S?U`jg)m{rBSVoH6>1fqb0>8YqGK{EkvTFn69!#qAn^I&0Ko5g!jS1pZ|8?pH|8ma13Q} zSxB-=mU!-jHZkMOZorSMnqgx-vD3e3?A#K;Eu}H5Mov7Kxf1X)`AJW3ao|$kBR#nT zC*i|M!sy34@|0Z;o*=qx__?guu0j6r(=pUHMx^kXl}D~bYh$0EO8n={v^PHCkKe{I zFnt^fcUX4kYGA$atD`>9>YY&8xv^5e9#d$7pYa#CqO$KG?O6H-pv)IDO`?&Hc!*!t z5JmIz8u_#@zaCW(cbo4}DHC;FFP}}ym2*4ee9MPkd@Br2y2N~v-U)QVXuJKga9Lh> z(YBHI4FB)gn&vo%H3O3A_0Yj(Ibl{r66tq?Z1yil1sMQ?O$22+P( zUQZELtkE5vS`2i}T66jzzcBM@g{BzKI{>}fJI#4htGI8faA#gmcLqKyEzD!k;Wb|7 z!@OiL)#^kc4d&aO-4X!et~AC=*=H|fl3U%$xOJF?`4arRV~WZ-(LXEHd%199XtciU zO3m=?c{#a89lFV|FVXd~{#RS&YhgL63Nah`ER)nMEO*2Mr#EWt@fljli|WXpEvraM zp$5_}I5Yjz^#Hks?8}(Jrc|Qv1uFg*s?)R72H^|GER};L9QI)Cna;t~;w!1u)2Jd} zi-lN?s__R%^knie z=FxOLu&64KCF(rKwARFhJT34?p2li|pv?ZGEun|e>a=)lYaqqw5&e@+ zcRB61lm%1h-oA$*&@_@H=k%10%-tE|>?Ut`n+7gp*>+VpPoOy_$ARI=zgQLLP)O$P z^aw!6>%Ns|ZiOLq^3@Jc!Zz((%!a6w01ON!X-s{jx@cP;(%}R&=vqCX_3nKa1#Z^G zp+W)qXn~8|@hrN`;m){~#?xRxhP)|9bN;g=B1VMY7;H`U_0{-g1lq#2HNf-J6Trfciy3X}#xy33Rt-K8Vl_&&IdfBkvN^&&pG&8LrwZ z|3zb!NABSFLqiX;{Wzb5WDRvy>@GA*aJXInrdD{PEz`$tO*pWiP3j3?BHzh~w(oHO zY2#w54{2M{38q?lBjCKd>W7TEI-KT#DCagt2G0<>%QMe0{k3(obXzn1CsV@wL;McK zWSR#-Ny*|-Q~6(;_0iXdgdSItTI|K#!Bo+_h=Ez`8(c#qh-#(#1l#D8czOZdZJgZV z33h$*LtwnaO*m8Zj!sybK{tK+6_#4s&&ryuT_SCv*Kl%b@(+Y8I_Op^C@i-$YdnMM z@5Nsr@68@Xg`NZKeX2KlFy@48;?T5BQEzW+(W(^1F%+qMO~(<*t>Jr&=J}U8m9$qB zk{7kHc3{v+vgiW234m01n#Dth3!H`|6Uy)+4S6rGi16BZi|jRxC8!MP8s|5e&CH%m zqcd3va`e#~>A)5JoDuJkP9k?5#!H05W|oQxo3i?mgxRwCbKa4n-X55g#dJjuV{SIW zd(AW#8XOIJAsbT z(3G(t@*lw(Qw|bhHv4UVj843i|F)~tSIHkUEi*>@E(wCS=<_S|UKfvByccJ#n>wMs z&kgI?b%iE^5Gyi_F;vlA*er3;D_Eb_xM)lDL%(E42H-i|c0n8k>RU2Aguz z6ncHKyD5pJ@kNVZKR>&qi_fWzCd87In1qo2))n2eX`Myd{5ti0N3o7gpV(;%OJ(lI zHU@%pfx)s4_Vtt7!59>(f~Ns^D_vSq*eAbhyH-4r0^b^ZG>GP*=V-C58$lCB`>i+eCH)a8rPQHt%!I&u`fv8 z__3{U-981$;T%CyeBWxOfIDcBgLc^vZ~`#Y+`#5HHS%q>sCcoq)Z>k$h1DiLy-0X= z&zSDWjMs}H9_v65#=hMSvBK^K&@}ceWkT$BACCyU@7R#?tj+cE0dCO2epW~H0ov4` z?TF9vl&{5`k<=S^fIfAZHR+LHSCI`)te@I9Y(kxW-408#DeN+kkfLR`i}OhQW)fSJ z=FP=v{H4l}%w~}?3{@EGLsCe!9iD`WBH0IssAozk#-@xul9ZunVv7<@#AG!$;I8w; z3D7j{C}e~9^Xf-g?yrzX3)?1YD8wXcfKnvg&g*Lp##=ofi`Gd zR&7G{FMbRtGYgQ83oe^nRYZ+)yX%}gb+k)7fJ9QCvH2-+16?L%;7wTxzkr1|bYLHg zh7n4>jCTXN%0vQsFzS-P2tdjfLi^6Jbm!4oO(&^5GSKXmPvakeh6 zkJ1$ciGHtED*lanJA=p%o@sAeiejzRn2i$X@BxPJ>A_*xj#3V-)2t7Dy zmVnwXj79(Lvr7MQs7M%4rc;UHx7BTN_?(nMq>GUGd8zyx5|yBJfuQpa6Gj=)KJUVy z>jWN7r(Y$VsPK4oi1<7qjVeNR=%mixP&v=86~S3_xD{bkn|1u%TLh3>uT2^3V82rC zT{xI!MSIGHot6Yw`DsNR2f`Tb7cD|x@kLr?8&(xzqWB2*PwmkL0rI--_d3k3raDnc zk3Y+zyBs$Fey0WjLi5EUWKLgw#V&}Hpt)Oo?q#zyw?B11v7nkww& zU82&jJ*EngSw2qhL|rKb)4W_a8QS3tLGstMZEXsE0^+RV_7YWFm~-DODJlFXjx~Rr zZCM#$r+{t3WBit2`iTr1H|ntb?tKzt*`wXymeYpivS1Q_dHo3P$BnP;D!W)ZetX-0 z2iElwuC}wmJq*T6YlE$oF4sVU*cGe*ucP7w#u)DntMI(nNr_^Q)Of8Ba*XJsZWBJO zI%A#WqS%%AI>S|!VnyY#8;eLOhe+dvBp$L25f77(bT^t{NNDk(7$L`74L4=1Yb=+p zKt)91H=FMVA!d59lEHfk4dQ#jSg~)NI*fdIBeNdI(WMenJ+nHAALdg=c`3#3PgK}t zQdT~;0})aXCDwSeRD6-*A362Dzecb(r_2NM#xvw>LsHv&c+vsIF|!dtyjb5n2pMFi zv-}QF*{d7qDH7+A{`SW z{cnuWnoUzjd=VnQWzAlvkb)xyntG$F7ki>Hi(+kbxkNGG=1ZSrp_R_qB@aRcE4yJ+ zDbk#4k&RZn@f0`*%O7|f>^@6#%)Tnq5j{2+m?zf|p<+hdc04hu+dZ(tW)aisZY}kI zrus~0)q^OSsf(xco@%&X{cLIGDe}y#*>^ogmGstjt5LJYmaHD>y~0*Kp;|?r{7-Op z6KCWn*c2Urh913Vv@p#DG5()Wu4|(bT;I?SDFR8SQm5q_kVN6#A`(;f0!01; z{sC2op=pS1TY*EU@Dd&EYjxE=_o>V{ar*UtaYB~wj@F5hJj|{C)q9@|DuY@ z5#0C=MG|w>nkBC`V*HjI%=!`#g`_g#_zsMcO5U`kDs|v4YA8ODxgmWRFyC9{!`sa9 zM!x%z7F1_~cm&=D8Xygd^=NZ$7S`jO4vcwe`Yr$1Ox~j|0(SOvUFn1Ia20}j0B}|8 z2|z~WF#0TfBCkhgkoRa&Gdju^-XoH*ZmQwC`K4MDZu3i!Cd_? zBaewq0JvSGmyG^l;0k~nFu41Af7?AM{%Yay+LjI@gw_JN;EIiUC$^>JV6Okxo>)1W zb-!mn^d}W0^bH_MOdcssp%d$U?A37tLsh~|$34JEF0~nyW=%?60TQK`OMaMej}+;+ zXs)RbA*e`CS+>QMdfrl`I!1TAc?R zwcP8360qjr0tS}=3Jgket2zO!LX!SoO78Em#~I9KI9*mI7Y`(-FwduBzy*xfoJHl9RWNiflZ8Z zs09^`wpoC0K^F_(wEXl>p8Q4H+5vOvwcbxD^cJ^T_HI}DGn3OhLGfi{nh*OePu~nW zeX$^jSAVZ4?i84DR@J~Blnc1;HsOjnRK)hwWQIR%Kh)gZ8sz`)tu7Y~*XQX~`@t5& zvq@Z8_Y-1^1}K7tdVgN3=3mEUa5_21dZKa-3X3a^pcdxN{}c@dHN}azNKV@``SxjN zM(3I25{J|0RWo08jXk)q986V1eF6E9hs~NE6X+rHOJJ%4VVuR?asc`h4vc~R?%(K|hhG{qGq%&g`uc+k| zIO#7vaZ6y8cGsGF@M3_2GJLV6=_{!^z(CCSsP$HOvs7Szu<82TXFk~tg4ay%6KRWQs4?xdbG2ColiEWtim9l82E<|!lRW7hjNgLaUpvu)RaJS66Y)nntga-zmF6Y(pl7;!gRHR0 zc*(a1S-$s!x_D`xNOpP}s7Bftp%2Wxji98Y%JjRYl{3apA)guk4x)^F1b0dL-t5`} zcJ*pQP~VzKLJc}AmQLo`&L&60CBj-`U(7(p{z$xRs5T4F^2(QWFLmV75TOvj|AYLp zp84qfpxNBIpipL7hB7>(NGM7E9Oql9oT$NbDbjt)_-}h~^*gsN0~b4?H0qgetI-WA z@AA6TK^L|oP6rD5qs5g7LX~c%eCDr9+MFs_(ZHmCnOJx&WviP?g*X;Q?gF~io3D8G zV{q!YC$ePxD!lTtQp7{cbm3{&hJ+&wG07DZ zm+#T>t^`!De%|7dL`JEt=1vO!4De=5R1J}8r|@gTsP3lc(^l9KpOR<3YM^K0Oc@BbkG>F0sYZ@2eNuB9wB zedv(PPrSQX!&im`AfKmyQ%zZx+l}~n!zOdp?1gpOm39>rn3{S3xZG2VVN*;6>tl3~ zc!<25Jea9tc7V{;G6ytiRZh&okfrA&Iu#%PYrNp)VZCT=FVJ!THTEer()q!?l}Fyh z-;A$fO;(Wu*RBOQ{h4d$r#2|lxjJvST=Ke~s|F(-ye0$|Em6S3sB7kZ$&pNt6&j@tmd=GA_@nU<&9ctAN9 zgR{M;?uQPmCkL*11j3{!*V`dD=H~By4)U=i=6e6KCN2>#Y*$|nyec6)CqpjF*;EnC zUyQ)HUX0OF2(`Lg;l`eiK;>cNsie7RZrvkMqG{oe(Ffz$^`rhsuXHlN0;5+49e7sC z&vlgrDBunQCmkyOYQpd~tLifFV%9Nq1srRK>f+Ny(|_)lRB#)7)l6JygM;MoqtZYp0}GQN(#-`i$iSu01ndK zURrdW{zS=Om@ILR*0^YPk^)iRM)T+aNZoW*PN8@}AOsK4XT(0n01WeCa0{kI#m5DmIvE?p&Zdy)%U@jW|8uP-9`ABsinLu-;PDS^8qbZLud7_YdYUQo0RRi+Ym3b`KqGFWt`5cGT|IreY$^L1HNhZXB zb5j;(XmM>A{&D?$xi!veP1H6O9BDi+>b!jz?Ul6P!$@QOx8W9i#21OUkqhv`*?YNK ze|z*aV^uvnP!3GA!4E|`A`yR*dLXJS1$V4|hdZW#bc|`c{N+ACv6dqIChY7-A3zni zZ2nK9@Ca)DWbauG(DUiDH@1g9vfD9Goselok$Z=ggVnIp?y9#JL4gS#g?#|L~L5#2&d0lP*6clr!; zFaZ)%RYRgBH)Zj)QL)10ng}M($&Sn#8TfsGATaP$B3v$2{6R;b-Oj zdoFa{76BmpPhU6%v*V!H2M1p>wp_*apF6eL?0f@VMf`bYp!%XVpcP3|(-iObh}an$ z#mrYbr>hd(HKm4SQGDTPhYwyJH@pGMmlvMpaVRMT2hxNIt}b-7miK_#*AsX`YJ|4F zt^ccDqCGJ|*G!tC1)_MY8y7F<2T+4x&$}nln=`?NP9u${| zFs9J`j!@vxIvUv(%JH3a!rMCokyj4IP3*CxUb)AvFQ^-It*1qdL*l@_vi|`BKyPRXrM~0sbKYua#dS^KJF%ksge8T;B JhgEIWw7QS80=2=Z3H$hjBh7 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 AI{*Lx diff --git a/ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Default-Landscape.png b/ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Default-Landscape.png deleted file mode 100644 index ce225ca1f02b783b290219c76dcf4a74109a2f9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15836 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 bXy$nBI`x-#j@U=8ku$`L#@Rpq{OkV#J;{Cm diff --git a/ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x.png b/ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x.png deleted file mode 100644 index a39c0705c097cd6ac04561289ff7152f5363976e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38905 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 diff --git a/ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Default-Portrait-736h@3x.png b/ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Default-Portrait-736h@3x.png deleted file mode 100644 index d20d13a157ee9cf40b6fa701d865bc5763f6eb1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15245 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 diff --git a/ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x.png b/ios/RocketChatRN/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x.png deleted file mode 100644 index 1dca77ab0f2a9f16de07e501bf011eaf2b3f9f28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39736 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 t`h`bbxaJExd@LZs%xQe&qa({{w`j9t8jZ diff --git a/ios/RocketChatRN/Info.plist b/ios/RocketChatRN/Info.plist index bdfbb0fe5c..f1bf0ff88b 100644 --- a/ios/RocketChatRN/Info.plist +++ b/ios/RocketChatRN/Info.plist @@ -19,7 +19,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.20.0 + 1.25.0 CFBundleSignature ???? CFBundleURLTypes @@ -78,10 +78,17 @@ custom.ttf + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UIBackgroundModes voip + UILaunchStoryboardName + LaunchScreen UIRequiredDeviceCapabilities armv7 @@ -91,6 +98,7 @@ UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + UIInterfaceOrientationPortraitUpsideDown UIViewControllerBasedStatusBarAppearance diff --git a/ios/ShareRocketChatRN/Info.plist b/ios/ShareRocketChatRN/Info.plist index 9777742e88..b4adb6ee98 100644 --- a/ios/ShareRocketChatRN/Info.plist +++ b/ios/ShareRocketChatRN/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType XPC! CFBundleShortVersionString - 1.20.0 + 1.25.0 CFBundleVersion 1 NSAppTransportSecurity diff --git a/package.json b/package.json index 9370ec4268..be5394e096 100644 --- a/package.json +++ b/package.json @@ -23,29 +23,30 @@ } }, "dependencies": { - "@nozbe/watermelondb": "^0.14.0", - "@react-native-community/slider": "^2.0.1", + "@nozbe/watermelondb": "0.15.0", + "@react-native-community/slider": "2.0.5", "@rocket.chat/sdk": "1.0.0-alpha.31", - "bugsnag-react-native": "^2.22.3", + "bugsnag-react-native": "2.23.2", "commonmark": "git+https://github.com/RocketChat/commonmark.js.git", "commonmark-react-renderer": "git+https://github.com/RocketChat/commonmark-react-renderer.git", - "deep-equal": "^1.0.1", + "deep-equal": "1.1.1", "ejson": "2.2.0", "emoji-toolkit": "^5.0.5", "expo-av": "^6.0.0", "expo-file-system": "^6.0.2", "expo-haptics": "6.0.0", "expo-web-browser": "^6.0.0", - "i18n-js": "^3.3.0", + "hoist-non-react-statics": "^3.3.0", + "i18n-js": "3.5.0", "js-base64": "^2.5.1", "js-sha256": "^0.9.0", "lodash": "4.17.15", - "memoize-one": "^5.0.5", "moment": "^2.24.0", "prop-types": "15.7.2", - "react": "16.9.0", - "react-native": "0.61.1", + "react": "16.8.1", + "react-native": "0.61.3", "react-native-action-sheet": "^2.2.0", + "react-native-appearance": "^0.3.1", "react-native-audio": "^4.3.0", "react-native-background-timer": "2.1.1", "react-native-console-time-polyfill": "^1.2.1", @@ -55,44 +56,46 @@ "react-native-easy-toast": "^1.2.0", "react-native-fast-image": "^7.0.2", "react-native-firebase": "^5.5.5", - "react-native-gesture-handler": "^1.4.1", + "react-native-gesture-handler": "1.5.0", "react-native-image-crop-picker": "git+https://github.com/RocketChat/react-native-image-crop-picker.git", "react-native-image-zoom-viewer": "^2.2.26", "react-native-jitsi-meet": "RocketChat/react-native-jitsi-meet", - "react-native-keyboard-aware-scroll-view": "0.8.0", + "react-native-keyboard-aware-scroll-view": "0.9.1", "react-native-keyboard-input": "^5.3.1", "react-native-keyboard-tracking-view": "^5.5.0", - "react-native-localize": "^1.1.4", + "react-native-keycommands": "2.0.3", + "react-native-localize": "1.3.1", "react-native-mime-types": "^2.2.1", - "react-native-modal": "^11.3.0", + "react-native-modal": "11.5.3", + "react-native-navigation-bar-color": "^1.0.0", "react-native-notifications": "^2.0.6", - "react-native-optimized-flatlist": "^1.0.4", "react-native-orientation-locker": "1.1.6", - "react-native-picker-select": "6.3.0", + "react-native-picker-select": "6.3.3", "react-native-platform-touchable": "^1.1.1", - "react-native-reanimated": "^1.3.0", + "react-native-reanimated": "1.4.0", "react-native-responsive-ui": "^1.1.1", "react-native-screens": "^2.0.0-alpha.3", - "react-native-scrollable-tab-view": "diegolmello/react-native-scrollable-tab-view", + "react-native-scrollable-tab-view": "^1.0.0", "react-native-slowlog": "^1.0.2", "react-native-splash-screen": "^3.2.0", "react-native-unimodules": "0.5.3", "react-native-vector-icons": "6.6.0", - "react-native-video": "^5.0.0", - "react-native-webview": "6.8.0", - "react-navigation": "^4.0.5", + "react-native-video": "5.0.2", + "react-native-webview": "7.5.1", + "react-navigation": "^4.0.10", "react-navigation-drawer": "1.4.0", - "react-navigation-header-buttons": "3.0.1", - "react-navigation-stack": "^1.7.3", - "react-redux": "7.1.0", + "react-navigation-header-buttons": "3.0.4", + "react-navigation-stack": "^1.10.3", + "react-redux": "7.1.3", "reactotron-react-native": "3.6.4", "redux": "4.0.4", "redux-enhancer-react-native-appstate": "^0.3.1", "redux-immutable-state-invariant": "^2.1.0", - "redux-saga": "1.0.5", + "redux-saga": "1.1.3", "remove-markdown": "^0.3.0", "rn-extensions-share": "^2.3.10", - "rn-fetch-blob": "^0.10.16", + "rn-fetch-blob": "0.11.2", + "rn-root-view": "^1.0.3", "rn-user-defaults": "^1.3.5", "semver": "6.3.0", "snyk": "1.210.0", @@ -100,40 +103,40 @@ "url-parse": "^1.4.7" }, "devDependencies": { - "@babel/core": "^7.6.2", + "@babel/core": "^7.5.0", "@babel/plugin-proposal-decorators": "^7.6.0", - "@babel/runtime": "^7.6.2", + "@babel/runtime": "^7.5.0", "@storybook/addon-actions": "5.1.10", "@storybook/addon-links": "5.1.10", "@storybook/addon-storyshots": "5.1.10", "@storybook/addons": "5.1.10", "@storybook/react-native": "5.1.10", - "@storybook/theming": "^5.2.1", + "@storybook/theming": "5.2.6", "babel-core": "^6.26.3", "babel-eslint": "^9.0.0", - "babel-jest": "^24.9.0", + "babel-jest": "^24.1.0", "babel-plugin-transform-remove-console": "^6.9.4", "babel-runtime": "^6.26.0", "codecov": "3.5.0", "detox": "12.11.3", "emotion-theming": "^10.0.19", - "eslint": "^6.4.0", + "eslint": "^6.5.1", "eslint-config-airbnb": "17.1.1", "eslint-plugin-import": "^2.18.2", "eslint-plugin-jsx-a11y": "6.2.3", "eslint-plugin-react": "7.14.3", "eslint-plugin-react-native": "3.7.0", - "husky": "3.0.2", + "husky": "3.0.9", "identity-obj-proxy": "^3.0.0", "jest": "^24.9.0", "jest-cli": "^23.6.0", - "metro-react-native-babel-preset": "^0.56.0", + "metro-react-native-babel-preset": "^0.51.1", "mocha": "^5.2.0", "otp.js": "1.2.0", "patch-package": "^6.1.2", - "react-dom": "16.9.0", - "react-test-renderer": "16.9.0", - "reactotron-redux": "3.1.1", + "react-dom": "16.8.1", + "react-test-renderer": "16.8.1", + "reactotron-redux": "3.1.2", "reactotron-redux-saga": "4.2.2" }, "jest": { diff --git a/patches/@rocket.chat+sdk+1.0.0-alpha.31.patch b/patches/@rocket.chat+sdk+1.0.0-alpha.31.patch new file mode 100644 index 0000000000..8e73bf1ef3 --- /dev/null +++ b/patches/@rocket.chat+sdk+1.0.0-alpha.31.patch @@ -0,0 +1,60 @@ +diff --git a/node_modules/@rocket.chat/sdk/lib/api/api.js b/node_modules/@rocket.chat/sdk/lib/api/api.js +index 5b7dc21..49f1af5 100644 +--- a/node_modules/@rocket.chat/sdk/lib/api/api.js ++++ b/node_modules/@rocket.chat/sdk/lib/api/api.js +@@ -62,6 +62,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); + var log_1 = require("../log"); + var message_1 = require("../message"); + var tiny_events_1 = require("tiny-events"); ++var settings = require("../settings"); + var Client = /** @class */ (function () { + function Client(_a) { + var _b = _a.host, host = _b === void 0 ? 'http://localhost:3000' : _b; +@@ -70,7 +71,7 @@ var Client = /** @class */ (function () { + } + Object.defineProperty(Client.prototype, "headers", { + get: function () { +- return __assign({ 'Content-Type': 'application/json' }, this._headers); ++ return __assign({ 'Content-Type': 'application/json', ...settings.customHeaders }, this._headers); + }, + set: function (obj) { + this._headers = obj; +diff --git a/node_modules/@rocket.chat/sdk/lib/drivers/ddp.js b/node_modules/@rocket.chat/sdk/lib/drivers/ddp.js +index e3510c7..e951959 100644 +--- a/node_modules/@rocket.chat/sdk/lib/drivers/ddp.js ++++ b/node_modules/@rocket.chat/sdk/lib/drivers/ddp.js +@@ -110,6 +110,7 @@ tiny_events_1.EventEmitter.prototype.removeAllListeners = function (event) { + var interfaces_1 = require("../../interfaces"); + var util_1 = require("../util"); + var js_sha256_1 = require("js-sha256"); ++var settings = require("../settings"); + /** Websocket handler class, manages connections and subscriptions by DDP */ + var Socket = /** @class */ (function (_super) { + __extends(Socket, _super); +@@ -145,7 +146,7 @@ var Socket = /** @class */ (function (_super) { + return !_this.alive() && _this.reopen(); + }, ms); + try { +- connection = new universal_websocket_client_1.default(this.host); ++ connection = new universal_websocket_client_1.default(this.host, null, { headers: settings.customHeaders }); + connection.onerror = reject; + } + catch (err) { +diff --git a/node_modules/@rocket.chat/sdk/lib/settings.d.ts b/node_modules/@rocket.chat/sdk/lib/settings.d.ts +index 99eb828..8c99307 100644 +--- a/node_modules/@rocket.chat/sdk/lib/settings.d.ts ++++ b/node_modules/@rocket.chat/sdk/lib/settings.d.ts +@@ -17,3 +17,4 @@ export declare let dmCacheMaxAge: number; + export declare let token: string; + export declare let rid: string; + export declare let department: string; ++export declare let customHeaders: object; +diff --git a/node_modules/@rocket.chat/sdk/lib/settings.js b/node_modules/@rocket.chat/sdk/lib/settings.js +index 822c286..15f2688 100644 +--- a/node_modules/@rocket.chat/sdk/lib/settings.js ++++ b/node_modules/@rocket.chat/sdk/lib/settings.js +@@ -30,3 +30,4 @@ exports.token = process.env.LIVECHAT_TOKEN || ''; + exports.rid = process.env.LIVECHAT_ROOM || ''; + exports.department = process.env.LIVECHAT_DEPARTMENT || ''; + //# sourceMappingURL=settings.js.map ++exports.customHeaders = {}; diff --git a/patches/react-native+0.61.1.patch b/patches/react-native+0.61.3.patch similarity index 57% rename from patches/react-native+0.61.1.patch rename to patches/react-native+0.61.3.patch index 53cfd51d9b..4009945390 100644 --- a/patches/react-native+0.61.1.patch +++ b/patches/react-native+0.61.3.patch @@ -141,6 +141,153 @@ index a134d2e..a88c099 100644 [self _sendFrameWithOpcode:RCTSROpCodeConnectionClose data:payload]; }); } +diff --git a/node_modules/react-native/React/Base/RCTKeyCommands.h b/node_modules/react-native/React/Base/RCTKeyCommands.h +index 4c9c1fe..8c0ebc3 100644 +--- a/node_modules/react-native/React/Base/RCTKeyCommands.h ++++ b/node_modules/react-native/React/Base/RCTKeyCommands.h +@@ -14,10 +14,15 @@ + /** + * Register a single-press keyboard command. + */ +-- (void)registerKeyCommandWithInput:(NSString *)input ++ - (void)registerKeyCommandWithInput:(NSString *)input + modifierFlags:(UIKeyModifierFlags)flags + action:(void (^)(UIKeyCommand *command))block; + ++- (void)registerKeyCommand:(NSString *)input ++ modifierFlags:(UIKeyModifierFlags)flags ++ discoverabilityTitle:(NSString *)discoverabilityTitle ++ action:(void (^)(UIKeyCommand *))block; ++ + /** + * Unregister a single-press keyboard command. + */ +diff --git a/node_modules/react-native/React/Base/RCTKeyCommands.m b/node_modules/react-native/React/Base/RCTKeyCommands.m +index 8f8f19b..150bcfe 100644 +--- a/node_modules/react-native/React/Base/RCTKeyCommands.m ++++ b/node_modules/react-native/React/Base/RCTKeyCommands.m +@@ -12,8 +12,6 @@ + #import "RCTDefines.h" + #import "RCTUtils.h" + +-#if RCT_DEV +- + @interface RCTKeyCommand : NSObject + + @property (nonatomic, strong) UIKeyCommand *keyCommand; +@@ -114,7 +112,9 @@ - (void)RCT_handleKeyCommand:(UIKeyCommand *)key + // NOTE: throttle the key handler because on iOS 9 the handleKeyCommand: + // method gets called repeatedly if the command key is held down. + static NSTimeInterval lastCommand = 0; +- if (CACurrentMediaTime() - lastCommand > 0.5) { ++ if (CACurrentMediaTime() - lastCommand > 0.5 || ++ [key.input isEqualToString:@"UIKeyInputUpArrow"] || // repeat command if is scroll ++ [key.input isEqualToString:@"UIKeyInputDownArrow"]) { + for (RCTKeyCommand *command in [RCTKeyCommands sharedInstance].commands) { + if ([command.keyCommand.input isEqualToString:key.input] && + command.keyCommand.modifierFlags == key.modifierFlags) { +@@ -184,6 +184,8 @@ - (void)RCT_handleDoublePressKeyCommand:(UIKeyCommand *)key + + @end + ++#if RCT_DEV ++ + @implementation RCTKeyCommands + + + (void)initialize +@@ -228,6 +230,23 @@ - (void)registerKeyCommandWithInput:(NSString *)input + [_commands addObject:keyCommand]; + } + ++- (void)registerKeyCommand:(NSString *)input ++ modifierFlags:(UIKeyModifierFlags)flags ++ discoverabilityTitle:(NSString *)discoverabilityTitle ++ action:(void (^)(UIKeyCommand *))block ++{ ++ RCTAssertMainQueue(); ++ ++ UIKeyCommand *command = [UIKeyCommand keyCommandWithInput:input ++ modifierFlags:flags ++ action:@selector(RCT_handleKeyCommand:) ++ discoverabilityTitle:discoverabilityTitle]; ++ ++ RCTKeyCommand *keyCommand = [[RCTKeyCommand alloc] initWithKeyCommand:command block:block]; ++ [_commands removeObject:keyCommand]; ++ [_commands addObject:keyCommand]; ++} ++ + - (void)unregisterKeyCommandWithInput:(NSString *)input + modifierFlags:(UIKeyModifierFlags)flags + { +@@ -301,9 +320,48 @@ - (BOOL)isDoublePressKeyCommandRegisteredForInput:(NSString *)input + + @implementation RCTKeyCommands + +++ (void)initialize ++{ ++ // swizzle UIResponder ++ RCTSwapInstanceMethods([UIResponder class], ++ @selector(keyCommands), ++ @selector(RCT_keyCommands)); ++} ++ + + (instancetype)sharedInstance + { +- return nil; ++ static RCTKeyCommands *sharedInstance; ++ static dispatch_once_t onceToken; ++ dispatch_once(&onceToken, ^{ ++ sharedInstance = [self new]; ++ }); ++ ++ return sharedInstance; ++} ++ ++- (instancetype)init ++{ ++ if ((self = [super init])) { ++ _commands = [NSMutableSet new]; ++ } ++ return self; ++} ++ ++- (void)registerKeyCommand:(NSString *)input ++ modifierFlags:(UIKeyModifierFlags)flags ++ discoverabilityTitle:(NSString *)discoverabilityTitle ++ action:(void (^)(UIKeyCommand *))block ++{ ++ RCTAssertMainQueue(); ++ ++ UIKeyCommand *command = [UIKeyCommand keyCommandWithInput:input ++ modifierFlags:flags ++ action:@selector(RCT_handleKeyCommand:) ++ discoverabilityTitle:discoverabilityTitle]; ++ ++ RCTKeyCommand *keyCommand = [[RCTKeyCommand alloc] initWithKeyCommand:command block:block]; ++ [_commands removeObject:keyCommand]; ++ [_commands addObject:keyCommand]; + } + + - (void)registerKeyCommandWithInput:(NSString *)input +@@ -311,7 +369,17 @@ - (void)registerKeyCommandWithInput:(NSString *)input + action:(void (^)(UIKeyCommand *))block {} + + - (void)unregisterKeyCommandWithInput:(NSString *)input +- modifierFlags:(UIKeyModifierFlags)flags {} ++ modifierFlags:(UIKeyModifierFlags)flags ++{ ++ RCTAssertMainQueue(); ++ ++ for (RCTKeyCommand *command in _commands.allObjects) { ++ if ([command matchesInput:input flags:flags]) { ++ [_commands removeObject:command]; ++ break; ++ } ++ } ++} + + - (BOOL)isKeyCommandRegisteredForInput:(NSString *)input + modifierFlags:(UIKeyModifierFlags)flags diff --git a/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/AndroidInfoModule.java b/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/AndroidInfoModule.java index ef2ae93..2795802 100644 --- a/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/AndroidInfoModule.java diff --git a/patches/react-native-keyboard-input+5.3.1.patch b/patches/react-native-keyboard-input+5.3.1.patch index a11dea55d2..fd9c7b4ce7 100644 --- a/patches/react-native-keyboard-input+5.3.1.patch +++ b/patches/react-native-keyboard-input+5.3.1.patch @@ -1,3 +1,16 @@ +diff --git a/node_modules/react-native-keyboard-input/lib/android/src/main/java/com/wix/reactnativekeyboardinput/CustomKeyboardRootView.java b/node_modules/react-native-keyboard-input/lib/android/src/main/java/com/wix/reactnativekeyboardinput/CustomKeyboardRootView.java +index 69ef9f3..10729c8 100644 +--- a/node_modules/react-native-keyboard-input/lib/android/src/main/java/com/wix/reactnativekeyboardinput/CustomKeyboardRootView.java ++++ b/node_modules/react-native-keyboard-input/lib/android/src/main/java/com/wix/reactnativekeyboardinput/CustomKeyboardRootView.java +@@ -1,7 +1,7 @@ + package com.wix.reactnativekeyboardinput; + + import android.content.Context; +-import android.support.annotation.NonNull; ++import androidx.annotation.NonNull; + import android.view.View; + import android.widget.FrameLayout; + diff --git a/node_modules/react-native-keyboard-input/lib/android/src/main/java/com/wix/reactnativekeyboardinput/CustomKeyboardRootViewShadow.java b/node_modules/react-native-keyboard-input/lib/android/src/main/java/com/wix/reactnativekeyboardinput/CustomKeyboardRootViewShadow.java index 3c8d37e..2fb804d 100644 --- a/node_modules/react-native-keyboard-input/lib/android/src/main/java/com/wix/reactnativekeyboardinput/CustomKeyboardRootViewShadow.java @@ -17,6 +30,32 @@ index 3c8d37e..2fb804d 100644 public void setHeight(int heightPx) { setStyleHeight(heightPx); +diff --git a/node_modules/react-native-keyboard-input/lib/android/src/main/java/com/wix/reactnativekeyboardinput/ReactSoftKeyboardMonitor.java b/node_modules/react-native-keyboard-input/lib/android/src/main/java/com/wix/reactnativekeyboardinput/ReactSoftKeyboardMonitor.java +index eecb682..f4d3712 100644 +--- a/node_modules/react-native-keyboard-input/lib/android/src/main/java/com/wix/reactnativekeyboardinput/ReactSoftKeyboardMonitor.java ++++ b/node_modules/react-native-keyboard-input/lib/android/src/main/java/com/wix/reactnativekeyboardinput/ReactSoftKeyboardMonitor.java +@@ -1,7 +1,7 @@ + package com.wix.reactnativekeyboardinput; + + import android.graphics.Rect; +-import android.support.annotation.Nullable; ++import androidx.annotation.Nullable; + import android.view.ViewTreeObserver; + + import com.facebook.react.ReactRootView; +diff --git a/node_modules/react-native-keyboard-input/lib/android/src/main/java/com/wix/reactnativekeyboardinput/utils/ViewUtils.java b/node_modules/react-native-keyboard-input/lib/android/src/main/java/com/wix/reactnativekeyboardinput/utils/ViewUtils.java +index 5eda46a..39c30a7 100644 +--- a/node_modules/react-native-keyboard-input/lib/android/src/main/java/com/wix/reactnativekeyboardinput/utils/ViewUtils.java ++++ b/node_modules/react-native-keyboard-input/lib/android/src/main/java/com/wix/reactnativekeyboardinput/utils/ViewUtils.java +@@ -1,7 +1,7 @@ + package com.wix.reactnativekeyboardinput.utils; + + import android.app.Activity; +-import android.support.annotation.Nullable; ++import androidx.annotation.Nullable; + import android.view.View; + import android.view.ViewGroup; + import android.view.Window; diff --git a/node_modules/react-native-keyboard-input/react-native-keyboard-input.podspec b/node_modules/react-native-keyboard-input/react-native-keyboard-input.podspec new file mode 100644 index 0000000..1d08ca1 @@ -43,3 +82,23 @@ index 0000000..1d08ca1 + s.dependency 'React' +end \ No newline at end of file +diff --git a/node_modules/react-native-keyboard-input/src/KeyboardAccessoryView.js b/node_modules/react-native-keyboard-input/src/KeyboardAccessoryView.js +index bd557a8..6745017 100644 +--- a/node_modules/react-native-keyboard-input/src/KeyboardAccessoryView.js ++++ b/node_modules/react-native-keyboard-input/src/KeyboardAccessoryView.js +@@ -23,6 +23,7 @@ export default class KeyboardAccessoryView extends Component { + manageScrollView: PropTypes.bool, + requiresSameParentToManageScrollView: PropTypes.bool, + addBottomView: PropTypes.bool, ++ bottomViewColor: PropTypes.string, + allowHitsOutsideBounds: PropTypes.bool, + }; + static defaultProps = { +@@ -136,6 +137,7 @@ export default class KeyboardAccessoryView extends Component { + manageScrollView={this.props.manageScrollView} + requiresSameParentToManageScrollView={this.props.requiresSameParentToManageScrollView} + addBottomView={this.props.addBottomView} ++ bottomViewColor={this.props.bottomViewColor} + allowHitsOutsideBounds={this.props.allowHitsOutsideBounds} + > + {this.props.renderContent && this.props.renderContent()} diff --git a/patches/react-native-keyboard-tracking-view+5.5.0.patch b/patches/react-native-keyboard-tracking-view+5.5.0.patch index 6c970e4692..6642b1c055 100644 --- a/patches/react-native-keyboard-tracking-view+5.5.0.patch +++ b/patches/react-native-keyboard-tracking-view+5.5.0.patch @@ -1,3 +1,61 @@ +diff --git a/node_modules/react-native-keyboard-tracking-view/lib/KeyboardTrackingViewManager.m b/node_modules/react-native-keyboard-tracking-view/lib/KeyboardTrackingViewManager.m +index 800bd35..6e98112 100644 +--- a/node_modules/react-native-keyboard-tracking-view/lib/KeyboardTrackingViewManager.m ++++ b/node_modules/react-native-keyboard-tracking-view/lib/KeyboardTrackingViewManager.m +@@ -49,6 +49,7 @@ @interface KeyboardTrackingView : UIView + @property (nonatomic) CGFloat originalHeight; + @property (nonatomic) KeyboardTrackingScrollBehavior scrollBehavior; + @property (nonatomic) BOOL addBottomView; ++@property (nonatomic) NSString* bottomViewColor; + @property (nonatomic) BOOL scrollToFocusedInput; + @property (nonatomic) BOOL allowHitsOutsideBounds; + +@@ -79,6 +80,7 @@ -(instancetype)init + _bottomViewHeight = kBottomViewHeight; + + self.addBottomView = NO; ++ self.bottomViewColor = nil; + self.scrollToFocusedInput = NO; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(rctContentDidAppearNotification:) name:RCTContentDidAppearNotification object:nil]; +@@ -442,12 +444,28 @@ -(void)setAddBottomView:(BOOL)addBottomView + [self addBottomViewIfNecessary]; + } + ++-(UIColor *)colorFromHexString:(NSString *)hexString ++{ ++ unsigned rgbValue = 0; ++ NSScanner *scanner = [NSScanner scannerWithString:hexString]; ++ [scanner setScanLocation:1]; // bypass '#' character ++ [scanner scanHexInt:&rgbValue]; ++ return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0 green:((rgbValue & 0xFF00) >> 8)/255.0 blue:(rgbValue & 0xFF)/255.0 alpha:1.0]; ++} ++ + -(void)addBottomViewIfNecessary + { + if (self.addBottomView && _bottomView == nil) + { + _bottomView = [UIView new]; +- _bottomView.backgroundColor = [UIColor whiteColor]; ++ if (self.bottomViewColor) ++ { ++ _bottomView.backgroundColor = [self colorFromHexString:self.bottomViewColor]; ++ } ++ else ++ { ++ _bottomView.backgroundColor = [UIColor whiteColor]; ++ } + [self addSubview:_bottomView]; + [self updateBottomViewFrame]; + } +@@ -631,6 +649,7 @@ @implementation KeyboardTrackingViewManager + RCT_REMAP_VIEW_PROPERTY(manageScrollView, manageScrollView, BOOL) + RCT_REMAP_VIEW_PROPERTY(requiresSameParentToManageScrollView, requiresSameParentToManageScrollView, BOOL) + RCT_REMAP_VIEW_PROPERTY(addBottomView, addBottomView, BOOL) ++RCT_REMAP_VIEW_PROPERTY(bottomViewColor, bottomViewColor, NSString) + RCT_REMAP_VIEW_PROPERTY(scrollToFocusedInput, scrollToFocusedInput, BOOL) + RCT_REMAP_VIEW_PROPERTY(allowHitsOutsideBounds, allowHitsOutsideBounds, BOOL) + diff --git a/node_modules/react-native-keyboard-tracking-view/react-native-keyboard-tracking-view.podspec b/node_modules/react-native-keyboard-tracking-view/react-native-keyboard-tracking-view.podspec new file mode 100644 index 0000000..a6dbe01 diff --git a/patches/rn-fetch-blob+0.10.16.patch b/patches/rn-fetch-blob+0.10.16.patch deleted file mode 100644 index bf76c2e734..0000000000 --- a/patches/rn-fetch-blob+0.10.16.patch +++ /dev/null @@ -1,55 +0,0 @@ -diff --git a/node_modules/rn-fetch-blob/fs.js b/node_modules/rn-fetch-blob/fs.js -index e61f443..77bbe7a 100644 ---- a/node_modules/rn-fetch-blob/fs.js -+++ b/node_modules/rn-fetch-blob/fs.js -@@ -135,6 +135,19 @@ function pathForAppGroup(groupName: string): Promise { - return RNFetchBlob.pathForAppGroup(groupName) - } - -+/** -+ * Returns the path for the app group synchronous. -+ * @param {string} groupName Name of app group -+ * @return {string} Path of App Group dir -+ */ -+function syncPathAppGroup(groupName: string): string { -+ if (Platform.OS === 'ios') { -+ return RNFetchBlob.syncPathAppGroup(groupName); -+ } else { -+ return ''; -+ } -+} -+ - /** - * Wrapper method of readStream. - * @param {string} path Path of the file. -@@ -402,6 +415,7 @@ export default { - writeFile, - appendFile, - pathForAppGroup, -+ syncPathAppGroup, - readFile, - hash, - exists, -diff --git a/node_modules/rn-fetch-blob/ios/RNFetchBlob/RNFetchBlob.m b/node_modules/rn-fetch-blob/ios/RNFetchBlob/RNFetchBlob.m -index b4642d4..034605d 100644 ---- a/node_modules/rn-fetch-blob/ios/RNFetchBlob/RNFetchBlob.m -+++ b/node_modules/rn-fetch-blob/ios/RNFetchBlob/RNFetchBlob.m -@@ -228,6 +228,18 @@ - (NSDictionary *)constantsToExport - } - } - -+#pragma mark - fs.syncPathAppGroup -+RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(syncPathAppGroup:(NSString *)groupName) { -+ NSURL *pathUrl = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:groupName]; -+ NSString *path = [pathUrl path]; -+ -+ if(path) { -+ return path; -+ } else { -+ return @""; -+ } -+} -+ - #pragma mark - fs.exists - RCT_EXPORT_METHOD(exists:(NSString *)path callback:(RCTResponseSenderBlock)callback) { - [RNFetchBlobFS exists:path callback:callback]; diff --git a/storybook/stories/Message.js b/storybook/stories/Message.js index 8aca2ef6b7..6231aa3dff 100644 --- a/storybook/stories/Message.js +++ b/storybook/stories/Message.js @@ -7,6 +7,10 @@ import StoriesSeparator from './StoriesSeparator'; import messagesStatus from '../../app/constants/messagesStatus'; import MessageSeparator from '../../app/views/RoomView/Separator'; +import { themes } from '../../app/constants/colors'; + +let _theme = 'light'; + const styles = StyleSheet.create({ separator: { marginTop: 30, @@ -45,724 +49,729 @@ const Message = props => ( timeFormat='LT' isHeader getCustomEmoji={getCustomEmoji} + theme={_theme} {...props} /> ); // eslint-disable-next-line react/prop-types -const Separator = ({ title }) => ; - -export default ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - Testing block quote\nTesting block quote'} /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {}} - /> - - - {}} - /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {/* - - - */} - - - - - - - {/* - - - */} - - - - - - - - - ; + +// eslint-disable-next-line react/prop-types +export default ({ theme }) => { + _theme = theme; + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + Testing block quote\nTesting block quote'} /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {}} + /> + + + - - - - - - alert('broadcast!')} /> - - - - - - alert('Error pressed')} /> - alert('Error pressed')} isHeader={false} /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {}} + /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {/* + + + */} + + + + + + + {/* + + + */} + + + + + + + + + + + + + + + alert('broadcast!')} /> + + + + + + alert('Error pressed')} /> + alert('Error pressed')} isHeader={false} /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /> - - + + - - + + - - + + /> - - + + - - + - -); + /> + + ); +}; diff --git a/storybook/stories/RoomItem.js b/storybook/stories/RoomItem.js index 8550229caa..3960430632 100644 --- a/storybook/stories/RoomItem.js +++ b/storybook/stories/RoomItem.js @@ -2,12 +2,14 @@ import React from 'react'; import { ScrollView, Dimensions } from 'react-native'; // import moment from 'moment'; +import { themes } from '../../app/constants/colors'; import RoomItemComponent from '../../app/presentation/RoomItem'; import StoriesSeparator from './StoriesSeparator'; const date = '2017-10-10T10:00:00Z'; const baseUrl = 'https://open.rocket.chat'; const { width } = Dimensions.get('window'); +let _theme = 'light'; const RoomItem = props => ( ( _updatedAt={date} baseUrl={baseUrl} width={width} + theme={_theme} {...props} /> ); -export default ( - - - +// eslint-disable-next-line react/prop-types +const Separator = ({ title }) => ; - - - +// eslint-disable-next-line react/prop-types +export default ({ theme }) => { + _theme = theme; + return ( + + + - - - - - - + + + - {/* We can't add date stories because it breaks jest snapshots - - - - - */} + + + + + + - - - - - - - - - - + {/* We can't add date stories because it breaks jest snapshots + + + + + */} - - - - - - - - -); + + + + + + + + + + + + + + + + + + + + ); +}; diff --git a/storybook/stories/RoomViewHeader.js b/storybook/stories/RoomViewHeader.js index 95c364ba98..dc28ad6f9d 100644 --- a/storybook/stories/RoomViewHeader.js +++ b/storybook/stories/RoomViewHeader.js @@ -1,12 +1,14 @@ import React from 'react'; import { ScrollView, View, StyleSheet } from 'react-native'; -import { HeaderBackButton } from 'react-navigation'; +import { HeaderBackButton } from 'react-navigation-stack'; import HeaderComponent from '../../app/views/RoomView/Header/Header'; -import { CustomHeaderButtons, Item } from '../../app/containers/HeaderButton'; -import { COLOR_SEPARATOR, HEADER_BACKGROUND } from '../../app/constants/colors'; +// import { CustomHeaderButtons, Item } from '../../app/containers/HeaderButton'; import StoriesSeparator from './StoriesSeparator'; import { isIOS } from '../../app/utils/deviceInfo'; +import { themes } from '../../app/constants/colors'; + +let _theme = 'light'; const styles = StyleSheet.create({ container: { @@ -15,53 +17,57 @@ const styles = StyleSheet.create({ height: isIOS ? 44 : 56, borderTopWidth: 1, borderBottomWidth: 1, - borderColor: COLOR_SEPARATOR, - marginVertical: 6, - backgroundColor: HEADER_BACKGROUND + marginVertical: 6 } }); const Header = props => ( - + - + {/* not working because we use withTheme */} + {/* - + */} ); -export default ( - - -

+// eslint-disable-next-line react/prop-types +export default ({ theme }) => { + _theme = theme; + return ( + + +
- -
-
-
-
-
+ +
+
+
+
+
- -
-
-
+ +
+
+
- -
-
- -); + +
+
+ + ); +}; diff --git a/storybook/stories/StoriesSeparator.js b/storybook/stories/StoriesSeparator.js index 3ab4cea790..207db5107a 100644 --- a/storybook/stories/StoriesSeparator.js +++ b/storybook/stories/StoriesSeparator.js @@ -2,6 +2,8 @@ import React from 'react'; import { Text, StyleSheet } from 'react-native'; import PropTypes from 'prop-types'; +import { themes } from '../../app/constants/colors'; + const styles = StyleSheet.create({ separator: { marginTop: 30, @@ -11,10 +13,24 @@ const styles = StyleSheet.create({ } }); -const Separator = ({ title, style }) => {title}; +const Separator = ({ title, style, theme }) => ( + + {title} + +); Separator.propTypes = { title: PropTypes.string.isRequired, + theme: PropTypes.string, style: PropTypes.object }; diff --git a/storybook/stories/index.js b/storybook/stories/index.js index 5ea749a799..125467abd4 100644 --- a/storybook/stories/index.js +++ b/storybook/stories/index.js @@ -8,6 +8,9 @@ import RoomItem from './RoomItem'; import Message from './Message'; // import RoomViewHeader from './RoomViewHeader'; +// Change here to see themed storybook +const theme = 'light'; + const reducers = combineReducers({ settings: () => ({}), login: () => ({ @@ -22,9 +25,9 @@ const store = createStore(reducers); storiesOf('RoomItem', module) .addDecorator(story => {story()}) - .add('list', () => RoomItem); + .add('list', () => ); storiesOf('Message', module) - .add('list', () => Message); + .add('list', () => ); // FIXME: I couldn't make these pass on jest :( // storiesOf('RoomViewHeader', module) -// .add('list', () => RoomViewHeader); +// .add('list', () => ); diff --git a/yarn.lock b/yarn.lock index dbc4dd5bc6..63fa42200b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -56,18 +56,18 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.2.tgz#069a776e8d5e9eefff76236bc8845566bd31dd91" - integrity sha512-l8zto/fuoZIbncm+01p8zPSDZu/VuuJhAfA7d/AbzM09WR7iVhavvfNDYCNpo1VvLk6E6xgAoP9P+/EMJHuRkQ== +"@babel/core@^7.5.0": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.4.tgz#6ebd9fe00925f6c3e177bb726a188b5f578088ff" + integrity sha512-Rm0HGw101GY8FTzpWSyRbki/jzq+/PkNQJ+nSulrdY6gFGOsNseCqD6KHRYe2E+EdzuBdr2pxCp6s4Uk6eJ+XQ== dependencies: "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.6.2" + "@babel/generator" "^7.6.4" "@babel/helpers" "^7.6.2" - "@babel/parser" "^7.6.2" + "@babel/parser" "^7.6.4" "@babel/template" "^7.6.0" - "@babel/traverse" "^7.6.2" - "@babel/types" "^7.6.0" + "@babel/traverse" "^7.6.3" + "@babel/types" "^7.6.3" convert-source-map "^1.1.0" debug "^4.1.0" json5 "^2.1.0" @@ -119,6 +119,16 @@ lodash "^4.17.13" source-map "^0.5.0" +"@babel/generator@^7.6.3", "@babel/generator@^7.6.4": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.4.tgz#a4f8437287bf9671b07f483b76e3bb731bc97671" + integrity sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w== + dependencies: + "@babel/types" "^7.6.3" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" @@ -390,6 +400,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.2.tgz#205e9c95e16ba3b8b96090677a67c9d6075b70a1" integrity sha512-mdFqWrSPCmikBoaBYMuBulzTIKuXVPtEISFbRRVNwMWpCms/hmE2kRq0bblUHaNRKrjRlmVbx1sDHmjmRgD2Xg== +"@babel/parser@^7.6.3", "@babel/parser@^7.6.4": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81" + integrity sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A== + "@babel/plugin-external-helpers@^7.0.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.2.0.tgz#7f4cb7dee651cd380d2034847d914288467a6be4" @@ -797,13 +812,27 @@ dependencies: regenerator-runtime "^0.13.2" -"@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2": +"@babel/runtime@^7.5.0": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.3.tgz#935122c74c73d2240cafd32ddb5fc2a6cd35cf1f" + integrity sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA== + dependencies: + regenerator-runtime "^0.13.2" + +"@babel/runtime@^7.5.5": version "7.6.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.2.tgz#c3d6e41b304ef10dcf13777a33e7694ec4a9a6dd" integrity sha512-EXxN64agfUqqIGeEjI5dL5z0Sw0ZwWo1mLTi4mQowCZ42O59b7DRpZAnTC6OqdF28wMBMFKNb/4uFGrVaigSpg== dependencies: regenerator-runtime "^0.13.2" +"@babel/runtime@^7.6.3": + version "7.7.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.2.tgz#111a78002a5c25fc8e3361bedc9529c696b85a6a" + integrity sha512-JONRbXbTXc9WQE2mAZd1p0Z3DZ/6vaQIkgYMSTP3KjRCyd7rCZCcfhCyX+YjwcKxcZ82UrxbRD358bpExNgrjw== + dependencies: + regenerator-runtime "^0.13.2" + "@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.1.2", "@babel/template@^7.2.2": version "7.2.2" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907" @@ -906,6 +935,21 @@ globals "^11.1.0" lodash "^4.17.13" +"@babel/traverse@^7.6.3": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.3.tgz#66d7dba146b086703c0fb10dd588b7364cec47f9" + integrity sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.6.3" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/parser" "^7.6.3" + "@babel/types" "^7.6.3" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + "@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0": version "7.3.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.0.tgz#61dc0b336a93badc02bf5f69c4cd8e1353f2ffc0" @@ -942,6 +986,15 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@babel/types@^7.6.3": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09" + integrity sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + "@cnakazawa/watch@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" @@ -1369,13 +1422,14 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" -"@nozbe/watermelondb@^0.14.0": - version "0.14.1" - resolved "https://registry.yarnpkg.com/@nozbe/watermelondb/-/watermelondb-0.14.1.tgz#15184e711dc16b4f34e6d85ecef5bb84e718240b" - integrity sha512-4pYzgkG4yLJFqmViAVPvRAYydACS8aVVX7DyTJqdGnxDizpFwOWwR65Zqmm9LF39xehdOd4NcsK1o+WrPC9nwQ== +"@nozbe/watermelondb@0.15.0": + version "0.15.0" + resolved "https://registry.yarnpkg.com/@nozbe/watermelondb/-/watermelondb-0.15.0.tgz#b5f2f89b5a7a4edf62f7c678c0f93737e02db2f2" + integrity sha512-W16K+R/jF6AWiqkCoCy6jyK3chZ/3uQ7D3fFIhFB6y+o9hjrNxRDUpz3jECm4P8H+StfW2e4YBogl1LA3UtaqQ== dependencies: - lokijs "^1.5.5" - rambdax "^2.13.0" + lodash.clonedeep "^4.5.0" + lokijs "git+https://github.com/Nozbe/LokiJS.git#384b80f" + rambdax "2.15.0" rxjs "^6.2.2" rxjs-compat "^6.3.2" sql-escape-string "^1.1.0" @@ -1462,15 +1516,15 @@ shell-quote "1.6.1" ws "^1.1.0" -"@react-native-community/slider@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@react-native-community/slider/-/slider-2.0.1.tgz#2ab0cd52d3ab30ef4f6d838159590e2ccdf7803a" - integrity sha512-u1si6+pACAhwr3dyyy+cxM5VxqlWQIZx1qk6je2qP5XkUKUb+33NVnAWZw2+gaw2b2H5bhR/TAZLSlWonAuStQ== +"@react-native-community/slider@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@react-native-community/slider/-/slider-2.0.5.tgz#2efd009ff083e4321fc9f0ebf380a3d3f5d8121f" + integrity sha512-cvi3ZexD2nAWesoTVPHH1AlaR8ccOIhVfoDV79JeCSKIq1NSVXDgynclYlcNNTbI5nls0FstZjGj1jJVcSsB1Q== -"@react-native-community/viewpager@^1.1.7": - version "1.1.7" - resolved "https://registry.yarnpkg.com/@react-native-community/viewpager/-/viewpager-1.1.7.tgz#7d3b1631f1ec91145db92a8e25c80d53027e96ba" - integrity sha512-k9v2KJtAprNPq7IZmedD2VLMePvPW+ohX3uDnkpoKritBji+/RtRmTKrdtPi3Uvp0toq/KtPttAds1dr7AZNpw== +"@react-native-community/viewpager@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@react-native-community/viewpager/-/viewpager-2.0.1.tgz#892e2148c8bca4ff157280e4be81d88be3264efc" + integrity sha512-fTTpO6xdVrTAAWbC1B2TQbxOkzDtvE9YfovDPYpi+S9oWmT06Eh8pv1Umd/7R/ewuLy9i2fzBnAu5WY+Di8OwA== "@react-navigation/core@^3.5.1": version "3.5.1" @@ -1491,49 +1545,49 @@ react-native-safe-area-view "^0.14.1" react-native-screens "^1.0.0 || ^1.0.0-alpha" -"@redux-saga/core@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.0.3.tgz#c29ec7ae3d7dfcbcb8dc93177f2b3edc798c5d85" - integrity sha512-zf8h5N0oTzaNeSMxOWH9GJMB9IRSM8JubDsrZVsvVltXjzFFSR8DNt7tbPoRJUK0hFfQB1it+bL+dEMWpD7wXA== - dependencies: - "@babel/runtime" "^7.0.0" - "@redux-saga/deferred" "^1.0.1" - "@redux-saga/delay-p" "^1.0.1" - "@redux-saga/is" "^1.0.2" - "@redux-saga/symbols" "^1.0.1" - "@redux-saga/types" "^1.0.2" - redux ">=0.10 <5" - typescript-tuple "^2.1.0" - -"@redux-saga/deferred@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@redux-saga/deferred/-/deferred-1.0.1.tgz#c895445e486bded90acf0b873b4e978fbfe458c2" - integrity sha512-+gW5xQ93QXOOmRLAmX8x2Hx1HpbTG6CM6+HcdTSbJovh4uMWaGyeDECnqXSt8QqA/ja3s2nqYXLqXFKepIQ1hw== +"@redux-saga/core@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.1.3.tgz#3085097b57a4ea8db5528d58673f20ce0950f6a4" + integrity sha512-8tInBftak8TPzE6X13ABmEtRJGjtK17w7VUs7qV17S8hCO5S3+aUTWZ/DBsBJPdE8Z5jOPwYALyvofgq1Ws+kg== + dependencies: + "@babel/runtime" "^7.6.3" + "@redux-saga/deferred" "^1.1.2" + "@redux-saga/delay-p" "^1.1.2" + "@redux-saga/is" "^1.1.2" + "@redux-saga/symbols" "^1.1.2" + "@redux-saga/types" "^1.1.0" + redux "^4.0.4" + typescript-tuple "^2.2.1" + +"@redux-saga/deferred@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@redux-saga/deferred/-/deferred-1.1.2.tgz#59937a0eba71fff289f1310233bc518117a71888" + integrity sha512-908rDLHFN2UUzt2jb4uOzj6afpjgJe3MjICaUNO3bvkV/kN/cNeI9PMr8BsFXB/MR8WTAZQq/PlTq8Kww3TBSQ== -"@redux-saga/delay-p@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@redux-saga/delay-p/-/delay-p-1.0.1.tgz#d69fc6103c7509ae80faa144ea17bbc69e51e029" - integrity sha512-0SnNDyDLUyB4NThtptAwiprNOnbCNhoed/Rp5JwS7SB+a/AdWynVgg/E6BmjsggLFNr07KW0bzn05tsPRBuU7Q== +"@redux-saga/delay-p@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@redux-saga/delay-p/-/delay-p-1.1.2.tgz#8f515f4b009b05b02a37a7c3d0ca9ddc157bb355" + integrity sha512-ojc+1IoC6OP65Ts5+ZHbEYdrohmIw1j9P7HS9MOJezqMYtCDgpkoqB5enAAZrNtnbSL6gVCWPHaoaTY5KeO0/g== dependencies: - "@redux-saga/symbols" "^1.0.1" + "@redux-saga/symbols" "^1.1.2" -"@redux-saga/is@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@redux-saga/is/-/is-1.0.2.tgz#7f4be014c97061898d7efb11d6c9de31e943ed38" - integrity sha512-WnaUOwYvPK2waWjzebT4uhL8zY76XNkzzpJ2EQJe8bN1tByvAjvT7MuJZTSshOhdHL5PsRO0MsH224XIXBJidQ== +"@redux-saga/is@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@redux-saga/is/-/is-1.1.2.tgz#ae6c8421f58fcba80faf7cadb7d65b303b97e58e" + integrity sha512-OLbunKVsCVNTKEf2cH4TYyNbbPgvmZ52iaxBD4I1fTif4+MTXMa4/Z07L83zW/hTCXwpSZvXogqMqLfex2Tg6w== dependencies: - "@redux-saga/symbols" "^1.0.1" - "@redux-saga/types" "^1.0.2" + "@redux-saga/symbols" "^1.1.2" + "@redux-saga/types" "^1.1.0" -"@redux-saga/symbols@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@redux-saga/symbols/-/symbols-1.0.1.tgz#46512ae1275f88df061c42168d0f600ddb170c1e" - integrity sha512-akKkzcVnb1RzJaZV2LQFbi51abvdICMuAKwwLoCjjxLbLAGIw9EJxk5ucNnWSSCEsoEQMeol5tkAcK+Xzuv1Bg== +"@redux-saga/symbols@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@redux-saga/symbols/-/symbols-1.1.2.tgz#216a672a487fc256872b8034835afc22a2d0595d" + integrity sha512-EfdGnF423glv3uMwLsGAtE6bg+R9MdqlHEzExnfagXPrIiuxwr3bdiAwz3gi+PsrQ3yBlaBpfGLtDG8rf3LgQQ== -"@redux-saga/types@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@redux-saga/types/-/types-1.0.2.tgz#1d94f02800b094753f9271c206a26c2a06ca14ee" - integrity sha512-8/qcMh15507AnXJ3lBeuhsdFwnWQqnp68EpUuHlYPixJ5vjVmls7/Jq48cnUlrZI8Jd9U1jkhfCl0gaT5KMgVw== +"@redux-saga/types@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@redux-saga/types/-/types-1.1.0.tgz#0e81ce56b4883b4b2a3001ebe1ab298b84237204" + integrity sha512-afmTuJrylUU/0OtqzaRkbyYFFNgCF73Bvel/sw90pvGrWIZ+vyoIJqA6eMSoA6+nb443kTmulmBtC9NerXboNg== "@rocket.chat/sdk@1.0.0-alpha.31": version "1.0.0-alpha.31" @@ -1694,10 +1748,10 @@ dependencies: core-js "^3.0.1" -"@storybook/client-logger@5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-5.2.1.tgz#5c1f122b65386f04a6ad648808dfa89f2d852d7a" - integrity sha512-wzxSE9t3DaLCdd/gnGFnjevmYRZ92F3TEwhUP/QDXM9cZkNsRKHkjE61qjiO5aQPaZQG6Ea9ayWEQEMgZXDucg== +"@storybook/client-logger@5.2.6": + version "5.2.6" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-5.2.6.tgz#cfc4536e9b724b086f7509c2bb34c221016713c9" + integrity sha512-hJvPD267cCwLIRMOISjDH8h9wbwOcXIJip29UlJbU9iMtZtgE+YelmlpmZJvqcDfUiXWWrOh7tP76mj8EAfwIQ== dependencies: core-js "^3.0.1" @@ -1776,14 +1830,14 @@ prop-types "^15.7.2" resolve-from "^5.0.0" -"@storybook/theming@^5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-5.2.1.tgz#913e383632e4702035a107c2cc5e5cb27231b389" - integrity sha512-lbAfcyI7Tx8swduIPmlu/jdWzqTBN/v82IEQbZbPR4LS5OHRPmhXPNgFGrcH4kFAiD0GoezSsdum1x0ZZpsQUQ== +"@storybook/theming@5.2.6": + version "5.2.6" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-5.2.6.tgz#e04170b3e53dcfc791b2381c8a39192ae88cd291" + integrity sha512-Xa9R/H8DDgmvxsCHloJUJ2d9ZQl80AeqHrL+c/AKNpx05s9lV74DcinusCf0kz72YGUO/Xt1bAjuOvLnAaS8Gw== dependencies: "@emotion/core" "^10.0.14" "@emotion/styled" "^10.0.14" - "@storybook/client-logger" "5.2.1" + "@storybook/client-logger" "5.2.6" common-tags "^1.8.0" core-js "^3.0.1" deep-object-diff "^1.1.0" @@ -1961,10 +2015,10 @@ acorn-globals@^4.1.0: acorn "^6.0.1" acorn-walk "^6.0.1" -acorn-jsx@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.2.tgz#84b68ea44b373c4f8686023a551f61a21b7c4a4f" - integrity sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw== +acorn-jsx@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" + integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== acorn-walk@^6.0.1: version "6.1.1" @@ -1981,7 +2035,7 @@ acorn@^6.0.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.6.tgz#cd75181670d5b99bdb1b1c993941d3a239ab1f56" integrity sha512-5M3G/A4uBSMIlfJ+h9W125vJvPFH/zirISsW5qfxF5YzEvXJCtolLoQvM5yZft0DvMcUrPGKPOlgEu55I6iUtA== -acorn@^7.0.0: +acorn@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== @@ -2046,6 +2100,13 @@ ansi-escapes@^4.1.0: dependencies: type-fest "^0.3.0" +ansi-escapes@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.2.1.tgz#4dccdb846c3eee10f6d64dea66273eab90c37228" + integrity sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q== + dependencies: + type-fest "^0.5.2" + ansi-fragments@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/ansi-fragments/-/ansi-fragments-0.2.1.tgz#24409c56c4cc37817c3d7caa99d8969e2de5a05e" @@ -2409,7 +2470,7 @@ babel-jest@^23.6.0: babel-plugin-istanbul "^4.1.6" babel-preset-jest "^23.2.0" -babel-jest@^24.9.0: +babel-jest@^24.1.0, babel-jest@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54" integrity sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw== @@ -2788,10 +2849,10 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== -bugsnag-react-native@^2.22.3: - version "2.22.4" - resolved "https://registry.yarnpkg.com/bugsnag-react-native/-/bugsnag-react-native-2.22.4.tgz#9fd56a2cfcd17b474705255744b5f6d2737722f2" - integrity sha512-DK7U1LWQPOzwDOxhrGMS5pHIknifUbMKDY1ZRqMtpDkMEa/A4ncengrpFLkPww4blGhoRgDk15tFXw2midoc8w== +bugsnag-react-native@2.23.2: + version "2.23.2" + resolved "https://registry.yarnpkg.com/bugsnag-react-native/-/bugsnag-react-native-2.23.2.tgz#36143187b67605934e3441a7d8562f60666f5919" + integrity sha512-nCvYswyr43GGlE4LEdD5p7XR2NvkVKmSxF7+i//ONWszS/cHnO0D1h57LlPo2elzcDpK9NHGcz3h6WkZVxkf0Q== dependencies: iserror "^0.0.2" promise "^7" @@ -3014,6 +3075,13 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + cli-spinners@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77" @@ -3508,10 +3576,17 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= -deep-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= +deep-equal@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" deep-extend@^0.6.0: version "0.6.0" @@ -3766,6 +3841,11 @@ emoji-regex@^7.0.1, emoji-regex@^7.0.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + emoji-toolkit@^5.0.5: version "5.0.5" resolved "https://registry.yarnpkg.com/emoji-toolkit/-/emoji-toolkit-5.0.5.tgz#83f92fc5e78031e046f9fe861c804effdc4380ee" @@ -3881,6 +3961,11 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escape-string-regexp@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + escodegen@1.x.x, escodegen@^1.9.1: version "1.11.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" @@ -4002,22 +4087,22 @@ eslint-scope@^5.0.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-utils@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab" - integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q== +eslint-utils@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== dependencies: - eslint-visitor-keys "^1.0.0" + eslint-visitor-keys "^1.1.0" eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== -eslint@^6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.4.0.tgz#5aa9227c3fbe921982b2eda94ba0d7fae858611a" - integrity sha512-WTVEzK3lSFoXUovDHEbkJqCVPEPwbhCq4trDktNI6ygs7aO41d4cDT0JFAT5MivzZeVLWlg7vHL+bgrQv/t3vA== +eslint@^6.5.1: + version "6.6.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.6.0.tgz#4a01a2fb48d32aacef5530ee9c5a78f11a8afd04" + integrity sha512-PpEBq7b6qY/qrOmpYQ/jTMDYfuQMELR4g4WI1M/NaSDDD/bdcMb+dj4Hgks7p41kW2caXsPsEZAEAyAgjVVC0g== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.10.0" @@ -4026,9 +4111,9 @@ eslint@^6.4.0: debug "^4.0.1" doctrine "^3.0.0" eslint-scope "^5.0.0" - eslint-utils "^1.4.2" + eslint-utils "^1.4.3" eslint-visitor-keys "^1.1.0" - espree "^6.1.1" + espree "^6.1.2" esquery "^1.0.1" esutils "^2.0.2" file-entry-cache "^5.0.1" @@ -4038,7 +4123,7 @@ eslint@^6.4.0: ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^6.4.1" + inquirer "^7.0.0" is-glob "^4.0.0" js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" @@ -4057,13 +4142,13 @@ eslint@^6.4.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.1.tgz#7f80e5f7257fc47db450022d723e356daeb1e5de" - integrity sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ== +espree@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d" + integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA== dependencies: - acorn "^7.0.0" - acorn-jsx "^5.0.2" + acorn "^7.1.0" + acorn-jsx "^5.1.0" eslint-visitor-keys "^1.1.0" esprima@3.x.x, esprima@^3.1.3: @@ -4394,6 +4479,13 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" +fbemitter@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-2.1.1.tgz#523e14fdaf5248805bb02f62efc33be703f51865" + integrity sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU= + dependencies: + fbjs "^0.8.4" + fbjs-css-vars@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" @@ -4415,7 +4507,7 @@ fbjs-scripts@^1.1.0: semver "^5.1.0" through2 "^2.0.0" -fbjs@^0.8.0, fbjs@^0.8.1, fbjs@^0.8.9: +fbjs@^0.8.0, fbjs@^0.8.1, fbjs@^0.8.4, fbjs@^0.8.9: version "0.8.17" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= @@ -4449,6 +4541,13 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" +figures@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec" + integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg== + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" @@ -4875,6 +4974,14 @@ global-dirs@^0.1.0: dependencies: ini "^1.3.4" +global@^4.3.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + global@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" @@ -5166,27 +5273,27 @@ https-proxy-agent@^2.2.1: agent-base "^4.1.0" debug "^3.1.0" -husky@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/husky/-/husky-3.0.2.tgz#e78fd2ae16edca59fc88e56aeb8d70acdcc1c082" - integrity sha512-WXCtaME2x0o4PJlKY4ap8BzLA+D0zlvefqAvLCPriOOu+x0dpO5uc5tlB7CY6/0SE2EESmoZsj4jW5D09KrJoA== +husky@3.0.9: + version "3.0.9" + resolved "https://registry.yarnpkg.com/husky/-/husky-3.0.9.tgz#a2c3e9829bfd6b4957509a9500d2eef5dbfc8044" + integrity sha512-Yolhupm7le2/MqC1VYLk/cNmYxsSsqKkTyBhzQHhPK1jFnC89mmmNVuGtLNabjDI6Aj8UNIr0KpRNuBkiC4+sg== dependencies: chalk "^2.4.2" + ci-info "^2.0.0" cosmiconfig "^5.2.1" execa "^1.0.0" get-stdin "^7.0.0" - is-ci "^2.0.0" opencollective-postinstall "^2.0.2" pkg-dir "^4.2.0" - please-upgrade-node "^3.1.1" - read-pkg "^5.1.1" + please-upgrade-node "^3.2.0" + read-pkg "^5.2.0" run-node "^1.0.0" slash "^3.0.0" -i18n-js@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/i18n-js/-/i18n-js-3.3.0.tgz#05512f7184b5117c087ab597be649720a834c068" - integrity sha512-+m8jh84IIWlFwEJgwrWCkeIwIES9ilJKBOj5qx8ZTLLmlPz7bjKnCdxf254wRf6M4pkQHtgXGT9r9lGk0e9aug== +i18n-js@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/i18n-js/-/i18n-js-3.5.0.tgz#e2c41e1f90405d691d33ddce260f3dff9743215e" + integrity sha512-XosH7plfEisWo5XEYxkdlwONsDVQ3sYI3ZoKXcjXdyq+9eVNIJg2h2oPsgadfqcXxpPHMVMNBgmiyW3aEJXg1g== iconv-lite@0.4.23: version "0.4.23" @@ -5330,22 +5437,22 @@ inquirer@^6.2.2: strip-ansi "^5.1.0" through "^2.3.6" -inquirer@^6.4.1: - version "6.5.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" - integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== +inquirer@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.0.tgz#9e2b032dde77da1db5db804758b8fea3a970519a" + integrity sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ== dependencies: - ansi-escapes "^3.2.0" + ansi-escapes "^4.2.1" chalk "^2.4.2" - cli-cursor "^2.1.0" + cli-cursor "^3.1.0" cli-width "^2.0.0" external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" run-async "^2.2.0" rxjs "^6.4.0" - string-width "^2.1.0" + string-width "^4.1.0" strip-ansi "^5.1.0" through "^2.3.6" @@ -5403,6 +5510,11 @@ is-alphanumerical@^1.0.0: is-alphabetical "^1.0.0" is-decimal "^1.0.0" +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -5544,6 +5656,11 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-function@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" @@ -6174,6 +6291,25 @@ jest-haste-map@^24.9.0: optionalDependencies: fsevents "^1.2.7" +jest-haste-map@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" + integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ== + dependencies: + "@jest/types" "^24.9.0" + anymatch "^2.0.0" + fb-watchman "^2.0.0" + graceful-fs "^4.1.15" + invariant "^2.2.4" + jest-serializer "^24.9.0" + jest-util "^24.9.0" + jest-worker "^24.9.0" + micromatch "^3.1.10" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^1.2.7" + jest-jasmine2@^23.6.0: version "23.6.0" resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz#840e937f848a6c8638df24360ab869cc718592e0" @@ -7138,7 +7274,7 @@ lodash.throttle@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= -lodash@4.17.15, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.7.14: +lodash@4.17.15, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.6.1, lodash@^4.7.14: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -7164,10 +7300,9 @@ logkitty@^0.6.0: dayjs "^1.8.15" yargs "^12.0.5" -lokijs@^1.5.5: +"lokijs@git+https://github.com/Nozbe/LokiJS.git#384b80f": version "1.5.7" - resolved "https://registry.yarnpkg.com/lokijs/-/lokijs-1.5.7.tgz#3bbeb5c2dbffebd78d035bac82c7c4e6055870f0" - integrity sha512-2SqUV6JH4f15Z5/7LVsyadSUwHhZppxhujgy/VhVqiRYMGt5oaocb7fV/3JGjHJ6rTuEIajnpTLGRz9cJW/c3g== + resolved "git+https://github.com/Nozbe/LokiJS.git#384b80f26edbf123c277a9cee02437a43467f9ac" loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" @@ -7282,11 +7417,6 @@ mem@^4.0.0: mimic-fn "^1.0.0" p-is-promise "^2.0.0" -memoize-one@^5.0.5: - version "5.1.1" - resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0" - integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== - memoizerific@^1.11.3: version "1.11.3" resolved "https://registry.yarnpkg.com/memoizerific/-/memoizerific-1.11.3.tgz#7c87a4646444c32d75438570905f2dbd1b1a805a" @@ -7337,6 +7467,13 @@ metro-babel-transformer@0.56.0: "@babel/core" "^7.0.0" metro-source-map "0.56.0" +metro-babel7-plugin-react-transform@0.51.1: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.51.1.tgz#9cce2c340cc4006fc82aa6dfab27af22d592607e" + integrity sha512-wzn4X9KgmAMZ7Bi6v9KxA7dw+AHGL0RODPxU5NDJ3A6d0yERvzfZ3qkzWhz8jbFkVBK12cu5DTho3HBazKQDOw== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + metro-cache@0.56.0: version "0.56.0" resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.56.0.tgz#213a8d5fad6c695ece841e8ef961285607295511" @@ -7387,13 +7524,13 @@ metro-minify-uglify@0.56.0: dependencies: uglify-es "^3.1.9" -metro-react-native-babel-preset@0.56.0, metro-react-native-babel-preset@^0.56.0: +metro-react-native-babel-preset@0.56.0: version "0.56.0" resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.56.0.tgz#fa47dfd5f7678e89cffd1249020b8add6938fc48" integrity sha512-MAo1fm0dNn6MVZmylaz6k2HC1MINHLTLfE7O3a9Xz3fAtbGbApisp06rBUfK5uUqIJDmAaKgbiT34lHJSIiE6Q== dependencies: + "@babel/core" "^7.0.0" "@babel/plugin-proposal-class-properties" "^7.0.0" - "@babel/plugin-proposal-export-default-from" "^7.0.0" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" "@babel/plugin-proposal-object-rest-spread" "^7.0.0" "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" @@ -7408,6 +7545,43 @@ metro-react-native-babel-preset@0.56.0, metro-react-native-babel-preset@^0.56.0: "@babel/plugin-transform-destructuring" "^7.0.0" "@babel/plugin-transform-exponentiation-operator" "^7.0.0" "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-object-assign" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-regenerator" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.0.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + react-refresh "^0.4.0" + +metro-react-native-babel-preset@^0.51.1: + version "0.51.1" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.51.1.tgz#44aeeedfea37f7c2ab8f6f273fa71b90fe65f089" + integrity sha512-e9tsYDFhU70gar0jQWcZXRPJVCv4k7tEs6Pm74wXO2OO/T1MEumbvniDIGwGG8bG8RUnYdHhjcaiub2Vc5BRWw== + dependencies: + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.0.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-exponentiation-operator" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" "@babel/plugin-transform-for-of" "^7.0.0" "@babel/plugin-transform-function-name" "^7.0.0" "@babel/plugin-transform-literals" "^7.0.0" @@ -7426,7 +7600,8 @@ metro-react-native-babel-preset@0.56.0, metro-react-native-babel-preset@^0.56.0: "@babel/plugin-transform-typescript" "^7.0.0" "@babel/plugin-transform-unicode-regex" "^7.0.0" "@babel/template" "^7.0.0" - react-refresh "^0.4.0" + metro-babel7-plugin-react-transform "0.51.1" + react-transform-hmr "^1.0.4" metro-react-native-babel-transformer@^0.56.0: version "0.56.0" @@ -7611,6 +7786,11 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" @@ -7731,6 +7911,11 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + mv@~2: version "2.1.1" resolved "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2" @@ -8016,11 +8201,21 @@ object-hash@^1.3.1: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== +object-is@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" + integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY= + object-keys@^1.0.11, object-keys@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -8117,6 +8312,13 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + dependencies: + mimic-fn "^2.1.0" + open@^6.2.0: version "6.4.0" resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" @@ -8613,10 +8815,10 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -please-upgrade-node@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" - integrity sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ== +please-upgrade-node@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" + integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== dependencies: semver-compare "^1.0.0" @@ -8732,6 +8934,11 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + process@~0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" @@ -8898,10 +9105,10 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== -rambdax@^2.13.0: - version "2.14.1" - resolved "https://registry.yarnpkg.com/rambdax/-/rambdax-2.14.1.tgz#9ede5eebd3bb502ff584592e376abf67e7f8e107" - integrity sha512-VCXGhXzUdzt0m0clxjVflRZsUB+O1+RzZWWefh7CQg6aMvDIypvSphRApXpPGqBOzJnQw2YBkVZZiInYx3GPfw== +rambdax@2.15.0: + version "2.15.0" + resolved "https://registry.yarnpkg.com/rambdax/-/rambdax-2.15.0.tgz#34fb481cea1a88e64a25e3a25e34a258fa18ca12" + integrity sha512-9ScXRMAcLaiist63yYDeDTRSIbL9DFY5yaIkoWyodaHS94PUL1ECQxQkxPP+h76oXG6bLo9b/ML+yvIRd78qeg== random-bytes@~1.0.0: version "1.0.0" @@ -8949,6 +9156,11 @@ react-clientside-effect@^1.2.0: dependencies: "@babel/runtime" "^7.0.0" +react-deep-force-update@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.1.2.tgz#3d2ae45c2c9040cbb1772be52f8ea1ade6ca2ee1" + integrity sha512-WUSQJ4P/wWcusaH+zZmbECOk7H5N2pOIl0vzheeornkIMhu+qrNdGFm0bDZLCb0hSF0jf/kH1SgkNGfBdTc4wA== + react-devtools-core@^3.6.3: version "3.6.3" resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-3.6.3.tgz#977d95b684c6ad28205f0c62e1e12c5f16675814" @@ -8957,15 +9169,15 @@ react-devtools-core@^3.6.3: shell-quote "^1.6.1" ws "^3.3.1" -react-dom@16.9.0: - version "16.9.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.9.0.tgz#5e65527a5e26f22ae3701131bcccaee9fb0d3962" - integrity sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ== +react-dom@16.8.1: + version "16.8.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.1.tgz#ec860f98853d09d39bafd3a6f1e12389d283dbb4" + integrity sha512-N74IZUrPt6UiDjXaO7UbDDFXeUXnVhZzeRLy/6iqqN1ipfjrhR60Bp5NuBK+rv3GMdqdIuwIl22u1SYwf330bg== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.15.0" + scheduler "^0.13.1" react-dom@^16.8.3: version "16.8.6" @@ -9023,9 +9235,9 @@ react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6: integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== react-is@^16.9.0: - version "16.9.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb" - integrity sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw== + version "16.11.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.11.0.tgz#b85dfecd48ad1ce469ff558a882ca8e8313928fa" + integrity sha512-gbBVYR2p8mnriqAwWx9LbuUrShnAuSCNnuPGyc7GJrMVQtPDAh8iLpv7FRuMPFb56KkaVZIYSz1PrjI9q0QPCw== react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4: version "3.0.4" @@ -9037,6 +9249,13 @@ react-native-action-sheet@^2.2.0: resolved "https://registry.yarnpkg.com/react-native-action-sheet/-/react-native-action-sheet-2.2.0.tgz#309a87f53bf4e7b17fdd9d24b10b8dcbaebb7230" integrity sha512-4lsuxH+Cn3/aUEs1VCwqvLhEFyXNqYTkT67CzgTwlifD9Ij4OPQAIs8D+HUD9zBvWc4NtT6cyG1lhArPVMQeVw== +react-native-animatable@1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/react-native-animatable/-/react-native-animatable-1.3.3.tgz#a13a4af8258e3bb14d0a9d839917e9bb9274ec8a" + integrity sha512-2ckIxZQAsvWn25Ho+DK3d1mXIgj7tITkrS4pYDvx96WyOttSvzzFeQnM2od0+FUMzILbdHDsDEqZvnz1DYNQ1w== + dependencies: + prop-types "^15.7.2" + react-native-animatable@^1.2.4: version "1.3.1" resolved "https://registry.yarnpkg.com/react-native-animatable/-/react-native-animatable-1.3.1.tgz#f004a7e9de6838d0fbf210d642593cff7affd9ef" @@ -9044,12 +9263,14 @@ react-native-animatable@^1.2.4: dependencies: prop-types "^15.5.10" -react-native-animatable@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/react-native-animatable/-/react-native-animatable-1.3.2.tgz#4783ee1a73dc98815aef234ce6b819f80bfe7d80" - integrity sha512-rmah3KQ63ft8DxkzFUwJSuZeq+oSYwldoGF4DTOR5WM2WR5wiWLgBAtrAHlI3Di3by323uOR21s+MlqPcHz2Kw== +react-native-appearance@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/react-native-appearance/-/react-native-appearance-0.3.1.tgz#f8120222131767e9227c2c7ba3a9478f4c6a5ab7" + integrity sha512-humg0ddjWjMfiSQCjsAcJk5o/jLJVy7aDEJuqN29ypQTfEfMKC3kVZP7dgb5lhAfJT3gquvDlT9IalZ2B7n6CQ== dependencies: - prop-types "^15.5.10" + fbemitter "^2.1.1" + invariant "^2.2.4" + use-subscription "^1.0.0" react-native-audio@^4.3.0: version "4.3.0" @@ -9104,10 +9325,10 @@ react-native-firebase@^5.5.5: opencollective-postinstall "^2.0.0" prop-types "^15.7.2" -react-native-gesture-handler@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-1.4.1.tgz#c38d9e57637b95e221722a79f2bafac62e3aeb21" - integrity sha512-Ffcs+SbEbkGaal0CClYL+v7A9y4OA5G5lW01qrzjxaqASp5C8BfnWSKuqYKE00s6bLwE5L4xnlHkG0yIxAtbrQ== +react-native-gesture-handler@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-1.5.0.tgz#df7dc5285c152e0656db70f55200fa632c4f45af" + integrity sha512-YUOXHsGLajK1cFReQ4Xh0H9GUTxDW9cUZEVu1q+dVqur2urSKi63KklAFB2l8Neob9nl1E/w0c5hGcBP9FMCIA== dependencies: hammerjs "^2.0.8" hoist-non-react-statics "^2.3.1" @@ -9115,8 +9336,8 @@ react-native-gesture-handler@^1.4.1: prop-types "^15.7.2" "react-native-image-crop-picker@git+https://github.com/RocketChat/react-native-image-crop-picker.git": - version "0.25.0" - resolved "git+https://github.com/RocketChat/react-native-image-crop-picker.git#08cd1196077d6a5ebb77a691e1396a5c3e48e69d" + version "0.26.1" + resolved "git+https://github.com/RocketChat/react-native-image-crop-picker.git#bd8ac59721add220a137f532c53fe9cebef79b75" react-native-image-pan-zoom@^2.1.9: version "2.1.11" @@ -9139,10 +9360,10 @@ react-native-jitsi-meet@RocketChat/react-native-jitsi-meet: version "2.0.3" resolved "https://codeload.github.com/RocketChat/react-native-jitsi-meet/tar.gz/4e67967de26e1f9cbf4b0ca6ab8a673794f62f70" -react-native-keyboard-aware-scroll-view@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/react-native-keyboard-aware-scroll-view/-/react-native-keyboard-aware-scroll-view-0.8.0.tgz#00bcaa38c91323913bb7a733059ad2bc4875f88c" - integrity sha512-gPfhgHQI/z7Cc5aeNOEmK0b250QkAeU6V+4oH8EC7mmFneEKn6MAIDjpoiwqt6bV+lFJPABXfx9MtrRmtCeJ/Q== +react-native-keyboard-aware-scroll-view@0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/react-native-keyboard-aware-scroll-view/-/react-native-keyboard-aware-scroll-view-0.9.1.tgz#9e54b565a5f19b30bed12221d48921781f7630af" + integrity sha512-tBZ8rmjELN0F6t5UBp5CW3NYmZXgVnJSzVCssv/OqG2t6kiB+OUTqxNvUP24K+HARX4H+XaW0aEJSFQkQCv6KA== dependencies: prop-types "^15.6.2" react-native-iphone-x-helper "^1.0.3" @@ -9160,10 +9381,15 @@ react-native-keyboard-tracking-view@^5.5.0: resolved "https://registry.yarnpkg.com/react-native-keyboard-tracking-view/-/react-native-keyboard-tracking-view-5.5.0.tgz#87d28639f30e5b511de510e4063e476f23d6e4f2" integrity sha512-e/tYhvccmLOSV+6qpU5Hlpn/U2gVu5K5F555oCUBBF229vv/V/fGoq2QyBnBEKmF9IKzBEOpzxBavUR3IfaKXw== -react-native-localize@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/react-native-localize/-/react-native-localize-1.1.4.tgz#d48aa4f75afd39a42dcd0bdf40f7f44a8ccd604c" - integrity sha512-NHsA812yvoH9ktPl1IqIxwDDwykipyH7K4zeW/nnipZuQb2g73SQEB3ryqKHmRASWD0DZl0hIxHr9IszzG5W5w== +react-native-keycommands@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/react-native-keycommands/-/react-native-keycommands-2.0.3.tgz#09b799c1f70832e5cd9fbdb712ddaa3ee683f70e" + integrity sha512-s03K8JvCnfLhBg10Y2aRH3Bp9Uw9QOEr0uzuIj9OkgjjTB8/b+T4K5LSCxGuIAD30IxsEZvGZKjP1DzEMxaRhQ== + +react-native-localize@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/react-native-localize/-/react-native-localize-1.3.1.tgz#d0b7046acd4214ac2bcb61102317374351400c76" + integrity sha512-Y3LzTHyrgsIsDYvjWSRguARBKjiLaahcbJg663ZqP1Tcpan4LYn/f3iusM+Oh6qYvClnlo9AlBkLdCZbWwe7Tw== react-native-mime-types@^2.2.1: version "2.2.1" @@ -9172,13 +9398,13 @@ react-native-mime-types@^2.2.1: dependencies: mime-db "~1.25.0" -react-native-modal@^11.3.0: - version "11.3.1" - resolved "https://registry.yarnpkg.com/react-native-modal/-/react-native-modal-11.3.1.tgz#9f67728b36fdc299f97d3da1d131190a0337b89b" - integrity sha512-3rRuXwvObknVijVNS8iamjMXWLjlb9xK90o+WtEcJ3C7HKuR2SOH578SoltIC6ZmVjO3vZwOApGVdSfR3LtPQg== +react-native-modal@11.5.3: + version "11.5.3" + resolved "https://registry.yarnpkg.com/react-native-modal/-/react-native-modal-11.5.3.tgz#28b4c761680a165eaf1d2c0fb08e272c0191b39f" + integrity sha512-U6RghSkZUZ6c0LHMbwAnVscEwGoI58eXfBstVs18t50miV0GmLcJhIOu5OND+SDGVkBQFiGFRu/pTUJaA7wfGw== dependencies: prop-types "^15.6.2" - react-native-animatable "^1.3.1" + react-native-animatable "1.3.3" react-native-modal@^9.0.0: version "9.0.0" @@ -9188,6 +9414,11 @@ react-native-modal@^9.0.0: prop-types "^15.6.2" react-native-animatable "^1.2.4" +react-native-navigation-bar-color@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/react-native-navigation-bar-color/-/react-native-navigation-bar-color-1.0.0.tgz#04ff752a58049af93ceea9ccf266b8d3fbc6514a" + integrity sha512-djBE0zSp+JT65VeUm4UpIpr9DA9SpE9YTLwDAcqkWfB9JI8l3djSx+SmrIYfc7dUs216Y6qo2dr0qR3+M5qbOQ== + react-native-notifications@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/react-native-notifications/-/react-native-notifications-2.0.6.tgz#5355fad1ea53327fb00fd5e8a6570279fe32f2a9" @@ -9196,22 +9427,15 @@ react-native-notifications@^2.0.6: core-js "^1.0.0" uuid "^2.0.3" -react-native-optimized-flatlist@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/react-native-optimized-flatlist/-/react-native-optimized-flatlist-1.0.4.tgz#15c817ffb545e3c62e56a1b3c4654c1316414941" - integrity sha512-PMoZRJAHKzd/ahYKUzt43AJ+kVhHpOSTvBhJdQqooZXw312xADWpR7iDvBAbBiRGkmk0yM4GJacd9TMft6q/Gg== - dependencies: - prop-types "^15.6.0" - react-native-orientation-locker@1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/react-native-orientation-locker/-/react-native-orientation-locker-1.1.6.tgz#7d66a62cdbf4dd1548522efe69a4e04af5daf929" integrity sha512-yXTC8KmKfhuEAh+gCOcehx0v4IjYapV0lJ6W1muafoISvxMsT+Cizzy+Iz78hQywVZTJNB/Xusl7WMXev7OxDQ== -react-native-picker-select@6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/react-native-picker-select/-/react-native-picker-select-6.3.0.tgz#0a4a4692085e80580662d6914eb1750e30b05b71" - integrity sha512-1NGlZzPDTyJYU3aMC3zJTBydCCejKd4n2h8KDtpyPcYGAYIzvHXOQgvrjgPz0gRTFQes14KoICCKqc+b1Eewig== +react-native-picker-select@6.3.3: + version "6.3.3" + resolved "https://registry.yarnpkg.com/react-native-picker-select/-/react-native-picker-select-6.3.3.tgz#ea4d20a385041a2f4ead3eb3398b08511d7d6c2a" + integrity sha512-9cSXWonugev+e0EHrV8FhzwkjAhpipLFXsGMv+Ns5xI47T9fyNrOXpSeSfgnmycbuAbWRVlJRhJZ9eDGUaNk7w== dependencies: lodash.isequal "^4.5.0" @@ -9220,10 +9444,10 @@ react-native-platform-touchable@^1.1.1: resolved "https://registry.yarnpkg.com/react-native-platform-touchable/-/react-native-platform-touchable-1.1.1.tgz#fde4acc65eea585d28b164d0c3716a42129a68e4" integrity sha1-/eSsxl7qWF0osWTQw3FqQhKaaOQ= -react-native-reanimated@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-1.3.0.tgz#581cdb0bd1ff05e7304b116af712ded0c7665ede" - integrity sha512-KFno6D0q09kx71IDuPa4qeC1t1msALsCMuli3/EN3YDf8XoM2CG53yzhVHMFtmcW0IUCySugHgxQiuT5BzwOPA== +react-native-reanimated@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-1.4.0.tgz#7f1acbf9be08492d834f512700570978052be2f9" + integrity sha512-tO7nSNNP+iRLVbkcSS5GXyDBb7tSI02+XuRL3/S39EAr35rnvUy2JfeLUQG+fWSObJjnMVhasUDEUwlENk8IXw== react-native-responsive-ui@^1.1.1: version "1.1.1" @@ -9253,11 +9477,12 @@ react-native-screens@^2.0.0-alpha.3: dependencies: debounce "^1.2.0" -react-native-scrollable-tab-view@diegolmello/react-native-scrollable-tab-view: - version "0.10.0" - resolved "https://codeload.github.com/diegolmello/react-native-scrollable-tab-view/tar.gz/404bf4a11055675cb7b6a99bdc60c7e827985a3f" +react-native-scrollable-tab-view@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/react-native-scrollable-tab-view/-/react-native-scrollable-tab-view-1.0.0.tgz#87319896067f7bb643ecd7fba2cba4d6d8f9e18b" + integrity sha512-lpZ9xz+PBdgSzpk93VjCIfxV0zvJDX9iEUP8ImDg3p1QJGHOWbWyfDx+lcx5VCDVrrdZdtuVAAdc0tkYXZyQDw== dependencies: - "@react-native-community/viewpager" "^1.1.7" + "@react-native-community/viewpager" "^2.0.1" create-react-class "^15.6.2" prop-types "^15.6.0" react-timer-mixin "^0.13.3" @@ -9317,27 +9542,27 @@ react-native-vector-icons@6.6.0: prop-types "^15.6.2" yargs "^13.2.2" -react-native-video@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/react-native-video/-/react-native-video-5.0.0.tgz#30b58e31f0776bfa8dc71109c25114d4e50d9209" - integrity sha512-nSG7Zkc0SE2Pa/sKWvMEPUc9Zlo0iVOFTac0GcXd/U5vTsm4L28leQzJ8K/s+Yc5xfCYaeb9bIWROqw2oiB9Ig== +react-native-video@5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/react-native-video/-/react-native-video-5.0.2.tgz#8f07da0cd85a1d4b316d115f3786409efc9e39fb" + integrity sha512-zbItbMH0uZYkK7xFKa41+950QjoTrIl60bY1vAP7gxTn20HGHvHZRw28h9A5npK5T0QuWMAkn8twaGzqcDkTug== dependencies: keymirror "^0.1.1" prop-types "^15.5.10" shaka-player "^2.4.4" -react-native-webview@6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/react-native-webview/-/react-native-webview-6.8.0.tgz#a8d4b0c8f4900c50dd40b7574dacc346dedb17d8" - integrity sha512-H7E82jTdEBSESUbXg9WVXEu8I4rc05sL1CtbVNKw3DcooHvgz9RtpdY5Dm0WiJGQCBwcCTU8/ZXebs9RD6s98g== +react-native-webview@7.5.1: + version "7.5.1" + resolved "https://registry.yarnpkg.com/react-native-webview/-/react-native-webview-7.5.1.tgz#01b026c1110d7548123460cc640fb1d4227a0f54" + integrity sha512-lFpa4m8CMapk6vbZf2GiQDGxsQSRrKoVElTFCkDI5BEl5/a14ClASnJdIyr6U6uYj7ZjcAYsaqNtz86BJqyRVQ== dependencies: - escape-string-regexp "1.0.5" + escape-string-regexp "2.0.0" invariant "2.2.4" -react-native@0.61.1: - version "0.61.1" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.61.1.tgz#ac2559f78f9e689356fedfa93159026a25313d7d" - integrity sha512-FjOhAgzjrPr2BjBITmCY+SHzWxfP/bv5ve3oN6ItoIPsVPjJG2QZE8yeByVdI4TzaZrGHU4Ag7/7hX4j39cj2Q== +react-native@0.61.3: + version "0.61.3" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.61.3.tgz#0c7e299ccfa3a5efc6e87e88563f9dc444389aca" + integrity sha512-7p89m62+Wsc93tYEy010LZMZtQMOQjUC8nOiVF+XPBn4Fa3WUt7IlQjKs9tO9rcByZ4ilzeMp+W2kr1/U2lPLw== dependencies: "@babel/runtime" "^7.0.0" "@react-native-community/cli" "^3.0.0-alpha.1" @@ -9376,24 +9601,24 @@ react-navigation-drawer@1.4.0: dependencies: react-native-tab-view "^1.2.0" -react-navigation-header-buttons@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/react-navigation-header-buttons/-/react-navigation-header-buttons-3.0.1.tgz#4c10d5883774ca483e36edad8500432ba200d3d6" - integrity sha512-Z/JHuqtFL6p1jvRnwya6AiAjzlVcbGOy1tHA8TutDkVdlMhrJvG+WjmWLaMasz4J9+AMyBdri2tz7pyA1Jr3sg== +react-navigation-header-buttons@3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-navigation-header-buttons/-/react-navigation-header-buttons-3.0.4.tgz#63480ae356745549ede8b0232fda9c23c8526ea1" + integrity sha512-9wXSciaY1bxGxJQMhzVoPrVR20DQd487Re3119crVYZbAvQpugTznAc4VKc4rY4Z68LR//V7x7a00uEGAiZQDA== dependencies: react-native-platform-touchable "^1.1.1" -react-navigation-stack@^1.7.3: - version "1.8.0" - resolved "https://registry.yarnpkg.com/react-navigation-stack/-/react-navigation-stack-1.8.0.tgz#52cb159371b64d20780a72ce43e9620adec2f2a0" - integrity sha512-J8ezJlZRxoXuxVH7Y9EOBBluoOpjgrFN0HBKMJyi8ctFEVDsEjjbsffhk6ihOeZ2um7dPYErzeD7sLjx8YQDzw== +react-navigation-stack@^1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/react-navigation-stack/-/react-navigation-stack-1.10.3.tgz#e714e442b20427f0d2d3c18fce1f9e8cfe69be0b" + integrity sha512-1gksFi/g/Lg9sBhgLlD0OiEB5xnatHb4C0eNMA5tli9cTVlhq375XNPIqOiTyftibBmjdApAsZFj5srUCoOu/w== dependencies: prop-types "^15.7.2" -react-navigation@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/react-navigation/-/react-navigation-4.0.5.tgz#d4e16d9884cfd6bb2cda4d16e001227e2c859b46" - integrity sha512-VidRiSA2RvrgPlKs/7FNKV6pXEYXREtxiEl6m/Dmfb8x27amG6JRibzJC2mpWt4w0SAIGMUjHallRi3h9sIk0A== +react-navigation@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/react-navigation/-/react-navigation-4.0.10.tgz#ddf41134600689d6ba99e35dd22ba1f664f91e5c" + integrity sha512-7PqvmsdQ7HIyxPUMYbd9Uq//VoMdniEOLAOSvIhb/ExtbAt/1INSjUF+RiMWOMCWLTCNvNPRvTz7xy7qwWureg== dependencies: "@react-navigation/core" "^3.5.1" "@react-navigation/native" "^3.6.2" @@ -9418,17 +9643,29 @@ react-popper@^1.3.3: typed-styles "^0.0.7" warning "^4.0.2" -react-redux@7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.1.0.tgz#72af7cf490a74acdc516ea9c1dd80e25af9ea0b2" - integrity sha512-hyu/PoFK3vZgdLTg9ozbt7WF3GgX5+Yn3pZm5/96/o4UueXA+zj08aiSC9Mfj2WtD1bvpIb3C5yvskzZySzzaw== +react-popper@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.3.tgz#2c6cef7515a991256b4f0536cd4bdcb58a7b6af6" + integrity sha512-ynMZBPkXONPc5K4P5yFWgZx5JGAUIP3pGGLNs58cfAPgK67olx7fmLp+AdpZ0+GoQ+ieFDa/z4cdV6u7sioH6w== dependencies: - "@babel/runtime" "^7.4.5" + "@babel/runtime" "^7.1.2" + create-react-context "<=0.2.2" + popper.js "^1.14.4" + prop-types "^15.6.1" + typed-styles "^0.0.7" + warning "^4.0.2" + +react-redux@7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.1.3.tgz#717a3d7bbe3a1b2d535c94885ce04cdc5a33fc79" + integrity sha512-uI1wca+ECG9RoVkWQFF4jDMqmaw0/qnvaSvOoL/GA4dNxf6LoV8sUAcNDvE5NWKs4hFpn0t6wswNQnY3f7HT3w== + dependencies: + "@babel/runtime" "^7.5.5" hoist-non-react-statics "^3.3.0" invariant "^2.2.4" loose-envify "^1.4.0" prop-types "^15.7.2" - react-is "^16.8.6" + react-is "^16.9.0" react-refresh@^0.4.0: version "0.4.2" @@ -9446,15 +9683,15 @@ react-syntax-highlighter@^8.0.1: prismjs "^1.8.4" refractor "^2.4.1" -react-test-renderer@16.9.0: - version "16.9.0" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.9.0.tgz#7ed657a374af47af88f66f33a3ef99c9610c8ae9" - integrity sha512-R62stB73qZyhrJo7wmCW9jgl/07ai+YzvouvCXIJLBkRlRqLx4j9RqcLEAfNfU3OxTGucqR2Whmn3/Aad6L3hQ== +react-test-renderer@16.8.1: + version "16.8.1" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.8.1.tgz#72845ad9269be526126e97853311982f781767be" + integrity sha512-Bd21TN3+YVl6GZwav6O0T6m5UwGfOj+2+xZH5VH93ToD6M5uclN/c+R1DGX49ueG413KZPUx7Kw3sOYz2aJgfg== dependencies: object-assign "^4.1.1" prop-types "^15.6.2" - react-is "^16.9.0" - scheduler "^0.15.0" + react-is "^16.8.1" + scheduler "^0.13.1" react-textarea-autosize@^7.1.0: version "7.1.0" @@ -9469,14 +9706,23 @@ react-timer-mixin@^0.13.3: resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.4.tgz#75a00c3c94c13abe29b43d63b4c65a88fc8264d3" integrity sha512-4+ow23tp/Tv7hBM5Az5/Be/eKKF7DIvJ09voz5LyHGQaqqz9WV8YMs31eFvcYQs7d451LSg7kDJV70XYN/Ug/Q== -react@16.9.0: - version "16.9.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.9.0.tgz#40ba2f9af13bc1a38d75dbf2f4359a5185c4f7aa" - integrity sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w== +react-transform-hmr@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb" + integrity sha1-4aQL0Krvxy6N/Xp82gmvhQZjl7s= + dependencies: + global "^4.3.0" + react-proxy "^1.1.7" + +react@16.8.1: + version "16.8.1" + resolved "https://registry.yarnpkg.com/react/-/react-16.8.1.tgz#ae11831f6cb2a05d58603a976afc8a558e852c4a" + integrity sha512-wLw5CFGPdo7p/AgteFz7GblI2JPOos0+biSoxf1FPsGxWQZdN/pj6oToJs1crn61DL3Ln7mN86uZ4j74p31ELQ== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" + scheduler "^0.13.1" react@^16.8.3: version "16.8.6" @@ -9508,10 +9754,10 @@ reactotron-redux-saga@4.2.2: resolved "https://registry.yarnpkg.com/reactotron-redux-saga/-/reactotron-redux-saga-4.2.2.tgz#09072b4f43520db9646550937c7195d9b44bf81e" integrity sha512-5BHi7Fj+8WOB3bMfr9lshQD9ml1aZnwk74GJpcOATxxMeHevp26ethaLsP0pPv+B6Ojqw7QLMEBX09B3u+z1Bg== -reactotron-redux@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/reactotron-redux/-/reactotron-redux-3.1.1.tgz#eed516afa7f26d6202355e777fbc38ed12ae5f29" - integrity sha512-8tnF952oUy5bd1UmXchegumNuvO/v8o1KiU7uOsutN8ZZ2/RQ91Vew/bLF7JxzeJBWaiU2kxItMFeZucFm4slw== +reactotron-redux@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/reactotron-redux/-/reactotron-redux-3.1.2.tgz#37301687d4e2a5548664d21fc7447d1171e08ab2" + integrity sha512-2ScTmE2+kxjKPc7+vsYuw+igkhd4tjoftn4ouugVudQCO7B5vXVyQwLkNv/feaFfFoPlCQSVeJVg7PdzDFOsEQ== read-pkg-up@^1.0.1: version "1.0.1" @@ -9573,7 +9819,7 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -read-pkg@^5.1.1: +read-pkg@^5.1.1, read-pkg@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== @@ -9666,14 +9912,14 @@ redux-immutable-state-invariant@^2.1.0: invariant "^2.1.0" json-stringify-safe "^5.0.1" -redux-saga@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/redux-saga/-/redux-saga-1.0.5.tgz#03317261bc5fa7ee2ecb778f4e4848f573557bbb" - integrity sha512-ytGFtaHyz6NQMQp7/LpQ/6CtOkbPRCcAeljUpc4c95hRm5U6dFvrRiZHeBPuQZ56L3oXfTX3hiYh8/3ZudsiNg== +redux-saga@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/redux-saga/-/redux-saga-1.1.3.tgz#9f3e6aebd3c994bbc0f6901a625f9a42b51d1112" + integrity sha512-RkSn/z0mwaSa5/xH/hQLo8gNf4tlvT18qXDNvedihLcfzh+jMchDgaariQoehCpgRltEm4zHKJyINEz6aqswTw== dependencies: - "@redux-saga/core" "^1.0.3" + "@redux-saga/core" "^1.1.3" -redux@4.0.4, "redux@>=0.10 <5": +redux@4.0.4, redux@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.4.tgz#4ee1aeb164b63d6a1bcc57ae4aa0b6e6fa7a3796" integrity sha512-vKv4WdiJxOWKxK0yRoaK3Y4pxxB0ilzVx6dszU2W8wLxlb2yikRph4iV/ymtdJ6ZxpBLFbyrxklnT5yBbQSl3Q== @@ -9739,6 +9985,13 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexp.prototype.flags@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz#6b30724e306a27833eeb171b66ac8890ba37e41c" + integrity sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA== + dependencies: + define-properties "^1.1.2" + regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" @@ -9931,6 +10184,14 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -9965,10 +10226,10 @@ rn-extensions-share@^2.3.10: resolved "https://registry.yarnpkg.com/rn-extensions-share/-/rn-extensions-share-2.3.10.tgz#17b9cf101b325cfe4c150f4c2585ca1e78f965a5" integrity sha512-gff32w15VXnuKdGG9QfrysI+Cga4beSWT8xdp1DvVJ1HezJ7XsDR1ELj3Wajij5OlW31VAunO8g91HgUfplmSQ== -rn-fetch-blob@^0.10.16: - version "0.10.16" - resolved "https://registry.yarnpkg.com/rn-fetch-blob/-/rn-fetch-blob-0.10.16.tgz#bd54f66c94f7a8e06c213077483646478ae8d230" - integrity sha512-hZV+nF0HK4CWmspXGMw7/G8Q8qugpS/wbKiNLsFpdBZR8XYzjFZNvBWgGyC0F5JWQn3sjmK2w/FJjBlwdQWNQg== +rn-fetch-blob@0.11.2: + version "0.11.2" + resolved "https://registry.yarnpkg.com/rn-fetch-blob/-/rn-fetch-blob-0.11.2.tgz#bdc483bf1b0c3810d457983494a11fbada446679" + integrity sha512-oKszdNtA7vZ56d0Rfr+RDEUexwlZxu/HOqwULa36PRHhQsTO5ia7uKk+va3WzuwYxzhF9e0bY8n3k+GC6Df14A== dependencies: base-64 "0.1.0" glob "7.0.6" @@ -9978,6 +10239,11 @@ rn-host-detect@1.1.5, rn-host-detect@^1.1.5: resolved "https://registry.yarnpkg.com/rn-host-detect/-/rn-host-detect-1.1.5.tgz#fbecb982b73932f34529e97932b9a63e58d8deb6" integrity sha512-ufk2dFT3QeP9HyZ/xTuMtW27KnFy815CYitJMqQm+pgG3ZAtHBsrU8nXizNKkqXGy3bQmhEoloVbrfbvMJMqkg== +rn-root-view@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/rn-root-view/-/rn-root-view-1.0.3.tgz#a2cddc717278cb2175fb29b7c006e407b7f0d0e2" + integrity sha512-BIKm8hY5q8+pxK9B5ugYjqutoI9xn2JfxIZKWoaFmAl1bOIM4oXjwFQrRM1e6lFgzz99MN6Mf2dK3Alsywnvvw== + rn-user-defaults@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/rn-user-defaults/-/rn-user-defaults-1.3.5.tgz#8a93325e3fbbc47b1abd4147dc39b25eec8a45ab" @@ -10108,7 +10374,7 @@ sax@>=0.6.0, sax@^1.2.1, sax@^1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scheduler@0.15.0, scheduler@^0.15.0: +scheduler@0.15.0: version "0.15.0" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.15.0.tgz#6bfcf80ff850b280fed4aeecc6513bc0b4f17f8e" integrity sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg== @@ -10116,7 +10382,7 @@ scheduler@0.15.0, scheduler@^0.15.0: loose-envify "^1.1.0" object-assign "^4.1.1" -scheduler@^0.13.6: +scheduler@^0.13.1, scheduler@^0.13.6: version "0.13.6" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.6.tgz#466a4ec332467b31a91b9bf74e5347072e4cd889" integrity sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ== @@ -10856,6 +11122,15 @@ string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.1.0.tgz#ba846d1daa97c3c596155308063e075ed1c99aff" + integrity sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^5.2.0" + string.prototype.repeat@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-0.2.0.tgz#aba36de08dcee6a5a337d49b2ea1da1b28fc0ecf" @@ -11298,7 +11573,7 @@ type-fest@^0.3.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== -type-fest@^0.5.0: +type-fest@^0.5.0, type-fest@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.5.2.tgz#d6ef42a0356c6cd45f49485c3b6281fc148e48a2" integrity sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw== @@ -11330,7 +11605,7 @@ typescript-logic@^0.0.0: resolved "https://registry.yarnpkg.com/typescript-logic/-/typescript-logic-0.0.0.tgz#66ebd82a2548f2b444a43667bec120b496890196" integrity sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q== -typescript-tuple@^2.1.0: +typescript-tuple@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/typescript-tuple/-/typescript-tuple-2.2.1.tgz#7d9813fb4b355f69ac55032e0363e8bb0f04dad2" integrity sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q== @@ -11566,6 +11841,13 @@ urlgrey@^0.4.4: resolved "https://registry.yarnpkg.com/urlgrey/-/urlgrey-0.4.4.tgz#892fe95960805e85519f1cd4389f2cb4cbb7652f" integrity sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8= +use-subscription@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.3.0.tgz#3df13a798e826c8d462899423293289a3362e4e6" + integrity sha512-buZV7FUtnbOr+65dN7PHK7chHhQGfk/yjgqfpRLoWuHIAc4klAD/rdot2FsPNtFthN1ZydvA8tR/mWBMQ+/fDQ== + dependencies: + object-assign "^4.1.1" + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"