From b89404e53948db61b19319eed5252b685b9615a3 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 7 Oct 2024 11:43:55 -0300 Subject: [PATCH 01/19] chore: Bump version to 4.54.0 (#5903) --- android/app/build.gradle | 2 +- ios/RocketChatRN.xcodeproj/project.pbxproj | 4 ++-- ios/RocketChatRN/Info.plist | 2 +- ios/ShareRocketChatRN/Info.plist | 2 +- package.json | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index dd54861b6c..11cbd8bd9d 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -93,7 +93,7 @@ android { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode VERSIONCODE as Integer - versionName "4.53.0" + versionName "4.54.0" vectorDrawables.useSupportLibrary = true if (!isFoss) { manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String] diff --git a/ios/RocketChatRN.xcodeproj/project.pbxproj b/ios/RocketChatRN.xcodeproj/project.pbxproj index a23d27730a..06cbb31efb 100644 --- a/ios/RocketChatRN.xcodeproj/project.pbxproj +++ b/ios/RocketChatRN.xcodeproj/project.pbxproj @@ -2847,7 +2847,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 4.53.0; + MARKETING_VERSION = 4.54.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; @@ -2891,7 +2891,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 4.53.0; + MARKETING_VERSION = 4.54.0; MTL_FAST_MATH = YES; OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.reactnative.NotificationService; diff --git a/ios/RocketChatRN/Info.plist b/ios/RocketChatRN/Info.plist index efb1b9702c..b3498b4c54 100644 --- a/ios/RocketChatRN/Info.plist +++ b/ios/RocketChatRN/Info.plist @@ -28,7 +28,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 4.53.0 + 4.54.0 CFBundleSignature ???? CFBundleURLTypes diff --git a/ios/ShareRocketChatRN/Info.plist b/ios/ShareRocketChatRN/Info.plist index d373b4f75b..22ea62b83d 100644 --- a/ios/ShareRocketChatRN/Info.plist +++ b/ios/ShareRocketChatRN/Info.plist @@ -26,7 +26,7 @@ CFBundlePackageType XPC! CFBundleShortVersionString - 4.53.0 + 4.54.0 CFBundleVersion 1 KeychainGroup diff --git a/package.json b/package.json index a3d3de48c4..396068c008 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rocket-chat-reactnative", - "version": "4.53.0", + "version": "4.54.0", "private": true, "scripts": { "start": "react-native start", From 0e5931dfc6713678a5924cd31c30848491502f6e Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 14 Oct 2024 11:07:13 -0300 Subject: [PATCH 02/19] feat: Use @react-navigation/native-stack (#5759) --- app/AppContainer.tsx | 6 +- .../HeaderButton/HeaderButtonContainer.tsx | 16 +- app/containers/RoomHeader/RoomHeader.tsx | 9 +- app/containers/RoomHeader/index.tsx | 5 +- app/definitions/index.ts | 4 +- app/definitions/navigationTypes.ts | 4 +- app/ee/omnichannel/views/QueueListView.tsx | 8 +- app/lib/hooks/navigation.ts | 4 +- app/lib/methods/helpers/goRoom.ts | 16 +- .../methods/helpers/navigation/animations.ts | 86 ---- .../methods/helpers/navigation/conditional.ts | 34 -- app/lib/methods/helpers/navigation/index.ts | 26 +- app/stacks/InsideStack.tsx | 60 ++- .../MasterDetailStack/ModalContainer.tsx | 4 +- app/stacks/MasterDetailStack/index.tsx | 50 ++- app/stacks/OutsideStack.tsx | 16 +- app/stacks/ShareExtensionStack.tsx | 9 +- app/views/AddChannelTeamView.tsx | 33 +- app/views/AddExistingChannelView/index.tsx | 6 +- app/views/AdminPanelView/index.tsx | 4 +- app/views/AttachmentView.tsx | 16 +- app/views/AuthenticationWebView.tsx | 4 +- app/views/CannedResponseDetail.tsx | 4 +- app/views/CannedResponsesListView/index.tsx | 28 +- app/views/ChangeAvatarView/index.tsx | 18 +- app/views/CreateChannelView/index.tsx | 4 +- app/views/CreateDiscussionView/index.tsx | 5 +- app/views/DirectoryView/index.tsx | 8 +- app/views/DiscussionsView/index.tsx | 22 +- app/views/DisplayPrefsView.tsx | 4 +- app/views/E2EEncryptionSecurityView/index.tsx | 4 +- app/views/E2ESaveYourPasswordView.tsx | 4 +- app/views/ForgotPasswordView.tsx | 4 +- app/views/ForwardMessageView/index.tsx | 3 +- app/views/GetHelpView.tsx | 4 +- app/views/InviteUsersEditView/index.tsx | 4 +- app/views/LanguageView/index.tsx | 4 +- app/views/LivechatEditView.tsx | 4 +- app/views/LoginView/UserForm.tsx | 4 +- app/views/LoginView/index.tsx | 4 +- app/views/MediaAutoDownloadView/index.tsx | 4 +- app/views/MessagesView/index.tsx | 6 +- app/views/ModalBlockView.tsx | 9 +- app/views/NewMessageView/HeaderNewMessage.tsx | 4 +- app/views/NewMessageView/index.tsx | 4 +- .../NotificationPreferencesView/index.tsx | 4 +- app/views/ProfileView/index.tsx | 4 +- app/views/PushTroubleshootView/index.tsx | 4 +- app/views/ReadReceiptView/index.tsx | 9 +- app/views/ReportUserView/index.tsx | 9 +- app/views/RoomActionsView/index.tsx | 26 +- app/views/RoomInfoView/index.tsx | 13 +- .../components/ActionsSection.tsx | 6 +- app/views/RoomMembersView/helpers.ts | 10 +- app/views/RoomMembersView/index.tsx | 10 +- app/views/RoomView/LeftButtons.tsx | 6 +- app/views/RoomView/RightButtons.tsx | 16 +- .../RoomView/components/EncryptedRoom.tsx | 4 +- app/views/RoomView/constants.ts | 3 +- app/views/RoomView/index.tsx | 60 +-- app/views/RoomsListView/Header/Header.tsx | 21 +- app/views/RoomsListView/Header/index.tsx | 4 +- app/views/RoomsListView/index.tsx | 61 ++- app/views/ScreenLockConfigView.tsx | 3 +- app/views/SearchMessagesView/index.tsx | 8 +- app/views/SecurityPrivacyView.tsx | 4 +- app/views/SelectListView.tsx | 6 +- app/views/SelectServerView.tsx | 4 +- app/views/SelectedUsersView/index.tsx | 4 +- app/views/SetUsernameView.tsx | 4 +- app/views/SettingsView/index.tsx | 4 +- app/views/ShareListView/index.tsx | 16 +- app/views/ShareView/index.tsx | 16 +- app/views/TeamChannelsView.tsx | 29 +- app/views/ThreadMessagesView/index.tsx | 24 +- .../UserNotificationPreferencesView/index.tsx | 6 +- app/views/UserPreferencesView/index.tsx | 4 +- app/views/WorkspaceView/index.tsx | 6 +- e2e/helpers/app.ts | 23 +- e2e/tests/assorted/02-broadcast.spec.ts | 16 +- e2e/tests/assorted/11-deeplinking.spec.ts | 13 +- e2e/tests/room/02-room.spec.ts | 8 + e2e/tests/room/09-jumptomessage.spec.ts | 31 +- ios/RocketChatRN.xcodeproj/project.pbxproj | 378 ++++++++++++------ package.json | 2 +- yarn.lock | 22 +- 86 files changed, 735 insertions(+), 745 deletions(-) delete mode 100644 app/lib/methods/helpers/navigation/animations.ts delete mode 100644 app/lib/methods/helpers/navigation/conditional.ts diff --git a/app/AppContainer.tsx b/app/AppContainer.tsx index bfd1a8cc66..079eb9e7a6 100644 --- a/app/AppContainer.tsx +++ b/app/AppContainer.tsx @@ -1,6 +1,6 @@ import React, { useContext, memo, useEffect } from 'react'; import { NavigationContainer } from '@react-navigation/native'; -import { createStackNavigator } from '@react-navigation/stack'; +import { createNativeStackNavigator } from '@react-navigation/native-stack'; import { connect } from 'react-redux'; import { SetUsernameStackParamList, StackParamList } from './definitions/navigationTypes'; @@ -18,6 +18,8 @@ import ShareExtensionStack from './stacks/ShareExtensionStack'; import { ThemeContext } from './theme'; import { setCurrentScreen } from './lib/methods/helpers/log'; +const createStackNavigator = createNativeStackNavigator; + // SetUsernameStack const SetUsername = createStackNavigator(); const SetUsernameStack = () => ( @@ -57,7 +59,7 @@ const App = memo(({ root, isMasterDetail }: { root: string; isMasterDetail: bool } Navigation.routeNameRef.current = currentRouteName; }}> - + {root === RootEnum.ROOT_LOADING || root === RootEnum.ROOT_LOADING_SHARE_EXTENSION ? ( ) : null} diff --git a/app/containers/HeaderButton/HeaderButtonContainer.tsx b/app/containers/HeaderButton/HeaderButtonContainer.tsx index abf6db9e74..01cdd478ce 100644 --- a/app/containers/HeaderButton/HeaderButtonContainer.tsx +++ b/app/containers/HeaderButton/HeaderButtonContainer.tsx @@ -1,9 +1,12 @@ import React from 'react'; -import { StyleSheet, View } from 'react-native'; +import { StyleSheet, View, ViewProps } from 'react-native'; + +import { isAndroid, isTablet } from '../../lib/methods/helpers'; interface IHeaderButtonContainer { children?: React.ReactElement | (React.ReactElement | null)[] | null; left?: boolean; + onLayout?: ViewProps['onLayout']; } const styles = StyleSheet.create({ @@ -13,15 +16,18 @@ const styles = StyleSheet.create({ justifyContent: 'center' }, left: { - marginLeft: 5 + marginLeft: isTablet ? 5 : -5, + marginRight: isAndroid ? 25 : 0 }, right: { - marginRight: 5 + marginRight: isTablet ? 5 : -5 } }); -const Container = ({ children, left = false }: IHeaderButtonContainer): React.ReactElement => ( - {children} +const Container = ({ children, left = false, onLayout }: IHeaderButtonContainer): React.ReactElement => ( + + {children} + ); Container.displayName = 'HeaderButton.Container'; diff --git a/app/containers/RoomHeader/RoomHeader.tsx b/app/containers/RoomHeader/RoomHeader.tsx index 72741eec3d..98a592bca2 100644 --- a/app/containers/RoomHeader/RoomHeader.tsx +++ b/app/containers/RoomHeader/RoomHeader.tsx @@ -8,6 +8,7 @@ import RoomTypeIcon from '../RoomTypeIcon'; import { TUserStatus, IOmnichannelSource } from '../../definitions'; import { useTheme } from '../../theme'; import { useAppSelector } from '../../lib/hooks'; +import { isIOS } from '../../lib/methods/helpers'; const HIT_SLOP = { top: 5, @@ -22,7 +23,6 @@ const getSubTitleSize = (scale: number) => SUBTITLE_SIZE * scale; const styles = StyleSheet.create({ container: { - flex: 1, justifyContent: 'center' }, titleContainer: { @@ -75,6 +75,7 @@ interface IRoomHeader { testID?: string; sourceType?: IOmnichannelSource; disabled?: boolean; + rightButtonsWidth?: number; } const SubTitle = React.memo(({ usersTyping, subtitle, renderFunc, scale }: TRoomHeaderSubTitle) => { @@ -141,7 +142,8 @@ const Header = React.memo( testID, usersTyping = [], sourceType, - disabled + disabled, + rightButtonsWidth = 0 }: IRoomHeader) => { const { colors } = useTheme(); const portrait = height > width; @@ -189,7 +191,8 @@ const Header = React.memo( style={[ styles.container, { - opacity: disabled ? 0.5 : 1 + opacity: disabled ? 0.5 : 1, + width: width - rightButtonsWidth - (isIOS ? 60 : 80) - (isMasterDetail ? 350 : 0) } ]} disabled={disabled} diff --git a/app/containers/RoomHeader/index.tsx b/app/containers/RoomHeader/index.tsx index 79d261dd9c..d1c257998b 100644 --- a/app/containers/RoomHeader/index.tsx +++ b/app/containers/RoomHeader/index.tsx @@ -21,6 +21,7 @@ interface IRoomHeaderContainerProps { sourceType?: IOmnichannelSource; visitor?: IVisitor; disabled?: boolean; + rightButtonsWidth?: number; } const RoomHeaderContainer = React.memo( @@ -38,7 +39,8 @@ const RoomHeaderContainer = React.memo( type, sourceType, visitor, - disabled + disabled, + rightButtonsWidth }: IRoomHeaderContainerProps) => { let subtitle: string | undefined; let statusVisitor: TUserStatus | undefined; @@ -89,6 +91,7 @@ const RoomHeaderContainer = React.memo( onPress={onPress} sourceType={sourceType} disabled={disabled} + rightButtonsWidth={rightButtonsWidth} /> ); } diff --git a/app/definitions/index.ts b/app/definitions/index.ts index 5a0a171d40..b4bd3f0fd1 100644 --- a/app/definitions/index.ts +++ b/app/definitions/index.ts @@ -1,6 +1,6 @@ import { RouteProp } from '@react-navigation/native'; -import { StackNavigationProp } from '@react-navigation/stack'; import { Dispatch } from 'redux'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { TNavigation } from '../stacks/stackType'; import { TColors, TSupportedThemes } from '../theme'; @@ -40,7 +40,7 @@ export * from './IDataSelect'; export * from './TUserStatus'; export interface IBaseScreen, S extends string> { - navigation: StackNavigationProp; + navigation: NativeStackNavigationProp; route: RouteProp; dispatch: Dispatch; isMasterDetail: boolean; diff --git a/app/definitions/navigationTypes.ts b/app/definitions/navigationTypes.ts index cd8e34d123..93ab7dcc2a 100644 --- a/app/definitions/navigationTypes.ts +++ b/app/definitions/navigationTypes.ts @@ -1,5 +1,5 @@ import { NavigatorScreenParams } from '@react-navigation/core'; -import { StackNavigationOptions } from '@react-navigation/stack'; +import { NativeStackNavigationOptions } from '@react-navigation/native-stack'; import { TSubscriptionModel } from './ISubscription'; import { TServerModel } from './IServer'; @@ -14,7 +14,7 @@ interface INavigationProps { } export type TNavigationOptions = { - navigationOptions?(props: INavigationProps): StackNavigationOptions; + navigationOptions?(props: INavigationProps): NativeStackNavigationOptions; }; export type SetUsernameStackParamList = { diff --git a/app/ee/omnichannel/views/QueueListView.tsx b/app/ee/omnichannel/views/QueueListView.tsx index 0c2ed27c61..54cc522c80 100644 --- a/app/ee/omnichannel/views/QueueListView.tsx +++ b/app/ee/omnichannel/views/QueueListView.tsx @@ -1,6 +1,6 @@ import React, { useEffect, useRef } from 'react'; import { CompositeNavigationProp, useNavigation } from '@react-navigation/native'; -import { StackNavigationOptions, StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationOptions, NativeStackNavigationProp } from '@react-navigation/native-stack'; import { FlatList, ListRenderItem } from 'react-native'; import { shallowEqual, useSelector } from 'react-redux'; @@ -22,8 +22,8 @@ import { MasterDetailInsideStackParamList } from '../../../stacks/MasterDetailSt import { getRoomAvatar, getRoomTitle, getUidDirectMessage, isIOS, isTablet } from '../../../lib/methods/helpers'; type TNavigation = CompositeNavigationProp< - StackNavigationProp, - StackNavigationProp + NativeStackNavigationProp, + NativeStackNavigationProp >; const INITIAL_NUM_TO_RENDER = isTablet ? 20 : 12; @@ -62,7 +62,7 @@ const QueueListView = React.memo(() => { const queued = useSelector((state: IApplicationState) => getInquiryQueueSelector(state)); useEffect(() => { - const options: StackNavigationOptions = { + const options: NativeStackNavigationOptions = { title: I18n.t('Queued_chats') }; if (isMasterDetail) { diff --git a/app/lib/hooks/navigation.ts b/app/lib/hooks/navigation.ts index 988bec90fe..ea774bfbf0 100644 --- a/app/lib/hooks/navigation.ts +++ b/app/lib/hooks/navigation.ts @@ -1,5 +1,5 @@ import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { TNavigation } from '../../stacks/stackType'; import { @@ -33,7 +33,7 @@ type TRoutes = | TNavigation; export function useAppNavigation() { - const navigation = useNavigation>(); + const navigation = useNavigation>(); return navigation; } diff --git a/app/lib/methods/helpers/goRoom.ts b/app/lib/methods/helpers/goRoom.ts index a2550db418..537ce6946b 100644 --- a/app/lib/methods/helpers/goRoom.ts +++ b/app/lib/methods/helpers/goRoom.ts @@ -1,5 +1,6 @@ import { CommonActions } from '@react-navigation/native'; +import { getSubscriptionByRoomId } from '../../database/services/Subscription'; import Navigation from '../../navigation/appNavigation'; import { IOmnichannelRoom, SubscriptionType, IVisitor, TSubscriptionModel, ISubscription } from '../../../definitions'; import { getRoomTitle, getUidDirectMessage } from './helpers'; @@ -117,7 +118,20 @@ export const goRoom = async ({ } } - return navigate({ item, isMasterDetail, popToRoot, ...props }); + /** + * Fetches subscription from database to use goRoom with a more complete room object. + * We might want to review this logic in the future, since react-navigation complains about non-serializable data + * https://reactnavigation.org/docs/troubleshooting/#i-get-the-warning-non-serializable-values-were-found-in-the-navigation-state + */ + let _item = item; + if (item.rid) { + const sub = await getSubscriptionByRoomId(item.rid); + if (sub) { + _item = sub; + } + } + + return navigate({ item: _item, isMasterDetail, popToRoot, ...props }); }; export const navigateToRoom = navigate; diff --git a/app/lib/methods/helpers/navigation/animations.ts b/app/lib/methods/helpers/navigation/animations.ts deleted file mode 100644 index a9f1840881..0000000000 --- a/app/lib/methods/helpers/navigation/animations.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { Animated, Easing } from 'react-native'; -import { HeaderStyleInterpolators, TransitionPreset, TransitionPresets } from '@react-navigation/stack'; -// eslint-disable-next-line import/no-unresolved -import { StackCardStyleInterpolator, TransitionSpec } from '@react-navigation/stack/lib/typescript/src/types'; - -import { isAndroid } from '../deviceInfo'; -import conditional from './conditional'; - -const { multiply } = Animated; - -const forFadeFromCenter: StackCardStyleInterpolator = ({ current, closing }) => { - const opacity = conditional( - closing, - current.progress, - current.progress.interpolate({ - inputRange: [0, 0.5, 0.9, 1], - outputRange: [0, 0.25, 0.7, 1] - }) - ); - - return { - cardStyle: { - opacity - } - }; -}; - -const FadeIn: TransitionSpec = { - animation: 'timing', - config: { - duration: 250, - easing: Easing.out(Easing.poly(5)) - } -}; - -const FadeOut: TransitionSpec = { - animation: 'timing', - config: { - duration: 150, - easing: Easing.in(Easing.poly(5)) - } -}; - -export const FadeFromCenterModal = { - gestureDirection: 'vertical', - transitionSpec: { - open: FadeIn, - close: FadeOut - }, - cardStyleInterpolator: forFadeFromCenter -}; - -const forStackAndroid: StackCardStyleInterpolator = ({ current, inverted, layouts: { screen } }) => { - const translateX = multiply( - current.progress.interpolate({ - inputRange: [0, 1], - outputRange: [screen.width, 0] - }), - inverted - ); - - const opacity = current.progress.interpolate({ - inputRange: [0, 1], - outputRange: [0, 1] - }); - - return { - cardStyle: { - opacity, - transform: [{ translateX }] - } - }; -}; - -const StackAndroid: TransitionPreset = { - gestureDirection: 'horizontal', - transitionSpec: { - open: FadeIn, - close: FadeOut - }, - cardStyleInterpolator: forStackAndroid, - headerStyleInterpolator: HeaderStyleInterpolators.forFade -}; - -export const StackAnimation = isAndroid ? StackAndroid : TransitionPresets.SlideFromRightIOS; -export const ModalAnimation = TransitionPresets.ModalTransition; diff --git a/app/lib/methods/helpers/navigation/conditional.ts b/app/lib/methods/helpers/navigation/conditional.ts deleted file mode 100644 index 19936c865d..0000000000 --- a/app/lib/methods/helpers/navigation/conditional.ts +++ /dev/null @@ -1,34 +0,0 @@ -// Taken from https://github.com/react-navigation/react-navigation/blob/master/packages/stack/src/utils/conditional.tsx -import { Animated } from 'react-native'; - -const { add, multiply } = Animated; - -/** - * Use an Animated Node based on a condition. Similar to Reanimated's `cond`. - * - * @param condition Animated Node representing the condition, must be 0 or 1, 1 means `true`, 0 means `false` - * @param main Animated Node to use if the condition is `true` - * @param fallback Animated Node to use if the condition is `false` - */ -export default function conditional( - condition: Animated.AnimatedInterpolation, - main: Animated.Animated, - fallback: Animated.Animated -): Animated.AnimatedAddition { - // To implement this behavior, we multiply the main node with the condition. - // So if condition is 0, result will be 0, and if condition is 1, result will be main node. - // Then we multiple reverse of the condition (0 if condition is 1) with the fallback. - // So if condition is 0, result will be fallback node, and if condition is 1, result will be 0, - // This way, one of them will always be 0, and other one will be the value we need. - // In the end we add them both together, 0 + value we need = value we need - return add( - multiply(condition, main), - multiply( - condition.interpolate({ - inputRange: [0, 1], - outputRange: [1, 0] - }), - fallback - ) - ); -} diff --git a/app/lib/methods/helpers/navigation/index.ts b/app/lib/methods/helpers/navigation/index.ts index a7a8d43617..56d36cf4b1 100644 --- a/app/lib/methods/helpers/navigation/index.ts +++ b/app/lib/methods/helpers/navigation/index.ts @@ -1,38 +1,20 @@ -import { StyleSheet } from 'react-native'; import { DarkTheme, DefaultTheme } from '@react-navigation/native'; -import { StackNavigationOptions } from '@react-navigation/stack'; +import { NativeStackNavigationOptions } from '@react-navigation/native-stack'; import { themes } from '../../../constants'; import { TSupportedThemes } from '../../../../theme'; import sharedStyles from '../../../../views/Styles'; -export * from './animations'; - -export const defaultHeader: StackNavigationOptions = { - headerBackTitleVisible: false, - headerBackTestID: 'header-back', - cardOverlayEnabled: true, - cardStyle: { backgroundColor: 'transparent' }, - headerTitleAlign: 'left' -}; - -export const cardStyle = { - backgroundColor: 'rgba(0,0,0,0)' +export const defaultHeader: NativeStackNavigationOptions = { + headerBackTitleVisible: false }; -export const borderBottom: any = (theme: TSupportedThemes) => ({ - borderBottomWidth: StyleSheet.hairlineWidth, - borderBottomColor: themes[theme].strokeDark, - elevation: 0 -}); - export const drawerStyle = { width: 320 }; -export const themedHeader = (theme: TSupportedThemes) => ({ +export const themedHeader = (theme: TSupportedThemes): NativeStackNavigationOptions => ({ headerStyle: { - ...borderBottom(theme), backgroundColor: themes[theme].surfaceNeutral }, headerTintColor: themes[theme].fontDefault, diff --git a/app/stacks/InsideStack.tsx b/app/stacks/InsideStack.tsx index 751188099c..adbd46a588 100644 --- a/app/stacks/InsideStack.tsx +++ b/app/stacks/InsideStack.tsx @@ -1,10 +1,10 @@ import React from 'react'; import { I18nManager } from 'react-native'; -import { createStackNavigator, StackNavigationOptions } from '@react-navigation/stack'; +import { createNativeStackNavigator } from '@react-navigation/native-stack'; import { createDrawerNavigator } from '@react-navigation/drawer'; import { ThemeContext } from '../theme'; -import { ModalAnimation, StackAnimation, defaultHeader, themedHeader } from '../lib/methods/helpers/navigation'; +import { defaultHeader, themedHeader } from '../lib/methods/helpers/navigation'; import Sidebar from '../views/SidebarView'; // Chats Stack import RoomView from '../views/RoomView'; @@ -32,7 +32,6 @@ import MarkdownTableView from '../views/MarkdownTableView'; import ReadReceiptsView from '../views/ReadReceiptView'; import CannedResponsesListView from '../views/CannedResponsesListView'; import CannedResponseDetail from '../views/CannedResponseDetail'; -import { themes } from '../lib/constants'; // Profile Stack import ProfileView from '../views/ProfileView'; import UserPreferencesView from '../views/UserPreferencesView'; @@ -90,12 +89,11 @@ import { isIOS } from '../lib/methods/helpers'; import { TNavigation } from './stackType'; // ChatsStackNavigator -const ChatsStack = createStackNavigator(); +const ChatsStack = createNativeStackNavigator(); const ChatsStackNavigator = () => { const { theme } = React.useContext(ThemeContext); return ( - + @@ -147,19 +145,21 @@ const ChatsStackNavigator = () => { ); }; // ProfileStackNavigator -const ProfileStack = createStackNavigator(); +const ProfileStack = createNativeStackNavigator(); const ProfileStackNavigator = () => { const { theme } = React.useContext(ThemeContext); return ( - + @@ -171,13 +171,12 @@ const ProfileStackNavigator = () => { }; // SettingsStackNavigator -const SettingsStack = createStackNavigator(); +const SettingsStack = createNativeStackNavigator(); const SettingsStackNavigator = () => { const { theme } = React.useContext(ThemeContext); return ( - + @@ -198,26 +197,24 @@ const SettingsStackNavigator = () => { }; // AdminPanelStackNavigator -const AdminPanelStack = createStackNavigator(); +const AdminPanelStack = createNativeStackNavigator(); const AdminPanelStackNavigator = () => { const { theme } = React.useContext(ThemeContext); return ( - + ); }; // DisplayPreferenceNavigator -const DisplayPrefStack = createStackNavigator(); +const DisplayPrefStack = createNativeStackNavigator(); const DisplayPrefStackNavigator = () => { const { theme } = React.useContext(ThemeContext); return ( - + ); @@ -226,7 +223,7 @@ const DisplayPrefStackNavigator = () => { // DrawerNavigator const Drawer = createDrawerNavigator(); const DrawerNavigator = () => { - const { theme } = React.useContext(ThemeContext); + const { colors } = React.useContext(ThemeContext); return ( { headerShown: false, drawerPosition: I18nManager.isRTL ? 'right' : 'left', drawerType: 'slide', - overlayColor: `rgba(0,0,0,${themes[theme].backdropOpacity})` + overlayColor: `rgba(0,0,0,${colors.backdropOpacity})`, + freezeOnBlur: true }}> @@ -249,13 +247,12 @@ const DrawerNavigator = () => { }; // NewMessageStackNavigator -const NewMessageStack = createStackNavigator(); +const NewMessageStack = createNativeStackNavigator(); const NewMessageStackNavigator = () => { const { theme } = React.useContext(ThemeContext); return ( - + @@ -267,13 +264,12 @@ const NewMessageStackNavigator = () => { }; // E2ESaveYourPasswordStackNavigator -const E2ESaveYourPasswordStack = createStackNavigator(); +const E2ESaveYourPasswordStack = createNativeStackNavigator(); const E2ESaveYourPasswordStackNavigator = () => { const { theme } = React.useContext(ThemeContext); return ( - + @@ -281,26 +277,24 @@ const E2ESaveYourPasswordStackNavigator = () => { }; // E2EEnterYourPasswordStackNavigator -const E2EEnterYourPasswordStack = createStackNavigator(); +const E2EEnterYourPasswordStack = createNativeStackNavigator(); const E2EEnterYourPasswordStackNavigator = () => { const { theme } = React.useContext(ThemeContext); return ( - + ); }; // InsideStackNavigator -const InsideStack = createStackNavigator(); +const InsideStack = createNativeStackNavigator(); const InsideStackNavigator = () => { const { theme } = React.useContext(ThemeContext); return ( - + ; + navigation: NativeStackNavigationProp; children: React.ReactNode; theme: TSupportedThemes; } diff --git a/app/stacks/MasterDetailStack/index.tsx b/app/stacks/MasterDetailStack/index.tsx index 78ead1b65e..48cbe0c345 100644 --- a/app/stacks/MasterDetailStack/index.tsx +++ b/app/stacks/MasterDetailStack/index.tsx @@ -1,15 +1,9 @@ import React from 'react'; -import { createStackNavigator, StackNavigationOptions, StackNavigationProp } from '@react-navigation/stack'; +import { createNativeStackNavigator, NativeStackNavigationProp } from '@react-navigation/native-stack'; import { createDrawerNavigator } from '@react-navigation/drawer'; import { ThemeContext } from '../../theme'; -import { - FadeFromCenterModal, - StackAnimation, - defaultHeader, - themedHeader, - drawerStyle -} from '../../lib/methods/helpers/navigation'; +import { defaultHeader, themedHeader, drawerStyle } from '../../lib/methods/helpers/navigation'; // Chats Stack import RoomView from '../../views/RoomView'; import RoomsListView from '../../views/RoomsListView'; @@ -81,14 +75,13 @@ import { TNavigation } from '../stackType'; import { SupportedVersionsWarning } from '../../containers/SupportedVersions'; // ChatsStackNavigator -const ChatsStack = createStackNavigator(); +const ChatsStack = createNativeStackNavigator(); const ChatsStackNavigator = React.memo(() => { const { theme } = React.useContext(ThemeContext); return ( - - + + ); }); @@ -104,17 +97,20 @@ const DrawerNavigator = React.memo(() => ( )); export interface INavigation { - navigation: StackNavigationProp; + navigation: NativeStackNavigationProp; } -const ModalStack = createStackNavigator(); +const ModalStack = createNativeStackNavigator(); const ModalStackNavigator = React.memo(({ navigation }: INavigation) => { const { theme } = React.useContext(ThemeContext); return ( - - + + RoomActionsView.navigationOptions!({ ...props, isMasterDetail: true })} + /> {/* @ts-ignore */} @@ -205,19 +201,16 @@ const ModalStackNavigator = React.memo(({ navigation }: INavigation) => { }); // InsideStackNavigator -const InsideStack = createStackNavigator(); +const InsideStack = createNativeStackNavigator(); const InsideStackNavigator = React.memo(() => { const { theme } = React.useContext(ThemeContext); return ( + screenOptions={{ + ...defaultHeader, + ...themedHeader(theme), + presentation: 'containedTransparentModal' + }}> @@ -226,7 +219,10 @@ const InsideStackNavigator = React.memo(() => { {/* @ts-ignore */} diff --git a/app/stacks/OutsideStack.tsx b/app/stacks/OutsideStack.tsx index 4065704445..9202faa998 100644 --- a/app/stacks/OutsideStack.tsx +++ b/app/stacks/OutsideStack.tsx @@ -1,9 +1,9 @@ import React from 'react'; -import { createStackNavigator, StackNavigationOptions } from '@react-navigation/stack'; +import { createNativeStackNavigator } from '@react-navigation/native-stack'; import { connect } from 'react-redux'; import { ThemeContext } from '../theme'; -import { ModalAnimation, StackAnimation, defaultHeader, themedHeader } from '../lib/methods/helpers/navigation'; +import { defaultHeader, themedHeader } from '../lib/methods/helpers/navigation'; // Outside Stack import NewServerView from '../views/NewServerView'; import WorkspaceView from '../views/WorkspaceView'; @@ -16,17 +16,17 @@ import AuthenticationWebView from '../views/AuthenticationWebView'; import { OutsideModalParamList, OutsideParamList } from './types'; // Outside -const Outside = createStackNavigator(); +const Outside = createNativeStackNavigator(); const _OutsideStack = () => { const { theme } = React.useContext(ThemeContext); return ( - + {/* @ts-ignore */} - {/* @ts-ignore */} - + + {/* @ts-ignore */} @@ -45,13 +45,13 @@ const mapStateToProps = (state: any) => ({ const OutsideStack = connect(mapStateToProps)(_OutsideStack); // OutsideStackModal -const OutsideModal = createStackNavigator(); +const OutsideModal = createNativeStackNavigator(); const OutsideStackModal = () => { const { theme } = React.useContext(ThemeContext); return ( + screenOptions={{ ...defaultHeader, ...themedHeader(theme), presentation: 'containedTransparentModal' }}> diff --git a/app/stacks/ShareExtensionStack.tsx b/app/stacks/ShareExtensionStack.tsx index 07d4aa31c7..477115109e 100644 --- a/app/stacks/ShareExtensionStack.tsx +++ b/app/stacks/ShareExtensionStack.tsx @@ -1,19 +1,18 @@ import React from 'react'; -import { createStackNavigator, StackNavigationOptions } from '@react-navigation/stack'; +import { createNativeStackNavigator } from '@react-navigation/native-stack'; import { ThemeContext } from '../theme'; -import { StackAnimation, defaultHeader, themedHeader } from '../lib/methods/helpers/navigation'; +import { defaultHeader, themedHeader } from '../lib/methods/helpers/navigation'; import SelectServerView from '../views/SelectServerView'; import ShareListView from '../views/ShareListView'; import ShareView from '../views/ShareView'; -const ShareExtension = createStackNavigator(); +const ShareExtension = createNativeStackNavigator(); const ShareExtensionStack = () => { const { theme } = React.useContext(ThemeContext); return ( - + {/* @ts-ignore */} {/* @ts-ignore */} diff --git a/app/views/AddChannelTeamView.tsx b/app/views/AddChannelTeamView.tsx index e2da06e982..c21c50778d 100644 --- a/app/views/AddChannelTeamView.tsx +++ b/app/views/AddChannelTeamView.tsx @@ -1,12 +1,11 @@ -import React, { useEffect } from 'react'; -import { StackNavigationOptions, StackNavigationProp } from '@react-navigation/stack'; +import React, { useLayoutEffect } from 'react'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'; import { useSelector } from 'react-redux'; import { CompositeNavigationProp } from '@react-navigation/core'; import * as List from '../containers/List'; import StatusBar from '../containers/StatusBar'; -import * as HeaderButton from '../containers/HeaderButton'; import SafeAreaView from '../containers/SafeAreaView'; import I18n from '../i18n'; import { ChatsStackParamList, DrawerParamList, NewMessageStackParamList } from '../stacks/types'; @@ -15,28 +14,10 @@ import { IApplicationState } from '../definitions'; type TRoute = RouteProp; type TNavigation = CompositeNavigationProp< - StackNavigationProp, - CompositeNavigationProp, StackNavigationProp> + NativeStackNavigationProp, + CompositeNavigationProp, NativeStackNavigationProp> >; -const setHeader = ({ - navigation, - isMasterDetail -}: { - navigation: StackNavigationProp; - isMasterDetail: boolean; -}) => { - const options: StackNavigationOptions = { - headerTitle: I18n.t('Add_Channel_to_Team') - }; - - if (isMasterDetail) { - options.headerLeft = () => ; - } - - navigation.setOptions(options); -}; - const AddChannelTeamView = () => { const navigation = useNavigation(); const isMasterDetail = useSelector((state: IApplicationState) => state.app.isMasterDetail); @@ -44,9 +25,9 @@ const AddChannelTeamView = () => { params: { teamId } } = useRoute(); - useEffect(() => { - setHeader({ navigation, isMasterDetail }); - }, [isMasterDetail, navigation]); + useLayoutEffect(() => { + navigation.setOptions({ title: I18n.t('Add_Channel_to_Team') }); + }, [navigation]); return ( diff --git a/app/views/AddExistingChannelView/index.tsx b/app/views/AddExistingChannelView/index.tsx index 7b8d7be32b..09367a9b08 100644 --- a/app/views/AddExistingChannelView/index.tsx +++ b/app/views/AddExistingChannelView/index.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useLayoutEffect, useState } from 'react'; -import { StackNavigationOptions, StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationOptions, NativeStackNavigationProp } from '@react-navigation/native-stack'; import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'; import { FlatList } from 'react-native'; import { Q } from '@nozbe/watermelondb'; @@ -22,7 +22,7 @@ import { getRoomTitle, hasPermission, useDebounce } from '../../lib/methods/help import { Services } from '../../lib/services'; import { useAppSelector } from '../../lib/hooks'; -type TNavigation = StackNavigationProp; +type TNavigation = NativeStackNavigationProp; type TRoute = RouteProp; const QUERY_SIZE = 50; @@ -52,7 +52,7 @@ const AddExistingChannelView = () => { }, []); const setHeader = () => { - const options: StackNavigationOptions = { + const options: NativeStackNavigationOptions = { headerTitle: I18n.t('Add_Existing_Channel') }; diff --git a/app/views/AdminPanelView/index.tsx b/app/views/AdminPanelView/index.tsx index e1a146ab41..bd27c3f6b4 100644 --- a/app/views/AdminPanelView/index.tsx +++ b/app/views/AdminPanelView/index.tsx @@ -2,7 +2,7 @@ import React, { useEffect } from 'react'; import { useNavigation } from '@react-navigation/native'; import { WebView } from 'react-native-webview'; import { useSelector } from 'react-redux'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import I18n from '../../i18n'; import StatusBar from '../../containers/StatusBar'; @@ -13,7 +13,7 @@ import { AdminPanelStackParamList } from '../../stacks/types'; import { IApplicationState } from '../../definitions'; const AdminPanelView = () => { - const navigation = useNavigation>(); + const navigation = useNavigation>(); const baseUrl = useSelector((state: IApplicationState) => state.server.server); const token = useSelector((state: IApplicationState) => getUserSelector(state).token); const isMasterDetail = useSelector((state: IApplicationState) => state.app.isMasterDetail); diff --git a/app/views/AttachmentView.tsx b/app/views/AttachmentView.tsx index 85379093a9..5cc37bebea 100644 --- a/app/views/AttachmentView.tsx +++ b/app/views/AttachmentView.tsx @@ -1,6 +1,5 @@ import { CameraRoll } from '@react-native-camera-roll/camera-roll'; -import { HeaderBackground, useHeaderHeight } from '@react-navigation/elements'; -import { StackNavigationOptions } from '@react-navigation/stack'; +import { useHeaderHeight } from '@react-navigation/elements'; import { ResizeMode, Video } from 'expo-av'; import React from 'react'; import { PermissionsAndroid, useWindowDimensions, View } from 'react-native'; @@ -121,24 +120,15 @@ const AttachmentView = (): React.ReactElement => { } catch { // Do nothing } - const options: StackNavigationOptions = { + const options = { title: title || '', - headerTitleAlign: 'center', - headerTitleStyle: { color: colors.fontDefault }, - headerTintColor: colors.surfaceTint, - headerTitleContainerStyle: { flex: 1, maxWidth: undefined }, - headerLeftContainerStyle: { flexGrow: undefined, flexBasis: undefined }, - headerRightContainerStyle: { flexGrow: undefined, flexBasis: undefined }, headerLeft: () => ( ), headerRight: () => Allow_Save_Media_to_Gallery && !isImageBase64(attachment.image_url) ? ( - ) : null, - headerBackground: () => ( - - ) + ) : null }; navigation.setOptions(options); }; diff --git a/app/views/AuthenticationWebView.tsx b/app/views/AuthenticationWebView.tsx index 4874f13a1d..12499a3bcc 100644 --- a/app/views/AuthenticationWebView.tsx +++ b/app/views/AuthenticationWebView.tsx @@ -1,6 +1,6 @@ import { RouteProp } from '@react-navigation/core'; import { useNavigation, useRoute } from '@react-navigation/native'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import React, { useLayoutEffect, useState } from 'react'; import { WebView, WebViewNavigation } from 'react-native-webview'; import { WebViewMessage } from 'react-native-webview/lib/WebViewTypes'; @@ -44,7 +44,7 @@ const AuthenticationWebView = () => { const [logging, setLogging] = useState(false); const [loading, setLoading] = useState(false); - const navigation = useNavigation>(); + const navigation = useNavigation>(); const { params: { authType, url, ssoToken } } = useRoute>(); diff --git a/app/views/CannedResponseDetail.tsx b/app/views/CannedResponseDetail.tsx index 66f0ab7b76..35a4990656 100644 --- a/app/views/CannedResponseDetail.tsx +++ b/app/views/CannedResponseDetail.tsx @@ -1,5 +1,5 @@ import React, { useEffect } from 'react'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { RouteProp } from '@react-navigation/native'; import { StyleSheet, Text, View, ScrollView } from 'react-native'; @@ -87,7 +87,7 @@ const Item = ({ label, content, theme, testID }: IItem) => ) : null; interface ICannedResponseDetailProps { - navigation: StackNavigationProp; + navigation: NativeStackNavigationProp; route: RouteProp; } diff --git a/app/views/CannedResponsesListView/index.tsx b/app/views/CannedResponsesListView/index.tsx index ebf3886c5a..23294e752b 100644 --- a/app/views/CannedResponsesListView/index.tsx +++ b/app/views/CannedResponsesListView/index.tsx @@ -1,8 +1,7 @@ import React, { useEffect, useState } from 'react'; import { FlatList } from 'react-native'; import { RouteProp } from '@react-navigation/native'; -import { StackNavigationOptions, StackNavigationProp } from '@react-navigation/stack'; -import { HeaderBackButton } from '@react-navigation/elements'; +import { NativeStackNavigationOptions, NativeStackNavigationProp } from '@react-navigation/native-stack'; import database from '../../lib/database'; import I18n from '../../i18n'; @@ -47,7 +46,7 @@ const fixedScopes = [ ] as ILivechatDepartment[]; interface ICannedResponsesListViewProps { - navigation: StackNavigationProp; + navigation: NativeStackNavigationProp; route: RouteProp; } @@ -209,12 +208,9 @@ const CannedResponsesListView = ({ navigation, route }: ICannedResponsesListView await getListCannedResponse({ text: searchText, department: scope, depId: departmentId, debounced: false }); }; - const getHeader = (): StackNavigationOptions => { + const getHeader = () => { if (isSearching) { return { - headerTitleAlign: 'left', - headerTitleContainerStyle: { flex: 1, marginHorizontal: 0, marginRight: 15, maxWidth: undefined }, - headerRightContainerStyle: { flexGrow: 0 }, headerLeft: () => ( null, headerTitle: I18n.t('Canned_Responses'), - headerTitleContainerStyle: { maxWidth: undefined }, - headerRightContainerStyle: { flexGrow: 1 }, - headerLeft: () => ( - navigation.pop()} - tintColor={themes[theme].fontSecondaryInfo} - testID='header-back' - /> - ), headerRight: () => ( @@ -252,10 +238,6 @@ const CannedResponsesListView = ({ navigation, route }: ICannedResponsesListView ) }; - if (isMasterDetail) { - options.headerLeft = () => ; - } - return options; }; diff --git a/app/views/ChangeAvatarView/index.tsx b/app/views/ChangeAvatarView/index.tsx index fdfe013cf0..64ff03100f 100644 --- a/app/views/ChangeAvatarView/index.tsx +++ b/app/views/ChangeAvatarView/index.tsx @@ -1,8 +1,9 @@ import React, { useEffect, useLayoutEffect, useReducer, useRef, useState } from 'react'; import { ScrollView, View } from 'react-native'; import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { shallowEqual } from 'react-redux'; +import { HeaderBackButton } from '@react-navigation/elements'; import KeyboardView from '../../containers/KeyboardView'; import sharedStyles from '../Styles'; @@ -74,12 +75,20 @@ const ChangeAvatarView = () => { shallowEqual ); const isDirty = useRef(false); - const navigation = useNavigation>(); + const navigation = useNavigation>(); const { context, titleHeader, room, t } = useRoute>().params; useLayoutEffect(() => { navigation.setOptions({ - title: titleHeader || I18n.t('Avatar') + title: titleHeader || I18n.t('Avatar'), + headerLeft: () => ( + navigation.goBack()} + tintColor={colors.fontDefault} + testID='header-back' + /> + ) }); }, [titleHeader, navigation]); @@ -165,8 +174,7 @@ const ChangeAvatarView = () => { + {...scrollPersistTaps}> {deletingRoomAvatar ? ( { } }); - const navigation = useNavigation>(); + const navigation = useNavigation>(); const { params } = useRoute>(); const isTeam = params?.isTeam || false; const teamId = params?.teamId; diff --git a/app/views/CreateDiscussionView/index.tsx b/app/views/CreateDiscussionView/index.tsx index 541920a8db..7dac898001 100644 --- a/app/views/CreateDiscussionView/index.tsx +++ b/app/views/CreateDiscussionView/index.tsx @@ -1,7 +1,6 @@ import React from 'react'; import { connect } from 'react-redux'; import { ScrollView, Text } from 'react-native'; -import { StackNavigationOptions } from '@react-navigation/stack'; import { sendLoadingEvent } from '../../containers/Loading'; import KeyboardView from '../../containers/KeyboardView'; @@ -84,9 +83,9 @@ class CreateChannelView extends React.Component ) - : null, + : () => null, headerLeft: showCloseModal ? () => : undefined - } as StackNavigationOptions); + }); }; submit = () => { diff --git a/app/views/DirectoryView/index.tsx b/app/views/DirectoryView/index.tsx index 7c872a363b..33a7071d73 100644 --- a/app/views/DirectoryView/index.tsx +++ b/app/views/DirectoryView/index.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { FlatList, ListRenderItem } from 'react-native'; import { connect } from 'react-redux'; -import { StackNavigationOptions, StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationOptions, NativeStackNavigationProp } from '@react-navigation/native-stack'; import { CompositeNavigationProp } from '@react-navigation/native'; import { hideActionSheetRef, showActionSheetRef } from '../../containers/ActionSheet'; @@ -30,8 +30,8 @@ import { getSubscriptionByRoomId } from '../../lib/database/services/Subscriptio interface IDirectoryViewProps { navigation: CompositeNavigationProp< - StackNavigationProp, - StackNavigationProp + NativeStackNavigationProp, + NativeStackNavigationProp >; baseUrl: string; isFederationEnabled: boolean; @@ -70,7 +70,7 @@ class DirectoryView extends React.Component { const { navigation, isMasterDetail } = this.props; - const options: StackNavigationOptions = { + const options: NativeStackNavigationOptions = { title: I18n.t('Directory'), headerRight: () => ( diff --git a/app/views/DiscussionsView/index.tsx b/app/views/DiscussionsView/index.tsx index 31d81be6eb..b740f269c2 100644 --- a/app/views/DiscussionsView/index.tsx +++ b/app/views/DiscussionsView/index.tsx @@ -1,7 +1,6 @@ import React, { useEffect, useLayoutEffect, useRef, useState } from 'react'; import { FlatList, StyleSheet } from 'react-native'; -import { StackNavigationOptions, StackNavigationProp } from '@react-navigation/stack'; -import { HeaderBackButton } from '@react-navigation/elements'; +import { NativeStackNavigationOptions, NativeStackNavigationProp } from '@react-navigation/native-stack'; import { RouteProp } from '@react-navigation/core'; import { IMessageFromServer, TThreadModel } from '../../definitions'; @@ -30,7 +29,7 @@ const styles = StyleSheet.create({ }); interface IDiscussionsViewProps { - navigation: StackNavigationProp; + navigation: NativeStackNavigationProp; route: RouteProp; item: TThreadModel; } @@ -102,12 +101,9 @@ const DiscussionsView = ({ navigation, route }: IDiscussionsViewProps): React.Re }; const setHeader = () => { - let options: Partial; + let options: Partial; if (isSearching) { options = { - headerTitleAlign: 'left', - headerTitleContainerStyle: { flex: 1, marginHorizontal: 0, marginRight: 15, maxWidth: undefined }, - headerRightContainerStyle: { flexGrow: 0 }, headerLeft: () => ( @@ -122,18 +118,8 @@ const DiscussionsView = ({ navigation, route }: IDiscussionsViewProps): React.Re } options = { - headerTitleAlign: 'center', + headerLeft: () => null, headerTitle: I18n.t('Discussions'), - headerTitleContainerStyle: {}, - headerRightContainerStyle: { flexGrow: 1 }, - headerLeft: () => ( - navigation.pop()} - tintColor={colors.fontSecondaryInfo} - testID='header-back' - /> - ), headerRight: () => ( diff --git a/app/views/DisplayPrefsView.tsx b/app/views/DisplayPrefsView.tsx index 8e7f8ec697..11472dab13 100644 --- a/app/views/DisplayPrefsView.tsx +++ b/app/views/DisplayPrefsView.tsx @@ -1,5 +1,5 @@ import React, { useEffect } from 'react'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { useNavigation } from '@react-navigation/native'; import { Switch } from 'react-native'; import { RadioButton } from 'react-native-ui-lib'; @@ -21,7 +21,7 @@ import { saveSortPreference } from '../lib/methods'; import { useAppSelector } from '../lib/hooks'; const DisplayPrefsView = (): React.ReactElement => { - const navigation = useNavigation>(); + const navigation = useNavigation>(); const { colors } = useTheme(); const { sortBy, groupByType, showFavorites, showUnread, showAvatar, displayMode } = useAppSelector( diff --git a/app/views/E2EEncryptionSecurityView/index.tsx b/app/views/E2EEncryptionSecurityView/index.tsx index 5c1f03c4b7..a29d9e8d4a 100644 --- a/app/views/E2EEncryptionSecurityView/index.tsx +++ b/app/views/E2EEncryptionSecurityView/index.tsx @@ -1,6 +1,6 @@ import React, { useLayoutEffect } from 'react'; import { StyleSheet, Text, View } from 'react-native'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { useDispatch } from 'react-redux'; import { useNavigation } from '@react-navigation/native'; @@ -35,7 +35,7 @@ const styles = StyleSheet.create({ }); const E2EEncryptionSecurityView = () => { - const navigation = useNavigation>(); + const navigation = useNavigation>(); const { colors } = useTheme(); const dispatch = useDispatch(); diff --git a/app/views/E2ESaveYourPasswordView.tsx b/app/views/E2ESaveYourPasswordView.tsx index 81fb5e32c6..331a484154 100644 --- a/app/views/E2ESaveYourPasswordView.tsx +++ b/app/views/E2ESaveYourPasswordView.tsx @@ -3,7 +3,7 @@ import React, { useEffect, useLayoutEffect, useState } from 'react'; import { ScrollView, StyleSheet, Text, View } from 'react-native'; import { useDispatch } from 'react-redux'; import { StackActions, useNavigation } from '@react-navigation/native'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { encryptionSetBanner } from '../actions/encryption'; import Button from '../containers/Button'; @@ -60,7 +60,7 @@ const styles = StyleSheet.create({ const E2ESaveYourPasswordView = () => { const server = useAppSelector(state => state.server.server); - const navigation = useNavigation>(); + const navigation = useNavigation>(); const dispatch = useDispatch(); const [password, setPassword] = useState(''); const { colors } = useTheme(); diff --git a/app/views/ForgotPasswordView.tsx b/app/views/ForgotPasswordView.tsx index 8acc69b849..4df8efc2f3 100644 --- a/app/views/ForgotPasswordView.tsx +++ b/app/views/ForgotPasswordView.tsx @@ -1,7 +1,7 @@ import React, { useLayoutEffect, useState } from 'react'; import { Text } from 'react-native'; import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { useForm } from 'react-hook-form'; import * as yup from 'yup'; import { yupResolver } from '@hookform/resolvers/yup'; @@ -34,7 +34,7 @@ const ForgotPasswordView = (): React.ReactElement => { const [isFetching, setIsFetching] = useState(false); - const navigation = useNavigation>(); + const navigation = useNavigation>(); const { params } = useRoute>(); const { colors } = useTheme(); diff --git a/app/views/ForwardMessageView/index.tsx b/app/views/ForwardMessageView/index.tsx index 8b3d721dfc..63f3212a46 100644 --- a/app/views/ForwardMessageView/index.tsx +++ b/app/views/ForwardMessageView/index.tsx @@ -1,6 +1,5 @@ import React, { useLayoutEffect, useState } from 'react'; import { Alert, ScrollView, View } from 'react-native'; -import { StackNavigationOptions } from '@react-navigation/stack'; import { RouteProp, StackActions, useNavigation, useRoute } from '@react-navigation/native'; import { getPermalinkMessage } from '../../lib/methods'; @@ -54,7 +53,7 @@ const ForwardMessageView = () => { ), headerLeft: () => - } as StackNavigationOptions); + }); }, [rooms.length, navigation, sending]); const handlePostMessage = async () => { diff --git a/app/views/GetHelpView.tsx b/app/views/GetHelpView.tsx index 82fa1eb2c7..2a6ae0ecf3 100644 --- a/app/views/GetHelpView.tsx +++ b/app/views/GetHelpView.tsx @@ -1,6 +1,6 @@ import { useLayoutEffect } from 'react'; import { useNavigation } from '@react-navigation/native'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import SafeAreaView from '../containers/SafeAreaView'; import * as List from '../containers/List'; @@ -16,7 +16,7 @@ const ACCESSIBILITY_LINK = 'https://go.rocket.chat/i/accessibility'; const GLOSSARY_LINK = 'https://go.rocket.chat/i/glossary'; const GetHelpView = () => { - const navigation = useNavigation>(); + const navigation = useNavigation>(); const { theme } = useTheme(); useLayoutEffect(() => { diff --git a/app/views/InviteUsersEditView/index.tsx b/app/views/InviteUsersEditView/index.tsx index 5fc2f3b993..f39dd626c4 100644 --- a/app/views/InviteUsersEditView/index.tsx +++ b/app/views/InviteUsersEditView/index.tsx @@ -1,4 +1,4 @@ -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import React, { useLayoutEffect } from 'react'; import { View } from 'react-native'; import { useDispatch } from 'react-redux'; @@ -16,7 +16,7 @@ import styles from './styles'; import Picker from './Picker'; const InviteUsersEditView = () => { - const navigation = useNavigation>(); + const navigation = useNavigation>(); const { rid } = useRoute>().params; const dispatch = useDispatch(); diff --git a/app/views/LanguageView/index.tsx b/app/views/LanguageView/index.tsx index 26d1a0352d..ab54987cef 100644 --- a/app/views/LanguageView/index.tsx +++ b/app/views/LanguageView/index.tsx @@ -3,7 +3,7 @@ import { FlatList } from 'react-native'; import RNRestart from 'react-native-restart'; import { useDispatch } from 'react-redux'; import { useNavigation } from '@react-navigation/native'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { useAppSelector } from '../../lib/hooks'; import { appStart } from '../../actions/app'; @@ -29,7 +29,7 @@ const LanguageView = () => { const language = languageDefault || 'en'; const dispatch = useDispatch(); - const navigation = useNavigation>(); + const navigation = useNavigation>(); useLayoutEffect(() => { navigation.setOptions({ diff --git a/app/views/LivechatEditView.tsx b/app/views/LivechatEditView.tsx index c731618c41..89d0de8034 100644 --- a/app/views/LivechatEditView.tsx +++ b/app/views/LivechatEditView.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useState } from 'react'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { RouteProp } from '@react-navigation/native'; import { ScrollView, StyleSheet, Text } from 'react-native'; import { connect } from 'react-redux'; @@ -45,7 +45,7 @@ const styles = StyleSheet.create({ interface ILivechatEditViewProps { user: IUser; - navigation: StackNavigationProp; + navigation: NativeStackNavigationProp; route: RouteProp; theme: TSupportedThemes; editOmnichannelContact: string[] | undefined; diff --git a/app/views/LoginView/UserForm.tsx b/app/views/LoginView/UserForm.tsx index 5f114569e4..79cb596567 100644 --- a/app/views/LoginView/UserForm.tsx +++ b/app/views/LoginView/UserForm.tsx @@ -2,7 +2,7 @@ import React, { useEffect } from 'react'; import { Keyboard, Text, View, Alert } from 'react-native'; import { useDispatch } from 'react-redux'; import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import * as yup from 'yup'; import { yupResolver } from '@hookform/resolvers/yup'; import { useForm } from 'react-hook-form'; @@ -32,7 +32,7 @@ const schema = yup.object().shape({ const UserForm = () => { const { colors } = useTheme(); const dispatch = useDispatch(); - const navigation = useNavigation>(); + const navigation = useNavigation>(); const { params: { username } diff --git a/app/views/LoginView/index.tsx b/app/views/LoginView/index.tsx index aaa808906a..c5fd9ce357 100644 --- a/app/views/LoginView/index.tsx +++ b/app/views/LoginView/index.tsx @@ -1,6 +1,6 @@ import React, { useLayoutEffect } from 'react'; import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { useAppSelector } from '../../lib/hooks'; import FormContainer, { FormContainerInner } from '../../containers/FormContainer'; @@ -10,7 +10,7 @@ import { OutsideParamList } from '../../stacks/types'; import UserForm from './UserForm'; const LoginView = () => { - const navigation = useNavigation>(); + const navigation = useNavigation>(); const { params: { title } diff --git a/app/views/MediaAutoDownloadView/index.tsx b/app/views/MediaAutoDownloadView/index.tsx index e9b3910386..7f2273f20c 100644 --- a/app/views/MediaAutoDownloadView/index.tsx +++ b/app/views/MediaAutoDownloadView/index.tsx @@ -1,6 +1,6 @@ import React, { useLayoutEffect } from 'react'; import { useNavigation } from '@react-navigation/native'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import * as List from '../../containers/List'; import SafeAreaView from '../../containers/SafeAreaView'; @@ -23,7 +23,7 @@ const MediaAutoDownload = () => { ); const [videoPreference, setVideoPreference] = useUserPreferences(VIDEO_PREFERENCE_DOWNLOAD, 'wifi'); const [audioPreference, setAudioPreference] = useUserPreferences(AUDIO_PREFERENCE_DOWNLOAD, 'wifi'); - const navigation = useNavigation>(); + const navigation = useNavigation>(); useLayoutEffect(() => { navigation.setOptions({ diff --git a/app/views/MessagesView/index.tsx b/app/views/MessagesView/index.tsx index 49a1417913..6a94605f03 100644 --- a/app/views/MessagesView/index.tsx +++ b/app/views/MessagesView/index.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { FlatList, Text, View } from 'react-native'; import { connect } from 'react-redux'; import { dequal } from 'dequal'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { CompositeNavigationProp, RouteProp } from '@react-navigation/core'; import { MasterDetailInsideStackParamList } from '../../stacks/MasterDetailStack/types'; @@ -45,8 +45,8 @@ interface IMessagesViewProps { }; baseUrl: string; navigation: CompositeNavigationProp< - StackNavigationProp, - StackNavigationProp + NativeStackNavigationProp, + NativeStackNavigationProp >; route: RouteProp; customEmojis: { [key: string]: ICustomEmoji }; diff --git a/app/views/ModalBlockView.tsx b/app/views/ModalBlockView.tsx index 385a03651b..b8991f910b 100644 --- a/app/views/ModalBlockView.tsx +++ b/app/views/ModalBlockView.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { StyleSheet, View } from 'react-native'; -import { StackNavigationOptions, StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { RouteProp } from '@react-navigation/native'; import { connect } from 'react-redux'; import { KeyboardAwareScrollView } from '@codler/react-native-keyboard-aware-scroll-view'; @@ -52,7 +52,7 @@ interface IModalBlockViewState { } interface IModalBlockViewProps { - navigation: StackNavigationProp; + navigation: NativeStackNavigationProp; route: RouteProp; theme: TSupportedThemes; language: string; @@ -96,7 +96,7 @@ class ModalBlockView extends React.Component): StackNavigationOptions => { + static navigationOptions = ({ route }: Pick) => { const data = route.params?.data; const { view } = data; const { title } = view; @@ -257,8 +257,7 @@ class ModalBlockView extends React.Component + keyboardShouldPersistTaps='always'> {React.createElement( modalBlockWithContext({ diff --git a/app/views/NewMessageView/HeaderNewMessage.tsx b/app/views/NewMessageView/HeaderNewMessage.tsx index d95cbe6014..7a9cbb9ec8 100644 --- a/app/views/NewMessageView/HeaderNewMessage.tsx +++ b/app/views/NewMessageView/HeaderNewMessage.tsx @@ -1,4 +1,4 @@ -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import React, { useCallback } from 'react'; import { StyleSheet, View } from 'react-native'; import { useDispatch } from 'react-redux'; @@ -26,7 +26,7 @@ const styles = StyleSheet.create({ }); const HeaderNewMessage = ({ maxUsers, onChangeText }: { maxUsers: number; onChangeText: (text: string) => void }) => { - const navigation = useNavigation>(); + const navigation = useNavigation>(); const dispatch = useDispatch(); const { theme } = useTheme(); diff --git a/app/views/NewMessageView/index.tsx b/app/views/NewMessageView/index.tsx index f44760fb6a..b3dbea69a7 100644 --- a/app/views/NewMessageView/index.tsx +++ b/app/views/NewMessageView/index.tsx @@ -1,5 +1,5 @@ import { Q } from '@nozbe/watermelondb'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import React, { useCallback, useEffect, useLayoutEffect, useState } from 'react'; import { FlatList } from 'react-native'; import { shallowEqual } from 'react-redux'; @@ -31,7 +31,7 @@ const NewMessageView = () => { const { colors } = useTheme(); - const navigation = useNavigation>(); + const navigation = useNavigation>(); const { isMasterDetail, maxUsers, useRealName } = useAppSelector( state => ({ diff --git a/app/views/NotificationPreferencesView/index.tsx b/app/views/NotificationPreferencesView/index.tsx index ed09a4883d..2323507374 100644 --- a/app/views/NotificationPreferencesView/index.tsx +++ b/app/views/NotificationPreferencesView/index.tsx @@ -1,7 +1,7 @@ import { RouteProp, useNavigation, useRoute } from '@react-navigation/core'; import React, { useEffect, useState } from 'react'; import { Text } from 'react-native'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { TActionSheetOptionsItem, useActionSheet } from '../../containers/ActionSheet'; import { CustomIcon } from '../../containers/CustomIcon'; @@ -90,7 +90,7 @@ const RenderSwitch = ({ preference, room, onChangeValue }: IBaseParams) => { const NotificationPreferencesView = (): React.ReactElement => { const route = useRoute>(); const { rid, room } = route.params; - const navigation = useNavigation>(); + const navigation = useNavigation>(); const { serverVersion, isMasterDetail } = useAppSelector(state => ({ serverVersion: state.server.version, isMasterDetail: state.app.isMasterDetail diff --git a/app/views/ProfileView/index.tsx b/app/views/ProfileView/index.tsx index 939f2f12d9..95b915afbe 100644 --- a/app/views/ProfileView/index.tsx +++ b/app/views/ProfileView/index.tsx @@ -1,4 +1,4 @@ -import { StackNavigationOptions } from '@react-navigation/stack'; +import { NativeStackNavigationOptions } from '@react-navigation/native-stack'; import { sha256 } from 'js-sha256'; import React from 'react'; import { Keyboard, ScrollView, TextInput, View } from 'react-native'; @@ -83,7 +83,7 @@ class ProfileView extends React.Component setHeader = () => { const { navigation, isMasterDetail } = this.props; - const options: StackNavigationOptions = { + const options: NativeStackNavigationOptions = { title: I18n.t('Profile') }; if (!isMasterDetail) { diff --git a/app/views/PushTroubleshootView/index.tsx b/app/views/PushTroubleshootView/index.tsx index a62cf2d6b3..2a5370c73b 100644 --- a/app/views/PushTroubleshootView/index.tsx +++ b/app/views/PushTroubleshootView/index.tsx @@ -1,5 +1,5 @@ import { useFocusEffect } from '@react-navigation/native'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import React, { useCallback, useEffect } from 'react'; import { useDispatch } from 'react-redux'; @@ -15,7 +15,7 @@ import NotificationDelay from './components/NotificationDelay'; import PushGatewayConnection from './components/PushGatewayConnection'; interface IPushTroubleshootViewProps { - navigation: StackNavigationProp; + navigation: NativeStackNavigationProp; } const PushTroubleshootView = ({ navigation }: IPushTroubleshootViewProps): JSX.Element => { diff --git a/app/views/ReadReceiptView/index.tsx b/app/views/ReadReceiptView/index.tsx index db1e6b53c2..5691373f10 100644 --- a/app/views/ReadReceiptView/index.tsx +++ b/app/views/ReadReceiptView/index.tsx @@ -3,7 +3,7 @@ import { FlatList, Text, View, RefreshControl } from 'react-native'; import { dequal } from 'dequal'; import moment from 'moment'; import { connect } from 'react-redux'; -import { StackNavigationOptions, StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationOptions, NativeStackNavigationProp } from '@react-navigation/native-stack'; import { RouteProp } from '@react-navigation/core'; import * as List from '../../containers/List'; @@ -25,7 +25,7 @@ interface IReadReceiptViewState { } interface INavigationOption { - navigation: StackNavigationProp; + navigation: NativeStackNavigationProp; route: RouteProp; isMasterDetail: boolean; } @@ -39,7 +39,7 @@ class ReadReceiptView extends React.Component { - const options: StackNavigationOptions = { + const options: NativeStackNavigationOptions = { title: I18n.t('Read_Receipt') }; if (isMasterDetail) { @@ -131,8 +131,7 @@ class ReadReceiptView extends React.Component{`@${item.user.username}`} + ]}>{`@${item.user.username}`} ); diff --git a/app/views/ReportUserView/index.tsx b/app/views/ReportUserView/index.tsx index 3a187c2b3e..40214872a4 100644 --- a/app/views/ReportUserView/index.tsx +++ b/app/views/ReportUserView/index.tsx @@ -1,7 +1,7 @@ import React, { useLayoutEffect, useState } from 'react'; import { ScrollView, StatusBar } from 'react-native'; import { CompositeNavigationProp, RouteProp, useNavigation, useRoute } from '@react-navigation/native'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { useForm } from 'react-hook-form'; import * as yup from 'yup'; import { yupResolver } from '@hookform/resolvers/yup'; @@ -23,8 +23,8 @@ import { Services } from '../../lib/services'; import KeyboardView from '../../containers/KeyboardView'; type TReportUserViewNavigationProp = CompositeNavigationProp< - StackNavigationProp, - StackNavigationProp + NativeStackNavigationProp, + NativeStackNavigationProp >; type TReportUserViewRouteProp = RouteProp; @@ -80,8 +80,7 @@ const ReportUserView = () => { + keyboardVerticalOffset={128}> diff --git a/app/views/RoomActionsView/index.tsx b/app/views/RoomActionsView/index.tsx index a0403b769c..80806de3fc 100644 --- a/app/views/RoomActionsView/index.tsx +++ b/app/views/RoomActionsView/index.tsx @@ -1,6 +1,6 @@ /* eslint-disable complexity */ import { Q } from '@nozbe/watermelondb'; -import { StackNavigationOptions, StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationOptions, NativeStackNavigationProp } from '@react-navigation/native-stack'; import isEmpty from 'lodash/isEmpty'; import React from 'react'; import { Share, Text, View } from 'react-native'; @@ -9,7 +9,6 @@ import { Observable, Subscription } from 'rxjs'; import { CompositeNavigationProp } from '@react-navigation/native'; import { leaveRoom } from '../../actions/room'; -import { setLoading } from '../../actions/selectedUsers'; import Avatar from '../../containers/Avatar'; import * as HeaderButton from '../../containers/HeaderButton'; import * as List from '../../containers/List'; @@ -81,8 +80,8 @@ interface IRoomActionsViewProps extends IActionSheetProvider, IBaseScreen, - StackNavigationProp + NativeStackNavigationProp, + NativeStackNavigationProp >; videoConf_Enable_DMs: boolean; videoConf_Enable_Channels: boolean; @@ -123,8 +122,8 @@ class RoomActionsView extends React.Component): StackNavigationOptions => { - const options: StackNavigationOptions = { + }: Pick): NativeStackNavigationOptions => { + const options: NativeStackNavigationOptions = { title: I18n.t('Actions') }; if (isMasterDetail) { @@ -453,21 +452,6 @@ class RoomActionsView extends React.Component { - const { room } = this.state; - const { dispatch, navigation } = this.props; - const { rid } = room; - try { - dispatch(setLoading(true)); - await Services.addUsersToRoom(rid); - navigation.pop(); - } catch (e) { - log(e); - } finally { - dispatch(setLoading(false)); - } - }; - toggleBlockUser = async () => { logEvent(events.RA_TOGGLE_BLOCK_USER); const { room } = this.state; diff --git a/app/views/RoomInfoView/index.tsx b/app/views/RoomInfoView/index.tsx index 1dbf530ba8..c0969ee930 100644 --- a/app/views/RoomInfoView/index.tsx +++ b/app/views/RoomInfoView/index.tsx @@ -1,8 +1,8 @@ import { CompositeNavigationProp, RouteProp, useNavigation, useRoute } from '@react-navigation/native'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { uniq } from 'lodash'; import isEmpty from 'lodash/isEmpty'; -import React, { useEffect, useRef, useState } from 'react'; +import React, { useEffect, useLayoutEffect, useRef, useState } from 'react'; import { ScrollView, View } from 'react-native'; import { Subscription } from 'rxjs'; import UAParser from 'ua-parser-js'; @@ -30,8 +30,8 @@ import styles from './styles'; import { emitErrorCreateDirectMessage } from '../../lib/methods/helpers/emitErrorCreateDirectMessage'; type TRoomInfoViewNavigationProp = CompositeNavigationProp< - StackNavigationProp, - StackNavigationProp + NativeStackNavigationProp, + NativeStackNavigationProp >; type TRoomInfoViewRouteProp = RouteProp; @@ -77,6 +77,11 @@ const RoomInfoView = (): React.ReactElement => { const { colors } = useTheme(); + // Prevents from flashing RoomInfoView on the header title before fetching actual room data + useLayoutEffect(() => { + setHeader(false); + }); + useEffect(() => { const listener = addListener('focus', () => (isLivechat ? loadVisitor() : null)); return () => listener(); diff --git a/app/views/RoomMembersView/components/ActionsSection.tsx b/app/views/RoomMembersView/components/ActionsSection.tsx index 174e51c7ce..e743dbf320 100644 --- a/app/views/RoomMembersView/components/ActionsSection.tsx +++ b/app/views/RoomMembersView/components/ActionsSection.tsx @@ -1,5 +1,5 @@ import { CompositeNavigationProp, useNavigation } from '@react-navigation/native'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import React from 'react'; import { View } from 'react-native'; import { useDispatch } from 'react-redux'; @@ -15,8 +15,8 @@ import { MasterDetailInsideStackParamList } from '../../../stacks/MasterDetailSt import { ChatsStackParamList } from '../../../stacks/types'; type TNavigation = CompositeNavigationProp< - StackNavigationProp, - StackNavigationProp + NativeStackNavigationProp, + NativeStackNavigationProp >; interface IActionsSection { diff --git a/app/views/RoomMembersView/helpers.ts b/app/views/RoomMembersView/helpers.ts index 9038bae7db..8fd374383c 100644 --- a/app/views/RoomMembersView/helpers.ts +++ b/app/views/RoomMembersView/helpers.ts @@ -1,4 +1,5 @@ import { Q } from '@nozbe/watermelondb'; +import { Alert } from 'react-native'; import { LISTENER } from '../../containers/Toast'; import { IGetRoomRoles, IUser, SubscriptionType, TSubscriptionModel, TUserModel } from '../../definitions'; @@ -208,7 +209,14 @@ export const handleRemoveUserFromRoom = async ( const message = I18n.t('User_has_been_removed_from_s', { s: getRoomTitle(room) }); EventEmitter.emit(LISTENER, { message }); callback(); - } catch (e) { + } catch (e: any) { + if (e.data && e.data.errorType === 'error-you-are-last-owner') { + Alert.alert(I18n.t('Oops'), I18n.t(e.data.errorType)); + } else if (e?.data?.error === 'last-owner-can-not-be-removed') { + Alert.alert(I18n.t('Oops'), I18n.t(e.data.error)); + } else { + Alert.alert(I18n.t('Oops'), I18n.t('There_was_an_error_while_action', { action: I18n.t('leaving_room') })); + } log(e); } }; diff --git a/app/views/RoomMembersView/index.tsx b/app/views/RoomMembersView/index.tsx index 17429bc49f..4bfcf68739 100644 --- a/app/views/RoomMembersView/index.tsx +++ b/app/views/RoomMembersView/index.tsx @@ -4,6 +4,7 @@ import { FlatList, Text, View } from 'react-native'; import { shallowEqual } from 'react-redux'; import { TActionSheetOptionsItem, useActionSheet } from '../../containers/ActionSheet'; +import { sendLoadingEvent } from '../../containers/Loading'; import ActivityIndicator from '../../containers/ActivityIndicator'; import { CustomIcon, TIconsName } from '../../containers/CustomIcon'; import * as HeaderButton from '../../containers/HeaderButton'; @@ -74,16 +75,21 @@ const RoomMembersView = (): React.ReactElement => { const { params } = useRoute>(); const navigation = useNavigation>(); - const { isMasterDetail, serverVersion, useRealName, user } = useAppSelector( + const { isMasterDetail, serverVersion, useRealName, user, loading } = useAppSelector( state => ({ isMasterDetail: state.app.isMasterDetail, useRealName: state.settings.UI_Use_Real_Name, user: getUserSelector(state), - serverVersion: state.server.version + serverVersion: state.server.version, + loading: state.selectedUsers.loading }), shallowEqual ); + useEffect(() => { + sendLoadingEvent({ visible: loading }); + }, [loading]); + const [state, updateState] = useReducer( (state: IRoomMembersViewState, newState: Partial) => ({ ...state, ...newState }), { diff --git a/app/views/RoomView/LeftButtons.tsx b/app/views/RoomView/LeftButtons.tsx index 6bf0830758..91503b0beb 100644 --- a/app/views/RoomView/LeftButtons.tsx +++ b/app/views/RoomView/LeftButtons.tsx @@ -10,15 +10,15 @@ import { TSupportedThemes } from '../../theme'; const styles = StyleSheet.create({ container: { + marginLeft: -15, ...Platform.select({ ios: { - minWidth: 60 + minWidth: 34 } }) }, avatar: { - borderRadius: 10, - marginHorizontal: 15 + borderRadius: 10 } }); diff --git a/app/views/RoomView/RightButtons.tsx b/app/views/RoomView/RightButtons.tsx index 3f10ecce42..8d4fb067bd 100644 --- a/app/views/RoomView/RightButtons.tsx +++ b/app/views/RoomView/RightButtons.tsx @@ -1,4 +1,4 @@ -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { dequal } from 'dequal'; import React, { Component } from 'react'; import { connect } from 'react-redux'; @@ -35,7 +35,7 @@ interface IRightButtonsProps extends Pick { status?: string; dispatch: Dispatch; encrypted?: boolean; - navigation: StackNavigationProp; + navigation: NativeStackNavigationProp; omnichannelPermissions: { canForwardGuest: boolean; canReturnQueue: boolean; @@ -51,6 +51,7 @@ interface IRightButtonsProps extends Pick { notificationsDisabled?: boolean; hasE2EEWarning: boolean; toggleRoomE2EEncryptionPermission?: string[]; + onLayout: Function; } interface IRigthButtonsState { @@ -400,6 +401,11 @@ class RightButtonsContainer extends Component { + const { onLayout } = this.props; + onLayout(l); + }; + render() { const { isFollowingThread, tunread, tunreadUser, tunreadGroup, canToggleEncryption } = this.state; const { t, tmid, threadsEnabled, rid, colors, issuesWithNotifications, notificationsDisabled, hasE2EEWarning } = this.props; @@ -411,7 +417,7 @@ class RightButtonsContainer extends Component + ); @@ -420,7 +426,7 @@ class RightButtonsContainer extends Component + + {hasE2EEWarning ? ( toggleRoomE2EE(rid)} disabled={!canToggleEncryption} /> ) : null} diff --git a/app/views/RoomView/components/EncryptedRoom.tsx b/app/views/RoomView/components/EncryptedRoom.tsx index 967cdcde48..2bc14c1a97 100644 --- a/app/views/RoomView/components/EncryptedRoom.tsx +++ b/app/views/RoomView/components/EncryptedRoom.tsx @@ -1,6 +1,6 @@ import React, { ReactElement } from 'react'; import { Linking, StyleSheet, Text, View } from 'react-native'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { ChatsStackParamList } from '../../../stacks/types'; import { useTheme } from '../../../theme'; @@ -19,7 +19,7 @@ export const EncryptedRoom = ({ navigation }: { roomName: string; - navigation: StackNavigationProp; + navigation: NativeStackNavigationProp; }): ReactElement => { const { colors } = useTheme(); const styles = useStyle(); diff --git a/app/views/RoomView/constants.ts b/app/views/RoomView/constants.ts index 85088e52ba..3bd114b1b5 100644 --- a/app/views/RoomView/constants.ts +++ b/app/views/RoomView/constants.ts @@ -11,7 +11,8 @@ export const stateAttrsUpdate = [ 'member', 'canForwardGuest', 'canReturnQueue', - 'canViewCannedResponse' + 'canViewCannedResponse', + 'rightButtonsWidth' ] as TStateAttrsUpdate[]; export const roomAttrsUpdate = [ diff --git a/app/views/RoomView/index.tsx b/app/views/RoomView/index.tsx index 4508e2356c..2606a45d9b 100644 --- a/app/views/RoomView/index.tsx +++ b/app/views/RoomView/index.tsx @@ -177,7 +177,8 @@ class RoomView extends React.Component { canForwardGuest: false, canReturnQueue: false, canPlaceLivechatOnHold: false, - isOnHold: false + isOnHold: false, + rightButtonsWidth: 0 }; this.setHeader(); @@ -275,7 +276,7 @@ class RoomView extends React.Component { } componentDidUpdate(prevProps: IRoomViewProps, prevState: IRoomViewState) { - const { roomUpdate, joined } = this.state; + const { roomUpdate, joined, rightButtonsWidth } = this.state; const { insets, route } = this.props; if (route?.params?.jumpToMessageId && route?.params?.jumpToMessageId !== prevProps.route?.params?.jumpToMessageId) { @@ -298,7 +299,11 @@ class RoomView extends React.Component { } } if (roomAttrsUpdate.some(key => !dequal(prevState.roomUpdate[key], roomUpdate[key]))) this.setHeader(); - if (insets.left !== prevProps.insets.left || insets.right !== prevProps.insets.right) { + if ( + insets.left !== prevProps.insets.left || + insets.right !== prevProps.insets.right || + rightButtonsWidth !== prevState.rightButtonsWidth + ) { this.setHeader(); } this.setReadOnly(); @@ -415,7 +420,8 @@ class RoomView extends React.Component { } setHeader = () => { - const { room, unreadsCount, roomUserId, joined, canForwardGuest, canReturnQueue, canPlaceLivechatOnHold } = this.state; + const { room, unreadsCount, roomUserId, joined, canForwardGuest, canReturnQueue, canPlaceLivechatOnHold, rightButtonsWidth } = + this.state; const { navigation, isMasterDetail, theme, baseUrl, user, route, encryptionEnabled } = this.props; const { rid, tmid } = this; if (!room.rid) { @@ -457,6 +463,10 @@ class RoomView extends React.Component { visitor = room.visitor; } + const onLayout = ({ nativeEvent }: { nativeEvent: any }) => { + this.setState({ rightButtonsWidth: nativeEvent.layout.width }); + }; + const t = room?.t; const teamMain = 'teamMain' in room ? room?.teamMain : false; const omnichannelPermissions = { canForwardGuest, canReturnQueue, canPlaceLivechatOnHold }; @@ -465,30 +475,22 @@ class RoomView extends React.Component { 'encrypted' in room && hasE2EEWarning({ encryptionEnabled, E2EKey: room.E2EKey, roomEncrypted: room.encrypted }) ); navigation.setOptions({ - headerShown: true, - headerTitleAlign: 'left', - headerTitleContainerStyle: { - flex: 1, - marginLeft: 0, - marginRight: 4, - maxWidth: undefined - }, - headerRightContainerStyle: { flexGrow: undefined, flexBasis: undefined }, - headerLeft: () => ( - - ), + headerLeft: () => + isIOS && (unreadsCount || isMasterDetail) ? ( + + ) : undefined, headerTitle: () => ( { testID={`room-view-title-${title}`} sourceType={sourceType} disabled={e2eeWarning} + rightButtonsWidth={rightButtonsWidth} /> ), headerRight: () => ( @@ -522,6 +525,7 @@ class RoomView extends React.Component { showActionSheet={this.showActionSheet} departmentId={departmentId} notificationsDisabled={iSubRoom?.disableNotifications} + onLayout={onLayout} hasE2EEWarning={e2eeWarning} /> ) diff --git a/app/views/RoomsListView/Header/Header.tsx b/app/views/RoomsListView/Header/Header.tsx index d09be58c57..b8d67af38f 100644 --- a/app/views/RoomsListView/Header/Header.tsx +++ b/app/views/RoomsListView/Header/Header.tsx @@ -1,15 +1,23 @@ import React from 'react'; -import { StyleSheet, Text, TextInputProps, TouchableOpacity, TouchableOpacityProps, View } from 'react-native'; +import { + StyleSheet, + Text, + TextInputProps, + TouchableOpacity, + TouchableOpacityProps, + View, + useWindowDimensions +} from 'react-native'; import I18n from '../../../i18n'; import sharedStyles from '../../Styles'; import { useTheme } from '../../../theme'; import SearchHeader from '../../../containers/SearchHeader'; import { useAppSelector } from '../../../lib/hooks'; +import { isTablet } from '../../../lib/methods/helpers'; const styles = StyleSheet.create({ container: { - flex: 1, justifyContent: 'center' }, button: { @@ -34,6 +42,7 @@ interface IRoomHeader { serverName: string; server: string; showSearchHeader: boolean; + width?: number; onSearchChangeText: TextInputProps['onChangeText']; onPress: TouchableOpacityProps['onPress']; } @@ -46,11 +55,13 @@ const Header = React.memo( serverName = 'Rocket.Chat', server, showSearchHeader, + width, onSearchChangeText, onPress }: IRoomHeader) => { const { status: supportedVersionsStatus } = useAppSelector(state => state.supportedVersions); const { colors } = useTheme(); + const { width: windowWidth } = useWindowDimensions(); if (showSearchHeader) { return ; @@ -69,7 +80,11 @@ const Header = React.memo( } // improve copy return ( - + diff --git a/app/views/RoomsListView/Header/index.tsx b/app/views/RoomsListView/Header/index.tsx index bc27d35c1e..dcb4eb45ec 100644 --- a/app/views/RoomsListView/Header/index.tsx +++ b/app/views/RoomsListView/Header/index.tsx @@ -16,6 +16,7 @@ interface IRoomsListHeaderViewProps { isFetching: boolean; server: string; dispatch: Dispatch; + width?: number; } class RoomsListHeaderView extends PureComponent { @@ -29,7 +30,7 @@ class RoomsListHeaderView extends PureComponent }; render() { - const { serverName, showSearchHeader, connecting, connected, isFetching, server } = this.props; + const { serverName, showSearchHeader, connecting, connected, isFetching, server, width } = this.props; return (
isFetching={isFetching} onPress={this.onPress} onSearchChangeText={this.onSearchChangeText} + width={width} /> ); } diff --git a/app/views/RoomsListView/index.tsx b/app/views/RoomsListView/index.tsx index c8cc39e6b8..bb5c5f54f3 100644 --- a/app/views/RoomsListView/index.tsx +++ b/app/views/RoomsListView/index.tsx @@ -5,7 +5,7 @@ import { dequal } from 'dequal'; import { Q } from '@nozbe/watermelondb'; import { withSafeAreaInsets } from 'react-native-safe-area-context'; import { Subscription } from 'rxjs'; -import { StackNavigationOptions, StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { Header } from '@react-navigation/elements'; import { CompositeNavigationProp, RouteProp } from '@react-navigation/native'; import { Dispatch } from 'redux'; @@ -49,8 +49,8 @@ import { SupportedVersionsExpired } from '../../containers/SupportedVersions'; import { ChangePasswordRequired } from '../../containers/ChangePasswordRequired'; type TNavigation = CompositeNavigationProp< - StackNavigationProp, - CompositeNavigationProp, StackNavigationProp> + NativeStackNavigationProp, + CompositeNavigationProp, NativeStackNavigationProp> >; interface IRoomsListViewProps { @@ -103,6 +103,7 @@ interface IRoomsListViewState { chats?: IRoomItem[]; item?: ISubscription; canCreateRoom?: boolean; + headerTitleWidth?: number; } interface IRoomItem extends ISubscription { @@ -190,7 +191,8 @@ class RoomsListView extends React.Component this.setHeader()); }; - getHeader = (): StackNavigationOptions => { - const { searching, canCreateRoom } = this.state; - const { navigation, isMasterDetail, notificationPresenceCap, issuesWithNotifications, supportedVersionsStatus, theme, user } = - this.props; + getHeader = (): any => { + const { searching, canCreateRoom, headerTitleWidth } = this.state; + const { + navigation, + isMasterDetail, + notificationPresenceCap, + issuesWithNotifications, + supportedVersionsStatus, + theme, + user, + width + } = this.props; if (searching) { return { - headerTitleAlign: 'left', - headerTitleContainerStyle: { flex: 1, marginHorizontal: 0, marginRight: 15, maxWidth: undefined }, - headerRightContainerStyle: { flexGrow: 0 }, headerLeft: () => ( @@ -447,9 +458,6 @@ class RoomsListView extends React.Component ( ), - headerTitle: () => , + headerTitle: () => , headerRight: () => ( - + { + this.setState({ headerTitleWidth: width - nativeEvent.layout.width - (isIOS ? 60 : 50) }); + } + }> {issuesWithNotifications ? ( ; }; diff --git a/app/views/ScreenLockConfigView.tsx b/app/views/ScreenLockConfigView.tsx index 4c07d1b52b..38a9be3bd1 100644 --- a/app/views/ScreenLockConfigView.tsx +++ b/app/views/ScreenLockConfigView.tsx @@ -1,6 +1,5 @@ import React from 'react'; import { connect } from 'react-redux'; -import { StackNavigationOptions } from '@react-navigation/stack'; import { Subscription } from 'rxjs'; import I18n from '../i18n'; @@ -43,7 +42,7 @@ class ScreenLockConfigView extends React.Component ({ + static navigationOptions = () => ({ title: I18n.t('Screen_lock') }); diff --git a/app/views/SearchMessagesView/index.tsx b/app/views/SearchMessagesView/index.tsx index 918cdc9af9..cf2185b2c7 100644 --- a/app/views/SearchMessagesView/index.tsx +++ b/app/views/SearchMessagesView/index.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { StackNavigationOptions, StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationOptions, NativeStackNavigationProp } from '@react-navigation/native-stack'; import { CompositeNavigationProp, RouteProp } from '@react-navigation/core'; import { FlatList, Text, View } from 'react-native'; import { Q } from '@nozbe/watermelondb'; @@ -60,8 +60,8 @@ export interface IRoomInfoParam { interface INavigationOption { navigation: CompositeNavigationProp< - StackNavigationProp, - StackNavigationProp + NativeStackNavigationProp, + NativeStackNavigationProp >; route: RouteProp; } @@ -88,7 +88,7 @@ class SearchMessagesView extends React.Component { - const options: StackNavigationOptions = { + const options: NativeStackNavigationOptions = { title: I18n.t('Search') }; const showCloseModal = route.params?.showCloseModal; diff --git a/app/views/SecurityPrivacyView.tsx b/app/views/SecurityPrivacyView.tsx index 9480a3ec31..ddec8772ad 100644 --- a/app/views/SecurityPrivacyView.tsx +++ b/app/views/SecurityPrivacyView.tsx @@ -1,5 +1,5 @@ import AsyncStorage from '@react-native-async-storage/async-storage'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import React, { useEffect, useState } from 'react'; import * as List from '../containers/List'; @@ -22,7 +22,7 @@ import { import Switch from '../containers/Switch'; interface ISecurityPrivacyViewProps { - navigation: StackNavigationProp; + navigation: NativeStackNavigationProp; } const SecurityPrivacyView = ({ navigation }: ISecurityPrivacyViewProps): JSX.Element => { diff --git a/app/views/SelectListView.tsx b/app/views/SelectListView.tsx index da0a3202e5..e6a8a78867 100644 --- a/app/views/SelectListView.tsx +++ b/app/views/SelectListView.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { StackNavigationOptions, StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationOptions, NativeStackNavigationProp } from '@react-navigation/native-stack'; import { FlatList, StyleSheet, Text, View } from 'react-native'; import { connect } from 'react-redux'; import { RadioButton } from 'react-native-ui-lib'; @@ -37,7 +37,7 @@ interface ISelectListViewState { } interface ISelectListViewProps { - navigation: StackNavigationProp; + navigation: NativeStackNavigationProp; route: RouteProp; theme: TSupportedThemes; isMasterDetail: boolean; @@ -81,7 +81,7 @@ class SelectListView extends React.Component { const dispatch = useDispatch(); const server = useAppSelector(state => state.server.server); - const navigation = useNavigation>(); + const navigation = useNavigation>(); useLayoutEffect(() => { navigation.setOptions({ diff --git a/app/views/SelectedUsersView/index.tsx b/app/views/SelectedUsersView/index.tsx index 68d55cd068..f8b6406784 100644 --- a/app/views/SelectedUsersView/index.tsx +++ b/app/views/SelectedUsersView/index.tsx @@ -5,7 +5,7 @@ import { FlatList } from 'react-native'; import { shallowEqual, useDispatch } from 'react-redux'; import { Subscription } from 'rxjs'; import { RouteProp, useNavigation, useRoute } from '@react-navigation/native'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { addUser, removeUser, reset } from '../../actions/selectedUsers'; import * as HeaderButton from '../../containers/HeaderButton'; @@ -28,7 +28,7 @@ import { useAppSelector } from '../../lib/hooks'; import Header from './Header'; type TRoute = RouteProp; -type TNavigation = StackNavigationProp; +type TNavigation = NativeStackNavigationProp; const SelectedUsersView = () => { const [chats, setChats] = useState([]); diff --git a/app/views/SetUsernameView.tsx b/app/views/SetUsernameView.tsx index 11b6f761bd..c765c54aa2 100644 --- a/app/views/SetUsernameView.tsx +++ b/app/views/SetUsernameView.tsx @@ -1,5 +1,5 @@ import { useNavigation } from '@react-navigation/native'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import React, { useEffect, useLayoutEffect, useState } from 'react'; import { ScrollView, StyleSheet, Text } from 'react-native'; import { useDispatch } from 'react-redux'; @@ -51,7 +51,7 @@ const SetUsernameView = () => { const dispatch = useDispatch(); const { server, token } = useAppSelector(state => ({ server: state.server.server, token: getUserSelector(state).token })); - const navigation = useNavigation>(); + const navigation = useNavigation>(); useLayoutEffect(() => { navigation.setOptions({ title: server }); diff --git a/app/views/SettingsView/index.tsx b/app/views/SettingsView/index.tsx index 5c7a15783f..41d9f58d9b 100644 --- a/app/views/SettingsView/index.tsx +++ b/app/views/SettingsView/index.tsx @@ -5,7 +5,7 @@ import React, { useLayoutEffect } from 'react'; import { Linking, Share } from 'react-native'; import FastImage from 'react-native-fast-image'; import { useDispatch } from 'react-redux'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { appStart } from '../../actions/app'; import { logout } from '../../actions/login'; @@ -39,7 +39,7 @@ type TLogScreenName = 'SE_GO_LANGUAGE' | 'SE_GO_DEFAULTBROWSER' | 'SE_GO_THEME' const SettingsView = (): React.ReactElement => { const { colors, theme } = useTheme(); - const navigation = useNavigation>(); + const navigation = useNavigation>(); const dispatch = useDispatch(); const isMasterDetail = useAppSelector(state => state.app.isMasterDetail); const userId = useAppSelector(state => getUserSelector(state).id); diff --git a/app/views/ShareListView/index.tsx b/app/views/ShareListView/index.tsx index 976548af17..42d943dfde 100644 --- a/app/views/ShareListView/index.tsx +++ b/app/views/ShareListView/index.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { Dispatch } from 'redux'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { BackHandler, FlatList, Keyboard, Text, View } from 'react-native'; import * as FileSystem from 'expo-file-system'; import { connect } from 'react-redux'; @@ -49,7 +49,7 @@ interface IState { } interface INavigationOption { - navigation: StackNavigationProp; + navigation: NativeStackNavigationProp; } interface IShareListViewProps extends INavigationOption { @@ -189,9 +189,6 @@ class ShareListView extends React.Component { if (searching) { navigation.setOptions({ - headerTitleAlign: 'left', - headerTitleContainerStyle: { flex: 1, marginHorizontal: 0, marginRight: 15, maxWidth: undefined }, - headerRightContainerStyle: { flexGrow: 0 }, headerLeft: () => ( @@ -204,10 +201,11 @@ class ShareListView extends React.Component { } navigation.setOptions({ - headerTitleAlign: undefined, - headerTitleContainerStyle: undefined, - headerRightContainerStyle: undefined, - headerLeft: () => , + headerLeft: () => ( + + + + ), headerTitle: I18n.t('Send_to'), headerRight: () => ( diff --git a/app/views/ShareView/index.tsx b/app/views/ShareView/index.tsx index 50e12ddd7f..31ff1475b2 100644 --- a/app/views/ShareView/index.tsx +++ b/app/views/ShareView/index.tsx @@ -1,5 +1,5 @@ import React, { Component } from 'react'; -import { StackNavigationOptions, StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationOptions, NativeStackNavigationProp } from '@react-navigation/native-stack'; import { RouteProp } from '@react-navigation/native'; import { Keyboard, Text, View } from 'react-native'; import { connect } from 'react-redux'; @@ -52,7 +52,7 @@ interface IShareViewState { } interface IShareViewProps { - navigation: StackNavigationProp; + navigation: NativeStackNavigationProp; route: RouteProp; theme: TSupportedThemes; user: { @@ -130,10 +130,8 @@ class ShareView extends Component { const { room, thread, readOnly, attachments } = this.state; const { navigation, theme } = this.props; - const options: StackNavigationOptions = { - headerTitle: () =>
, - headerTitleAlign: 'left', - headerTintColor: themes[theme].backdropColor + const options: NativeStackNavigationOptions = { + headerTitle: () =>
}; // if is share extension show default back button @@ -151,8 +149,6 @@ class ShareView extends Component { ); } - options.headerBackground = () => ; - navigation.setOptions(options); }; @@ -418,7 +414,7 @@ class ShareView extends Component { const { theme } = this.props; if (readOnly || isBlocked(room)) { return ( - + {isBlocked(room) ? I18n.t('This_room_is_blocked') : I18n.t('This_room_is_read_only')} @@ -426,7 +422,7 @@ class ShareView extends Component { ); } return ( - + {this.renderContent()} ); diff --git a/app/views/TeamChannelsView.tsx b/app/views/TeamChannelsView.tsx index 9b53294443..ef9c81b1ec 100644 --- a/app/views/TeamChannelsView.tsx +++ b/app/views/TeamChannelsView.tsx @@ -1,6 +1,5 @@ import { Q } from '@nozbe/watermelondb'; -import { StackNavigationOptions } from '@react-navigation/stack'; -import { HeaderBackButton } from '@react-navigation/elements'; +import { NativeStackNavigationOptions } from '@react-navigation/native-stack'; import React from 'react'; import { Alert, FlatList, Keyboard } from 'react-native'; import { connect } from 'react-redux'; @@ -187,7 +186,7 @@ class TeamChannelsView extends React.Component { const { isSearching, showCreate } = this.state; - const { navigation, isMasterDetail, theme } = this.props; + const { navigation } = this.props; const { team } = this; if (!team) { @@ -195,10 +194,7 @@ class TeamChannelsView extends React.Component ( @@ -212,19 +208,8 @@ class TeamChannelsView extends React.Component ( - navigation.pop()} - tintColor={themes[theme].fontSecondaryInfo} - testID='header-back' - /> - ), + const options: NativeStackNavigationOptions = { + headerLeft: () => null, headerTitle: () => ( ), @@ -242,10 +227,6 @@ class TeamChannelsView extends React.Component ; - } - navigation.setOptions(options); }; diff --git a/app/views/ThreadMessagesView/index.tsx b/app/views/ThreadMessagesView/index.tsx index 1ef8af54c5..cf32da0a52 100644 --- a/app/views/ThreadMessagesView/index.tsx +++ b/app/views/ThreadMessagesView/index.tsx @@ -3,8 +3,7 @@ import { FlatList } from 'react-native'; import { connect } from 'react-redux'; import { Q } from '@nozbe/watermelondb'; import { sanitizedRaw } from '@nozbe/watermelondb/RawRecord'; -import { StackNavigationOptions } from '@react-navigation/stack'; -import { HeaderBackButton } from '@react-navigation/elements'; +import { NativeStackNavigationOptions } from '@react-navigation/native-stack'; import { Observable, Subscription } from 'rxjs'; import { showActionSheetRef } from '../../containers/ActionSheet'; @@ -106,15 +105,12 @@ class ThreadMessagesView extends React.Component { + getHeader = (): NativeStackNavigationOptions => { const { isSearching } = this.state; - const { navigation, isMasterDetail, theme } = this.props; + const { navigation, isMasterDetail } = this.props; if (isSearching) { return { - headerTitleAlign: 'left', - headerTitleContainerStyle: { flex: 1, marginHorizontal: 0, marginRight: 15, maxWidth: undefined }, - headerRightContainerStyle: { flexGrow: 0 }, headerLeft: () => ( @@ -127,19 +123,9 @@ class ThreadMessagesView extends React.Component null, headerTitle: I18n.t('Threads'), - headerTitleContainerStyle: {}, - headerRightContainerStyle: { flexGrow: 1 }, - headerLeft: () => ( - navigation.pop()} - tintColor={themes[theme].fontSecondaryInfo} - testID='header-back' - /> - ), headerRight: () => ( diff --git a/app/views/UserNotificationPreferencesView/index.tsx b/app/views/UserNotificationPreferencesView/index.tsx index 8b4758692d..dd4cf65df7 100644 --- a/app/views/UserNotificationPreferencesView/index.tsx +++ b/app/views/UserNotificationPreferencesView/index.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useLayoutEffect, useState } from 'react'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { CompositeNavigationProp, useNavigation } from '@react-navigation/native'; import StatusBar from '../../containers/StatusBar'; @@ -20,8 +20,8 @@ import { NOTIFICATION_IN_APP_VIBRATION } from '../../lib/constants'; import Switch from '../../containers/Switch'; type TNavigation = CompositeNavigationProp< - StackNavigationProp, - StackNavigationProp + NativeStackNavigationProp, + NativeStackNavigationProp >; const UserNotificationPreferencesView = () => { diff --git a/app/views/UserPreferencesView/index.tsx b/app/views/UserPreferencesView/index.tsx index 9c557a6805..9d58f34d4f 100644 --- a/app/views/UserPreferencesView/index.tsx +++ b/app/views/UserPreferencesView/index.tsx @@ -1,4 +1,4 @@ -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import React, { useEffect } from 'react'; import { useDispatch } from 'react-redux'; @@ -17,7 +17,7 @@ import ListPicker from './ListPicker'; import Switch from '../../containers/Switch'; interface IUserPreferencesViewProps { - navigation: StackNavigationProp; + navigation: NativeStackNavigationProp; } const UserPreferencesView = ({ navigation }: IUserPreferencesViewProps): JSX.Element => { diff --git a/app/views/WorkspaceView/index.tsx b/app/views/WorkspaceView/index.tsx index 02cae0740e..08adb16730 100644 --- a/app/views/WorkspaceView/index.tsx +++ b/app/views/WorkspaceView/index.tsx @@ -1,7 +1,7 @@ import React, { useLayoutEffect } from 'react'; import { Text, View } from 'react-native'; import { useNavigation } from '@react-navigation/native'; -import { StackNavigationProp } from '@react-navigation/stack'; +import { NativeStackNavigationProp } from '@react-navigation/native-stack'; import { CompositeNavigationProp } from '@react-navigation/core'; import { OutsideModalParamList, OutsideParamList } from '../../stacks/types'; @@ -17,8 +17,8 @@ import { useAppSelector } from '../../lib/hooks'; import RegisterDisabledComponent from './RegisterDisabledComponent'; type TNavigation = CompositeNavigationProp< - StackNavigationProp, - StackNavigationProp + NativeStackNavigationProp, + NativeStackNavigationProp >; const useWorkspaceViewSelector = () => diff --git a/e2e/helpers/app.ts b/e2e/helpers/app.ts index a7605a0d67..6df4f9718d 100644 --- a/e2e/helpers/app.ts +++ b/e2e/helpers/app.ts @@ -68,7 +68,7 @@ async function login(username: string, password: string) { async function logout() { const deviceType = device.getPlatform(); - const { scrollViewType, textMatcher } = platformTypes[deviceType]; + const { textMatcher } = platformTypes[deviceType]; await element(by.id('rooms-list-view-sidebar')).tap(); await waitFor(element(by.id('sidebar-view'))) .toBeVisible() @@ -77,10 +77,10 @@ async function logout() { .toBeVisible() .withTimeout(2000); await element(by.id('sidebar-settings')).tap(); - await waitFor(element(by.id('settings-view'))) + await element(by.id('settings-view')).swipe('up'); + await waitFor(element(by.id('settings-logout'))) .toBeVisible() .withTimeout(2000); - await element(by.type(scrollViewType)).atIndex(1).scrollTo('bottom'); await element(by.id('settings-logout')).tap(); const logoutAlertMessage = 'You will be logged out of this application.'; await waitFor(element(by[textMatcher](logoutAlertMessage)).atIndex(0)) @@ -112,12 +112,19 @@ async function mockMessage(message: string, isThread = false) { } async function tapBack() { - try { - await element(by.id('header-back')).atIndex(0).tap(); - } catch (error) { - await device.pressBack(); + if (device.getPlatform() === 'ios') { + try { + await element(by.type('UIAccessibilityBackButtonElement')).tap(); + } catch (error) { + await element(by.id('header-back')).atIndex(0).tap(); + } + } else { + try { + await element(by.label('Navigate up')).tap(); + } catch (error) { + await element(by.id('header-back')).atIndex(0).tap(); + } } - await sleep(300); // Wait for animation to finish } async function searchRoom( diff --git a/e2e/tests/assorted/02-broadcast.spec.ts b/e2e/tests/assorted/02-broadcast.spec.ts index 20b17661cd..0dc290806e 100644 --- a/e2e/tests/assorted/02-broadcast.spec.ts +++ b/e2e/tests/assorted/02-broadcast.spec.ts @@ -78,17 +78,8 @@ describe('Broadcast room', () => { .toBeVisible() .withTimeout(2000); await tapBack(); - await waitFor(element(by.id('room-view'))) - .toBeVisible() - .withTimeout(2000); - }); - - it('should send message', async () => { - await waitFor(element(by.id('room-view'))) - .toBeVisible() - .withTimeout(5000); + await checkRoomTitle(room); message = await mockMessage('message'); - await tapBack(); }); it('should login as user without write message authorization and enter room', async () => { @@ -126,11 +117,8 @@ describe('Broadcast room', () => { .withTimeout(60000); }); - it('should have reply button', async () => { - await expect(element(by.id('message-broadcast-reply'))).toBeVisible(); - }); - it('should tap on reply button and navigate to direct room', async () => { + await expect(element(by.id('message-broadcast-reply'))).toBeVisible(); await element(by.id('message-broadcast-reply')).tap(); await waitFor(element(by.id(`room-view-title-${user.username}`))) .toBeVisible() diff --git a/e2e/tests/assorted/11-deeplinking.spec.ts b/e2e/tests/assorted/11-deeplinking.spec.ts index 21b3249d60..4f626f2c55 100644 --- a/e2e/tests/assorted/11-deeplinking.spec.ts +++ b/e2e/tests/assorted/11-deeplinking.spec.ts @@ -44,8 +44,6 @@ describe('Deep linking', () => { const deleteUsersAfterAll: IDeleteCreateUser[] = []; - const randomUserAlternateServer = data.randomUser(); - beforeAll(async () => { const user = await createRandomUser(); ({ _id: rid, name: room } = await createRandomRoom(user, 'p')); @@ -101,16 +99,17 @@ describe('Deep linking', () => { it('should authenticate while logged in another server', async () => { await device.launchApp({ permissions: { notifications: 'YES' }, delete: true }); await navigateToRegister(data.alternateServer); - await element(by.id('register-view-name')).replaceText(randomUserAlternateServer.name); + const randomUser = data.randomUser(); + await element(by.id('register-view-name')).replaceText(randomUser.name); await element(by.id('register-view-name')).tapReturnKey(); - await element(by.id('register-view-username')).replaceText(randomUserAlternateServer.username); + await element(by.id('register-view-username')).replaceText(randomUser.username); await element(by.id('register-view-username')).tapReturnKey(); - await element(by.id('register-view-email')).replaceText(randomUserAlternateServer.email); + await element(by.id('register-view-email')).replaceText(randomUser.email); await element(by.id('register-view-email')).tapReturnKey(); - await element(by.id('register-view-password')).replaceText(randomUserAlternateServer.password); + await element(by.id('register-view-password')).replaceText(randomUser.password); await element(by.id('register-view-password')).tapReturnKey(); await expectValidRegisterOrRetry(device.getPlatform()); - deleteUsersAfterAll.push({ server: data.alternateServer, username: randomUserAlternateServer.username }); + deleteUsersAfterAll.push({ server: data.alternateServer, username: randomUser.username }); await authAndNavigate(); }); diff --git a/e2e/tests/room/02-room.spec.ts b/e2e/tests/room/02-room.spec.ts index cd18c3ba9d..3a07786311 100644 --- a/e2e/tests/room/02-room.spec.ts +++ b/e2e/tests/room/02-room.spec.ts @@ -285,6 +285,10 @@ describe('Room screen', () => { .withTimeout(2000); await expect(element(by.id('action-sheet-handle'))).toBeVisible(); await element(by.id('action-sheet-handle')).swipe('up', 'fast', 0.5); + await sleep(300); + await waitFor(element(by[textMatcher]('Edit'))) + .toBeVisible() + .withTimeout(3000); await element(by[textMatcher]('Edit')).atIndex(0).tap(); await element(by.id('message-composer-input')).typeText('ed'); await element(by.id('message-composer-send')).tap(); @@ -312,6 +316,7 @@ describe('Room screen', () => { await waitFor(element(by[textMatcher](quotedMessage)).atIndex(0)) .toBeVisible() .withTimeout(3000); + await element(by[textMatcher](quotedMessage)).atIndex(0).tap(); await waitFor(element(by.id(`reply-${user.name}-${quoteMessage}`).withDescendant(by[textMatcher](quoteMessage)))) .toBeVisible() .withTimeout(3000); @@ -321,6 +326,9 @@ describe('Room screen', () => { const expectedLastMessage = `You: ${quotedMessage}`; await sleep(300); await tapBack(); + await waitFor(element(by.id('rooms-list-view'))) + .toBeVisible() + .withTimeout(5000); await waitFor(element(by.id(`markdown-preview-${expectedLastMessage}`))) .toBeVisible() .withTimeout(5000); diff --git a/e2e/tests/room/09-jumptomessage.spec.ts b/e2e/tests/room/09-jumptomessage.spec.ts index 320bfacc3b..b2dd91139a 100644 --- a/e2e/tests/room/09-jumptomessage.spec.ts +++ b/e2e/tests/room/09-jumptomessage.spec.ts @@ -188,6 +188,7 @@ describe('Room', () => { .withTimeout(5000); await element(by.id('room-view-messages')).atIndex(0).swipe('up', 'slow', 0.3); // 104 + await sleep(300); await waitFor(element(by[textMatcher]('Load newer'))) .toExist() .withTimeout(5000); @@ -196,6 +197,7 @@ describe('Room', () => { .toExist() .withTimeout(5000); // 154 + await sleep(300); await waitFor(element(by[textMatcher]('Load newer'))) .toExist() .withTimeout(5000); @@ -204,6 +206,7 @@ describe('Room', () => { .toExist() .withTimeout(5000); // 202 + await sleep(300); await waitFor(element(by[textMatcher]('Load newer'))) .toExist() .withTimeout(5000); @@ -211,14 +214,28 @@ describe('Room', () => { await waitFor(element(by[textMatcher]('202'))) .toExist() .withTimeout(5000); + // 253 - await waitFor(element(by[textMatcher]('Load newer'))) - .toExist() - .withTimeout(5000); - await element(by[textMatcher]('Load newer')).atIndex(0).tap(); - await waitFor(element(by[textMatcher]('253'))) - .toExist() - .withTimeout(5000); + /** + * Sometimes CI loads messages differently than local. + * It loads up until 204 instead of 253. + */ + await sleep(300); + try { + await waitFor(element(by[textMatcher]('Load newer'))) + .toExist() + .withTimeout(5000); + await element(by[textMatcher]('Load newer')).atIndex(0).tap(); + await waitFor(element(by[textMatcher]('253'))) + .toExist() + .withTimeout(5000); + } catch (error) { + await waitFor(element(by[textMatcher]('204'))) + .toExist() + .withTimeout(5000); + } + + await sleep(300); await waitFor(element(by[textMatcher]('Load newer'))) .toNotExist() .withTimeout(5000); diff --git a/ios/RocketChatRN.xcodeproj/project.pbxproj b/ios/RocketChatRN.xcodeproj/project.pbxproj index 06cbb31efb..6c44bf39d2 100644 --- a/ios/RocketChatRN.xcodeproj/project.pbxproj +++ b/ios/RocketChatRN.xcodeproj/project.pbxproj @@ -7,9 +7,8 @@ objects = { /* Begin PBXBuildFile section */ - 0134A33CEB44035971D5A18E /* libPods-defaults-RocketChatRN.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 48C83B3466485303788E4521 /* libPods-defaults-RocketChatRN.a */; }; - 04587880D3FA9BCC2E9C7490 /* libPods-defaults-ShareRocketChatRN.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AAE735590E45F323097F18D1 /* libPods-defaults-ShareRocketChatRN.a */; }; 0C6E2DE448364EA896869ADF /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B37C79D9BD0742CE936B6982 /* libc++.tbd */; }; + 11458A5C2AA3258415FD44CA /* libPods-defaults-RocketChatRN.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CECEE63A3CB6B8D3AB664544 /* libPods-defaults-RocketChatRN.a */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 1E01C81C2511208400FEF824 /* URL+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E01C81B2511208400FEF824 /* URL+Extensions.swift */; }; @@ -279,9 +278,7 @@ 1EFEB5982493B6640072EDC0 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EFEB5972493B6640072EDC0 /* NotificationService.swift */; }; 1EFEB59C2493B6640072EDC0 /* NotificationService.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 1EFEB5952493B6640072EDC0 /* NotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 24A2AEF2383D44B586D31C01 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 06BB44DD4855498082A744AD /* libz.tbd */; }; - 39E74E20D9E02DA933B049C1 /* libPods-defaults-NotificationService.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9EDAE7DFC486C8E0F5331BC7 /* libPods-defaults-NotificationService.a */; }; 4C4C8603EF082F0A33A95522 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45D5C142B655F8EFD006792C /* ExpoModulesProvider.swift */; }; - 624EBD0BDE698092CB04C2FA /* libPods-defaults-RocketChatRN.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F38DDC9B729E9C3C3883E1CF /* libPods-defaults-RocketChatRN.a */; }; 65AD38372BFBDF4A00271B39 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 65AD38362BFBDF4A00271B39 /* PrivacyInfo.xcprivacy */; }; 65AD38392BFBDF4A00271B39 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 65AD38362BFBDF4A00271B39 /* PrivacyInfo.xcprivacy */; }; 65AD383A2BFBDF4A00271B39 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 65AD38362BFBDF4A00271B39 /* PrivacyInfo.xcprivacy */; }; @@ -289,7 +286,6 @@ 65AD383C2BFBDF4A00271B39 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 65AD38362BFBDF4A00271B39 /* PrivacyInfo.xcprivacy */; }; 65B9A71A2AFC24190088956F /* ringtone.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 65B9A7192AFC24190088956F /* ringtone.mp3 */; }; 65B9A71B2AFC24190088956F /* ringtone.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 65B9A7192AFC24190088956F /* ringtone.mp3 */; }; - 6D168AA9955DC38D82D3C051 /* libPods-defaults-Rocket.Chat.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A349601A16A2DEC0EEDCB1E8 /* libPods-defaults-Rocket.Chat.a */; }; 7A006F14229C83B600803143 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 7A006F13229C83B600803143 /* GoogleService-Info.plist */; }; 7A0129D42C6E8EC800F84A97 /* ShareRocketChatRN.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A0129D22C6E8B5900F84A97 /* ShareRocketChatRN.swift */; }; 7A0129D62C6E8F0700F84A97 /* ShareRocketChatRN.entitlements in Resources */ = {isa = PBXBuildFile; fileRef = 1EC6AD6022CBA20C00A41C61 /* ShareRocketChatRN.entitlements */; }; @@ -355,7 +351,8 @@ 85160EB6C143E0493FE5F014 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 194D9A8897F4A486C2C6F89A /* ExpoModulesProvider.swift */; }; BC404914E86821389EEB543D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 391C4F7AA7023CD41EEBD106 /* ExpoModulesProvider.swift */; }; DD2BA30A89E64F189C2C24AC /* libWatermelonDB.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BA7E862283664608B3894E34 /* libWatermelonDB.a */; }; - E02D91DE2C11D3BD9AC34663 /* libPods-defaults-Rocket.Chat.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F08B2D270E82A48D344CB0F5 /* libPods-defaults-Rocket.Chat.a */; }; + E1128307ED6B633DCFA719A7 /* libPods-defaults-NotificationService.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 13F4DC5088372D03708D88AB /* libPods-defaults-NotificationService.a */; }; + EF13130FD8CC298C22E55BC2 /* libPods-defaults-Rocket.Chat.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A0D76263ED0B75215C144160 /* libPods-defaults-Rocket.Chat.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -455,13 +452,12 @@ /* Begin PBXFileReference section */ 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; 06BB44DD4855498082A744AD /* libz.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; - 0E80084FB76F2BA00A43C5E0 /* Pods-defaults-RocketChatRN.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-RocketChatRN.debug.xcconfig"; path = "Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN.debug.xcconfig"; sourceTree = ""; }; - 0FF30665E726105A87EE37A8 /* Pods-defaults-RocketChatRN.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-RocketChatRN.release.xcconfig"; path = "Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN.release.xcconfig"; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* Rocket.Chat Experimental.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Rocket.Chat Experimental.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = RocketChatRN/AppDelegate.h; sourceTree = ""; }; 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = RocketChatRN/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = RocketChatRN/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = RocketChatRN/main.m; sourceTree = ""; }; + 13F4DC5088372D03708D88AB /* libPods-defaults-NotificationService.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-NotificationService.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 194D9A8897F4A486C2C6F89A /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-defaults-NotificationService/ExpoModulesProvider.swift"; sourceTree = ""; }; 1E01C81B2511208400FEF824 /* URL+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URL+Extensions.swift"; sourceTree = ""; }; 1E01C8202511301400FEF824 /* PushResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushResponse.swift; sourceTree = ""; }; @@ -607,13 +603,12 @@ 1EFEB5992493B6640072EDC0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 1EFEB5A12493B67D0072EDC0 /* NotificationService.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NotificationService.entitlements; sourceTree = ""; }; 391C4F7AA7023CD41EEBD106 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-defaults-Rocket.Chat/ExpoModulesProvider.swift"; sourceTree = ""; }; - 3A4ED61C8ED0D728A146E398 /* Pods-defaults-Rocket.Chat.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-Rocket.Chat.debug.xcconfig"; path = "Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat.debug.xcconfig"; sourceTree = ""; }; + 39E7C5047F3B1754D345A5EF /* Pods-defaults-RocketChatRN.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-RocketChatRN.debug.xcconfig"; path = "Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN.debug.xcconfig"; sourceTree = ""; }; 45D5C142B655F8EFD006792C /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-defaults-RocketChatRN/ExpoModulesProvider.swift"; sourceTree = ""; }; 60B2A6A31FC4588700BD58E5 /* RocketChatRN.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = RocketChatRN.entitlements; path = RocketChatRN/RocketChatRN.entitlements; sourceTree = ""; }; + 61327C39E221B850D55A0B50 /* Pods-defaults-RocketChatRN.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-RocketChatRN.release.xcconfig"; path = "Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN.release.xcconfig"; sourceTree = ""; }; 65AD38362BFBDF4A00271B39 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; 65B9A7192AFC24190088956F /* ringtone.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = ringtone.mp3; sourceTree = ""; }; - 70993AF097DB20918D5ABBDC /* Pods-defaults-Rocket.Chat.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-Rocket.Chat.release.xcconfig"; path = "Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat.release.xcconfig"; sourceTree = ""; }; - 7702E49AD9EFBD11DE2AE855 /* libPods-defaults-NotificationService.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-NotificationService.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 7A006F13229C83B600803143 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 7A0129D22C6E8B5900F84A97 /* ShareRocketChatRN.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareRocketChatRN.swift; sourceTree = ""; }; 7A0D62D1242AB187006D5C06 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; @@ -627,14 +622,14 @@ 7AAB3E52257E6A6E00707CF6 /* Rocket.Chat.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Rocket.Chat.app; sourceTree = BUILT_PRODUCTS_DIR; }; 7ACD4853222860DE00442C55 /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; 7AE10C0528A59530003593CB /* Inter.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Inter.ttf; sourceTree = ""; }; - 7B2AF8CE5DAA2B9602655ECA /* Pods-defaults-NotificationService.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-NotificationService.debug.xcconfig"; path = "Target Support Files/Pods-defaults-NotificationService/Pods-defaults-NotificationService.debug.xcconfig"; sourceTree = ""; }; - 8F262B0EDDE35FABA5DAC31A /* Pods-defaults-Rocket.Chat.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-Rocket.Chat.release.xcconfig"; path = "Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat.release.xcconfig"; sourceTree = ""; }; - 9EDAE7DFC486C8E0F5331BC7 /* libPods-defaults-NotificationService.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-NotificationService.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 9C118E16A92C887C0DE56F72 /* Pods-defaults-NotificationService.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-NotificationService.debug.xcconfig"; path = "Target Support Files/Pods-defaults-NotificationService/Pods-defaults-NotificationService.debug.xcconfig"; sourceTree = ""; }; + A0D76263ED0B75215C144160 /* libPods-defaults-Rocket.Chat.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-Rocket.Chat.a"; sourceTree = BUILT_PRODUCTS_DIR; }; B37C79D9BD0742CE936B6982 /* libc++.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; + B40998752613948693A7FC34 /* Pods-defaults-Rocket.Chat.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-Rocket.Chat.release.xcconfig"; path = "Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat.release.xcconfig"; sourceTree = ""; }; BA7E862283664608B3894E34 /* libWatermelonDB.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libWatermelonDB.a; sourceTree = ""; }; - C1FFA2C4EDACA0718BB71F1C /* Pods-defaults-NotificationService.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-NotificationService.release.xcconfig"; path = "Target Support Files/Pods-defaults-NotificationService/Pods-defaults-NotificationService.release.xcconfig"; sourceTree = ""; }; - F08B2D270E82A48D344CB0F5 /* libPods-defaults-Rocket.Chat.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-Rocket.Chat.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - F38DDC9B729E9C3C3883E1CF /* libPods-defaults-RocketChatRN.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-RocketChatRN.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + BC52370BEF49AC7F705038EF /* Pods-defaults-NotificationService.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-NotificationService.release.xcconfig"; path = "Target Support Files/Pods-defaults-NotificationService/Pods-defaults-NotificationService.release.xcconfig"; sourceTree = ""; }; + C932D116569A690F350F3C13 /* Pods-defaults-Rocket.Chat.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-Rocket.Chat.debug.xcconfig"; path = "Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat.debug.xcconfig"; sourceTree = ""; }; + CECEE63A3CB6B8D3AB664544 /* libPods-defaults-RocketChatRN.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-RocketChatRN.a"; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -655,7 +650,7 @@ 7ACD4897222860DE00442C55 /* JavaScriptCore.framework in Frameworks */, 24A2AEF2383D44B586D31C01 /* libz.tbd in Frameworks */, DD2BA30A89E64F189C2C24AC /* libWatermelonDB.a in Frameworks */, - 624EBD0BDE698092CB04C2FA /* libPods-defaults-RocketChatRN.a in Frameworks */, + 11458A5C2AA3258415FD44CA /* libPods-defaults-RocketChatRN.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -677,7 +672,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 39E74E20D9E02DA933B049C1 /* libPods-defaults-NotificationService.a in Frameworks */, + E1128307ED6B633DCFA719A7 /* libPods-defaults-NotificationService.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -698,7 +693,7 @@ 7AAB3E3D257E6A6E00707CF6 /* JavaScriptCore.framework in Frameworks */, 7AAB3E3E257E6A6E00707CF6 /* libz.tbd in Frameworks */, 7AAB3E3F257E6A6E00707CF6 /* libWatermelonDB.a in Frameworks */, - E02D91DE2C11D3BD9AC34663 /* libPods-defaults-Rocket.Chat.a in Frameworks */, + EF13130FD8CC298C22E55BC2 /* libPods-defaults-Rocket.Chat.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1121,12 +1116,12 @@ 7AC2B09613AA7C3FEBAC9F57 /* Pods */ = { isa = PBXGroup; children = ( - 7B2AF8CE5DAA2B9602655ECA /* Pods-defaults-NotificationService.debug.xcconfig */, - C1FFA2C4EDACA0718BB71F1C /* Pods-defaults-NotificationService.release.xcconfig */, - 3A4ED61C8ED0D728A146E398 /* Pods-defaults-Rocket.Chat.debug.xcconfig */, - 8F262B0EDDE35FABA5DAC31A /* Pods-defaults-Rocket.Chat.release.xcconfig */, - 0E80084FB76F2BA00A43C5E0 /* Pods-defaults-RocketChatRN.debug.xcconfig */, - 0FF30665E726105A87EE37A8 /* Pods-defaults-RocketChatRN.release.xcconfig */, + 9C118E16A92C887C0DE56F72 /* Pods-defaults-NotificationService.debug.xcconfig */, + BC52370BEF49AC7F705038EF /* Pods-defaults-NotificationService.release.xcconfig */, + C932D116569A690F350F3C13 /* Pods-defaults-Rocket.Chat.debug.xcconfig */, + B40998752613948693A7FC34 /* Pods-defaults-Rocket.Chat.release.xcconfig */, + 39E7C5047F3B1754D345A5EF /* Pods-defaults-RocketChatRN.debug.xcconfig */, + 61327C39E221B850D55A0B50 /* Pods-defaults-RocketChatRN.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -1222,9 +1217,9 @@ 7ACD4853222860DE00442C55 /* JavaScriptCore.framework */, B37C79D9BD0742CE936B6982 /* libc++.tbd */, 06BB44DD4855498082A744AD /* libz.tbd */, - 9EDAE7DFC486C8E0F5331BC7 /* libPods-defaults-NotificationService.a */, - F08B2D270E82A48D344CB0F5 /* libPods-defaults-Rocket.Chat.a */, - F38DDC9B729E9C3C3883E1CF /* libPods-defaults-RocketChatRN.a */, + 13F4DC5088372D03708D88AB /* libPods-defaults-NotificationService.a */, + A0D76263ED0B75215C144160 /* libPods-defaults-Rocket.Chat.a */, + CECEE63A3CB6B8D3AB664544 /* libPods-defaults-RocketChatRN.a */, ); name = Frameworks; sourceTree = ""; @@ -1244,7 +1239,7 @@ isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "RocketChatRN" */; buildPhases = ( - 39683630344A091B5F15ED5E /* [CP] Check Pods Manifest.lock */, + 28C6252E50C6D81291B0621E /* [CP] Check Pods Manifest.lock */, 7AA5C63E23E30D110005C4A7 /* Start Packager */, 589729E8381BA997CD19EF19 /* [Expo] Configure project */, 13B07F871A680F5B00A75B9A /* Sources */, @@ -1256,8 +1251,9 @@ 1ED0389C2B507B4F00C007D4 /* Embed Watch Content */, 7AAE9EB32891A0D20024F559 /* Upload source maps to Bugsnag */, 407D3EDE3DABEE15D27BD87D /* ShellScript */, - D45499F74A147D677153BC90 /* [CP] Embed Pods Frameworks */, - 9C104B12BEE385F7555E641F /* [CP] Copy Pods Resources */, + 9C104B12BEE385F7555E641F /* [Expo] Configure project */, + CC37BA3991B9772464B8ED9C /* [CP] Embed Pods Frameworks */, + A612554BBF43398AE541FBA4 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -1325,12 +1321,12 @@ isa = PBXNativeTarget; buildConfigurationList = 1EFEB5A02493B6640072EDC0 /* Build configuration list for PBXNativeTarget "NotificationService" */; buildPhases = ( - 40620FE6C682BABD00C2B4CB /* [CP] Check Pods Manifest.lock */, + 5131D72D372D40183A2ED0C0 /* [CP] Check Pods Manifest.lock */, 86A998705576AFA7CE938617 /* [Expo] Configure project */, 1EFEB5912493B6640072EDC0 /* Sources */, 1EFEB5922493B6640072EDC0 /* Frameworks */, 1EFEB5932493B6640072EDC0 /* Resources */, - 1AC60C112012F2EC4A83B6C6 /* [CP] Copy Pods Resources */, + 959EC9F72A0BB7F1378F425D /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -1345,7 +1341,7 @@ isa = PBXNativeTarget; buildConfigurationList = 7AAB3E4F257E6A6E00707CF6 /* Build configuration list for PBXNativeTarget "Rocket.Chat" */; buildPhases = ( - 2A96227A2025150C0D3A4736 /* [CP] Check Pods Manifest.lock */, + 82BCD301AF1E0A999C9E4C05 /* [CP] Check Pods Manifest.lock */, 7AAB3E13257E6A6E00707CF6 /* Start Packager */, 6723DBD924B66933E14E7EF7 /* [Expo] Configure project */, 7AAB3E14257E6A6E00707CF6 /* Sources */, @@ -1356,8 +1352,8 @@ 7AAB3E4B257E6A6E00707CF6 /* ShellScript */, 1ED1ECE32B8699DD00F6620C /* Embed Watch Content */, 7A10288726B1D15200E47EF8 /* Upload source maps to Bugsnag */, - 23F41C80BD65C4C2AC2DD624 /* [CP] Embed Pods Frameworks */, - C75CF748D7A3F20A3D92419B /* [CP] Copy Pods Resources */, + 68D30C2C25C47050EF8445D4 /* [CP] Embed Pods Frameworks */, + C5C08553712F34D14FA1C3FE /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -1547,26 +1543,6 @@ shellPath = /bin/sh; shellScript = ". ~/.nvm/nvm.sh\nexport EXTRA_PACKAGER_ARGS=\"--sourcemap-output $TMPDIR/$(md5 -qs \"$CONFIGURATION_BUILD_DIR\")-main.jsbundle.map\"\nexport NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; }; - 1AC60C112012F2EC4A83B6C6 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-frameworks.sh", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; 1E1EA8082326CCE300E22452 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1584,27 +1560,7 @@ shellPath = /bin/sh; shellScript = "echo \"Target architectures: $ARCHS\"\n\nAPP_PATH=\"${TARGET_BUILD_DIR}/${WRAPPER_NAME}\"\n\nfind \"$APP_PATH\" -name '*.framework' -type d | while read -r FRAMEWORK\ndo\nFRAMEWORK_EXECUTABLE_NAME=$(defaults read \"$FRAMEWORK/Info.plist\" CFBundleExecutable)\nFRAMEWORK_EXECUTABLE_PATH=\"$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME\"\necho \"Executable is $FRAMEWORK_EXECUTABLE_PATH\"\necho $(lipo -info \"$FRAMEWORK_EXECUTABLE_PATH\")\n\nFRAMEWORK_TMP_PATH=\"$FRAMEWORK_EXECUTABLE_PATH-tmp\"\n\n# remove simulator's archs if location is not simulator's directory\ncase \"${TARGET_BUILD_DIR}\" in\n*\"iphonesimulator\")\necho \"No need to remove archs\"\n;;\n*)\nif $(lipo \"$FRAMEWORK_EXECUTABLE_PATH\" -verify_arch \"i386\") ; then\nlipo -output \"$FRAMEWORK_TMP_PATH\" -remove \"i386\" \"$FRAMEWORK_EXECUTABLE_PATH\"\necho \"i386 architecture removed\"\nrm \"$FRAMEWORK_EXECUTABLE_PATH\"\nmv \"$FRAMEWORK_TMP_PATH\" \"$FRAMEWORK_EXECUTABLE_PATH\"\nfi\nif $(lipo \"$FRAMEWORK_EXECUTABLE_PATH\" -verify_arch \"x86_64\") ; then\nlipo -output \"$FRAMEWORK_TMP_PATH\" -remove \"x86_64\" \"$FRAMEWORK_EXECUTABLE_PATH\"\necho \"x86_64 architecture removed\"\nrm \"$FRAMEWORK_EXECUTABLE_PATH\"\nmv \"$FRAMEWORK_TMP_PATH\" \"$FRAMEWORK_EXECUTABLE_PATH\"\nfi\n;;\nesac\n\necho \"Completed for executable $FRAMEWORK_EXECUTABLE_PATH\"\necho $\n\ndone\n"; }; - 23F41C80BD65C4C2AC2DD624 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-frameworks.sh", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 2A96227A2025150C0D3A4736 /* [CP] Check Pods Manifest.lock */ = { + 28C6252E50C6D81291B0621E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1619,36 +1575,32 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-defaults-Rocket.Chat-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-defaults-RocketChatRN-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 39683630344A091B5F15ED5E /* [CP] Check Pods Manifest.lock */ = { + 407D3EDE3DABEE15D27BD87D /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-frameworks.sh", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-defaults-Rocket.Chat-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-defaults-NotificationService-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 40620FE6C682BABD00C2B4CB /* [CP] Check Pods Manifest.lock */ = { + 5131D72D372D40183A2ED0C0 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1670,25 +1622,26 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 407D3EDE3DABEE15D27BD87D /* ShellScript */ = { + 589729E8381BA997CD19EF19 /* [Expo] Configure project */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-frameworks.sh", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", + ); + name = "[Expo] Configure project"; + outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-defaults-NotificationService-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-defaults-RocketChatRN/expo-configure-project.sh\"\n"; }; - 589729E8381BA997CD19EF19 /* [Expo] Configure project */ = { + 6723DBD924B66933E14E7EF7 /* [Expo] Configure project */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; @@ -1705,26 +1658,27 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-defaults-RocketChatRN/expo-configure-project.sh\"\n"; + shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-defaults-Rocket.Chat/expo-configure-project.sh\"\n"; }; - 6723DBD924B66933E14E7EF7 /* [Expo] Configure project */ = { + 68D30C2C25C47050EF8445D4 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-frameworks.sh", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", ); - name = "[Expo] Configure project"; - outputFileListPaths = ( - ); + name = "[CP] Embed Pods Frameworks"; outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-defaults-Rocket.Chat/expo-configure-project.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; 7A10288726B1D15200E47EF8 /* Upload source maps to Bugsnag */ = { isa = PBXShellScriptBuildPhase; @@ -1734,7 +1688,7 @@ inputFileListPaths = ( ); inputPaths = ( - $TARGET_BUILD_DIR/$INFOPLIST_PATH, + "$TARGET_BUILD_DIR/$INFOPLIST_PATH", ); name = "Upload source maps to Bugsnag"; outputFileListPaths = ( @@ -1820,7 +1774,7 @@ inputFileListPaths = ( ); inputPaths = ( - $TARGET_BUILD_DIR/$INFOPLIST_PATH, + "$TARGET_BUILD_DIR/$INFOPLIST_PATH", ); name = "Upload source maps to Bugsnag"; outputFileListPaths = ( @@ -1831,6 +1785,28 @@ shellPath = /bin/sh; shellScript = "SOURCE_MAP=\"$TMPDIR/$(md5 -qs \"$CONFIGURATION_BUILD_DIR\")-main.jsbundle.map\" ../node_modules/@bugsnag/react-native/bugsnag-react-native-xcode.sh\n"; }; + 82BCD301AF1E0A999C9E4C05 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-defaults-Rocket.Chat-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 86A998705576AFA7CE938617 /* [Expo] Configure project */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -1850,7 +1826,83 @@ shellPath = /bin/sh; shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-defaults-NotificationService/expo-configure-project.sh\"\n"; }; - 9C104B12BEE385F7555E641F /* [CP] Copy Pods Resources */ = { + 959EC9F72A0BB7F1378F425D /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-defaults-NotificationService/Pods-defaults-NotificationService-resources.sh", + "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension/FirebaseCoreExtension_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal/FirebaseCoreInternal_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics/FirebaseCrashlytics_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations/FirebaseInstallations_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/PromisesSwift/Promises_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/RNDeviceInfo/RNDeviceInfoPrivacyInfo.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/QBImagePicker.bundle", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/RCTI18nStrings.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb_Privacy.bundle", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCore_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCoreExtension_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCoreInternal_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCrashlytics_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseInstallations_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleDataTransport_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleUtilities_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FBLPromises_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Promises_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNDeviceInfoPrivacyInfo.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/QBImagePicker.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCTI18nStrings.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/nanopb_Privacy.bundle", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-NotificationService/Pods-defaults-NotificationService-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 9C104B12BEE385F7555E641F /* [Expo] Configure project */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; @@ -1869,7 +1921,83 @@ shellPath = /bin/sh; shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-defaults-NotificationService/expo-configure-project.sh\"\n"; }; - C75CF748D7A3F20A3D92419B /* [CP] Copy Pods Resources */ = { + A612554BBF43398AE541FBA4 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-resources.sh", + "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension/FirebaseCoreExtension_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal/FirebaseCoreInternal_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics/FirebaseCrashlytics_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations/FirebaseInstallations_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/PromisesSwift/Promises_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/RNDeviceInfo/RNDeviceInfoPrivacyInfo.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/QBImagePicker.bundle", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf", + "${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/RCTI18nStrings.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb_Privacy.bundle", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCore_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCoreExtension_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCoreInternal_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseCrashlytics_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FirebaseInstallations_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleDataTransport_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleUtilities_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FBLPromises_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Promises_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNDeviceInfoPrivacyInfo.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/QBImagePicker.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCTI18nStrings.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/nanopb_Privacy.bundle", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + C5C08553712F34D14FA1C3FE /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -1945,7 +2073,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-resources.sh\"\n"; showEnvVarsInLog = 0; }; - D45499F74A147D677153BC90 /* [CP] Embed Pods Frameworks */ = { + CC37BA3991B9772464B8ED9C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -2340,7 +2468,7 @@ /* Begin XCBuildConfiguration section */ 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0E80084FB76F2BA00A43C5E0 /* Pods-defaults-RocketChatRN.debug.xcconfig */; + baseConfigurationReference = 39E7C5047F3B1754D345A5EF /* Pods-defaults-RocketChatRN.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; APPLICATION_EXTENSION_API_ONLY = NO; @@ -2401,7 +2529,7 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FF30665E726105A87EE37A8 /* Pods-defaults-RocketChatRN.release.xcconfig */; + baseConfigurationReference = 61327C39E221B850D55A0B50 /* Pods-defaults-RocketChatRN.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; APPLICATION_EXTENSION_API_ONLY = NO; @@ -2505,7 +2633,7 @@ "$(inherited)", "$(SRCROOT)/../node_modules/rn-extensions-share/ios/**", "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", - $PODS_CONFIGURATION_BUILD_DIR/Firebase, + "$PODS_CONFIGURATION_BUILD_DIR/Firebase", "$(SRCROOT)/../node_modules/react-native-mmkv-storage/ios/**", ); INFOPLIST_FILE = ShareRocketChatRN/Info.plist; @@ -2581,7 +2709,7 @@ "$(inherited)", "$(SRCROOT)/../node_modules/rn-extensions-share/ios/**", "$(SRCROOT)/../node_modules/react-native-firebase/ios/RNFirebase/**", - $PODS_CONFIGURATION_BUILD_DIR/Firebase, + "$PODS_CONFIGURATION_BUILD_DIR/Firebase", "$(SRCROOT)/../node_modules/react-native-mmkv-storage/ios/**", ); INFOPLIST_FILE = ShareRocketChatRN/Info.plist; @@ -2822,7 +2950,7 @@ }; 1EFEB59D2493B6640072EDC0 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7B2AF8CE5DAA2B9602655ECA /* Pods-defaults-NotificationService.debug.xcconfig */; + baseConfigurationReference = 9C118E16A92C887C0DE56F72 /* Pods-defaults-NotificationService.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(EMBEDDED_CONTENT_CONTAINS_SWIFT)"; CLANG_ANALYZER_NONNULL = YES; @@ -2864,7 +2992,7 @@ }; 1EFEB59E2493B6640072EDC0 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C1FFA2C4EDACA0718BB71F1C /* Pods-defaults-NotificationService.release.xcconfig */; + baseConfigurationReference = BC52370BEF49AC7F705038EF /* Pods-defaults-NotificationService.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(EMBEDDED_CONTENT_CONTAINS_SWIFT)"; CLANG_ANALYZER_NONNULL = YES; @@ -2907,7 +3035,7 @@ }; 7AAB3E50257E6A6E00707CF6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3A4ED61C8ED0D728A146E398 /* Pods-defaults-Rocket.Chat.debug.xcconfig */; + baseConfigurationReference = C932D116569A690F350F3C13 /* Pods-defaults-Rocket.Chat.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; APPLICATION_EXTENSION_API_ONLY = NO; @@ -2967,7 +3095,7 @@ }; 7AAB3E51257E6A6E00707CF6 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8F262B0EDDE35FABA5DAC31A /* Pods-defaults-Rocket.Chat.release.xcconfig */; + baseConfigurationReference = B40998752613948693A7FC34 /* Pods-defaults-Rocket.Chat.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; APPLICATION_EXTENSION_API_ONLY = NO; @@ -3088,7 +3216,10 @@ ONLY_ACTIVE_ARCH = YES; OTHER_CFLAGS = "$(inherited)"; OTHER_CPLUSPLUSFLAGS = "$(inherited)"; - OTHER_LDFLAGS = "$(inherited) "; + OTHER_LDFLAGS = ( + "$(inherited)", + " ", + ); REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; USE_HERMES = true; @@ -3151,7 +3282,10 @@ MTL_ENABLE_DEBUG_INFO = NO; OTHER_CFLAGS = "$(inherited)"; OTHER_CPLUSPLUSFLAGS = "$(inherited)"; - OTHER_LDFLAGS = "$(inherited) "; + OTHER_LDFLAGS = ( + "$(inherited)", + " ", + ); REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; diff --git a/package.json b/package.json index 396068c008..f890700fe7 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "@react-navigation/drawer": "6.6.2", "@react-navigation/elements": "1.3.17", "@react-navigation/native": "6.1.6", - "@react-navigation/stack": "6.3.16", + "@react-navigation/native-stack": "^6.9.26", "@rocket.chat/message-parser": "0.31.26", "@rocket.chat/sdk": "RocketChat/Rocket.Chat.js.SDK#mobile", "@rocket.chat/ui-kit": "0.31.19", diff --git a/yarn.lock b/yarn.lock index 37046652e7..afd1efe535 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3755,6 +3755,19 @@ resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-1.3.29.tgz#1dcbd95c319a8990d66e2aef8e108198d7a93cb2" integrity sha512-sMkqqQHlxdBxrBVw6E2a3LJjb9Hrb1ola8+zRgJn4Ox8iKtjqtWEdg349DPWU77VpIekcMLsqQvEtZox3XkXgA== +"@react-navigation/elements@^1.3.30": + version "1.3.30" + resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-1.3.30.tgz#a81371f599af1070b12014f05d6c09b1a611fd9a" + integrity sha512-plhc8UvCZs0UkV+sI+3bisIyn78wz9O/BiWZXpounu72k/R/Sj5PuZYFJ1fi6psvriUveMCGh4LeZckAZu2qiQ== + +"@react-navigation/native-stack@^6.9.26": + version "6.9.26" + resolved "https://registry.yarnpkg.com/@react-navigation/native-stack/-/native-stack-6.9.26.tgz#90facf7783c9927f094bc9f01c613af75b6c241e" + integrity sha512-++dueQ+FDj2XkZ902DVrK79ub1vp19nSdAZWxKRgd6+Bc0Niiesua6rMCqymYOVaYh+dagwkA9r00bpt/U5WLw== + dependencies: + "@react-navigation/elements" "^1.3.30" + warn-once "^0.1.0" + "@react-navigation/native@6.1.6": version "6.1.6" resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-6.1.6.tgz#84ff5cf85b91f660470fa9407c06c8ee393d5792" @@ -3772,15 +3785,6 @@ dependencies: nanoid "^3.1.23" -"@react-navigation/stack@6.3.16": - version "6.3.16" - resolved "https://registry.yarnpkg.com/@react-navigation/stack/-/stack-6.3.16.tgz#cf94e3c8c1587455515743e91d328beef722e0ab" - integrity sha512-KTOn9cNuZ6p154Htbl2DiR95Wl+c7niLPRiGs7gjOkyVDGiaGQF9ODNQTYBDE1OxZGHe/EyYc6T2CbmiItLWDg== - dependencies: - "@react-navigation/elements" "^1.3.17" - color "^4.2.3" - warn-once "^0.1.0" - "@redux-saga/core@^1.1.3": version "1.3.0" resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.3.0.tgz#2ce08b73d407fc6ea9e7f7d83d2e97d981a3a8b8" From f79f8f8bfb18f0e7304077cc20abe6001c512311 Mon Sep 17 00:00:00 2001 From: Yash Rajpal <58601732+yash-rajpal@users.noreply.github.com> Date: Thu, 17 Oct 2024 19:07:24 +0530 Subject: [PATCH 03/19] chore: Improve links readability (#5856) Co-authored-by: yash-rajpal Co-authored-by: Diego Mello --- app/containers/UserGeneratedContentRules.tsx | 37 +++--- app/i18n/locales/ar.json | 3 + app/i18n/locales/bn-IN.json | 3 + app/i18n/locales/cs.json | 3 + app/i18n/locales/de.json | 3 + app/i18n/locales/en.json | 3 + app/i18n/locales/es.json | 3 + app/i18n/locales/fi.json | 3 + app/i18n/locales/fr.json | 3 + app/i18n/locales/hi-IN.json | 3 + app/i18n/locales/hu.json | 3 + app/i18n/locales/it.json | 3 + app/i18n/locales/ja.json | 3 + app/i18n/locales/nl.json | 3 + app/i18n/locales/pt-BR.json | 3 + app/i18n/locales/pt-PT.json | 3 + app/i18n/locales/ru.json | 3 + app/i18n/locales/sl-SI.json | 3 + app/i18n/locales/sv.json | 3 + app/i18n/locales/ta-IN.json | 3 + app/i18n/locales/te-IN.json | 3 + app/i18n/locales/tr.json | 3 + app/i18n/locales/zh-CN.json | 3 + app/i18n/locales/zh-TW.json | 3 + app/views/LoginView/UserForm.tsx | 114 +++++++++---------- app/views/LoginView/styles.ts | 27 +++-- app/views/RegisterView.tsx | 33 +++--- 27 files changed, 166 insertions(+), 114 deletions(-) diff --git a/app/containers/UserGeneratedContentRules.tsx b/app/containers/UserGeneratedContentRules.tsx index 885d2a6fe5..4b1f53d508 100644 --- a/app/containers/UserGeneratedContentRules.tsx +++ b/app/containers/UserGeneratedContentRules.tsx @@ -15,14 +15,13 @@ const styles = StyleSheet.create({ marginHorizontal: 30 }, bottomContainerText: { - ...sharedStyles.textRegular, - fontSize: 13, + ...sharedStyles.textMedium, + fontSize: 14, + lineHeight: 22, textAlign: 'center' }, - bottomContainerTextBold: { - ...sharedStyles.textSemibold, - fontSize: 13, - textAlign: 'center' + bottomContainerTextUnderline: { + textDecorationLine: 'underline' } }); @@ -40,22 +39,16 @@ const UGCRules = ({ styleContainer }: { styleContainer?: ViewStyle }) => { }; return ( - - {`${I18n.t('Onboarding_agree_terms')}\n`} - openContract('terms-of-service')} - > - {I18n.t('Terms_of_Service')} - {' '} - {I18n.t('and')} - openContract('privacy-policy')} - > - {' '} - {I18n.t('Privacy_Policy')} - + {I18n.t('Onboarding_agree_terms')} + openContract('terms-of-service')}> + {I18n.t('Terms_of_Service')} + + openContract('privacy-policy')}> + {I18n.t('Privacy_Policy')} ); diff --git a/app/i18n/locales/ar.json b/app/i18n/locales/ar.json index 69252aec1b..9001e0c3e7 100644 --- a/app/i18n/locales/ar.json +++ b/app/i18n/locales/ar.json @@ -18,6 +18,7 @@ "All_users_in_the_channel_can_write_new_messages": "يمكن لجميع المستخدمين في القناة كتابة رسائل جديدة", "All_users_in_the_team_can_write_new_messages": "يمكن لجميع المستخدمين في الفريق كتابة رسائل جديدة", "Allow_Reactions": "السماح للتفاعلات", + "Already_have_an_account": "هل لديك حساب بالفعل؟", "and": "و", "and_N_more": "و{{count}} آخرين", "Announcement": "إعلان", @@ -162,6 +163,7 @@ "Forward_Chat": "إعادة توجيه المحادثة", "Forward_to_department": "إعادة توجيه للقسم", "Forward_to_user": "إعادة توجيه لمستخدم", + "Full_name": "الاسم الكامل", "Full_table": "انقر لرؤية الجدول كاملاً", "Generate_New_Link": "إنشاء رابط جديد", "Get_help": "احصل على المساعدة", @@ -484,6 +486,7 @@ "You_are_in_preview_mode": "أنت في وضع المعاينة", "You_can_search_using_RegExp_eg": "يمكنك استخدام RegExp. مثال: `/^text$/i`", "You_colon": "أنت: ", + "You_dont_have_account": "ليس لديك حساب؟", "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "تحتاج إلى الوصول إلى خادم Rocket.Chat واحد على الأقل لمشاركة شيء ما", "You_need_to_verifiy_your_email_address_to_get_notications": "يجب تأكيد البريد الإلكتروني حتى تصلك الإشعارات", "you_were_mentioned": "تمت الإشارة إليك", diff --git a/app/i18n/locales/bn-IN.json b/app/i18n/locales/bn-IN.json index bd3fda9693..e146e42e03 100644 --- a/app/i18n/locales/bn-IN.json +++ b/app/i18n/locales/bn-IN.json @@ -35,6 +35,7 @@ "All_users_in_the_channel_can_write_new_messages": "চ্যানেলে সকল ব্যবহারকারী নতুন মেসেজ লেখতে পারবে", "All_users_in_the_team_can_write_new_messages": "দলে সকল ব্যবহারকারী নতুন মেসেজ লেখতে পারবে", "Allow_Reactions": "প্রতিক্রিয়া অনুমতি", + "Already_have_an_account": "আপনার কি ইতিমধ্যেই একটি অ্যাকাউন্ট আছে?", "Also_send_thread_message_to_channel_behavior": "সেইমসঙ্গে চ্যানেলে থ্রেড বার্তা প্রেরণ করুন", "and": "এবং", "and_N_more": "এবং {{count}} আর", @@ -274,6 +275,7 @@ "Forward_message": "বার্তা প্রেরণ করুন", "Forward_to_department": "বিভাগে ফরোয়ার্ড", "Forward_to_user": "ব্যবহারকারীকে ফরোয়ার্ড", + "Full_name": "সম্পূর্ণ নাম", "Full_table": "পুরো টেবিল দেখতে ক্লিক করুন", "Generate_New_Link": "নতুন লিঙ্ক তৈরি করুন", "Get_help": "সাহায্য পান", @@ -750,6 +752,7 @@ "You_are_leaving_the_team": "আপনি দলটি ছেড়ে যাচ্ছেন '{{team}}'", "You_can_search_using_RegExp_eg": "আপনি RegExp ব্যবহার করতে পারেন। যেমন: `/^text$/i`", "You_colon": "আপনি: ", + "You_dont_have_account": "অ্যাকাউন্ট নেই?", "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "আপনাকে কিছু ভাগ করার জন্য কমপ্রয়োজন একটি Rocket.Chat ওয়ার্কস্পেসে অ্যাক্সেস করা।", "You_need_to_verifiy_your_email_address_to_get_notications": "আপনাকে বিজ্ঞপ্তিগুলি পেতে আপনার ইমেল ঠিকানা যাচাই করতে হবে", "you_were_mentioned": "আপনি উল্লেখ করা হয়েছিলেন", diff --git a/app/i18n/locales/cs.json b/app/i18n/locales/cs.json index a561550396..ac4bbae292 100644 --- a/app/i18n/locales/cs.json +++ b/app/i18n/locales/cs.json @@ -37,6 +37,7 @@ "All_users_in_the_team_can_write_new_messages": "Všichni uživatelé v týmu mohou psát nové zprávy", "Allow_push_notifications_for_rocket_chat": "Povolit oznámení push pro Rocket.Chat", "Allow_Reactions": "Povolit reakce", + "Already_have_an_account": "Už máte účet?", "Also_send_thread_message_to_channel_behavior": "Také odeslat zprávu vlákna na kanál", "and": "a", "and_N_more": "a {{count}} dalších", @@ -293,6 +294,7 @@ "Forward_message": "Přeposlat zprávu", "Forward_to_department": "Předat na oddělení", "Forward_to_user": "Přeposlat uživateli", + "Full_name": "Celé jméno", "Full_table": "Kliknutím zobrazíte celou tabulku", "Generate_New_Link": "Vygenerovat nový odkaz", "Get_help": "Získat pomoc", @@ -825,6 +827,7 @@ "You_are_leaving_the_team": "Opouštíte tým '{{team}}''", "You_can_search_using_RegExp_eg": "Můžete použít RegExp. např. `/^text$/i`", "You_colon": "Vy: ", + "You_dont_have_account": "Nemáte účet?", "You_dont_have_permission_to_perform_this_action": "Nemáte oprávnění k provedení této akce. Informujte se u správce pracovního prostoru.", "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "Abyste mohli něco sdílet, musíte mít přístup alespoň k jednomu pracovnímu prostoru Rocket.Chat.", "You_need_to_verifiy_your_email_address_to_get_notications": "Abyste mohli dostávat oznámení, musíte ověřit svou e-mailovou adresu", diff --git a/app/i18n/locales/de.json b/app/i18n/locales/de.json index dc565d4a07..6c3f7c88da 100644 --- a/app/i18n/locales/de.json +++ b/app/i18n/locales/de.json @@ -35,6 +35,7 @@ "All_users_in_the_channel_can_write_new_messages": "Alle Benutzer im Channel können neue Nachrichten schreiben", "All_users_in_the_team_can_write_new_messages": "Alle Mitglieder eines Teams können neue Nachrichten schreiben", "Allow_Reactions": "Reaktionen zulassen", + "Already_have_an_account": "Haben Sie bereits ein Konto?", "Also_send_thread_message_to_channel_behavior": "Die Nachricht auch an den Kanal senden", "and": "und", "and_N_more": "und {{count}} weitere", @@ -267,6 +268,7 @@ "Forward_Chat": "Chat weiterleiten", "Forward_to_department": "Weiterleiten an Abteilung", "Forward_to_user": "Weiterleiten an Benutzer", + "Full_name": "Vollständiger Name", "Full_table": "Klicken, um die ganze Tabelle anzuzeigen", "Generate_New_Link": "Neuen Link erstellen", "Get_help": "Hilfe holen", @@ -740,6 +742,7 @@ "You_are_leaving_the_team": "Sie verlassen das Team '{{team}}'", "You_can_search_using_RegExp_eg": "Sie können mit RegExp suchen. z.B. `/ ^ text $ / i`", "You_colon": "Sie: ", + "You_dont_have_account": "Haben Sie kein Konto?", "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "Sie benötigen Zugang zu mindestens einem Rocket.Chat-Server, um etwas zu teilen.", "You_need_to_verifiy_your_email_address_to_get_notications": "Sie müssen deine Email-Adresse bestätigen um Benachrichtigungen zu erhalten.", "you_were_mentioned": "Sie wurden erwähnt", diff --git a/app/i18n/locales/en.json b/app/i18n/locales/en.json index 95a36428d9..6640cfdd82 100644 --- a/app/i18n/locales/en.json +++ b/app/i18n/locales/en.json @@ -37,6 +37,7 @@ "All_users_in_the_team_can_write_new_messages": "All users in the team can write new messages", "Allow_push_notifications_for_rocket_chat": "Allow push notifications for Rocket.Chat", "Allow_Reactions": "Allow reactions", + "Already_have_an_account": "Already have an account?", "Also_send_thread_message_to_channel_behavior": "Also send thread message to channel", "and": "and", "and_N_more": "and {{count}} more", @@ -309,6 +310,7 @@ "Forward_message": "Forward message", "Forward_to_department": "Forward to department", "Forward_to_user": "Forward to user", + "Full_name": "Full name", "Full_table": "Click to see full table", "Generate_New_Link": "Generate new link", "Get_help": "Get help", @@ -845,6 +847,7 @@ "You_are_leaving_the_team": "You are leaving the team '{{team}}'", "You_can_search_using_RegExp_eg": "You can use RegExp. e.g. `/^text$/i`", "You_colon": "You: ", + "You_dont_have_account": "Don’t have an account?", "You_dont_have_permission_to_perform_this_action": "You don’t have permission to perform this action. Check with a workspace administrator.", "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "You need to access at least one Rocket.Chat workspace to share something.", "You_need_to_change_your_password": "You need to change your password", diff --git a/app/i18n/locales/es.json b/app/i18n/locales/es.json index e8f766c798..69de95d987 100644 --- a/app/i18n/locales/es.json +++ b/app/i18n/locales/es.json @@ -13,6 +13,7 @@ "All_Messages": "Todos los mensajes", "All_users_in_the_channel_can_write_new_messages": "Todos los usuarios en el canal pueden escribir mensajes", "Allow_Reactions": "Permitir reacciones", + "Already_have_an_account": "¿Ya tienes una cuenta?", "and": "y", "and_N_more": "y {{count}} más", "Announcement": "Anuncio", @@ -108,6 +109,7 @@ "For_your_security_you_must_enter_your_current_password_to_continue": "Por seguridad, debes introducir tu contraseña para continuar", "Forgot_password": "¿Ha olvidado su contraseña?", "Forgot_password_If_this_email_is_registered": "Si este email está registrado, te enviaremos las instrucciones para resetear tu contraseña. Si no recibes un email en breve, vuelve aquí e inténtalo de nuevo.", + "Full_name": "Nombre completo", "Full_table": "Click para ver la tabla completa", "Get_help": "Obtener ayuda", "Get_link": "Obtener enlace", @@ -300,6 +302,7 @@ "You_are_in_preview_mode": "Estás en modo vista previa", "You_can_search_using_RegExp_eg": "Puedes usar expresiones regulares. Por ejemplo, `/^text$/i`", "You_colon": "Tú: ", + "You_dont_have_account": "¿No tienes una cuenta?", "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "Necesita acceder al menos a un servidor Rocket.Chat para compartir algo.", "you_were_mentioned": "has sido mencionado", "You_will_not_be_able_to_recover_this_message": "¡No podrás recuperar este mensaje!", diff --git a/app/i18n/locales/fi.json b/app/i18n/locales/fi.json index 04210d90cf..3f0c4cf1b5 100644 --- a/app/i18n/locales/fi.json +++ b/app/i18n/locales/fi.json @@ -28,6 +28,7 @@ "All_users_in_the_channel_can_write_new_messages": "Kaikki kanavan käyttäjät voivat kirjoittaa uusia viestejä", "All_users_in_the_team_can_write_new_messages": "Kaikki tiimin käyttäjät voivat kirjoittaa uusia viestejä", "Allow_Reactions": "Salli reaktiot", + "Already_have_an_account": "Onko sinulla jo tili?", "Also_send_thread_message_to_channel_behavior": "Lähetä ketjun viesti myös kanavalle", "and": "ja", "and_N_more": "ja {{count}} lisää", @@ -252,6 +253,7 @@ "Forward_Chat": "Välitä keskustelu", "Forward_to_department": "Välitä osastolle", "Forward_to_user": "Välitä käyttäjälle", + "Full_name": "Koko nimi", "Full_table": "Näytä koko taulukko napsauttamalla", "Generate_New_Link": "Luo uusi linkki", "Get_help": "Hae apua", @@ -712,6 +714,7 @@ "You_are_leaving_the_team": "Poistut tiimistä {{team}}", "You_can_search_using_RegExp_eg": "Voit käyttää säännöllisiä lausekkeita, esim. `/^teksti$/i`", "You_colon": "Sinä:", + "You_dont_have_account": "Ei ole tiliä?", "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "Tarvitset pääsyn vähintään Rocket.Chat-palvelimeen jakamista varten.", "You_need_to_verifiy_your_email_address_to_get_notications": "Vahvista sähköpostiosoitteesi, jotta saat ilmoituksia", "you_were_mentioned": "sinut mainittiin", diff --git a/app/i18n/locales/fr.json b/app/i18n/locales/fr.json index 69c14e3545..76ec6856b7 100644 --- a/app/i18n/locales/fr.json +++ b/app/i18n/locales/fr.json @@ -21,6 +21,7 @@ "All_users_in_the_channel_can_write_new_messages": "Tous les utilisateurs du canal peuvent écrire de nouveaux messages", "All_users_in_the_team_can_write_new_messages": "Tous les utilisateurs de l'équipe peuvent écrire de nouveaux messages", "Allow_Reactions": "Autoriser les réactions", + "Already_have_an_account": "Vous avez déjà un compte ?", "and": "et", "and_N_more": "et {{count}} de plus", "Announcement": "Annonce", @@ -216,6 +217,7 @@ "Forward_Chat": "Transmettre la conversation", "Forward_to_department": "Transmettre au département", "Forward_to_user": "Transmettre à l'utilisateur", + "Full_name": "Nom complet", "Full_table": "Cliquez pour voir le tableau complet", "Generate_New_Link": "Générer un nouveau lien", "Get_help": "Obtenez de l'aide", @@ -631,6 +633,7 @@ "You_are_leaving_the_team": "Vous quittez l'équipe '{{team}}'", "You_can_search_using_RegExp_eg": "Vous pouvez utiliser RegExp., par exemple `/^texte$/i`", "You_colon": "Vous: ", + "You_dont_have_account": "Vous n'avez pas de compte ?", "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "Vous devez accéder à au moins un serveur Rocket.Chat pour partager quelque chose.", "You_need_to_verifiy_your_email_address_to_get_notications": "Vous devez vérifier votre adresse e-mail pour recevoir des notifications", "you_were_mentioned": "vous avez été mentionné", diff --git a/app/i18n/locales/hi-IN.json b/app/i18n/locales/hi-IN.json index 99ecdb2469..b716d939cd 100644 --- a/app/i18n/locales/hi-IN.json +++ b/app/i18n/locales/hi-IN.json @@ -35,6 +35,7 @@ "All_users_in_the_channel_can_write_new_messages": "चैनल में सभी उपयोगकर्ता नए संदेश लिख सकते हैं", "All_users_in_the_team_can_write_new_messages": "टीम में सभी उपयोगकर्ता नए संदेश लिख सकते हैं", "Allow_Reactions": "प्रतिक्रियाओं की अनुमति दें", + "Already_have_an_account": "क्या आपके पास पहले से एक खाता है?", "Also_send_thread_message_to_channel_behavior": "थ्रेड संदेश को चैनल में भी भेजें", "and": "और", "and_N_more": "और {{count}} और", @@ -274,6 +275,7 @@ "Forward_message": "संदेश आगे भेजें", "Forward_to_department": "विभाग को आगे बढ़ाएं", "Forward_to_user": "उपयोगकर्ता को आगे बढ़ाएं", + "Full_name": "पूरा नाम", "Full_table": "पूर्ण तालिका देखने के लिए क्लिक करें", "Generate_New_Link": "नई लिंक बनाएं", "Get_help": "सहायता प्राप्त करें", @@ -750,6 +752,7 @@ "You_are_leaving_the_team": "आप टीम '{{team}}' को छोड़ रहे हैं", "You_can_search_using_RegExp_eg": "आप विन्यास (RegExp) का उपयोग कर सकते हैं। उदा. `/^text$/i`", "You_colon": "आप: ", + "You_dont_have_account": "क्या आपके पास खाता नहीं है?", "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "आपको कुछ साझा करने के लिए कम से कम एक Rocket.Chat कार्यस्थान तक पहुँचना होगा।", "You_need_to_verifiy_your_email_address_to_get_notications": "आपको सूचनाएं प्राप्त करने के लिए अपनी ईमेल पता का सत्यापित करना होगा", "you_were_mentioned": "आपका उल्लेख किया गया था", diff --git a/app/i18n/locales/hu.json b/app/i18n/locales/hu.json index ff0c549126..11d56a4433 100644 --- a/app/i18n/locales/hu.json +++ b/app/i18n/locales/hu.json @@ -35,6 +35,7 @@ "All_users_in_the_channel_can_write_new_messages": "A csatorna minden felhasználója írhat új üzeneteket", "All_users_in_the_team_can_write_new_messages": "A csapat minden felhasználója írhat új üzeneteket", "Allow_Reactions": "Engedélyezze a reakciókat", + "Already_have_an_account": "Már van fiókja?", "Also_send_thread_message_to_channel_behavior": "Szál üzenetet is küld a csatornára", "and": "és", "and_N_more": "és{{count}} további", @@ -274,6 +275,7 @@ "Forward_message": "Üzenet továbbítása", "Forward_to_department": "Továbbítás a részlegnek", "Forward_to_user": "Továbbítás a felhasználónak", + "Full_name": "Teljes név", "Full_table": "Kattintson a teljes táblázat megtekintéséhez", "Generate_New_Link": "Új hivatkozás létrehozása", "Get_help": "Kérjen segítséget", @@ -752,6 +754,7 @@ "You_are_leaving_the_team": "Ön elhagyja ezt a csapatot {{team}}", "You_can_search_using_RegExp_eg": "Használhat RegExp-t. pl. `/^text$/i`", "You_colon": "Ön:", + "You_dont_have_account": "Nincs fiókja?", "You_dont_have_permission_to_perform_this_action": "Nincs jogosultsága a művelet végrehajtásához. Kérdezze meg a munkaterület rendszergazdáját.", "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "Legalább egy Rocket.Chat munkaterülethez hozzá kell férnie ahhoz, hogy megoszthasson valamit.", "You_need_to_verifiy_your_email_address_to_get_notications": "Ellenőriznie kell az e-mail-címét az értesítések fogadásához", diff --git a/app/i18n/locales/it.json b/app/i18n/locales/it.json index 5b6f54fd8c..32606d26ce 100644 --- a/app/i18n/locales/it.json +++ b/app/i18n/locales/it.json @@ -22,6 +22,7 @@ "All_users_in_the_channel_can_write_new_messages": "Tutti gli utenti nel canale possono scrivere messaggi", "All_users_in_the_team_can_write_new_messages": "Tutti gli utenti nel team possono scrivere nuovi messaggi", "Allow_Reactions": "Permetti reazioni", + "Already_have_an_account": "Hai già un account?", "and": "e", "and_N_more": "e altri {{count}}", "Announcement": "Annuncio", @@ -189,6 +190,7 @@ "Forward_Chat": "Inoltra Chat", "Forward_to_department": "Inoltra a dipartimento", "Forward_to_user": "Inoltra ad udente", + "Full_name": "Nome completo", "Full_table": "Clicca per la tabella completa", "Generate_New_Link": "Genera nuovo link", "Get_help": "Ottieni aiuto", @@ -534,6 +536,7 @@ "You_are_in_preview_mode": "Sei in modalità anteprima", "You_can_search_using_RegExp_eg": "Puoi usare espressioni regolari. es. `/^testo$/i`", "You_colon": "Tu: ", + "You_dont_have_account": "Non hai un account?", "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "Devi accedere ad almeno un server Rocket.Chat prima di condividere qualcosa.", "You_need_to_verifiy_your_email_address_to_get_notications": "Devi verificare il tuo indirizzo e-mail per ricevere le notifiche", "you_were_mentioned": "sei stato menzionato", diff --git a/app/i18n/locales/ja.json b/app/i18n/locales/ja.json index c510d13697..0899635cf2 100644 --- a/app/i18n/locales/ja.json +++ b/app/i18n/locales/ja.json @@ -17,6 +17,7 @@ "All_users_in_the_channel_can_write_new_messages": "すべてのユーザーが新しいメッセージを書き込みできます", "All_users_in_the_team_can_write_new_messages": "チームのすべてのユーザーが新しいメッセージを書き込むことができます", "Allow_Reactions": "リアクションを許可", + "Already_have_an_account": "すでにアカウントをお持ちですか?", "and": "と", "and_N_more": "さらに{{count}}つ", "Announcement": "アナウンス", @@ -162,6 +163,7 @@ "Forward_Chat": "チャットを転送する", "Forward_to_department": "部署に転送する", "Forward_to_user": "ユーザーに転送する", + "Full_name": "フルネーム", "Full_table": "クリックしてテーブル全体を見る", "Generate_New_Link": "新しいリンクを生成", "Get_help": "ヘルプを得る", @@ -406,6 +408,7 @@ "You_are_in_preview_mode": "プレビューモードです。", "You_can_search_using_RegExp_eg": "正規表現を利用できます。 例: `/^text$/i`", "You_colon": "あなた: ", + "You_dont_have_account": "アカウントをお持ちでないですか?", "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "シェアするためには1つ以上のサーバーにアクセスする必要があります。", "you_were_mentioned": "あなたがメンションしました", "You_will_be_logged_out_of_this_application": "アプリからログアウトします。", diff --git a/app/i18n/locales/nl.json b/app/i18n/locales/nl.json index b44e2b70a5..5c3114930d 100644 --- a/app/i18n/locales/nl.json +++ b/app/i18n/locales/nl.json @@ -21,6 +21,7 @@ "All_users_in_the_channel_can_write_new_messages": "Alle gebruikers in het kanaal kunnen nieuwe berichten schrijven", "All_users_in_the_team_can_write_new_messages": "Alle gebruikers in het team kunnen nieuwe berichten schrijven", "Allow_Reactions": "Reacties toestaan", + "Already_have_an_account": "Heeft u al een account?", "and": "en", "and_N_more": "en nog {{count}}", "Announcement": "Aankondiging", @@ -216,6 +217,7 @@ "Forward_Chat": "Chat doorsturen", "Forward_to_department": "Doorsturen naar afdeling", "Forward_to_user": "Doorsturen naar gebruiker", + "Full_name": "Volledige naam", "Full_table": "Klik om de volledige tabel te zien", "Generate_New_Link": "Nieuwe link genereren", "Get_help": "Hulp krijgen", @@ -631,6 +633,7 @@ "You_are_leaving_the_team": "Je verlaat het team '{{team}}'", "You_can_search_using_RegExp_eg": "Je kan RegExp. gebruiken, bijv. `/^tekst$/i`", "You_colon": "Jij: ", + "You_dont_have_account": "Heeft u geen account?", "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "Je moet minstens toegang hebben tot één Rocket.Chat-server om iets te delen.", "You_need_to_verifiy_your_email_address_to_get_notications": "Je moet je e-mailadres verifiëren om meldingen te ontvangen", "you_were_mentioned": "je bent vermeld", diff --git a/app/i18n/locales/pt-BR.json b/app/i18n/locales/pt-BR.json index da40be94f7..ee8f2ef230 100644 --- a/app/i18n/locales/pt-BR.json +++ b/app/i18n/locales/pt-BR.json @@ -36,6 +36,7 @@ "All_users_in_the_team_can_write_new_messages": "Todos usuários no canal podem enviar mensagens novas", "Allow_push_notifications_for_rocket_chat": "Permitir notificações push para Rocket.Chat", "Allow_Reactions": "Permitir reagir", + "Already_have_an_account": "Já tem uma conta?", "Also_send_thread_message_to_channel_behavior": "Também enviar mensagem do tópico para o canal", "and": "e", "and_N_more": "e mais {{count}}", @@ -304,6 +305,7 @@ "Forward_message": "Encaminhar mensagem", "Forward_to_department": "Encaminhar para departamento", "Forward_to_user": "Encaminhar para usuário", + "Full_name": "Nome completo", "Full_table": "Clique para ver a tabela completa", "Generate_New_Link": "Gerar novo convite", "Get_help": "Obter ajuda", @@ -834,6 +836,7 @@ "You_are_leaving_the_team": "Você está deixando o time '{{team}}'", "You_can_search_using_RegExp_eg": "Você pode usar expressões regulares, por exemplo `/^text$/i`", "You_colon": "Você: ", + "You_dont_have_account": "Você não tem uma conta?", "You_dont_have_permission_to_perform_this_action": "Você não tem permissão para realizar esta ação. Verifique com um administrador do espaço de trabalho.", "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "Você precisa acessar pelo menos uma workspace Rocket.Chat para compartilhar.", "You_need_to_change_your_password": "Você precisa alterar sua senha", diff --git a/app/i18n/locales/pt-PT.json b/app/i18n/locales/pt-PT.json index 4c61335d44..b3d1f99c40 100644 --- a/app/i18n/locales/pt-PT.json +++ b/app/i18n/locales/pt-PT.json @@ -16,6 +16,7 @@ "All_users_in_the_channel_can_write_new_messages": "Todos os utilizadores no canal podem escrever novas mensagens", "All_users_in_the_team_can_write_new_messages": "Todos os usuários da equipa podem escrever novas mensagens", "Allow_Reactions": "Permitir Reacções", + "Already_have_an_account": "Já tem uma conta?", "and": "e", "and_N_more": "e mais {{count}}", "Announcement": "Anúncio", @@ -157,6 +158,7 @@ "Forward_Chat": "Reencaminhar Chat", "Forward_to_department": "Reencaminhar para o departamento", "Forward_to_user": "Reencaminhar para o utilizador", + "Full_name": "Nome completo", "Full_table": "Clique para ver a tabela completa", "Generate_New_Link": "Gerar Novo Link", "Get_help": "Obter ajuda", @@ -375,6 +377,7 @@ "You_are_in_preview_mode": "Você está no modo de pré-visualização", "You_can_search_using_RegExp_eg": "Você pode pesquisar usando RegEx. por exemplo, `/^text$/i`", "You_colon": "Você: ", + "You_dont_have_account": "Não tem uma conta?", "you_were_mentioned": "você foi mencionado", "You_will_not_be_able_to_recover_this_message": "Você será incapaz de recuperar esta mensagem!" } \ No newline at end of file diff --git a/app/i18n/locales/ru.json b/app/i18n/locales/ru.json index 94f2015dcb..8b99e085dd 100644 --- a/app/i18n/locales/ru.json +++ b/app/i18n/locales/ru.json @@ -26,6 +26,7 @@ "All_users_in_the_channel_can_write_new_messages": "Все пользователи канала могут писать новые сообщения", "All_users_in_the_team_can_write_new_messages": "Все пользователи в Команде могут писать новые сообщения", "Allow_Reactions": "Разрешить реакции", + "Already_have_an_account": "Уже есть аккаунт?", "Also_send_thread_message_to_channel_behavior": "Также отправить в чат", "and": "и", "and_N_more": "и еще {{count}}", @@ -242,6 +243,7 @@ "Forward_Chat": "Перенаправить Чат", "Forward_to_department": "Перенаправить в отдел", "Forward_to_user": "Перенаправить пользователю", + "Full_name": "Полное имя", "Full_table": "Нажмите, чтобы увидеть полную таблицу", "Generate_New_Link": "Сгенерировать Новую Ссылку", "Get_help": "Получить помощь", @@ -680,6 +682,7 @@ "You_are_leaving_the_team": "Вы покидаете Команду '{{team}}'", "You_can_search_using_RegExp_eg": "Вы можете выполнить поиск с помощью регулярных выражений, например `/^text$/i`", "You_colon": "Вы: ", + "You_dont_have_account": "У вас нет аккаунта?", "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "Вам нужно получить доступ как минимум к одному серверу Rocket.Chat, чтобы поделиться чем-то.", "You_need_to_verifiy_your_email_address_to_get_notications": "Вам необходимо проверить ваш email адрес, чтобы получать уведомления", "you_were_mentioned": "вы были упомянуты", diff --git a/app/i18n/locales/sl-SI.json b/app/i18n/locales/sl-SI.json index 94b6959bb4..6b9ae87530 100644 --- a/app/i18n/locales/sl-SI.json +++ b/app/i18n/locales/sl-SI.json @@ -25,6 +25,7 @@ "All_users_in_the_channel_can_write_new_messages": "Vsi uporabniki v kanalu lahko napišejo nova sporočila", "All_users_in_the_team_can_write_new_messages": "Vsi uporabniki v kanalu lahko napišejo nova sporočila", "Allow_Reactions": "Dovolite reakcijo", + "Already_have_an_account": "Imate že račun?", "and": "in", "and_N_more": "in še {{count}}", "Announcement": "Obvestilo", @@ -227,6 +228,7 @@ "Forward_Chat": "Napredni klepet", "Forward_to_department": "Posreduj na oddelek", "Forward_to_user": "Posreduj uporabniku", + "Full_name": "Polno ime", "Full_table": "Kliknite za ogled celotne tabele", "Generate_New_Link": "Ustvari novo povezavo", "Get_help": "Pridobite pomoč", @@ -646,6 +648,7 @@ "You_are_leaving_the_team": "Zapuščate ekipo '{{team}}'", "You_can_search_using_RegExp_eg": "Lahko iščete s pomočjo RegExp. npr. `/^text$/i`", "You_colon": "Vi:", + "You_dont_have_account": "Nimate računa?", "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "Če želite nekaj deliti, morate dostopati do vsaj enega strežnika Rocket.Chat.", "You_need_to_verifiy_your_email_address_to_get_notications": "Če želite prejemati obvestila, potrdite svoj e-poštni naslov", "you_were_mentioned": "Bili ste omenjeni", diff --git a/app/i18n/locales/sv.json b/app/i18n/locales/sv.json index 38acee28f1..84c58f0c33 100644 --- a/app/i18n/locales/sv.json +++ b/app/i18n/locales/sv.json @@ -28,6 +28,7 @@ "All_users_in_the_channel_can_write_new_messages": "Alla användare i kanalen kan skriva nya meddelanden", "All_users_in_the_team_can_write_new_messages": "Alla användare i teamet kan skriva nya meddelanden", "Allow_Reactions": "Tillåt reaktioner", + "Already_have_an_account": "Har du redan ett konto?", "Also_send_thread_message_to_channel_behavior": "Skicka även trådmeddelande till kanalen", "and": "och", "and_N_more": "och ytterligare {{count}}", @@ -251,6 +252,7 @@ "Forward_Chat": "Vidarebefordra chatt", "Forward_to_department": "Vidarebefordra till avdelning", "Forward_to_user": "Vidarebefordra till användare", + "Full_name": "Fullständigt namn", "Full_table": "Klicka för att visa hela tabellen", "Generate_New_Link": "Generera ny länk", "Get_help": "Få hjälp", @@ -710,6 +712,7 @@ "You_are_leaving_the_team": "Du lämnar teamet {{team}}", "You_can_search_using_RegExp_eg": "Du kan använda reguljära uttryck, till exempel /^text$/i", "You_colon": "Du:", + "You_dont_have_account": "Har du inget konto?", "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "Du behöver åtkomst till åtminstone en Rocket.Chat-server för att kunna dela.", "You_need_to_verifiy_your_email_address_to_get_notications": "Du måste bekräfta din e-postadress för att få meddelanden", "you_were_mentioned": "du nämndes", diff --git a/app/i18n/locales/ta-IN.json b/app/i18n/locales/ta-IN.json index 9c115a4790..648e61379e 100644 --- a/app/i18n/locales/ta-IN.json +++ b/app/i18n/locales/ta-IN.json @@ -35,6 +35,7 @@ "All_users_in_the_channel_can_write_new_messages": "சேனலில் உள்ள அனைத்து பயனாளர்களும் புதிய செய்திகளையும் எழுதலாம்", "All_users_in_the_team_can_write_new_messages": "குழுவில் உள்ள அனைத்து பயனாளர்களும் புதிய செய்திகளையும் எழுதலாம்", "Allow_Reactions": "பின்னால் பதில் செய்துள்ளலை அனுமதி கொண்டுள்ளது", + "Already_have_an_account": "ஊருக்குள் உங்கள் கணக்கு இருக்கிறதா?", "Also_send_thread_message_to_channel_behavior": "உறுதிப்படுத்த செய்தி சேனலுக்கும் அனுப்புவது", "and": "மற்றும்", "and_N_more": "மற்றும் {{count}} க்கும் மேல்", @@ -274,6 +275,7 @@ "Forward_message": "சென்றுகொள் செய்தி", "Forward_to_department": "பிரிவுக்கு முன்னேற்று", "Forward_to_user": "பயனருக்கு முன்னேற்று", + "Full_name": "முழு பெயர்", "Full_table": "முழு அட்டவணையைக் காண கிளிக் செய்க", "Generate_New_Link": "புதிய இணைப்பை உருவாக்கு", "Get_help": "உதவி பெறுங்கள்", @@ -750,6 +752,7 @@ "You_are_leaving_the_team": "நீங்கள் குழுவினை விடுகின்றீர்கள் '{{team}}'", "You_can_search_using_RegExp_eg": "RegExp ஐப் பயன்படுத்தவும். உதாரணமாக `/^text$/i`", "You_colon": "நீங்கள்: ", + "You_dont_have_account": "உங்களிடம் கணக்கு இல்லை என்றா?", "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "ஏதேனும் பகிர்ந்து கொள்ள உங்களுக்கு குறைந்தது ஒரு Rocket.Chat பணியோடு கொண்டுள்ளது.", "You_need_to_verifiy_your_email_address_to_get_notications": "அறிவித்திருக்கும் உங்களுக்கு மின்னஞ்சல் முகவரியை சரிபார்க்க நீங்கள் உறுதிபடுத்த வேண்டும்", "you_were_mentioned": "உங்களுக்கு குறிக்கப்பட்டார்", diff --git a/app/i18n/locales/te-IN.json b/app/i18n/locales/te-IN.json index 853d2d21e7..44a2c5f47f 100644 --- a/app/i18n/locales/te-IN.json +++ b/app/i18n/locales/te-IN.json @@ -35,6 +35,7 @@ "All_users_in_the_channel_can_write_new_messages": "చానల్లో ఉన్న అన్ని వాడుకలు కొత్త సందేశాలను రాయగలరు", "All_users_in_the_team_can_write_new_messages": "జట్టులో ఉన్న అన్ని వాడుకలు కొత్త సందేశాలను రాయగలరు", "Allow_Reactions": "ప్రతిక్రియలను అనుమతించండి", + "Already_have_an_account": "మీకు ఇప్పటికే ఖాతా ఉందా?", "Also_send_thread_message_to_channel_behavior": "చానల్‌కు థ్రెడ్ సందేశాన్ని కూడా పంపండి", "and": "మరియు", "and_N_more": "మరింత {{count}}", @@ -274,6 +275,7 @@ "Forward_message": "సందేశాన్ని ముందుకు పంపు", "Forward_to_department": "శాఖకు అగ్రగామించండి", "Forward_to_user": "వాడికి అగ్రగామించండి", + "Full_name": "పూర్తి పేరు", "Full_table": "పూర్తి పటం చూడండి కొరకు క్లిక్ చేయండి", "Generate_New_Link": "కొత్త లింక్‌ను రూపొందించండి", "Get_help": "సహాయం పొందండి", @@ -750,6 +752,7 @@ "You_are_leaving_the_team": "మీరు టీమ్ '{{team}}' ను విడిచిపోతున్నారు", "You_can_search_using_RegExp_eg": "మీరు RegExp ఉపయోగించవచ్చు. ఉదా. `/^text$/i`", "You_colon": "మీరు: ", + "You_dont_have_account": "మీ వద్ద ఖాతా లేదు?", "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "ఏదిగానా ఏక Rocket.Chat వర్క్‌స్పేస్‌కి ప్రవేశించాలి కాబట్టి ఏదైనా షేర్ చేయడానికి.", "You_need_to_verifiy_your_email_address_to_get_notications": "నోటిఫికేషన్‌లు పొందడానికి మీ ఇమెయిల్ చిరునామాని ధ్యానలోకి పెంచాలి", "you_were_mentioned": "మీరు పేర్కొనబడింది", diff --git a/app/i18n/locales/tr.json b/app/i18n/locales/tr.json index e7c446590a..8b11909a13 100644 --- a/app/i18n/locales/tr.json +++ b/app/i18n/locales/tr.json @@ -17,6 +17,7 @@ "All_Messages": "Tüm İletiler", "All_users_in_the_channel_can_write_new_messages": "Kanaldaki tüm kullanıcılar yeni ileti yazabilir!", "Allow_Reactions": "Tüm Tepkiler", + "Already_have_an_account": "Zaten bir hesabınız var mı?", "and": "ve", "and_N_more": "ve {{count}} daha", "Announcement": "Duyuru", @@ -176,6 +177,7 @@ "Forward_Chat": "Sohbete İlet", "Forward_to_department": "Bölüme İlet", "Forward_to_user": "Kullanıcıya İlet", + "Full_name": "Tam ad", "Full_table": "Tam tabloyu görmek için tıklayın", "Generate_New_Link": "Yeni Bağlantı Oluştur", "Get_help": "Yardım alın", @@ -517,6 +519,7 @@ "You_are_in_preview_mode": "İzleme modundasınız", "You_can_search_using_RegExp_eg": "Düzenli ifadeleri (Regular Expressions) kullanabilirsiniz. Örneğin: `/^text$/i`", "You_colon": "Siz: ", + "You_dont_have_account": "Hesabınız yok mu?", "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "Bir şeyler paylaşmak için Rocket.Chat sunucusuna erişmeniz gerekir.", "You_need_to_verifiy_your_email_address_to_get_notications": "Bildirim almak için e-posta adresinizi doğrulamanız gerekiyor", "you_were_mentioned": "senden bahsedildi", diff --git a/app/i18n/locales/zh-CN.json b/app/i18n/locales/zh-CN.json index b79a5d164c..4ebc8fc5e3 100644 --- a/app/i18n/locales/zh-CN.json +++ b/app/i18n/locales/zh-CN.json @@ -17,6 +17,7 @@ "All_Messages": "全部信息", "All_users_in_the_channel_can_write_new_messages": "频道中的所有用户都可以发送新信息", "Allow_Reactions": "允许表情贴", + "Already_have_an_account": "已经有账户了吗", "and": "和", "and_N_more": "另外{{count}}个", "Announcement": "公告", @@ -171,6 +172,7 @@ "Forward_Chat": "转发聊天", "Forward_to_department": "转发到部门", "Forward_to_user": "转发给用戶", + "Full_name": "全名", "Full_table": "点击以查看完整表格", "Generate_New_Link": "产生新的链接", "Get_help": "获取帮助", @@ -475,6 +477,7 @@ "You_are_in_preview_mode": "您处于预览模式", "You_can_search_using_RegExp_eg": "您可用 RegExp 进行搜索。 例如`/^text$/i`", "You_colon": "你:", + "You_dont_have_account": "没有账户?", "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "您需要访问至少一台Rocket.Chat服务器才能共享某些内容。", "You_need_to_verifiy_your_email_address_to_get_notications": "您需要先验证您的邮箱以启用通知", "you_were_mentioned": "你被提到了", diff --git a/app/i18n/locales/zh-TW.json b/app/i18n/locales/zh-TW.json index 821d1c669d..98b5a9d72b 100644 --- a/app/i18n/locales/zh-TW.json +++ b/app/i18n/locales/zh-TW.json @@ -17,6 +17,7 @@ "All_Messages": "全部訊息", "All_users_in_the_channel_can_write_new_messages": "頻道中的所有使用者都可以發送新訊息", "Allow_Reactions": "允許表情貼", + "Already_have_an_account": "已經有帳戶了嗎?", "and": "和", "and_N_more": "另外{{count}}個", "Announcement": "公告", @@ -179,6 +180,7 @@ "Forward_Chat": "轉發聊天", "Forward_to_department": "轉發到部門", "Forward_to_user": "轉發給使用者", + "Full_name": "全名", "Full_table": "點擊以查看完整表格", "Generate_New_Link": "產生新的連結", "Get_help": "獲取幫助", @@ -504,6 +506,7 @@ "You_are_in_preview_mode": "您處於預覽模式", "You_can_search_using_RegExp_eg": "您可用 RegExp 進行搜尋。例如`/^text$/i`", "You_colon": "你:", + "You_dont_have_account": "沒有帳戶?", "You_need_to_access_at_least_one_RocketChat_server_to_share_something": "您需要至少連接一個 Rocket.Chat 伺服器才能共享某些内容。", "You_need_to_verifiy_your_email_address_to_get_notications": "您需要先驗證您的電子郵件以啟用通知", "you_were_mentioned": "你被提到了", diff --git a/app/views/LoginView/UserForm.tsx b/app/views/LoginView/UserForm.tsx index 79cb596567..84774fa0f8 100644 --- a/app/views/LoginView/UserForm.tsx +++ b/app/views/LoginView/UserForm.tsx @@ -103,67 +103,65 @@ const UserForm = () => { return ( <> {I18n.t('Login')} - setFocus('password')} - testID='login-view-email' - textContentType='username' - autoComplete='username' - /> - -