Merge 4.32.0 into single-server
This commit is contained in:
commit
1548c15356
|
@ -6,11 +6,13 @@ import RNBootSplash from 'react-native-bootsplash';
|
||||||
import { selectServerRequest } from '../app/actions/server';
|
import { selectServerRequest } from '../app/actions/server';
|
||||||
import { mockedStore as store } from '../app/reducers/mockedStore';
|
import { mockedStore as store } from '../app/reducers/mockedStore';
|
||||||
import database from '../app/lib/database';
|
import database from '../app/lib/database';
|
||||||
|
import { setUser } from '../app/actions/login';
|
||||||
|
|
||||||
RNBootSplash.hide();
|
RNBootSplash.hide();
|
||||||
|
|
||||||
const baseUrl = 'https://open.rocket.chat';
|
const baseUrl = 'https://open.rocket.chat';
|
||||||
store.dispatch(selectServerRequest(baseUrl));
|
store.dispatch(selectServerRequest(baseUrl));
|
||||||
|
store.dispatch(setUser({ id: 'abc', username: 'rocket.cat', name: 'Rocket Cat' }));
|
||||||
database.setActiveDB(baseUrl);
|
database.setActiveDB(baseUrl);
|
||||||
|
|
||||||
const StorybookUIRoot = getStorybookUI({});
|
const StorybookUIRoot = getStorybookUI({});
|
||||||
|
|
|
@ -30,6 +30,7 @@ const getStories = () => {
|
||||||
require("../app/containers/markdown/new/NewMarkdown.stories.tsx"),
|
require("../app/containers/markdown/new/NewMarkdown.stories.tsx"),
|
||||||
require("../app/containers/message/Components/CollapsibleQuote/CollapsibleQuote.stories.tsx"),
|
require("../app/containers/message/Components/CollapsibleQuote/CollapsibleQuote.stories.tsx"),
|
||||||
require("../app/containers/message/Message.stories.tsx"),
|
require("../app/containers/message/Message.stories.tsx"),
|
||||||
|
require("../app/containers/ReactionsList/ReactionsList.stories.tsx"),
|
||||||
require("../app/containers/RoomHeader/RoomHeader.stories.tsx"),
|
require("../app/containers/RoomHeader/RoomHeader.stories.tsx"),
|
||||||
require("../app/containers/RoomItem/RoomItem.stories.tsx"),
|
require("../app/containers/RoomItem/RoomItem.stories.tsx"),
|
||||||
require("../app/containers/SearchBox/SearchBox.stories.tsx"),
|
require("../app/containers/SearchBox/SearchBox.stories.tsx"),
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -147,7 +147,7 @@ android {
|
||||||
minSdkVersion rootProject.ext.minSdkVersion
|
minSdkVersion rootProject.ext.minSdkVersion
|
||||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||||
versionCode VERSIONCODE as Integer
|
versionCode VERSIONCODE as Integer
|
||||||
versionName "4.31.0"
|
versionName "4.32.0"
|
||||||
vectorDrawables.useSupportLibrary = true
|
vectorDrawables.useSupportLibrary = true
|
||||||
if (!isFoss) {
|
if (!isFoss) {
|
||||||
manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String]
|
manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String]
|
||||||
|
@ -351,6 +351,7 @@ android {
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation project(':@react-native-community_viewpager')
|
implementation project(':@react-native-community_viewpager')
|
||||||
|
implementation "androidx.core:core-splashscreen:1.0.0"
|
||||||
playImplementation project(':react-native-notifications')
|
playImplementation project(':react-native-notifications')
|
||||||
playImplementation 'com.google.firebase:firebase-core:16.0.0'
|
playImplementation 'com.google.firebase:firebase-core:16.0.0'
|
||||||
playImplementation project(':@react-native-firebase_app')
|
playImplementation project(':@react-native-firebase_app')
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 22 KiB |
|
@ -13,17 +13,8 @@
|
||||||
android:networkSecurityConfig="@xml/network_security_config"
|
android:networkSecurityConfig="@xml/network_security_config"
|
||||||
android:requestLegacyExternalStorage="true"
|
android:requestLegacyExternalStorage="true"
|
||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:theme="@style/AppTheme"
|
|
||||||
tools:replace="android:allowBackup">
|
|
||||||
<activity
|
|
||||||
android:name="com.zoontek.rnbootsplash.RNBootSplashActivity"
|
|
||||||
android:theme="@style/BootTheme"
|
android:theme="@style/BootTheme"
|
||||||
android:exported="true">
|
tools:replace="android:allowBackup">
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<activity
|
<activity
|
||||||
android:name="chat.rocket.reactnative.MainActivity"
|
android:name="chat.rocket.reactnative.MainActivity"
|
||||||
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
|
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
|
||||||
|
@ -56,6 +47,10 @@
|
||||||
android:host="jitsi.rocket.chat"
|
android:host="jitsi.rocket.chat"
|
||||||
android:scheme="rocketchat" />
|
android:scheme="rocketchat" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
<activity
|
||||||
android:name="chat.rocket.reactnative.share.ShareActivity"
|
android:name="chat.rocket.reactnative.share.ShareActivity"
|
||||||
|
@ -63,7 +58,7 @@
|
||||||
android:label="@string/share_extension_name"
|
android:label="@string/share_extension_name"
|
||||||
android:noHistory="true"
|
android:noHistory="true"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="portrait"
|
||||||
android:theme="@style/AppTheme"
|
android:theme="@style/ShareTheme"
|
||||||
android:exported="true">
|
android:exported="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.SEND" />
|
<action android:name="android.intent.action.SEND" />
|
||||||
|
|
|
@ -1,24 +1,23 @@
|
||||||
package chat.rocket.reactnative;
|
package chat.rocket.reactnative;
|
||||||
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
|
import android.os.Bundle;
|
||||||
|
|
||||||
import com.facebook.react.ReactRootView;
|
|
||||||
import com.facebook.react.ReactActivityDelegate;
|
|
||||||
import com.facebook.react.ReactActivity;
|
import com.facebook.react.ReactActivity;
|
||||||
|
import com.facebook.react.ReactActivityDelegate;
|
||||||
|
import com.facebook.react.ReactRootView;
|
||||||
|
import com.zoontek.rnbootsplash.RNBootSplash;
|
||||||
|
|
||||||
import expo.modules.ReactActivityDelegateWrapper;
|
import expo.modules.ReactActivityDelegateWrapper;
|
||||||
|
|
||||||
import com.zoontek.rnbootsplash.RNBootSplash;
|
|
||||||
|
|
||||||
public class MainActivity extends ReactActivity {
|
public class MainActivity extends ReactActivity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
RNBootSplash.init(this);
|
||||||
// https://github.com/software-mansion/react-native-screens/issues/17#issuecomment-424704067
|
// https://github.com/software-mansion/react-native-screens/issues/17#issuecomment-424704067
|
||||||
super.onCreate(null);
|
super.onCreate(null);
|
||||||
RNBootSplash.init(R.drawable.launch_screen, MainActivity.this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
package chat.rocket.reactnative.share;
|
package chat.rocket.reactnative.share;
|
||||||
|
|
||||||
import com.facebook.react.ReactActivity;
|
import com.facebook.react.ReactActivity;
|
||||||
import com.facebook.react.ReactActivityDelegate;
|
|
||||||
import com.facebook.react.ReactRootView;
|
|
||||||
|
|
||||||
public class ShareActivity extends ReactActivity {
|
public class ShareActivity extends ReactActivity {
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
|
|
||||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">
|
|
||||||
<!-- the background color. it can be a system color or a custom one defined in colors.xml -->
|
|
||||||
<item android:drawable="@color/splashBackground" />
|
|
||||||
<item>
|
|
||||||
<!-- the app logo, centered horizontally and vertically -->
|
|
||||||
<bitmap
|
|
||||||
android:src="@drawable/splash"
|
|
||||||
android:gravity="center" />
|
|
||||||
</item>
|
|
||||||
</layer-list>
|
|
|
@ -8,25 +8,15 @@
|
||||||
<item name="android:editTextBackground">@drawable/rn_edit_text_material</item>
|
<item name="android:editTextBackground">@drawable/rn_edit_text_material</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="Share.Window" parent="android:Theme">
|
<style name="ShareTheme" parent="AppTheme">
|
||||||
<item name="android:windowEnterAnimation">@null</item>
|
<item name="android:navigationBarColor">@android:color/transparent</item>
|
||||||
<item name="android:windowExitAnimation">@null</item>
|
<item name="android:statusBarColor">@android:color/transparent</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="Theme.Share.Transparent" parent="android:Theme">
|
<style name="BootTheme" parent="Theme.SplashScreen">
|
||||||
<item name="android:windowIsTranslucent">true</item>
|
<item name="windowSplashScreenBackground">@color/splashBackground</item>
|
||||||
<item name="android:windowBackground">@color/primary_dark</item>
|
<item name="windowSplashScreenAnimatedIcon">@drawable/ic_launcher_foreground</item>
|
||||||
<item name="android:windowContentOverlay">@null</item>
|
<item name="postSplashScreenTheme">@style/AppTheme</item>
|
||||||
<item name="android:windowNoTitle">true</item>
|
|
||||||
<item name="android:windowIsFloating">true</item>
|
|
||||||
<item name="android:backgroundDimEnabled">true</item>
|
|
||||||
<item name="android:windowAnimationStyle">@style/Share.Window</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="BootTheme" parent="AppTheme">
|
|
||||||
<item name="android:background">@drawable/launch_screen</item>
|
|
||||||
<item name="colorPrimaryDark">@color/splashBackground</item>
|
|
||||||
<item name="android:navigationBarColor">@color/splashBackground</item>
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<!-- https://github.com/facebook/react-native/blob/d1ab03235cb4b93304150878d2b9057ab45bba77/ReactAndroid/src/main/res/views/modal/values/themes.xml#L5 -->
|
<!-- https://github.com/facebook/react-native/blob/d1ab03235cb4b93304150878d2b9057ab45bba77/ReactAndroid/src/main/res/views/modal/values/themes.xml#L5 -->
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 7.5 KiB |
|
@ -1,12 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
|
|
||||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">
|
|
||||||
<!-- the background color. it can be a system color or a custom one defined in colors.xml -->
|
|
||||||
<item android:drawable="@color/splashBackground" />
|
|
||||||
<item>
|
|
||||||
<!-- the app logo, centered horizontally and vertically -->
|
|
||||||
<bitmap
|
|
||||||
android:src="@drawable/splash"
|
|
||||||
android:gravity="center" />
|
|
||||||
</item>
|
|
||||||
</layer-list>
|
|
|
@ -6,7 +6,6 @@
|
||||||
android:name="chat.rocket.reactnative.MainPlayApplication"
|
android:name="chat.rocket.reactnative.MainPlayApplication"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:theme="@style/AppTheme"
|
|
||||||
android:networkSecurityConfig="@xml/network_security_config"
|
android:networkSecurityConfig="@xml/network_security_config"
|
||||||
tools:replace="android:name"
|
tools:replace="android:name"
|
||||||
>
|
>
|
||||||
|
|
|
@ -29,7 +29,8 @@ const styles = StyleSheet.create({
|
||||||
},
|
},
|
||||||
username: {
|
username: {
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
...sharedStyles.textMedium
|
...sharedStyles.textMedium,
|
||||||
|
flexShrink: 1
|
||||||
},
|
},
|
||||||
time: {
|
time: {
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
|
@ -67,7 +68,7 @@ const ReplyPreview = React.memo(
|
||||||
<View style={[styles.container, { backgroundColor: themes[theme].messageboxBackground }]}>
|
<View style={[styles.container, { backgroundColor: themes[theme].messageboxBackground }]}>
|
||||||
<View style={[styles.messageContainer, { backgroundColor: themes[theme].chatComponentBackground }]}>
|
<View style={[styles.messageContainer, { backgroundColor: themes[theme].chatComponentBackground }]}>
|
||||||
<View style={styles.header}>
|
<View style={styles.header}>
|
||||||
<Text style={[styles.username, { color: themes[theme].tintColor }]}>
|
<Text numberOfLines={1} style={[styles.username, { color: themes[theme].tintColor }]}>
|
||||||
{useRealName ? message.u?.name : message.u?.username}
|
{useRealName ? message.u?.name : message.u?.username}
|
||||||
</Text>
|
</Text>
|
||||||
<Text style={[styles.time, { color: themes[theme].auxiliaryText }]}>{time}</Text>
|
<Text style={[styles.time, { color: themes[theme].auxiliaryText }]}>{time}</Text>
|
||||||
|
|
|
@ -1,145 +0,0 @@
|
||||||
import React from 'react';
|
|
||||||
import { StyleSheet, Text, Pressable, View, ScrollView } from 'react-native';
|
|
||||||
import ScrollableTabView from 'react-native-scrollable-tab-view';
|
|
||||||
import { FlatList } from 'react-native-gesture-handler';
|
|
||||||
|
|
||||||
import Emoji from './message/Emoji';
|
|
||||||
import { useTheme } from '../theme';
|
|
||||||
import { TGetCustomEmoji } from '../definitions/IEmoji';
|
|
||||||
import { IReaction } from '../definitions';
|
|
||||||
import Avatar from './Avatar';
|
|
||||||
import sharedStyles from '../views/Styles';
|
|
||||||
|
|
||||||
const MIN_TAB_WIDTH = 70;
|
|
||||||
|
|
||||||
const styles = StyleSheet.create({
|
|
||||||
reactionsListContainer: { height: '100%', width: '100%' },
|
|
||||||
tabBarItem: {
|
|
||||||
paddingHorizontal: 10,
|
|
||||||
paddingBottom: 10,
|
|
||||||
justifyContent: 'center',
|
|
||||||
alignItems: 'center',
|
|
||||||
flexDirection: 'row'
|
|
||||||
},
|
|
||||||
reactionCount: { marginLeft: 5 },
|
|
||||||
emojiName: { margin: 10 },
|
|
||||||
userItemContainer: { marginHorizontal: 10, marginVertical: 5, flexDirection: 'row' },
|
|
||||||
usernameContainer: { marginHorizontal: 10, justifyContent: 'center' },
|
|
||||||
usernameText: { fontSize: 17, ...sharedStyles.textMedium },
|
|
||||||
standardEmojiStyle: { fontSize: 20, color: '#fff' },
|
|
||||||
customEmojiStyle: { width: 25, height: 25 }
|
|
||||||
});
|
|
||||||
|
|
||||||
interface IReactionsListBase {
|
|
||||||
baseUrl: string;
|
|
||||||
getCustomEmoji: TGetCustomEmoji;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface IReactionsListProps extends IReactionsListBase {
|
|
||||||
reactions?: IReaction[];
|
|
||||||
width: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ITabBarItem extends IReactionsListBase {
|
|
||||||
tab: IReaction;
|
|
||||||
index: number;
|
|
||||||
goToPage?: (index: number) => void;
|
|
||||||
}
|
|
||||||
interface IReactionsTabBar extends IReactionsListBase {
|
|
||||||
activeTab?: number;
|
|
||||||
tabs?: IReaction[];
|
|
||||||
goToPage?: (index: number) => void;
|
|
||||||
width: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
const TabBarItem = ({ tab, index, goToPage, baseUrl, getCustomEmoji }: ITabBarItem) => {
|
|
||||||
const { colors } = useTheme();
|
|
||||||
return (
|
|
||||||
<Pressable
|
|
||||||
key={tab.emoji}
|
|
||||||
onPress={() => {
|
|
||||||
goToPage?.(index);
|
|
||||||
}}
|
|
||||||
style={({ pressed }: { pressed: boolean }) => ({
|
|
||||||
opacity: pressed ? 0.7 : 1
|
|
||||||
})}
|
|
||||||
>
|
|
||||||
<View style={styles.tabBarItem}>
|
|
||||||
<Emoji
|
|
||||||
content={tab.emoji}
|
|
||||||
standardEmojiStyle={styles.standardEmojiStyle}
|
|
||||||
customEmojiStyle={styles.customEmojiStyle}
|
|
||||||
baseUrl={baseUrl}
|
|
||||||
getCustomEmoji={getCustomEmoji}
|
|
||||||
/>
|
|
||||||
<Text style={[styles.reactionCount, { color: colors.auxiliaryTintColor }]}>{tab.usernames.length}</Text>
|
|
||||||
</View>
|
|
||||||
</Pressable>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const ReactionsTabBar = ({ tabs, activeTab, goToPage, baseUrl, getCustomEmoji, width }: IReactionsTabBar) => {
|
|
||||||
const tabWidth = tabs && Math.max(width / tabs.length, MIN_TAB_WIDTH);
|
|
||||||
const { colors } = useTheme();
|
|
||||||
return (
|
|
||||||
<View>
|
|
||||||
<ScrollView horizontal={true} showsHorizontalScrollIndicator={false}>
|
|
||||||
{tabs?.map((tab, index) => {
|
|
||||||
const isActiveTab = activeTab === index;
|
|
||||||
return (
|
|
||||||
<View
|
|
||||||
style={{
|
|
||||||
width: tabWidth,
|
|
||||||
borderBottomWidth: isActiveTab ? 2 : 1,
|
|
||||||
borderColor: isActiveTab ? colors.tintActive : colors.separatorColor
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<TabBarItem tab={tab} index={index} goToPage={goToPage} baseUrl={baseUrl} getCustomEmoji={getCustomEmoji} />
|
|
||||||
</View>
|
|
||||||
);
|
|
||||||
})}
|
|
||||||
</ScrollView>
|
|
||||||
</View>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const UsersList = ({ tabLabel }: { tabLabel: IReaction }) => {
|
|
||||||
const { colors } = useTheme();
|
|
||||||
const { emoji, usernames } = tabLabel;
|
|
||||||
return (
|
|
||||||
<FlatList
|
|
||||||
data={usernames}
|
|
||||||
ListHeaderComponent={() => (
|
|
||||||
<View style={styles.emojiName}>
|
|
||||||
<Text style={{ color: colors.auxiliaryTintColor }}>{emoji}</Text>
|
|
||||||
</View>
|
|
||||||
)}
|
|
||||||
renderItem={({ item }) => (
|
|
||||||
<View style={styles.userItemContainer}>
|
|
||||||
<Avatar text={item} size={36} />
|
|
||||||
<View style={styles.usernameContainer}>
|
|
||||||
<Text style={[styles.usernameText, { color: colors.titleText }]}>{item}</Text>
|
|
||||||
</View>
|
|
||||||
</View>
|
|
||||||
)}
|
|
||||||
keyExtractor={item => item}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const ReactionsList = ({ reactions, baseUrl, getCustomEmoji, width }: IReactionsListProps): React.ReactElement => {
|
|
||||||
// sorting reactions in descending order on the basic of number of users reacted
|
|
||||||
const sortedReactions = reactions?.sort((reaction1, reaction2) => reaction2.usernames.length - reaction1.usernames.length);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<View style={styles.reactionsListContainer}>
|
|
||||||
<ScrollableTabView renderTabBar={() => <ReactionsTabBar baseUrl={baseUrl} getCustomEmoji={getCustomEmoji} width={width} />}>
|
|
||||||
{sortedReactions?.map(reaction => (
|
|
||||||
<UsersList tabLabel={reaction} key={reaction.emoji} />
|
|
||||||
))}
|
|
||||||
</ScrollableTabView>
|
|
||||||
</View>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default ReactionsList;
|
|
|
@ -0,0 +1,77 @@
|
||||||
|
import React from 'react';
|
||||||
|
import { Text, View, FlatList } from 'react-native';
|
||||||
|
|
||||||
|
import Emoji from '../message/Emoji';
|
||||||
|
import { useTheme } from '../../theme';
|
||||||
|
import { IReaction } from '../../definitions';
|
||||||
|
import { TGetCustomEmoji } from '../../definitions/IEmoji';
|
||||||
|
import I18n from '../../i18n';
|
||||||
|
import styles from './styles';
|
||||||
|
import { useAppSelector } from '../../lib/hooks';
|
||||||
|
|
||||||
|
interface IAllReactionsListItemProps {
|
||||||
|
getCustomEmoji: TGetCustomEmoji;
|
||||||
|
item: IReaction;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IAllTabProps {
|
||||||
|
getCustomEmoji: TGetCustomEmoji;
|
||||||
|
tabLabel: IReaction;
|
||||||
|
reactions?: IReaction[];
|
||||||
|
}
|
||||||
|
|
||||||
|
const AllReactionsListItem = ({ item, getCustomEmoji }: IAllReactionsListItemProps) => {
|
||||||
|
const { colors } = useTheme();
|
||||||
|
const useRealName = useAppSelector(state => state.settings.UI_Use_Real_Name);
|
||||||
|
const server = useAppSelector(state => state.server.server);
|
||||||
|
const username = useAppSelector(state => state.login.user.username);
|
||||||
|
const count = item.usernames.length;
|
||||||
|
|
||||||
|
let displayNames;
|
||||||
|
if (useRealName && item.names) {
|
||||||
|
displayNames = item.names
|
||||||
|
.slice(0, 3)
|
||||||
|
.map((name, index) => (item.usernames[index] === username ? I18n.t('you') : name))
|
||||||
|
.join(', ');
|
||||||
|
} else {
|
||||||
|
displayNames = item.usernames
|
||||||
|
.slice(0, 3)
|
||||||
|
.map((otherUsername: string) => (username === otherUsername ? I18n.t('you') : otherUsername))
|
||||||
|
.join(', ');
|
||||||
|
}
|
||||||
|
if (count > 3) {
|
||||||
|
displayNames = `${displayNames} ${I18n.t('and_more')} ${count - 3}`;
|
||||||
|
} else {
|
||||||
|
displayNames = displayNames.replace(/,(?=[^,]*$)/, ` ${I18n.t('and')}`);
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<View style={styles.listItemContainer}>
|
||||||
|
<Emoji
|
||||||
|
content={item.emoji}
|
||||||
|
standardEmojiStyle={styles.allTabStandardEmojiStyle}
|
||||||
|
customEmojiStyle={styles.allTabCustomEmojiStyle}
|
||||||
|
baseUrl={server}
|
||||||
|
getCustomEmoji={getCustomEmoji}
|
||||||
|
/>
|
||||||
|
<View style={styles.textContainer}>
|
||||||
|
<Text style={[styles.allListNPeopleReacted, { color: colors.bodyText }]}>
|
||||||
|
{count === 1 ? I18n.t('1_person_reacted') : I18n.t('N_people_reacted', { n: count })}
|
||||||
|
</Text>
|
||||||
|
<Text style={[styles.allListWhoReacted, { color: colors.auxiliaryText }]}>{displayNames}</Text>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const AllTab = ({ reactions, getCustomEmoji }: IAllTabProps): React.ReactElement => (
|
||||||
|
<View style={styles.allTabContainer} testID='reactionsListAllTab'>
|
||||||
|
<FlatList
|
||||||
|
data={reactions}
|
||||||
|
contentContainerStyle={styles.listContainer}
|
||||||
|
renderItem={({ item }) => <AllReactionsListItem item={item} getCustomEmoji={getCustomEmoji} />}
|
||||||
|
keyExtractor={item => item.emoji}
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
|
||||||
|
export default AllTab;
|
|
@ -0,0 +1,71 @@
|
||||||
|
import React from 'react';
|
||||||
|
import { View } from 'react-native';
|
||||||
|
|
||||||
|
import { TGetCustomEmoji, IEmoji } from '../../definitions';
|
||||||
|
import ReactionsList from '.';
|
||||||
|
import { mockedStore as store } from '../../reducers/mockedStore';
|
||||||
|
import { updateSettings } from '../../actions/settings';
|
||||||
|
|
||||||
|
const getCustomEmoji: TGetCustomEmoji = content => {
|
||||||
|
const customEmoji = {
|
||||||
|
marioparty: { name: content, extension: 'gif' },
|
||||||
|
react_rocket: { name: content, extension: 'png' },
|
||||||
|
nyan_rocket: { name: content, extension: 'png' }
|
||||||
|
}[content] as IEmoji;
|
||||||
|
return customEmoji;
|
||||||
|
};
|
||||||
|
|
||||||
|
const reactions = [
|
||||||
|
{
|
||||||
|
emoji: ':marioparty:',
|
||||||
|
_id: 'marioparty',
|
||||||
|
usernames: ['rocket.cat', 'diego.mello'],
|
||||||
|
names: ['Rocket Cat', 'Diego Mello']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
emoji: ':react_rocket:',
|
||||||
|
_id: 'react_rocket',
|
||||||
|
usernames: ['rocket.cat', 'diego.mello'],
|
||||||
|
names: ['Rocket Cat', 'Diego Mello']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
emoji: ':nyan_rocket:',
|
||||||
|
_id: 'nyan_rocket',
|
||||||
|
usernames: ['rocket.cat'],
|
||||||
|
names: ['Rocket Cat']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
emoji: ':grinning:',
|
||||||
|
_id: 'grinning',
|
||||||
|
usernames: ['diego.mello'],
|
||||||
|
names: ['Diego Mello']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
emoji: ':tada:',
|
||||||
|
_id: 'tada',
|
||||||
|
usernames: ['diego.mello'],
|
||||||
|
names: ['Diego Mello']
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
export const ReactionsListStory = () => {
|
||||||
|
store.dispatch(updateSettings('UI_Use_Real_Name', false));
|
||||||
|
return (
|
||||||
|
<View style={{ paddingVertical: 10, flex: 1 }}>
|
||||||
|
<ReactionsList getCustomEmoji={getCustomEmoji} reactions={reactions} />
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const ReactionsListFullName = () => {
|
||||||
|
store.dispatch(updateSettings('UI_Use_Real_Name', true));
|
||||||
|
return (
|
||||||
|
<View style={{ paddingVertical: 10, flex: 1 }}>
|
||||||
|
<ReactionsList getCustomEmoji={getCustomEmoji} reactions={reactions} />
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default {
|
||||||
|
title: 'ReactionsList'
|
||||||
|
};
|
|
@ -0,0 +1,79 @@
|
||||||
|
import React from 'react';
|
||||||
|
import { fireEvent, render, within } from '@testing-library/react-native';
|
||||||
|
import { Provider } from 'react-redux';
|
||||||
|
|
||||||
|
import ReactionsList from '.';
|
||||||
|
import { mockedStore } from '../../reducers/mockedStore';
|
||||||
|
|
||||||
|
const getCustomEmoji = jest.fn();
|
||||||
|
const reactions = [
|
||||||
|
{
|
||||||
|
emoji: 'marioparty',
|
||||||
|
_id: 'marioparty',
|
||||||
|
usernames: ['rocket.cat', 'diego.mello'],
|
||||||
|
names: ['Rocket Cat', 'Diego Mello']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
emoji: 'react_rocket',
|
||||||
|
_id: 'react_rocket',
|
||||||
|
usernames: ['rocket.cat', 'diego.mello'],
|
||||||
|
names: ['Rocket Cat', 'Diego Mello']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
emoji: 'nyan_rocket',
|
||||||
|
_id: 'nyan_rocket',
|
||||||
|
usernames: ['rocket.cat'],
|
||||||
|
names: ['Rocket Cat']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
emoji: 'grinning',
|
||||||
|
_id: 'grinning',
|
||||||
|
usernames: ['diego.mello'],
|
||||||
|
names: ['Diego Mello']
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
const Render = () => (
|
||||||
|
<Provider store={mockedStore}>
|
||||||
|
<ReactionsList getCustomEmoji={getCustomEmoji} reactions={reactions} />
|
||||||
|
</Provider>
|
||||||
|
);
|
||||||
|
|
||||||
|
describe('ReactionsList', () => {
|
||||||
|
test('should render Reactions List', async () => {
|
||||||
|
const { findByTestId } = render(<Render />);
|
||||||
|
const ReactionsListView = await findByTestId('reactionsList');
|
||||||
|
expect(ReactionsListView).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should render tab bar', async () => {
|
||||||
|
const { findByTestId } = render(<Render />);
|
||||||
|
const AllTab = await findByTestId('reactionsTabBar');
|
||||||
|
expect(AllTab).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should render All tab', async () => {
|
||||||
|
const { findByTestId } = render(<Render />);
|
||||||
|
const AllTab = await findByTestId('reactionsListAllTab');
|
||||||
|
expect(AllTab).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('correct tab on clicking tab item', async () => {
|
||||||
|
const { findByTestId } = render(<Render />);
|
||||||
|
const tab = await findByTestId(`tabBarItem-${reactions[0].emoji}`);
|
||||||
|
fireEvent.press(tab);
|
||||||
|
const usersList = await findByTestId(`usersList-${reactions[0].emoji}`);
|
||||||
|
expect(usersList).toBeTruthy();
|
||||||
|
const emojiName = await within(usersList).getByTestId(`usersListEmojiName`);
|
||||||
|
expect(emojiName.props.children).toEqual(reactions[0].emoji);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should render correct number of reactions', async () => {
|
||||||
|
const { findByTestId } = render(<Render />);
|
||||||
|
const tab = await findByTestId(`tabBarItem-${reactions[0].emoji}`);
|
||||||
|
fireEvent.press(tab);
|
||||||
|
const usersList = await findByTestId(`usersList-${reactions[0].emoji}`);
|
||||||
|
const allReactions = await within(usersList).getAllByTestId('userItem');
|
||||||
|
expect(allReactions).toHaveLength(reactions[0].usernames.length);
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,89 @@
|
||||||
|
import React from 'react';
|
||||||
|
import { Text, Pressable, View, ScrollView } from 'react-native';
|
||||||
|
|
||||||
|
import Emoji from '../message/Emoji';
|
||||||
|
import { useTheme } from '../../theme';
|
||||||
|
import { IReaction } from '../../definitions';
|
||||||
|
import { TGetCustomEmoji } from '../../definitions/IEmoji';
|
||||||
|
import I18n from '../../i18n';
|
||||||
|
import styles, { MIN_TAB_WIDTH } from './styles';
|
||||||
|
import { useDimensions, useOrientation } from '../../dimensions';
|
||||||
|
import { useAppSelector } from '../../lib/hooks';
|
||||||
|
|
||||||
|
interface ITabBarItem {
|
||||||
|
getCustomEmoji: TGetCustomEmoji;
|
||||||
|
tab: IReaction;
|
||||||
|
index: number;
|
||||||
|
goToPage?: (index: number) => void;
|
||||||
|
}
|
||||||
|
interface IReactionsTabBar {
|
||||||
|
getCustomEmoji: TGetCustomEmoji;
|
||||||
|
activeTab?: number;
|
||||||
|
tabs?: IReaction[];
|
||||||
|
goToPage?: (index: number) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TabBarItem = ({ tab, index, goToPage, getCustomEmoji }: ITabBarItem) => {
|
||||||
|
const { colors } = useTheme();
|
||||||
|
const server = useAppSelector(state => state.server.server);
|
||||||
|
return (
|
||||||
|
<Pressable
|
||||||
|
key={tab.emoji}
|
||||||
|
onPress={() => {
|
||||||
|
goToPage?.(index);
|
||||||
|
}}
|
||||||
|
style={({ pressed }: { pressed: boolean }) => ({
|
||||||
|
opacity: pressed ? 0.7 : 1
|
||||||
|
})}
|
||||||
|
testID={`tabBarItem-${tab.emoji}`}
|
||||||
|
>
|
||||||
|
<View style={styles.tabBarItem}>
|
||||||
|
{tab._id === 'All' ? (
|
||||||
|
<Text style={[styles.allTabItem, { color: colors.auxiliaryTintColor }]}>{I18n.t('All')}</Text>
|
||||||
|
) : (
|
||||||
|
<>
|
||||||
|
<Emoji
|
||||||
|
content={tab.emoji}
|
||||||
|
standardEmojiStyle={styles.standardEmojiStyle}
|
||||||
|
customEmojiStyle={styles.customEmojiStyle}
|
||||||
|
baseUrl={server}
|
||||||
|
getCustomEmoji={getCustomEmoji}
|
||||||
|
/>
|
||||||
|
<Text style={[styles.reactionCount, { color: colors.auxiliaryTintColor }]}>{tab.usernames.length}</Text>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</View>
|
||||||
|
</Pressable>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const ReactionsTabBar = ({ tabs, activeTab, goToPage, getCustomEmoji }: IReactionsTabBar): React.ReactElement => {
|
||||||
|
const { isLandscape } = useOrientation();
|
||||||
|
const { width } = useDimensions();
|
||||||
|
const reactionsListWidth = isLandscape ? width / 2 : width;
|
||||||
|
const tabWidth = tabs && Math.max(reactionsListWidth / tabs.length, MIN_TAB_WIDTH);
|
||||||
|
const { colors } = useTheme();
|
||||||
|
return (
|
||||||
|
<View testID='reactionsTabBar'>
|
||||||
|
<ScrollView horizontal={true} showsHorizontalScrollIndicator={false}>
|
||||||
|
{tabs?.map((tab, index) => {
|
||||||
|
const isActiveTab = activeTab === index;
|
||||||
|
return (
|
||||||
|
<View
|
||||||
|
style={{
|
||||||
|
width: tabWidth,
|
||||||
|
borderBottomWidth: isActiveTab ? 2 : 1,
|
||||||
|
borderColor: isActiveTab ? colors.tintActive : colors.separatorColor
|
||||||
|
}}
|
||||||
|
key={tab.emoji}
|
||||||
|
>
|
||||||
|
<TabBarItem tab={tab} index={index} goToPage={goToPage} getCustomEmoji={getCustomEmoji} />
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</ScrollView>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ReactionsTabBar;
|
|
@ -0,0 +1,47 @@
|
||||||
|
import React from 'react';
|
||||||
|
import { Text, View, FlatList } from 'react-native';
|
||||||
|
import { useSelector } from 'react-redux';
|
||||||
|
|
||||||
|
import { useTheme } from '../../theme';
|
||||||
|
import { IReaction, IApplicationState } from '../../definitions';
|
||||||
|
import Avatar from '../Avatar';
|
||||||
|
import styles from './styles';
|
||||||
|
|
||||||
|
const UsersList = ({ tabLabel }: { tabLabel: IReaction }): React.ReactElement => {
|
||||||
|
const { colors } = useTheme();
|
||||||
|
const useRealName = useSelector((state: IApplicationState) => state.settings.UI_Use_Real_Name);
|
||||||
|
|
||||||
|
const { emoji, usernames, names } = tabLabel;
|
||||||
|
const users =
|
||||||
|
names?.length > 0
|
||||||
|
? usernames.map((username, index) => ({ username, name: names[index] }))
|
||||||
|
: usernames.map(username => ({ username, name: '' }));
|
||||||
|
|
||||||
|
return (
|
||||||
|
<FlatList
|
||||||
|
data={users}
|
||||||
|
contentContainerStyle={styles.listContainer}
|
||||||
|
ListHeaderComponent={
|
||||||
|
<View style={styles.emojiNameContainer}>
|
||||||
|
<Text style={[styles.emojiName, { color: colors.auxiliaryText }]} testID='usersListEmojiName'>
|
||||||
|
{emoji}
|
||||||
|
</Text>
|
||||||
|
</View>
|
||||||
|
}
|
||||||
|
renderItem={({ item }) => (
|
||||||
|
<View style={styles.listItemContainer} testID='userItem'>
|
||||||
|
<Avatar text={item.username} size={36} />
|
||||||
|
<View style={styles.textContainer}>
|
||||||
|
<Text style={[styles.usernameText, { color: colors.bodyText }]} numberOfLines={1}>
|
||||||
|
{useRealName && item.name ? item.name : item.username}
|
||||||
|
</Text>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
)}
|
||||||
|
keyExtractor={item => item.username}
|
||||||
|
testID={`usersList-${emoji}`}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default UsersList;
|
|
@ -0,0 +1,34 @@
|
||||||
|
import React from 'react';
|
||||||
|
import { View } from 'react-native';
|
||||||
|
import ScrollableTabView from 'react-native-scrollable-tab-view';
|
||||||
|
|
||||||
|
import { TGetCustomEmoji } from '../../definitions/IEmoji';
|
||||||
|
import { IReaction } from '../../definitions';
|
||||||
|
import I18n from '../../i18n';
|
||||||
|
import styles from './styles';
|
||||||
|
import AllTab from './AllTab';
|
||||||
|
import UsersList from './UsersList';
|
||||||
|
import ReactionsTabBar from './ReactionsTabBar';
|
||||||
|
|
||||||
|
interface IReactionsListProps {
|
||||||
|
getCustomEmoji: TGetCustomEmoji;
|
||||||
|
reactions?: IReaction[];
|
||||||
|
}
|
||||||
|
|
||||||
|
const ReactionsList = ({ reactions, getCustomEmoji }: IReactionsListProps): React.ReactElement => {
|
||||||
|
// sorting reactions in descending order on the basic of number of users reacted
|
||||||
|
const sortedReactions = reactions?.sort((reaction1, reaction2) => reaction2.usernames.length - reaction1.usernames.length);
|
||||||
|
const allTabLabel = { emoji: I18n.t('All'), usernames: [], names: [], _id: 'All' };
|
||||||
|
return (
|
||||||
|
<View style={styles.container} testID='reactionsList'>
|
||||||
|
<ScrollableTabView renderTabBar={() => <ReactionsTabBar getCustomEmoji={getCustomEmoji} />}>
|
||||||
|
<AllTab tabLabel={allTabLabel} reactions={sortedReactions} getCustomEmoji={getCustomEmoji} />
|
||||||
|
{sortedReactions?.map(reaction => (
|
||||||
|
<UsersList tabLabel={reaction} key={reaction.emoji} />
|
||||||
|
))}
|
||||||
|
</ScrollableTabView>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ReactionsList;
|
|
@ -0,0 +1,88 @@
|
||||||
|
import { StyleSheet } from 'react-native';
|
||||||
|
|
||||||
|
import sharedStyles from '../../views/Styles';
|
||||||
|
|
||||||
|
export const MIN_TAB_WIDTH = 70;
|
||||||
|
|
||||||
|
export default StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
flex: 1
|
||||||
|
},
|
||||||
|
allTabContainer: {
|
||||||
|
flex: 1
|
||||||
|
},
|
||||||
|
tabBarItem: {
|
||||||
|
paddingBottom: 4,
|
||||||
|
height: 44,
|
||||||
|
justifyContent: 'center',
|
||||||
|
alignItems: 'center',
|
||||||
|
flexDirection: 'row'
|
||||||
|
},
|
||||||
|
listContainer: {
|
||||||
|
marginHorizontal: 12,
|
||||||
|
marginVertical: 8,
|
||||||
|
paddingBottom: 30
|
||||||
|
},
|
||||||
|
reactionCount: {
|
||||||
|
marginLeft: 4,
|
||||||
|
...sharedStyles.textSemibold
|
||||||
|
},
|
||||||
|
emojiNameContainer: {
|
||||||
|
marginVertical: 8
|
||||||
|
},
|
||||||
|
emojiName: {
|
||||||
|
fontSize: 14,
|
||||||
|
...sharedStyles.textMedium
|
||||||
|
},
|
||||||
|
listItemContainer: {
|
||||||
|
marginVertical: 6,
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'center'
|
||||||
|
},
|
||||||
|
textContainer: {
|
||||||
|
flex: 1,
|
||||||
|
marginLeft: 8,
|
||||||
|
justifyContent: 'center'
|
||||||
|
},
|
||||||
|
usernameText: {
|
||||||
|
fontSize: 16,
|
||||||
|
...sharedStyles.textSemibold
|
||||||
|
},
|
||||||
|
standardEmojiStyle: {
|
||||||
|
fontSize: 20,
|
||||||
|
width: 24,
|
||||||
|
height: 24,
|
||||||
|
textAlign: 'center',
|
||||||
|
color: '#fff'
|
||||||
|
},
|
||||||
|
customEmojiStyle: {
|
||||||
|
width: 24,
|
||||||
|
height: 24
|
||||||
|
},
|
||||||
|
allTabItem: {
|
||||||
|
fontSize: 16,
|
||||||
|
...sharedStyles.textSemibold
|
||||||
|
},
|
||||||
|
allTabStandardEmojiStyle: {
|
||||||
|
fontSize: 30,
|
||||||
|
width: 36,
|
||||||
|
textAlign: 'center',
|
||||||
|
color: '#fff'
|
||||||
|
},
|
||||||
|
allTabCustomEmojiStyle: {
|
||||||
|
width: 36,
|
||||||
|
height: 36
|
||||||
|
},
|
||||||
|
allListItemContainer: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'center'
|
||||||
|
},
|
||||||
|
allListNPeopleReacted: {
|
||||||
|
fontSize: 14,
|
||||||
|
...sharedStyles.textMedium
|
||||||
|
},
|
||||||
|
allListWhoReacted: {
|
||||||
|
fontSize: 14,
|
||||||
|
...sharedStyles.textRegular
|
||||||
|
}
|
||||||
|
});
|
|
@ -7,6 +7,7 @@ import { MarkdownPreview } from '../markdown';
|
||||||
import RoomTypeIcon from '../RoomTypeIcon';
|
import RoomTypeIcon from '../RoomTypeIcon';
|
||||||
import { TUserStatus, IOmnichannelSource } from '../../definitions';
|
import { TUserStatus, IOmnichannelSource } from '../../definitions';
|
||||||
import { useTheme } from '../../theme';
|
import { useTheme } from '../../theme';
|
||||||
|
import { useAppSelector } from '../../lib/hooks';
|
||||||
|
|
||||||
const HIT_SLOP = {
|
const HIT_SLOP = {
|
||||||
top: 5,
|
top: 5,
|
||||||
|
@ -141,8 +142,9 @@ const Header = React.memo(
|
||||||
const { colors } = useTheme();
|
const { colors } = useTheme();
|
||||||
const portrait = height > width;
|
const portrait = height > width;
|
||||||
let scale = 1;
|
let scale = 1;
|
||||||
|
const isMasterDetail = useAppSelector(state => state.app.isMasterDetail);
|
||||||
|
|
||||||
if (!portrait && !tmid) {
|
if (!portrait && !tmid && !isMasterDetail) {
|
||||||
if (usersTyping.length > 0 || subtitle) {
|
if (usersTyping.length > 0 || subtitle) {
|
||||||
scale = 0.8;
|
scale = 0.8;
|
||||||
}
|
}
|
||||||
|
|
|
@ -350,7 +350,7 @@ class Markdown extends PureComponent<IMarkdownProps, any> {
|
||||||
let ast = parser.parse(m);
|
let ast = parser.parse(m);
|
||||||
ast = mergeTextNodes(ast);
|
ast = mergeTextNodes(ast);
|
||||||
this.isMessageContainsOnlyEmoji = isOnlyEmoji(m) && emojiCount(m) <= 3;
|
this.isMessageContainsOnlyEmoji = isOnlyEmoji(m) && emojiCount(m) <= 3;
|
||||||
return this.renderer.render(ast);
|
return this.renderer?.render(ast) || null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -114,7 +114,16 @@ const Attachments: React.FC<IMessageAttachments> = React.memo(
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return <Reply key={index} index={index} attachment={file} timeFormat={timeFormat} getCustomEmoji={getCustomEmoji} messageId={id} />;
|
return (
|
||||||
|
<Reply
|
||||||
|
key={index}
|
||||||
|
index={index}
|
||||||
|
attachment={file}
|
||||||
|
timeFormat={timeFormat}
|
||||||
|
getCustomEmoji={getCustomEmoji}
|
||||||
|
messageId={id}
|
||||||
|
/>
|
||||||
|
);
|
||||||
});
|
});
|
||||||
return <>{attachmentsElements}</>;
|
return <>{attachmentsElements}</>;
|
||||||
},
|
},
|
||||||
|
|
|
@ -45,7 +45,8 @@ const styles = StyleSheet.create({
|
||||||
},
|
},
|
||||||
author: {
|
author: {
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
...sharedStyles.textMedium
|
...sharedStyles.textMedium,
|
||||||
|
flexShrink: 1
|
||||||
},
|
},
|
||||||
fieldsContainer: {
|
fieldsContainer: {
|
||||||
flex: 1,
|
flex: 1,
|
||||||
|
@ -99,7 +100,9 @@ const Title = React.memo(
|
||||||
return (
|
return (
|
||||||
<View style={styles.authorContainer}>
|
<View style={styles.authorContainer}>
|
||||||
{attachment.author_name ? (
|
{attachment.author_name ? (
|
||||||
<Text style={[styles.author, { color: themes[theme].auxiliaryTintColor }]}>{attachment.author_name}</Text>
|
<Text numberOfLines={1} style={[styles.author, { color: themes[theme].auxiliaryTintColor }]}>
|
||||||
|
{attachment.author_name}
|
||||||
|
</Text>
|
||||||
) : null}
|
) : null}
|
||||||
{time ? <Text style={[messageStyles.time, { color: themes[theme].auxiliaryText }]}>{time}</Text> : null}
|
{time ? <Text style={[messageStyles.time, { color: themes[theme].auxiliaryText }]}>{time}</Text> : null}
|
||||||
{attachment.title ? <Text style={[styles.title, { color: themes[theme].bodyText }]}>{attachment.title}</Text> : null}
|
{attachment.title ? <Text style={[styles.title, { color: themes[theme].bodyText }]}>{attachment.title}</Text> : null}
|
||||||
|
|
|
@ -2,4 +2,5 @@ export interface IReaction {
|
||||||
_id: string;
|
_id: string;
|
||||||
emoji: string;
|
emoji: string;
|
||||||
usernames: string[];
|
usernames: string[];
|
||||||
|
names: string[];
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
import { LISTENER } from '../../../containers/Toast';
|
||||||
|
import I18n from '../../../i18n';
|
||||||
|
import EventEmitter from './events';
|
||||||
|
import log from './log';
|
||||||
|
import { Services } from '../../services';
|
||||||
|
|
||||||
|
export const handleIgnore = async (userId: string, ignore: boolean, rid: string) => {
|
||||||
|
try {
|
||||||
|
await Services.ignoreUser({
|
||||||
|
rid,
|
||||||
|
userId,
|
||||||
|
ignore
|
||||||
|
});
|
||||||
|
const message = I18n.t(ignore ? 'User_has_been_ignored' : 'User_has_been_unignored');
|
||||||
|
EventEmitter.emit(LISTENER, { message });
|
||||||
|
} catch (e) {
|
||||||
|
log(e);
|
||||||
|
}
|
||||||
|
};
|
|
@ -134,7 +134,7 @@ export const localAuthenticate = async (server: string): Promise<void> => {
|
||||||
|
|
||||||
// Make sure splash screen has been hidden
|
// Make sure splash screen has been hidden
|
||||||
try {
|
try {
|
||||||
await RNBootSplash.hide();
|
await RNBootSplash.hide({ fade: true });
|
||||||
} catch {
|
} catch {
|
||||||
// Do nothing
|
// Do nothing
|
||||||
}
|
}
|
||||||
|
|
|
@ -280,6 +280,7 @@ export default {
|
||||||
RI_GO_RI_EDIT: 'ri_go_ri_edit',
|
RI_GO_RI_EDIT: 'ri_go_ri_edit',
|
||||||
RI_GO_LIVECHAT_EDIT: 'ri_go_livechat_edit',
|
RI_GO_LIVECHAT_EDIT: 'ri_go_livechat_edit',
|
||||||
RI_GO_ROOM_USER: 'ri_go_room_user',
|
RI_GO_ROOM_USER: 'ri_go_room_user',
|
||||||
|
RI_TOGGLE_BLOCK_USER: 'ri_toggle_block_user',
|
||||||
|
|
||||||
// ROOM INFO EDIT VIEW
|
// ROOM INFO EDIT VIEW
|
||||||
RI_EDIT_TOGGLE_ROOM_TYPE: 'ri_edit_toggle_room_type',
|
RI_EDIT_TOGGLE_ROOM_TYPE: 'ri_edit_toggle_room_type',
|
||||||
|
|
|
@ -38,7 +38,8 @@ export default (msg: any): IMessage | IThreadResult | null => {
|
||||||
msg.reactions = Object.keys(msg.reactions).map(key => ({
|
msg.reactions = Object.keys(msg.reactions).map(key => ({
|
||||||
_id: `${msg._id}${key}`,
|
_id: `${msg._id}${key}`,
|
||||||
emoji: key,
|
emoji: key,
|
||||||
usernames: msg.reactions ? msg.reactions[key].usernames : []
|
usernames: msg.reactions ? msg.reactions[key].usernames : [],
|
||||||
|
names: msg.reactions ? msg.reactions[key].names : []
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
if (msg.translations && Object.keys(msg.translations).length) {
|
if (msg.translations && Object.keys(msg.translations).length) {
|
||||||
|
|
|
@ -86,7 +86,7 @@ const restore = function* restore() {
|
||||||
};
|
};
|
||||||
|
|
||||||
const start = function* start() {
|
const start = function* start() {
|
||||||
yield RNBootSplash.hide();
|
yield RNBootSplash.hide({ fade: true });
|
||||||
};
|
};
|
||||||
|
|
||||||
const root = function* root() {
|
const root = function* root() {
|
||||||
|
|
|
@ -165,7 +165,7 @@ const SettingsStackNavigator = () => {
|
||||||
<SettingsStack.Navigator
|
<SettingsStack.Navigator
|
||||||
screenOptions={{ ...defaultHeader, ...themedHeader(theme), ...StackAnimation } as StackNavigationOptions}
|
screenOptions={{ ...defaultHeader, ...themedHeader(theme), ...StackAnimation } as StackNavigationOptions}
|
||||||
>
|
>
|
||||||
<SettingsStack.Screen name='SettingsView' component={SettingsView} options={SettingsView.navigationOptions} />
|
<SettingsStack.Screen name='SettingsView' component={SettingsView} />
|
||||||
<SettingsStack.Screen name='SecurityPrivacyView' component={SecurityPrivacyView} />
|
<SettingsStack.Screen name='SecurityPrivacyView' component={SecurityPrivacyView} />
|
||||||
<SettingsStack.Screen
|
<SettingsStack.Screen
|
||||||
name='E2EEncryptionSecurityView'
|
name='E2EEncryptionSecurityView'
|
||||||
|
|
|
@ -170,11 +170,7 @@ const ModalStackNavigator = React.memo(({ navigation }: INavigation) => {
|
||||||
component={ReadReceiptsView}
|
component={ReadReceiptsView}
|
||||||
options={props => ReadReceiptsView.navigationOptions!({ ...props, isMasterDetail: true })}
|
options={props => ReadReceiptsView.navigationOptions!({ ...props, isMasterDetail: true })}
|
||||||
/>
|
/>
|
||||||
<ModalStack.Screen
|
<ModalStack.Screen name='SettingsView' component={SettingsView} />
|
||||||
name='SettingsView'
|
|
||||||
component={SettingsView}
|
|
||||||
options={props => SettingsView.navigationOptions!({ ...props, isMasterDetail: true })}
|
|
||||||
/>
|
|
||||||
<ModalStack.Screen name='LanguageView' component={LanguageView} />
|
<ModalStack.Screen name='LanguageView' component={LanguageView} />
|
||||||
<ModalStack.Screen name='ThemeView' component={ThemeView} />
|
<ModalStack.Screen name='ThemeView' component={ThemeView} />
|
||||||
<ModalStack.Screen name='DefaultBrowserView' component={DefaultBrowserView} />
|
<ModalStack.Screen name='DefaultBrowserView' component={DefaultBrowserView} />
|
||||||
|
|
|
@ -68,6 +68,7 @@ export type ChatsStackParamList = {
|
||||||
rid: string;
|
rid: string;
|
||||||
t: SubscriptionType;
|
t: SubscriptionType;
|
||||||
showCloseModal?: boolean;
|
showCloseModal?: boolean;
|
||||||
|
fromRid?: string;
|
||||||
};
|
};
|
||||||
RoomInfoEditView: {
|
RoomInfoEditView: {
|
||||||
rid: string;
|
rid: string;
|
||||||
|
|
|
@ -40,6 +40,9 @@ const styles = StyleSheet.create({
|
||||||
},
|
},
|
||||||
changePasswordButton: {
|
changePasswordButton: {
|
||||||
marginBottom: 4
|
marginBottom: 4
|
||||||
|
},
|
||||||
|
separator: {
|
||||||
|
marginBottom: 16
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -148,8 +151,7 @@ class E2EEncryptionSecurityView extends React.Component<IE2EEncryptionSecurityVi
|
||||||
testID='e2e-encryption-security-view-change-password'
|
testID='e2e-encryption-security-view-change-password'
|
||||||
/>
|
/>
|
||||||
</List.Section>
|
</List.Section>
|
||||||
|
<List.Separator style={styles.separator} />
|
||||||
<List.Separator />
|
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
@ -760,7 +760,8 @@ class RoomActionsView extends React.Component<IRoomActionsViewProps, IRoomAction
|
||||||
rid,
|
rid,
|
||||||
t,
|
t,
|
||||||
room,
|
room,
|
||||||
member
|
member,
|
||||||
|
fromRid: room.rid
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,8 @@ import { ILivechatVisitor } from '../../definitions/ILivechatVisitor';
|
||||||
import { callJitsi } from '../../lib/methods';
|
import { callJitsi } from '../../lib/methods';
|
||||||
import { getRoomTitle, getUidDirectMessage, hasPermission } from '../../lib/methods/helpers';
|
import { getRoomTitle, getUidDirectMessage, hasPermission } from '../../lib/methods/helpers';
|
||||||
import { Services } from '../../lib/services';
|
import { Services } from '../../lib/services';
|
||||||
|
import { getSubscriptionByRoomId } from '../../lib/database/services/Subscription';
|
||||||
|
import { handleIgnore } from '../../lib/methods/helpers/handleIgnore';
|
||||||
|
|
||||||
interface IGetRoomTitle {
|
interface IGetRoomTitle {
|
||||||
room: ISubscription;
|
room: ISubscription;
|
||||||
|
@ -108,6 +110,7 @@ interface IRoomInfoViewState {
|
||||||
room: ISubscription;
|
room: ISubscription;
|
||||||
roomUser: IUserParsed | ILivechatVisitorModified;
|
roomUser: IUserParsed | ILivechatVisitorModified;
|
||||||
showEdit: boolean;
|
showEdit: boolean;
|
||||||
|
roomFromRid?: TSubscriptionModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
class RoomInfoView extends React.Component<IRoomInfoViewProps, IRoomInfoViewState> {
|
class RoomInfoView extends React.Component<IRoomInfoViewProps, IRoomInfoViewState> {
|
||||||
|
@ -121,22 +124,29 @@ class RoomInfoView extends React.Component<IRoomInfoViewProps, IRoomInfoViewStat
|
||||||
|
|
||||||
private roomObservable?: Observable<TSubscriptionModel>;
|
private roomObservable?: Observable<TSubscriptionModel>;
|
||||||
|
|
||||||
|
private fromRid?: string;
|
||||||
|
|
||||||
|
private subscriptionRoomFromRid?: Subscription;
|
||||||
|
|
||||||
constructor(props: IRoomInfoViewProps) {
|
constructor(props: IRoomInfoViewProps) {
|
||||||
super(props);
|
super(props);
|
||||||
const room = props.route.params?.room;
|
const room = props.route.params?.room;
|
||||||
const roomUser = props.route.params?.member;
|
const roomUser = props.route.params?.member;
|
||||||
this.rid = props.route.params?.rid;
|
this.rid = props.route.params?.rid;
|
||||||
this.t = props.route.params?.t;
|
this.t = props.route.params?.t;
|
||||||
|
this.fromRid = props.route.params?.fromRid;
|
||||||
this.state = {
|
this.state = {
|
||||||
room: (room || { rid: this.rid, t: this.t }) as any,
|
room: (room || { rid: this.rid, t: this.t }) as any,
|
||||||
roomUser: roomUser || {},
|
roomUser: roomUser || {},
|
||||||
showEdit: false
|
showEdit: false,
|
||||||
|
roomFromRid: undefined
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
if (this.isDirect) {
|
if (this.isDirect) {
|
||||||
this.loadUser();
|
this.loadUser();
|
||||||
|
this.loadRoomFromRid();
|
||||||
} else {
|
} else {
|
||||||
this.loadRoom();
|
this.loadRoom();
|
||||||
}
|
}
|
||||||
|
@ -154,6 +164,9 @@ class RoomInfoView extends React.Component<IRoomInfoViewProps, IRoomInfoViewStat
|
||||||
if (this.subscription && this.subscription.unsubscribe) {
|
if (this.subscription && this.subscription.unsubscribe) {
|
||||||
this.subscription.unsubscribe();
|
this.subscription.unsubscribe();
|
||||||
}
|
}
|
||||||
|
if (this.subscriptionRoomFromRid && this.subscriptionRoomFromRid.unsubscribe) {
|
||||||
|
this.subscriptionRoomFromRid.unsubscribe();
|
||||||
|
}
|
||||||
if (this.unsubscribeFocus) {
|
if (this.unsubscribeFocus) {
|
||||||
this.unsubscribeFocus();
|
this.unsubscribeFocus();
|
||||||
}
|
}
|
||||||
|
@ -266,6 +279,19 @@ class RoomInfoView extends React.Component<IRoomInfoViewProps, IRoomInfoViewStat
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
loadRoomFromRid = async () => {
|
||||||
|
if (this.fromRid) {
|
||||||
|
try {
|
||||||
|
const sub = await getSubscriptionByRoomId(this.fromRid);
|
||||||
|
this.subscriptionRoomFromRid = sub?.observe().subscribe(roomFromRid => {
|
||||||
|
this.setState({ roomFromRid });
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
loadRoom = async () => {
|
loadRoom = async () => {
|
||||||
const { room: roomState } = this.state;
|
const { room: roomState } = this.state;
|
||||||
const { route, editRoomPermission, editOmnichannelContact, editLivechatRoomCustomfields } = this.props;
|
const { route, editRoomPermission, editOmnichannelContact, editLivechatRoomCustomfields } = this.props;
|
||||||
|
@ -351,11 +377,32 @@ class RoomInfoView extends React.Component<IRoomInfoViewProps, IRoomInfoViewStat
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
handleCreateDirectMessage = async (onPress: () => void) => {
|
||||||
|
try {
|
||||||
|
if (this.isDirect) {
|
||||||
|
await this.createDirect();
|
||||||
|
}
|
||||||
|
onPress();
|
||||||
|
} catch {
|
||||||
|
EventEmitter.emit(LISTENER, {
|
||||||
|
message: I18n.t('error-action-not-allowed', { action: I18n.t('Create_Direct_Messages') })
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
videoCall = () => {
|
videoCall = () => {
|
||||||
const { room } = this.state;
|
const { room } = this.state;
|
||||||
callJitsi(room);
|
callJitsi(room);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
handleBlockUser = async (rid: string, blocked: string, block: boolean) => {
|
||||||
|
logEvent(events.RI_TOGGLE_BLOCK_USER);
|
||||||
|
try {
|
||||||
|
await Services.toggleBlockUser(rid, blocked, block);
|
||||||
|
} catch (e) {
|
||||||
|
log(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
renderAvatar = (room: ISubscription, roomUser: IUserParsed) => {
|
renderAvatar = (room: ISubscription, roomUser: IUserParsed) => {
|
||||||
const { theme } = this.props;
|
const { theme } = this.props;
|
||||||
|
|
||||||
|
@ -370,36 +417,54 @@ class RoomInfoView extends React.Component<IRoomInfoViewProps, IRoomInfoViewStat
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
renderButton = (onPress: () => void, iconName: TIconsName, text: string) => {
|
renderButton = (onPress: () => void, iconName: TIconsName, text: string, danger?: boolean) => {
|
||||||
const { theme } = this.props;
|
const { theme } = this.props;
|
||||||
|
const color = danger ? themes[theme].dangerColor : themes[theme].actionTintColor;
|
||||||
const onActionPress = async () => {
|
|
||||||
try {
|
|
||||||
if (this.isDirect) {
|
|
||||||
await this.createDirect();
|
|
||||||
}
|
|
||||||
onPress();
|
|
||||||
} catch {
|
|
||||||
EventEmitter.emit(LISTENER, {
|
|
||||||
message: I18n.t('error-action-not-allowed', { action: I18n.t('Create_Direct_Messages') })
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<BorderlessButton onPress={onActionPress} style={styles.roomButton}>
|
<BorderlessButton testID={`room-info-view-${iconName}`} onPress={onPress} style={styles.roomButton}>
|
||||||
<CustomIcon name={iconName} size={30} color={themes[theme].actionTintColor} />
|
<CustomIcon name={iconName} size={30} color={color} />
|
||||||
<Text style={[styles.roomButtonText, { color: themes[theme].actionTintColor }]}>{text}</Text>
|
<Text style={[styles.roomButtonText, { color }]}>{text}</Text>
|
||||||
</BorderlessButton>
|
</BorderlessButton>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
renderButtons = () => {
|
renderButtons = () => {
|
||||||
|
const { roomFromRid, roomUser } = this.state;
|
||||||
const { jitsiEnabled } = this.props;
|
const { jitsiEnabled } = this.props;
|
||||||
|
|
||||||
|
const isFromDm = roomFromRid?.rid ? new RegExp(roomUser._id).test(roomFromRid.rid) : false;
|
||||||
|
const isDirectFromSaved = this.isDirect && this.fromRid && roomFromRid;
|
||||||
|
|
||||||
|
// Following the web behavior, when is a DM with myself, shouldn't appear block or ignore option
|
||||||
|
const isDmWithMyself = roomFromRid?.uids && roomFromRid.uids?.filter(uid => uid !== roomUser._id).length === 0;
|
||||||
|
|
||||||
|
const ignored = roomFromRid?.ignored;
|
||||||
|
const isIgnored = ignored?.includes?.(roomUser._id);
|
||||||
|
|
||||||
|
const blocker = roomFromRid?.blocker;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View style={styles.roomButtonsContainer}>
|
<View style={styles.roomButtonsContainer}>
|
||||||
{this.renderButton(this.goRoom, 'message', I18n.t('Message'))}
|
{this.renderButton(() => this.handleCreateDirectMessage(this.goRoom), 'message', I18n.t('Message'))}
|
||||||
{jitsiEnabled && this.isDirect ? this.renderButton(this.videoCall, 'camera', I18n.t('Video_call')) : null}
|
{jitsiEnabled && this.isDirect
|
||||||
|
? this.renderButton(() => this.handleCreateDirectMessage(this.videoCall), 'camera', I18n.t('Video_call'))
|
||||||
|
: null}
|
||||||
|
{isDirectFromSaved && !isFromDm && !isDmWithMyself
|
||||||
|
? this.renderButton(
|
||||||
|
() => handleIgnore(roomUser._id, !isIgnored, roomFromRid.rid),
|
||||||
|
'ignore',
|
||||||
|
I18n.t(isIgnored ? 'Unignore' : 'Ignore'),
|
||||||
|
true
|
||||||
|
)
|
||||||
|
: null}
|
||||||
|
{isDirectFromSaved && isFromDm
|
||||||
|
? this.renderButton(
|
||||||
|
() => this.handleBlockUser(roomFromRid.rid, roomUser._id, !blocker),
|
||||||
|
'ignore',
|
||||||
|
I18n.t(`${blocker ? 'Unblock' : 'Block'}_user`),
|
||||||
|
true
|
||||||
|
)
|
||||||
|
: null}
|
||||||
</View>
|
</View>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
@ -217,20 +217,6 @@ export const handleRemoveUserFromRoom = async (
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const handleIgnore = async (selectedUser: TUserModel, ignore: boolean, rid: string) => {
|
|
||||||
try {
|
|
||||||
await Services.ignoreUser({
|
|
||||||
rid,
|
|
||||||
userId: selectedUser._id,
|
|
||||||
ignore
|
|
||||||
});
|
|
||||||
const message = I18n.t(ignore ? 'User_has_been_ignored' : 'User_has_been_unignored');
|
|
||||||
EventEmitter.emit(LISTENER, { message });
|
|
||||||
} catch (e) {
|
|
||||||
log(e);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export const handleOwner = async (
|
export const handleOwner = async (
|
||||||
selectedUser: TUserModel,
|
selectedUser: TUserModel,
|
||||||
isOwner: boolean,
|
isOwner: boolean,
|
||||||
|
|
|
@ -16,6 +16,7 @@ import { TSubscriptionModel, TUserModel } from '../../definitions';
|
||||||
import I18n from '../../i18n';
|
import I18n from '../../i18n';
|
||||||
import { useAppSelector, usePermissions } from '../../lib/hooks';
|
import { useAppSelector, usePermissions } from '../../lib/hooks';
|
||||||
import { getRoomTitle, isGroupChat } from '../../lib/methods/helpers';
|
import { getRoomTitle, isGroupChat } from '../../lib/methods/helpers';
|
||||||
|
import { handleIgnore } from '../../lib/methods/helpers/handleIgnore';
|
||||||
import { showConfirmationAlert } from '../../lib/methods/helpers/info';
|
import { showConfirmationAlert } from '../../lib/methods/helpers/info';
|
||||||
import log from '../../lib/methods/helpers/log';
|
import log from '../../lib/methods/helpers/log';
|
||||||
import scrollPersistTaps from '../../lib/methods/helpers/scrollPersistTaps';
|
import scrollPersistTaps from '../../lib/methods/helpers/scrollPersistTaps';
|
||||||
|
@ -28,7 +29,6 @@ import ActionsSection from './components/ActionsSection';
|
||||||
import {
|
import {
|
||||||
fetchRole,
|
fetchRole,
|
||||||
fetchRoomMembersRoles,
|
fetchRoomMembersRoles,
|
||||||
handleIgnore,
|
|
||||||
handleLeader,
|
handleLeader,
|
||||||
handleModerator,
|
handleModerator,
|
||||||
handleMute,
|
handleMute,
|
||||||
|
@ -207,7 +207,7 @@ const RoomMembersView = (): React.ReactElement => {
|
||||||
options.push({
|
options.push({
|
||||||
icon: 'ignore',
|
icon: 'ignore',
|
||||||
title: I18n.t(isIgnored ? 'Unignore' : 'Ignore'),
|
title: I18n.t(isIgnored ? 'Unignore' : 'Ignore'),
|
||||||
onPress: () => handleIgnore(selectedUser, !isIgnored, room.rid),
|
onPress: () => handleIgnore(selectedUser._id, !isIgnored, room.rid),
|
||||||
testID: 'action-sheet-ignore-user'
|
testID: 'action-sheet-ignore-user'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -862,18 +862,11 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
|
||||||
|
|
||||||
onReactionLongPress = (message: TAnyMessageModel) => {
|
onReactionLongPress = (message: TAnyMessageModel) => {
|
||||||
this.setState({ selectedMessage: message });
|
this.setState({ selectedMessage: message });
|
||||||
const { showActionSheet, baseUrl, width } = this.props;
|
const { showActionSheet } = this.props;
|
||||||
const { selectedMessage } = this.state;
|
const { selectedMessage } = this.state;
|
||||||
this.messagebox?.current?.closeEmojiAndAction(showActionSheet, {
|
this.messagebox?.current?.closeEmojiAndAction(showActionSheet, {
|
||||||
children: (
|
children: <ReactionsList reactions={selectedMessage?.reactions} getCustomEmoji={this.getCustomEmoji} />,
|
||||||
<ReactionsList
|
snaps: ['50%', '80%'],
|
||||||
reactions={selectedMessage?.reactions}
|
|
||||||
baseUrl={baseUrl}
|
|
||||||
getCustomEmoji={this.getCustomEmoji}
|
|
||||||
width={width}
|
|
||||||
/>
|
|
||||||
),
|
|
||||||
snaps: ['50%'],
|
|
||||||
enableContentPanningGesture: false
|
enableContentPanningGesture: false
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -1116,10 +1109,13 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
|
||||||
|
|
||||||
navToRoomInfo = (navParam: any) => {
|
navToRoomInfo = (navParam: any) => {
|
||||||
const { navigation, user, isMasterDetail } = this.props;
|
const { navigation, user, isMasterDetail } = this.props;
|
||||||
|
const { room } = this.state;
|
||||||
|
|
||||||
logEvent(events[`ROOM_GO_${navParam.t === 'd' ? 'USER' : 'ROOM'}_INFO`]);
|
logEvent(events[`ROOM_GO_${navParam.t === 'd' ? 'USER' : 'ROOM'}_INFO`]);
|
||||||
if (navParam.rid === user.id) {
|
if (navParam.rid === user.id) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
navParam.fromRid = room.rid;
|
||||||
if (isMasterDetail) {
|
if (isMasterDetail) {
|
||||||
navParam.showCloseModal = true;
|
navParam.showCloseModal = true;
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
|
|
|
@ -91,14 +91,15 @@ class ScreenLockConfigView extends React.Component<IScreenLockConfigViewProps, I
|
||||||
const { server } = this.props;
|
const { server } = this.props;
|
||||||
const serversDB = database.servers;
|
const serversDB = database.servers;
|
||||||
const serversCollection = serversDB.get('servers');
|
const serversCollection = serversDB.get('servers');
|
||||||
const hasBiometry = userPreferences.getBool(BIOMETRY_ENABLED_KEY) ?? DEFAULT_BIOMETRY;
|
|
||||||
try {
|
try {
|
||||||
this.serverRecord = await serversCollection.find(server);
|
this.serverRecord = await serversCollection.find(server);
|
||||||
this.setState({
|
this.setState(
|
||||||
|
{
|
||||||
autoLock: this.serverRecord?.autoLock,
|
autoLock: this.serverRecord?.autoLock,
|
||||||
autoLockTime: this.serverRecord?.autoLockTime === null ? DEFAULT_AUTO_LOCK : this.serverRecord?.autoLockTime,
|
autoLockTime: this.serverRecord?.autoLockTime === null ? DEFAULT_AUTO_LOCK : this.serverRecord?.autoLockTime
|
||||||
biometry: hasBiometry
|
},
|
||||||
});
|
() => this.hasBiometry()
|
||||||
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// Do nothing
|
// Do nothing
|
||||||
}
|
}
|
||||||
|
@ -119,6 +120,11 @@ class ScreenLockConfigView extends React.Component<IScreenLockConfigViewProps, I
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
hasBiometry = () => {
|
||||||
|
const biometry = userPreferences.getBool(BIOMETRY_ENABLED_KEY) ?? DEFAULT_BIOMETRY;
|
||||||
|
this.setState({ biometry });
|
||||||
|
};
|
||||||
|
|
||||||
changePasscode = async ({ force }: { force: boolean }) => {
|
changePasscode = async ({ force }: { force: boolean }) => {
|
||||||
logEvent(events.SLC_CHANGE_PASSCODE);
|
logEvent(events.SLC_CHANGE_PASSCODE);
|
||||||
await changePasscode({ force });
|
await changePasscode({ force });
|
||||||
|
@ -133,6 +139,7 @@ class ScreenLockConfigView extends React.Component<IScreenLockConfigViewProps, I
|
||||||
if (autoLock) {
|
if (autoLock) {
|
||||||
try {
|
try {
|
||||||
await checkHasPasscode({ force: false });
|
await checkHasPasscode({ force: false });
|
||||||
|
this.hasBiometry();
|
||||||
} catch {
|
} catch {
|
||||||
this.toggleAutoLock();
|
this.toggleAutoLock();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,47 +1,51 @@
|
||||||
import CookieManager from '@react-native-cookies/cookies';
|
|
||||||
import { StackNavigationOptions } from '@react-navigation/stack';
|
|
||||||
import FastImage from 'react-native-fast-image';
|
|
||||||
import React from 'react';
|
|
||||||
import { Linking, Share } from 'react-native';
|
|
||||||
import Clipboard from '@react-native-clipboard/clipboard';
|
import Clipboard from '@react-native-clipboard/clipboard';
|
||||||
import { connect } from 'react-redux';
|
import CookieManager from '@react-native-cookies/cookies';
|
||||||
|
import { useNavigation } from '@react-navigation/native';
|
||||||
|
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 { appStart } from '../../actions/app';
|
import { appStart } from '../../actions/app';
|
||||||
import { logout } from '../../actions/login';
|
import { logout } from '../../actions/login';
|
||||||
import { selectServerRequest } from '../../actions/server';
|
import { selectServerRequest } from '../../actions/server';
|
||||||
import { APP_STORE_LINK, FDROID_MARKET_LINK, LICENSE_LINK, PLAY_MARKET_LINK, isFDroidBuild, themes } from '../../lib/constants';
|
|
||||||
import * as HeaderButton from '../../containers/HeaderButton';
|
import * as HeaderButton from '../../containers/HeaderButton';
|
||||||
import * as List from '../../containers/List';
|
import * as List from '../../containers/List';
|
||||||
import SafeAreaView from '../../containers/SafeAreaView';
|
import SafeAreaView from '../../containers/SafeAreaView';
|
||||||
import StatusBar from '../../containers/StatusBar';
|
import StatusBar from '../../containers/StatusBar';
|
||||||
import { LISTENER } from '../../containers/Toast';
|
import { LISTENER } from '../../containers/Toast';
|
||||||
import { IApplicationState, IBaseScreen, IUser, RootEnum } from '../../definitions';
|
import { RootEnum } from '../../definitions';
|
||||||
import I18n from '../../i18n';
|
import I18n from '../../i18n';
|
||||||
|
import { APP_STORE_LINK, FDROID_MARKET_LINK, isFDroidBuild, LICENSE_LINK, PLAY_MARKET_LINK } from '../../lib/constants';
|
||||||
import database from '../../lib/database';
|
import database from '../../lib/database';
|
||||||
import { IServer } from '../../reducers/server';
|
import { useAppSelector } from '../../lib/hooks';
|
||||||
import { getUserSelector } from '../../selectors/login';
|
import { clearCache } from '../../lib/methods';
|
||||||
import { SettingsStackParamList } from '../../stacks/types';
|
import { deleteAllAudioFiles } from '../../lib/methods/audioFile';
|
||||||
import { withTheme } from '../../theme';
|
|
||||||
import { getDeviceModel, getReadableVersion, isAndroid } from '../../lib/methods/helpers';
|
import { getDeviceModel, getReadableVersion, isAndroid } from '../../lib/methods/helpers';
|
||||||
import EventEmitter from '../../lib/methods/helpers/events';
|
import EventEmitter from '../../lib/methods/helpers/events';
|
||||||
import { showConfirmationAlert, showErrorAlert } from '../../lib/methods/helpers/info';
|
import { showConfirmationAlert, showErrorAlert } from '../../lib/methods/helpers/info';
|
||||||
import { events, logEvent } from '../../lib/methods/helpers/log';
|
import { events, logEvent } from '../../lib/methods/helpers/log';
|
||||||
import openLink from '../../lib/methods/helpers/openLink';
|
import openLink from '../../lib/methods/helpers/openLink';
|
||||||
import { onReviewPress } from '../../lib/methods/helpers/review';
|
import { onReviewPress } from '../../lib/methods/helpers/review';
|
||||||
import SidebarView from '../SidebarView';
|
|
||||||
import { clearCache } from '../../lib/methods';
|
|
||||||
import { Services } from '../../lib/services';
|
import { Services } from '../../lib/services';
|
||||||
import { deleteAllAudioFiles } from '../../lib/methods/audioFile';
|
import { getUserSelector } from '../../selectors/login';
|
||||||
|
import { SettingsStackParamList } from '../../stacks/types';
|
||||||
|
import { useTheme } from '../../theme';
|
||||||
|
import SidebarView from '../SidebarView';
|
||||||
|
|
||||||
type TLogScreenName = 'SE_GO_LANGUAGE' | 'SE_GO_DEFAULTBROWSER' | 'SE_GO_THEME' | 'SE_GO_PROFILE' | 'SE_GO_SECURITYPRIVACY';
|
type TLogScreenName = 'SE_GO_LANGUAGE' | 'SE_GO_DEFAULTBROWSER' | 'SE_GO_THEME' | 'SE_GO_PROFILE' | 'SE_GO_SECURITYPRIVACY';
|
||||||
|
|
||||||
interface ISettingsViewProps extends IBaseScreen<SettingsStackParamList, 'SettingsView'> {
|
const SettingsView = (): React.ReactElement => {
|
||||||
server: IServer;
|
const { colors, theme } = useTheme();
|
||||||
user: IUser;
|
const navigation = useNavigation<StackNavigationProp<SettingsStackParamList, 'SettingsView'>>();
|
||||||
}
|
const dispatch = useDispatch();
|
||||||
|
const isMasterDetail = useAppSelector(state => state.app.isMasterDetail);
|
||||||
|
const userId = useAppSelector(state => getUserSelector(state).id);
|
||||||
|
const { server, version } = useAppSelector(state => state.server);
|
||||||
|
|
||||||
class SettingsView extends React.Component<ISettingsViewProps> {
|
useLayoutEffect(() => {
|
||||||
static navigationOptions = ({ navigation, isMasterDetail }: ISettingsViewProps): StackNavigationOptions => ({
|
navigation.setOptions({
|
||||||
headerLeft: () =>
|
headerLeft: () =>
|
||||||
isMasterDetail ? (
|
isMasterDetail ? (
|
||||||
<HeaderButton.CloseModal navigation={navigation} testID='settings-view-close' />
|
<HeaderButton.CloseModal navigation={navigation} testID='settings-view-close' />
|
||||||
|
@ -50,13 +54,13 @@ class SettingsView extends React.Component<ISettingsViewProps> {
|
||||||
),
|
),
|
||||||
title: I18n.t('Settings')
|
title: I18n.t('Settings')
|
||||||
});
|
});
|
||||||
|
}, [navigation, isMasterDetail]);
|
||||||
|
|
||||||
checkCookiesAndLogout = async () => {
|
const checkCookiesAndLogout = async () => {
|
||||||
const { dispatch, user } = this.props;
|
|
||||||
const db = database.servers;
|
const db = database.servers;
|
||||||
const usersCollection = db.get('users');
|
const usersCollection = db.get('users');
|
||||||
try {
|
try {
|
||||||
const userRecord = await usersCollection.find(user.id);
|
const userRecord = await usersCollection.find(userId);
|
||||||
if (userRecord.isFromWebView) {
|
if (userRecord.isFromWebView) {
|
||||||
showConfirmationAlert({
|
showConfirmationAlert({
|
||||||
title: I18n.t('Clear_cookies_alert'),
|
title: I18n.t('Clear_cookies_alert'),
|
||||||
|
@ -79,25 +83,21 @@ class SettingsView extends React.Component<ISettingsViewProps> {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
handleLogout = () => {
|
const handleLogout = () => {
|
||||||
logEvent(events.SE_LOG_OUT);
|
logEvent(events.SE_LOG_OUT);
|
||||||
showConfirmationAlert({
|
showConfirmationAlert({
|
||||||
message: I18n.t('You_will_be_logged_out_of_this_application'),
|
message: I18n.t('You_will_be_logged_out_of_this_application'),
|
||||||
confirmationText: I18n.t('Logout'),
|
confirmationText: I18n.t('Logout'),
|
||||||
onPress: this.checkCookiesAndLogout
|
onPress: checkCookiesAndLogout
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
handleClearCache = () => {
|
const handleClearCache = () => {
|
||||||
logEvent(events.SE_CLEAR_LOCAL_SERVER_CACHE);
|
logEvent(events.SE_CLEAR_LOCAL_SERVER_CACHE);
|
||||||
showConfirmationAlert({
|
showConfirmationAlert({
|
||||||
message: I18n.t('This_will_clear_all_your_offline_data'),
|
message: I18n.t('This_will_clear_all_your_offline_data'),
|
||||||
confirmationText: I18n.t('Clear'),
|
confirmationText: I18n.t('Clear'),
|
||||||
onPress: async () => {
|
onPress: async () => {
|
||||||
const {
|
|
||||||
server: { server },
|
|
||||||
dispatch
|
|
||||||
} = this.props;
|
|
||||||
dispatch(appStart({ root: RootEnum.ROOT_LOADING, text: I18n.t('Clear_cache_loading') }));
|
dispatch(appStart({ root: RootEnum.ROOT_LOADING, text: I18n.t('Clear_cache_loading') }));
|
||||||
await deleteAllAudioFiles(server);
|
await deleteAllAudioFiles(server);
|
||||||
await clearCache({ server });
|
await clearCache({ server });
|
||||||
|
@ -109,14 +109,13 @@ class SettingsView extends React.Component<ISettingsViewProps> {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
navigateToScreen = (screen: keyof SettingsStackParamList) => {
|
const navigateToScreen = (screen: keyof SettingsStackParamList) => {
|
||||||
const screenName = screen.replace('View', '').toUpperCase();
|
const screenName = screen.replace('View', '').toUpperCase();
|
||||||
logEvent(events[`SE_GO_${screenName}` as TLogScreenName]);
|
logEvent(events[`SE_GO_${screenName}` as TLogScreenName]);
|
||||||
const { navigation } = this.props;
|
|
||||||
navigation.navigate(screen);
|
navigation.navigate(screen);
|
||||||
};
|
};
|
||||||
|
|
||||||
sendEmail = async () => {
|
const sendEmail = async () => {
|
||||||
logEvent(events.SE_CONTACT_US);
|
logEvent(events.SE_CONTACT_US);
|
||||||
const subject = encodeURI('Rocket.Chat Mobile App Support');
|
const subject = encodeURI('Rocket.Chat Mobile App Support');
|
||||||
const email = encodeURI('support@rocket.chat');
|
const email = encodeURI('support@rocket.chat');
|
||||||
|
@ -132,7 +131,7 @@ class SettingsView extends React.Component<ISettingsViewProps> {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
shareApp = () => {
|
const shareApp = () => {
|
||||||
let message;
|
let message;
|
||||||
if (isAndroid) {
|
if (isAndroid) {
|
||||||
message = PLAY_MARKET_LINK;
|
message = PLAY_MARKET_LINK;
|
||||||
|
@ -145,33 +144,27 @@ class SettingsView extends React.Component<ISettingsViewProps> {
|
||||||
Share.share({ message });
|
Share.share({ message });
|
||||||
};
|
};
|
||||||
|
|
||||||
copyServerVersion = () => {
|
const saveToClipboard = async (content: string) => {
|
||||||
const {
|
|
||||||
server: { version }
|
|
||||||
} = this.props;
|
|
||||||
const vers = version as string;
|
|
||||||
logEvent(events.SE_COPY_SERVER_VERSION, { serverVersion: vers });
|
|
||||||
this.saveToClipboard(vers);
|
|
||||||
};
|
|
||||||
|
|
||||||
copyAppVersion = () => {
|
|
||||||
logEvent(events.SE_COPY_APP_VERSION, { appVersion: getReadableVersion });
|
|
||||||
this.saveToClipboard(getReadableVersion);
|
|
||||||
};
|
|
||||||
|
|
||||||
saveToClipboard = async (content: string) => {
|
|
||||||
await Clipboard.setString(content);
|
await Clipboard.setString(content);
|
||||||
EventEmitter.emit(LISTENER, { message: I18n.t('Copied_to_clipboard') });
|
EventEmitter.emit(LISTENER, { message: I18n.t('Copied_to_clipboard') });
|
||||||
};
|
};
|
||||||
|
|
||||||
onPressLicense = () => {
|
const copyServerVersion = () => {
|
||||||
|
const vers = version as string;
|
||||||
|
logEvent(events.SE_COPY_SERVER_VERSION, { serverVersion: vers });
|
||||||
|
saveToClipboard(vers);
|
||||||
|
};
|
||||||
|
|
||||||
|
const copyAppVersion = () => {
|
||||||
|
logEvent(events.SE_COPY_APP_VERSION, { appVersion: getReadableVersion });
|
||||||
|
saveToClipboard(getReadableVersion);
|
||||||
|
};
|
||||||
|
|
||||||
|
const onPressLicense = () => {
|
||||||
logEvent(events.SE_READ_LICENSE);
|
logEvent(events.SE_READ_LICENSE);
|
||||||
const { theme } = this.props;
|
|
||||||
openLink(LICENSE_LINK, theme);
|
openLink(LICENSE_LINK, theme);
|
||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
|
||||||
const { server, isMasterDetail, theme } = this.props;
|
|
||||||
return (
|
return (
|
||||||
<SafeAreaView testID='settings-view'>
|
<SafeAreaView testID='settings-view'>
|
||||||
<StatusBar />
|
<StatusBar />
|
||||||
|
@ -180,16 +173,16 @@ class SettingsView extends React.Component<ISettingsViewProps> {
|
||||||
<>
|
<>
|
||||||
<List.Section>
|
<List.Section>
|
||||||
<List.Separator />
|
<List.Separator />
|
||||||
<SidebarView theme={theme} />
|
<SidebarView />
|
||||||
<List.Separator />
|
<List.Separator />
|
||||||
</List.Section>
|
</List.Section>
|
||||||
<List.Section>
|
<List.Section>
|
||||||
<List.Separator />
|
<List.Separator />
|
||||||
<List.Item title='Display' onPress={() => this.navigateToScreen('DisplayPrefsView')} showActionIndicator />
|
<List.Item title='Display' onPress={() => navigateToScreen('DisplayPrefsView')} showActionIndicator />
|
||||||
<List.Separator />
|
<List.Separator />
|
||||||
<List.Item
|
<List.Item
|
||||||
title='Profile'
|
title='Profile'
|
||||||
onPress={() => this.navigateToScreen('ProfileView')}
|
onPress={() => navigateToScreen('ProfileView')}
|
||||||
showActionIndicator
|
showActionIndicator
|
||||||
testID='settings-profile'
|
testID='settings-profile'
|
||||||
/>
|
/>
|
||||||
|
@ -200,46 +193,41 @@ class SettingsView extends React.Component<ISettingsViewProps> {
|
||||||
|
|
||||||
<List.Section>
|
<List.Section>
|
||||||
<List.Separator />
|
<List.Separator />
|
||||||
<List.Item title='Contact_us' onPress={this.sendEmail} showActionIndicator testID='settings-view-contact' />
|
<List.Item title='Contact_us' onPress={sendEmail} showActionIndicator testID='settings-view-contact' />
|
||||||
<List.Separator />
|
<List.Separator />
|
||||||
<List.Item
|
<List.Item
|
||||||
title='Language'
|
title='Language'
|
||||||
onPress={() => this.navigateToScreen('LanguageView')}
|
onPress={() => navigateToScreen('LanguageView')}
|
||||||
showActionIndicator
|
showActionIndicator
|
||||||
testID='settings-view-language'
|
testID='settings-view-language'
|
||||||
/>
|
/>
|
||||||
<List.Separator />
|
<List.Separator />
|
||||||
{!isFDroidBuild ? (
|
{!isFDroidBuild ? (
|
||||||
<>
|
<>
|
||||||
<List.Item
|
<List.Item title='Review_this_app' showActionIndicator onPress={onReviewPress} testID='settings-view-review-app' />
|
||||||
title='Review_this_app'
|
|
||||||
showActionIndicator
|
|
||||||
onPress={onReviewPress}
|
|
||||||
testID='settings-view-review-app'
|
|
||||||
/>
|
|
||||||
</>
|
</>
|
||||||
) : null}
|
) : null}
|
||||||
<List.Separator />
|
<List.Separator />
|
||||||
<List.Item title='Share_this_app' showActionIndicator onPress={this.shareApp} testID='settings-view-share-app' />
|
<List.Item title='Share_this_app' showActionIndicator onPress={shareApp} testID='settings-view-share-app' />
|
||||||
<List.Separator />
|
<List.Separator />
|
||||||
<List.Item
|
<List.Item
|
||||||
title='Default_browser'
|
title='Default_browser'
|
||||||
showActionIndicator
|
showActionIndicator
|
||||||
onPress={() => this.navigateToScreen('DefaultBrowserView')}
|
onPress={() => navigateToScreen('DefaultBrowserView')}
|
||||||
testID='settings-view-default-browser'
|
testID='settings-view-default-browser'
|
||||||
/>
|
/>
|
||||||
<List.Separator />
|
<List.Separator />
|
||||||
<List.Item
|
<List.Item
|
||||||
title='Theme'
|
title='Theme'
|
||||||
showActionIndicator
|
showActionIndicator
|
||||||
onPress={() => this.navigateToScreen('ThemeView')}
|
onPress={() => navigateToScreen('ThemeView')}
|
||||||
testID='settings-view-theme'
|
testID='settings-view-theme'
|
||||||
/>
|
/>
|
||||||
<List.Separator />
|
<List.Separator />
|
||||||
<List.Item
|
<List.Item
|
||||||
title='Security_and_privacy'
|
title='Security_and_privacy'
|
||||||
showActionIndicator
|
showActionIndicator
|
||||||
onPress={() => this.navigateToScreen('SecurityPrivacyView')}
|
onPress={() => navigateToScreen('SecurityPrivacyView')}
|
||||||
testID='settings-view-security-privacy'
|
testID='settings-view-security-privacy'
|
||||||
/>
|
/>
|
||||||
<List.Separator />
|
<List.Separator />
|
||||||
|
@ -247,19 +235,19 @@ class SettingsView extends React.Component<ISettingsViewProps> {
|
||||||
|
|
||||||
<List.Section>
|
<List.Section>
|
||||||
<List.Separator />
|
<List.Separator />
|
||||||
<List.Item title='License' onPress={this.onPressLicense} showActionIndicator testID='settings-view-license' />
|
<List.Item title='License' onPress={onPressLicense} showActionIndicator testID='settings-view-license' />
|
||||||
<List.Separator />
|
<List.Separator />
|
||||||
<List.Item
|
<List.Item
|
||||||
title={I18n.t('Version_no', { version: getReadableVersion })}
|
title={I18n.t('Version_no', { version: getReadableVersion })}
|
||||||
onPress={this.copyAppVersion}
|
onPress={copyAppVersion}
|
||||||
testID='settings-view-version'
|
testID='settings-view-version'
|
||||||
translateTitle={false}
|
translateTitle={false}
|
||||||
/>
|
/>
|
||||||
<List.Separator />
|
<List.Separator />
|
||||||
<List.Item
|
<List.Item
|
||||||
title={I18n.t('Server_version', { version: server.version })}
|
title={I18n.t('Server_version', { version })}
|
||||||
onPress={this.copyServerVersion}
|
onPress={copyServerVersion}
|
||||||
subtitle={`${server.server.split('//')[1]}`}
|
subtitle={`${server.split('//')[1]}`}
|
||||||
testID='settings-view-server-version'
|
testID='settings-view-server-version'
|
||||||
translateTitle={false}
|
translateTitle={false}
|
||||||
translateSubtitle={false}
|
translateSubtitle={false}
|
||||||
|
@ -272,30 +260,23 @@ class SettingsView extends React.Component<ISettingsViewProps> {
|
||||||
<List.Item
|
<List.Item
|
||||||
title='Clear_cache'
|
title='Clear_cache'
|
||||||
testID='settings-view-clear-cache'
|
testID='settings-view-clear-cache'
|
||||||
onPress={this.handleClearCache}
|
onPress={handleClearCache}
|
||||||
showActionIndicator
|
showActionIndicator
|
||||||
color={themes[theme].dangerColor}
|
color={colors.dangerColor}
|
||||||
/>
|
/>
|
||||||
<List.Separator />
|
<List.Separator />
|
||||||
<List.Item
|
<List.Item
|
||||||
title='Logout'
|
title='Logout'
|
||||||
testID='settings-logout'
|
testID='settings-logout'
|
||||||
onPress={this.handleLogout}
|
onPress={handleLogout}
|
||||||
showActionIndicator
|
showActionIndicator
|
||||||
color={themes[theme].dangerColor}
|
color={colors.dangerColor}
|
||||||
/>
|
/>
|
||||||
<List.Separator />
|
<List.Separator />
|
||||||
</List.Section>
|
</List.Section>
|
||||||
</List.Container>
|
</List.Container>
|
||||||
</SafeAreaView>
|
</SafeAreaView>
|
||||||
);
|
);
|
||||||
}
|
};
|
||||||
}
|
|
||||||
|
|
||||||
const mapStateToProps = (state: IApplicationState) => ({
|
export default SettingsView;
|
||||||
server: state.server,
|
|
||||||
user: getUserSelector(state),
|
|
||||||
isMasterDetail: state.app.isMasterDetail
|
|
||||||
});
|
|
||||||
|
|
||||||
export default connect(mapStateToProps)(withTheme(SettingsView));
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ interface ISidebarProps {
|
||||||
state?: DrawerNavigationState<DrawerParamList>;
|
state?: DrawerNavigationState<DrawerParamList>;
|
||||||
Site_Name: string;
|
Site_Name: string;
|
||||||
user: IUser;
|
user: IUser;
|
||||||
theme: TSupportedThemes;
|
theme?: TSupportedThemes;
|
||||||
loadingServer: boolean;
|
loadingServer: boolean;
|
||||||
useRealName: boolean;
|
useRealName: boolean;
|
||||||
allowStatusMessage: boolean;
|
allowStatusMessage: boolean;
|
||||||
|
@ -167,10 +167,10 @@ class Sidebar extends Component<ISidebarProps, ISidebarState> {
|
||||||
<List.Separator />
|
<List.Separator />
|
||||||
<SidebarItem
|
<SidebarItem
|
||||||
text={I18n.t('Admin_Panel')}
|
text={I18n.t('Admin_Panel')}
|
||||||
left={<CustomIcon name='settings' size={20} color={themes[theme].titleText} />}
|
left={<CustomIcon name='settings' size={20} color={themes[theme!].titleText} />}
|
||||||
onPress={() => this.sidebarNavigate(routeName)}
|
onPress={() => this.sidebarNavigate(routeName)}
|
||||||
testID='sidebar-admin'
|
testID='sidebar-admin'
|
||||||
theme={theme}
|
theme={theme!}
|
||||||
current={this.currentItemKey === routeName}
|
current={this.currentItemKey === routeName}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
|
@ -183,34 +183,34 @@ class Sidebar extends Component<ISidebarProps, ISidebarState> {
|
||||||
<>
|
<>
|
||||||
<SidebarItem
|
<SidebarItem
|
||||||
text={I18n.t('Chats')}
|
text={I18n.t('Chats')}
|
||||||
left={<CustomIcon name='message' size={20} color={themes[theme].titleText} />}
|
left={<CustomIcon name='message' size={20} color={themes[theme!].titleText} />}
|
||||||
onPress={() => this.sidebarNavigate('ChatsStackNavigator')}
|
onPress={() => this.sidebarNavigate('ChatsStackNavigator')}
|
||||||
testID='sidebar-chats'
|
testID='sidebar-chats'
|
||||||
theme={theme}
|
theme={theme!}
|
||||||
current={this.currentItemKey === 'ChatsStackNavigator'}
|
current={this.currentItemKey === 'ChatsStackNavigator'}
|
||||||
/>
|
/>
|
||||||
<SidebarItem
|
<SidebarItem
|
||||||
text={I18n.t('Profile')}
|
text={I18n.t('Profile')}
|
||||||
left={<CustomIcon name='user' size={20} color={themes[theme].titleText} />}
|
left={<CustomIcon name='user' size={20} color={themes[theme!].titleText} />}
|
||||||
onPress={() => this.sidebarNavigate('ProfileStackNavigator')}
|
onPress={() => this.sidebarNavigate('ProfileStackNavigator')}
|
||||||
testID='sidebar-profile'
|
testID='sidebar-profile'
|
||||||
theme={theme}
|
theme={theme!}
|
||||||
current={this.currentItemKey === 'ProfileStackNavigator'}
|
current={this.currentItemKey === 'ProfileStackNavigator'}
|
||||||
/>
|
/>
|
||||||
<SidebarItem
|
<SidebarItem
|
||||||
text={I18n.t('Display')}
|
text={I18n.t('Display')}
|
||||||
left={<CustomIcon name='sort' size={20} color={themes[theme].titleText} />}
|
left={<CustomIcon name='sort' size={20} color={themes[theme!].titleText} />}
|
||||||
onPress={() => this.sidebarNavigate('DisplayPrefStackNavigator')}
|
onPress={() => this.sidebarNavigate('DisplayPrefStackNavigator')}
|
||||||
testID='sidebar-display'
|
testID='sidebar-display'
|
||||||
theme={theme}
|
theme={theme!}
|
||||||
current={this.currentItemKey === 'DisplayPrefStackNavigator'}
|
current={this.currentItemKey === 'DisplayPrefStackNavigator'}
|
||||||
/>
|
/>
|
||||||
<SidebarItem
|
<SidebarItem
|
||||||
text={I18n.t('Settings')}
|
text={I18n.t('Settings')}
|
||||||
left={<CustomIcon name='administration' size={20} color={themes[theme].titleText} />}
|
left={<CustomIcon name='administration' size={20} color={themes[theme!].titleText} />}
|
||||||
onPress={() => this.sidebarNavigate('SettingsStackNavigator')}
|
onPress={() => this.sidebarNavigate('SettingsStackNavigator')}
|
||||||
testID='sidebar-settings'
|
testID='sidebar-settings'
|
||||||
theme={theme}
|
theme={theme!}
|
||||||
current={this.currentItemKey === 'SettingsStackNavigator'}
|
current={this.currentItemKey === 'SettingsStackNavigator'}
|
||||||
/>
|
/>
|
||||||
{this.renderAdmin()}
|
{this.renderAdmin()}
|
||||||
|
@ -224,8 +224,8 @@ class Sidebar extends Component<ISidebarProps, ISidebarState> {
|
||||||
<SidebarItem
|
<SidebarItem
|
||||||
text={user.statusText || I18n.t('Edit_Status')}
|
text={user.statusText || I18n.t('Edit_Status')}
|
||||||
left={<Status size={24} status={user?.status} />}
|
left={<Status size={24} status={user?.status} />}
|
||||||
theme={theme}
|
theme={theme!}
|
||||||
right={<CustomIcon name='edit' size={20} color={themes[theme].titleText} />}
|
right={<CustomIcon name='edit' size={20} color={themes[theme!].titleText} />}
|
||||||
onPress={() => this.sidebarNavigate('StatusView')}
|
onPress={() => this.sidebarNavigate('StatusView')}
|
||||||
testID={`sidebar-custom-status-${user.status}`}
|
testID={`sidebar-custom-status-${user.status}`}
|
||||||
/>
|
/>
|
||||||
|
@ -239,12 +239,12 @@ class Sidebar extends Component<ISidebarProps, ISidebarState> {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<SafeAreaView testID='sidebar-view' style={{ backgroundColor: themes[theme].focusedBackground }} vertical={isMasterDetail}>
|
<SafeAreaView testID='sidebar-view' style={{ backgroundColor: themes[theme!].focusedBackground }} vertical={isMasterDetail}>
|
||||||
<ScrollView
|
<ScrollView
|
||||||
style={[
|
style={[
|
||||||
styles.container,
|
styles.container,
|
||||||
{
|
{
|
||||||
backgroundColor: isMasterDetail ? themes[theme].backgroundColor : themes[theme].focusedBackground
|
backgroundColor: isMasterDetail ? themes[theme!].backgroundColor : themes[theme!].focusedBackground
|
||||||
}
|
}
|
||||||
]}
|
]}
|
||||||
{...scrollPersistTaps}
|
{...scrollPersistTaps}
|
||||||
|
@ -254,12 +254,12 @@ class Sidebar extends Component<ISidebarProps, ISidebarState> {
|
||||||
<Avatar text={user.username} style={styles.avatar} size={30} />
|
<Avatar text={user.username} style={styles.avatar} size={30} />
|
||||||
<View style={styles.headerTextContainer}>
|
<View style={styles.headerTextContainer}>
|
||||||
<View style={styles.headerUsername}>
|
<View style={styles.headerUsername}>
|
||||||
<Text numberOfLines={1} style={[styles.username, { color: themes[theme].titleText }]}>
|
<Text numberOfLines={1} style={[styles.username, { color: themes[theme!].titleText }]}>
|
||||||
{useRealName ? user.name : user.username}
|
{useRealName ? user.name : user.username}
|
||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
<Text
|
<Text
|
||||||
style={[styles.currentServerText, { color: themes[theme].titleText }]}
|
style={[styles.currentServerText, { color: themes[theme!].titleText }]}
|
||||||
numberOfLines={1}
|
numberOfLines={1}
|
||||||
accessibilityLabel={`Connected to ${baseUrl}`}
|
accessibilityLabel={`Connected to ${baseUrl}`}
|
||||||
>
|
>
|
||||||
|
|
|
@ -51,6 +51,9 @@ const data = {
|
||||||
detoxpublicprotected: {
|
detoxpublicprotected: {
|
||||||
name: 'detox-public-protected',
|
name: 'detox-public-protected',
|
||||||
joinCode: '123'
|
joinCode: '123'
|
||||||
|
},
|
||||||
|
detoxpublicignore: {
|
||||||
|
name: `detox-public-ignore-${value}`
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
groups: {
|
groups: {
|
||||||
|
|
|
@ -306,7 +306,7 @@ describe('Room screen', () => {
|
||||||
.withTimeout(60000);
|
.withTimeout(60000);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should show reaction picker on add reaction button pressed and have frequently used emoji, and dismiss review nag', async () => {
|
it('should show reaction picker on add reaction button pressed and have frequently used emoji', async () => {
|
||||||
await element(by.id('message-add-reaction')).tap();
|
await element(by.id('message-add-reaction')).tap();
|
||||||
await waitFor(element(by.id('reaction-picker')))
|
await waitFor(element(by.id('reaction-picker')))
|
||||||
.toExist()
|
.toExist()
|
||||||
|
@ -324,6 +324,19 @@ describe('Room screen', () => {
|
||||||
.withTimeout(60000);
|
.withTimeout(60000);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should ask for review', async () => {
|
||||||
|
await dismissReviewNag(); // TODO: Create a proper test for this elsewhere.
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should open/close reactions list', async () => {
|
||||||
|
await element(by.id('message-reaction-:grinning:')).longPress();
|
||||||
|
await waitFor(element(by.id('reactionsList')))
|
||||||
|
.toExist()
|
||||||
|
.withTimeout(4000);
|
||||||
|
await expect(element(by.id('action-sheet-handle'))).toBeVisible();
|
||||||
|
await element(by.id('action-sheet-handle')).swipe('down', 'fast', 0.5);
|
||||||
|
});
|
||||||
|
|
||||||
it('should remove reaction', async () => {
|
it('should remove reaction', async () => {
|
||||||
await element(by.id('message-reaction-:grinning:')).tap();
|
await element(by.id('message-reaction-:grinning:')).tap();
|
||||||
await waitFor(element(by.id('message-reaction-:grinning:')))
|
await waitFor(element(by.id('message-reaction-:grinning:')))
|
||||||
|
@ -331,10 +344,6 @@ describe('Room screen', () => {
|
||||||
.withTimeout(60000);
|
.withTimeout(60000);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should ask for review', async () => {
|
|
||||||
await dismissReviewNag(); // TODO: Create a proper test for this elsewhere.
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should edit message', async () => {
|
it('should edit message', async () => {
|
||||||
await mockMessage('edit');
|
await mockMessage('edit');
|
||||||
await element(by[textMatcher](`${data.random}edit`))
|
await element(by[textMatcher](`${data.random}edit`))
|
||||||
|
|
|
@ -0,0 +1,103 @@
|
||||||
|
import { expect } from 'detox';
|
||||||
|
|
||||||
|
import data from '../../data';
|
||||||
|
import { navigateToLogin, login, searchRoom, sleep, platformTypes, TTextMatcher, tapBack } from '../../helpers/app';
|
||||||
|
import { sendMessage } from '../../helpers/data_setup';
|
||||||
|
|
||||||
|
async function navigateToRoom(user: string) {
|
||||||
|
await searchRoom(`${user}`);
|
||||||
|
await element(by.id(`rooms-list-view-item-${user}`)).tap();
|
||||||
|
await waitFor(element(by.id('room-view')))
|
||||||
|
.toBeVisible()
|
||||||
|
.withTimeout(5000);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function navigateToInfoView() {
|
||||||
|
await element(by.id('room-header')).tap();
|
||||||
|
await waitFor(element(by.id('room-actions-view')))
|
||||||
|
.toExist()
|
||||||
|
.withTimeout(5000);
|
||||||
|
await element(by.id('room-actions-info')).tap();
|
||||||
|
await waitFor(element(by.id('room-info-view')))
|
||||||
|
.toExist()
|
||||||
|
.withTimeout(2000);
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('Ignore/Block User', () => {
|
||||||
|
const user = data.users.alternate.username;
|
||||||
|
let textMatcher: TTextMatcher;
|
||||||
|
|
||||||
|
before(async () => {
|
||||||
|
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
|
||||||
|
({ textMatcher } = platformTypes[device.getPlatform()]);
|
||||||
|
await navigateToLogin();
|
||||||
|
await login(data.users.regular.username, data.users.regular.password);
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Usage', () => {
|
||||||
|
describe('Block user from DM', () => {
|
||||||
|
it('should go to user info view', async () => {
|
||||||
|
await navigateToRoom(user);
|
||||||
|
await navigateToInfoView();
|
||||||
|
});
|
||||||
|
it('should block user', async () => {
|
||||||
|
await expect(element(by.id('room-info-view-ignore').withDescendant(by[textMatcher]('Block user')))).toExist();
|
||||||
|
await element(by.id('room-info-view-ignore')).tap();
|
||||||
|
await waitFor(element(by.id('room-info-view-ignore').withDescendant(by[textMatcher]('Unblock user'))))
|
||||||
|
.toExist()
|
||||||
|
.withTimeout(2000);
|
||||||
|
await tapBack();
|
||||||
|
await waitFor(element(by.id('room-actions-view')))
|
||||||
|
.toBeVisible()
|
||||||
|
.withTimeout(5000);
|
||||||
|
await tapBack();
|
||||||
|
await expect(element(by[textMatcher]('This room is blocked'))).toExist();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should unblock user', async () => {
|
||||||
|
await navigateToInfoView();
|
||||||
|
await element(by.id('room-info-view-ignore')).tap();
|
||||||
|
await expect(element(by.id('room-info-view-ignore').withDescendant(by[textMatcher]('Block user')))).toExist();
|
||||||
|
await tapBack();
|
||||||
|
await waitFor(element(by.id('room-actions-view')))
|
||||||
|
.toBeVisible()
|
||||||
|
.withTimeout(5000);
|
||||||
|
await tapBack();
|
||||||
|
await expect(element(by.id('messagebox'))).toBeVisible();
|
||||||
|
await tapBack();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
describe('Ignore user from Message', () => {
|
||||||
|
it('should ignore user from message', async () => {
|
||||||
|
const channelName = data.channels.detoxpublicignore.name;
|
||||||
|
await navigateToRoom(channelName);
|
||||||
|
await element(by.id('room-view-join-button')).tap();
|
||||||
|
await sleep(300);
|
||||||
|
await sendMessage(data.users.alternate, channelName, 'message-01');
|
||||||
|
await sendMessage(data.users.alternate, channelName, 'message-02');
|
||||||
|
await waitFor(element(by[textMatcher](user)).atIndex(0))
|
||||||
|
.toExist()
|
||||||
|
.withTimeout(30000);
|
||||||
|
await sleep(300);
|
||||||
|
await element(by[textMatcher](user)).atIndex(0).tap();
|
||||||
|
await expect(element(by.id('room-info-view-ignore').withDescendant(by[textMatcher]('Ignore')))).toExist();
|
||||||
|
await element(by.id('room-info-view-ignore')).tap();
|
||||||
|
await expect(element(by.id('room-info-view-ignore').withDescendant(by[textMatcher]('Unignore')))).toExist();
|
||||||
|
await tapBack();
|
||||||
|
});
|
||||||
|
it('should tap to display message', async () => {
|
||||||
|
await expect(element(by[textMatcher]('Message ignored. Tap to display it.')).atIndex(0)).toExist();
|
||||||
|
await element(by[textMatcher]('Message ignored. Tap to display it.')).atIndex(0).tap();
|
||||||
|
await waitFor(element(by[textMatcher](user)))
|
||||||
|
.toBeVisible()
|
||||||
|
.withTimeout(1000);
|
||||||
|
await element(by[textMatcher](user)).atIndex(0).tap();
|
||||||
|
await expect(element(by.id('room-info-view-ignore').withDescendant(by[textMatcher]('Unignore')))).toExist();
|
||||||
|
await element(by.id('room-info-view-ignore')).tap();
|
||||||
|
await expect(element(by.id('room-info-view-ignore').withDescendant(by[textMatcher]('Ignore')))).toExist();
|
||||||
|
await tapBack();
|
||||||
|
await expect(element(by[textMatcher]('message-02')).atIndex(0)).toBeVisible();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
|
@ -370,7 +370,7 @@ PODS:
|
||||||
- React-Core
|
- React-Core
|
||||||
- react-native-netinfo (6.0.0):
|
- react-native-netinfo (6.0.0):
|
||||||
- React-Core
|
- React-Core
|
||||||
- react-native-notifications (4.2.4):
|
- react-native-notifications (4.3.1):
|
||||||
- React-Core
|
- React-Core
|
||||||
- react-native-orientation-locker (1.1.8):
|
- react-native-orientation-locker (1.1.8):
|
||||||
- React
|
- React
|
||||||
|
@ -487,7 +487,7 @@ PODS:
|
||||||
- React
|
- React
|
||||||
- rn-fetch-blob (0.12.0):
|
- rn-fetch-blob (0.12.0):
|
||||||
- React-Core
|
- React-Core
|
||||||
- RNBootSplash (3.2.4):
|
- RNBootSplash (4.3.2):
|
||||||
- React-Core
|
- React-Core
|
||||||
- RNCAsyncStorage (1.17.9):
|
- RNCAsyncStorage (1.17.9):
|
||||||
- React-Core
|
- React-Core
|
||||||
|
@ -946,7 +946,7 @@ SPEC CHECKSUMS:
|
||||||
react-native-jitsi-meet: 3e3ac5d0445091154119f94342efd55c8b1124ce
|
react-native-jitsi-meet: 3e3ac5d0445091154119f94342efd55c8b1124ce
|
||||||
react-native-mmkv-storage: ba38e5e813ea3d5d37af834a9d867b1ce10aa96d
|
react-native-mmkv-storage: ba38e5e813ea3d5d37af834a9d867b1ce10aa96d
|
||||||
react-native-netinfo: e849fc21ca2f4128a5726c801a82fc6f4a6db50d
|
react-native-netinfo: e849fc21ca2f4128a5726c801a82fc6f4a6db50d
|
||||||
react-native-notifications: 3de8ef9cd800e5db0225d9aa46b228d2b94ce51e
|
react-native-notifications: 33ec77006f7987bb22de8f1665889abc633b9196
|
||||||
react-native-orientation-locker: f0ca1a8e5031dab6b74bfb4ab33a17ed2c2fcb0d
|
react-native-orientation-locker: f0ca1a8e5031dab6b74bfb4ab33a17ed2c2fcb0d
|
||||||
react-native-restart: 733a51ad137f15b0f8dc34c4082e55af7da00979
|
react-native-restart: 733a51ad137f15b0f8dc34c4082e55af7da00979
|
||||||
react-native-safe-area-context: f0906bf8bc9835ac9a9d3f97e8bde2a997d8da79
|
react-native-safe-area-context: f0906bf8bc9835ac9a9d3f97e8bde2a997d8da79
|
||||||
|
@ -969,7 +969,7 @@ SPEC CHECKSUMS:
|
||||||
ReactNativeUiLib: cde7263a7d308b60161cd286f95c9433e79f2f7d
|
ReactNativeUiLib: cde7263a7d308b60161cd286f95c9433e79f2f7d
|
||||||
rn-extensions-share: 5fd84a80e6594706f0dfa1884f2d6d591b382cf5
|
rn-extensions-share: 5fd84a80e6594706f0dfa1884f2d6d591b382cf5
|
||||||
rn-fetch-blob: f065bb7ab7fb48dd002629f8bdcb0336602d3cba
|
rn-fetch-blob: f065bb7ab7fb48dd002629f8bdcb0336602d3cba
|
||||||
RNBootSplash: 4844706cbb56a3270556c9b94e59dedadccd47e4
|
RNBootSplash: 5f346163977573d6b2aeba1b25df9d2245c0d73c
|
||||||
RNCAsyncStorage: b2489b49e38c85e10ed45a888d13a2a4c7b32ea1
|
RNCAsyncStorage: b2489b49e38c85e10ed45a888d13a2a4c7b32ea1
|
||||||
RNCClipboard: cc054ad1e8a33d2a74cd13e565588b4ca928d8fd
|
RNCClipboard: cc054ad1e8a33d2a74cd13e565588b4ca928d8fd
|
||||||
RNCMaskedView: 0e1bc4bfa8365eba5fbbb71e07fbdc0555249489
|
RNCMaskedView: 0e1bc4bfa8365eba5fbbb71e07fbdc0555249489
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
|
0B27ED342956F07641034CD4 /* libPods-defaults-Rocket.Chat.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 95BB2D8B49B090E54CB0E6C4 /* libPods-defaults-Rocket.Chat.a */; };
|
||||||
0C6E2DE448364EA896869ADF /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B37C79D9BD0742CE936B6982 /* libc++.tbd */; };
|
0C6E2DE448364EA896869ADF /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B37C79D9BD0742CE936B6982 /* libc++.tbd */; };
|
||||||
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
|
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
|
||||||
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
|
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
|
||||||
|
@ -78,8 +79,6 @@
|
||||||
1EFEB59C2493B6640072EDC0 /* NotificationService.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 1EFEB5952493B6640072EDC0 /* NotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
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 */; };
|
24A2AEF2383D44B586D31C01 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 06BB44DD4855498082A744AD /* libz.tbd */; };
|
||||||
4C4C8603EF082F0A33A95522 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45D5C142B655F8EFD006792C /* ExpoModulesProvider.swift */; };
|
4C4C8603EF082F0A33A95522 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45D5C142B655F8EFD006792C /* ExpoModulesProvider.swift */; };
|
||||||
5D2080AFB7696E1A6A2B4209 /* libPods-defaults-Rocket.Chat.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F380AA6A42141BB1B0512548 /* libPods-defaults-Rocket.Chat.a */; };
|
|
||||||
77CEAA62EF4A0883AB7594F0 /* libPods-defaults-ShareRocketChatRN.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A8C24C4BD4B58A39965CD302 /* libPods-defaults-ShareRocketChatRN.a */; };
|
|
||||||
7A006F14229C83B600803143 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 7A006F13229C83B600803143 /* GoogleService-Info.plist */; };
|
7A006F14229C83B600803143 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 7A006F13229C83B600803143 /* GoogleService-Info.plist */; };
|
||||||
7A0D62D2242AB187006D5C06 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7A0D62D1242AB187006D5C06 /* LaunchScreen.storyboard */; };
|
7A0D62D2242AB187006D5C06 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7A0D62D1242AB187006D5C06 /* LaunchScreen.storyboard */; };
|
||||||
7A14FCED257FEB3A005BDCD4 /* Experimental.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7A14FCEC257FEB3A005BDCD4 /* Experimental.xcassets */; };
|
7A14FCED257FEB3A005BDCD4 /* Experimental.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7A14FCEC257FEB3A005BDCD4 /* Experimental.xcassets */; };
|
||||||
|
@ -140,11 +139,12 @@
|
||||||
7AE10C0728A59530003593CB /* Inter.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7AE10C0528A59530003593CB /* Inter.ttf */; };
|
7AE10C0728A59530003593CB /* Inter.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7AE10C0528A59530003593CB /* Inter.ttf */; };
|
||||||
7AE10C0828A59530003593CB /* Inter.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7AE10C0528A59530003593CB /* Inter.ttf */; };
|
7AE10C0828A59530003593CB /* Inter.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7AE10C0528A59530003593CB /* Inter.ttf */; };
|
||||||
85160EB6C143E0493FE5F014 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 194D9A8897F4A486C2C6F89A /* ExpoModulesProvider.swift */; };
|
85160EB6C143E0493FE5F014 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 194D9A8897F4A486C2C6F89A /* ExpoModulesProvider.swift */; };
|
||||||
B6AE7655841584F76CF6F6E3 /* libPods-defaults-RocketChatRN.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B25203B92671649A4D40DF1 /* libPods-defaults-RocketChatRN.a */; };
|
AA7822A0F1B9FC4EAA1B1705 /* libPods-defaults-RocketChatRN.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E15CDD2B6C40595B89CBE323 /* libPods-defaults-RocketChatRN.a */; };
|
||||||
BC404914E86821389EEB543D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 391C4F7AA7023CD41EEBD106 /* ExpoModulesProvider.swift */; };
|
BC404914E86821389EEB543D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 391C4F7AA7023CD41EEBD106 /* ExpoModulesProvider.swift */; };
|
||||||
D94D81FB9E10756FAA03F203 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 016747EF3B9FED8DE2C9DA14 /* ExpoModulesProvider.swift */; };
|
D94D81FB9E10756FAA03F203 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 016747EF3B9FED8DE2C9DA14 /* ExpoModulesProvider.swift */; };
|
||||||
|
DB59BF968DBBB07A9DB32234 /* libPods-defaults-ShareRocketChatRN.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A77129D0A3428801312D16C9 /* libPods-defaults-ShareRocketChatRN.a */; };
|
||||||
DD2BA30A89E64F189C2C24AC /* libWatermelonDB.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BA7E862283664608B3894E34 /* libWatermelonDB.a */; };
|
DD2BA30A89E64F189C2C24AC /* libWatermelonDB.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BA7E862283664608B3894E34 /* libWatermelonDB.a */; };
|
||||||
EAD2B6F1B2A7E88F391E7FC3 /* libPods-defaults-NotificationService.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0EC05AED6BE930F72082CECD /* libPods-defaults-NotificationService.a */; };
|
E0C21D47690209D0D6C9293A /* libPods-defaults-NotificationService.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 516DD5885ACB76B0C02D9D71 /* libPods-defaults-NotificationService.a */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXContainerItemProxy section */
|
/* Begin PBXContainerItemProxy section */
|
||||||
|
@ -209,7 +209,6 @@
|
||||||
008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = "<group>"; };
|
008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = "<group>"; };
|
||||||
016747EF3B9FED8DE2C9DA14 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-defaults-ShareRocketChatRN/ExpoModulesProvider.swift"; sourceTree = "<group>"; };
|
016747EF3B9FED8DE2C9DA14 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-defaults-ShareRocketChatRN/ExpoModulesProvider.swift"; sourceTree = "<group>"; };
|
||||||
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; };
|
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; };
|
||||||
0EC05AED6BE930F72082CECD /* libPods-defaults-NotificationService.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-NotificationService.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
||||||
13B07F961A680F5B00A75B9A /* Rocket.Chat Experimental.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Rocket.Chat Experimental.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
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 = "<group>"; };
|
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = RocketChatRN/AppDelegate.h; sourceTree = "<group>"; };
|
||||||
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = RocketChatRN/Images.xcassets; sourceTree = "<group>"; };
|
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = RocketChatRN/Images.xcassets; sourceTree = "<group>"; };
|
||||||
|
@ -261,13 +260,12 @@
|
||||||
1EFEB5972493B6640072EDC0 /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = "<group>"; };
|
1EFEB5972493B6640072EDC0 /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = "<group>"; };
|
||||||
1EFEB5992493B6640072EDC0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
1EFEB5992493B6640072EDC0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
1EFEB5A12493B67D0072EDC0 /* NotificationService.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NotificationService.entitlements; sourceTree = "<group>"; };
|
1EFEB5A12493B67D0072EDC0 /* NotificationService.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NotificationService.entitlements; sourceTree = "<group>"; };
|
||||||
254D36979DFB5715FCAB46F7 /* Pods-defaults-ShareRocketChatRN.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-ShareRocketChatRN.debug.xcconfig"; path = "Target Support Files/Pods-defaults-ShareRocketChatRN/Pods-defaults-ShareRocketChatRN.debug.xcconfig"; sourceTree = "<group>"; };
|
20BE132DC55E2A128E828E6D /* Pods-defaults-ShareRocketChatRN.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-ShareRocketChatRN.release.xcconfig"; path = "Target Support Files/Pods-defaults-ShareRocketChatRN/Pods-defaults-ShareRocketChatRN.release.xcconfig"; sourceTree = "<group>"; };
|
||||||
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 = "<group>"; };
|
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 = "<group>"; };
|
||||||
3B25203B92671649A4D40DF1 /* libPods-defaults-RocketChatRN.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-RocketChatRN.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
||||||
45D5C142B655F8EFD006792C /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-defaults-RocketChatRN/ExpoModulesProvider.swift"; sourceTree = "<group>"; };
|
45D5C142B655F8EFD006792C /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-defaults-RocketChatRN/ExpoModulesProvider.swift"; sourceTree = "<group>"; };
|
||||||
50A6A15C33C12A702C5D7432 /* 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 = "<group>"; };
|
4C1CEE8C876A117AB69C9BED /* 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 = "<group>"; };
|
||||||
|
516DD5885ACB76B0C02D9D71 /* libPods-defaults-NotificationService.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-NotificationService.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
60B2A6A31FC4588700BD58E5 /* RocketChatRN.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = RocketChatRN.entitlements; path = RocketChatRN/RocketChatRN.entitlements; sourceTree = "<group>"; };
|
60B2A6A31FC4588700BD58E5 /* RocketChatRN.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = RocketChatRN.entitlements; path = RocketChatRN/RocketChatRN.entitlements; sourceTree = "<group>"; };
|
||||||
6DB79D72B15CF5F4FF58E661 /* 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 = "<group>"; };
|
|
||||||
7A006F13229C83B600803143 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
|
7A006F13229C83B600803143 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
|
||||||
7A0D62D1242AB187006D5C06 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
|
7A0D62D1242AB187006D5C06 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||||
7A14FCEC257FEB3A005BDCD4 /* Experimental.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Experimental.xcassets; sourceTree = "<group>"; };
|
7A14FCEC257FEB3A005BDCD4 /* Experimental.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Experimental.xcassets; sourceTree = "<group>"; };
|
||||||
|
@ -278,15 +276,17 @@
|
||||||
7AAB3E52257E6A6E00707CF6 /* Rocket.Chat.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Rocket.Chat.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
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; };
|
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 = "<group>"; };
|
7AE10C0528A59530003593CB /* Inter.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Inter.ttf; sourceTree = "<group>"; };
|
||||||
88C94FFF94CEED3642725018 /* Pods-defaults-ShareRocketChatRN.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-ShareRocketChatRN.release.xcconfig"; path = "Target Support Files/Pods-defaults-ShareRocketChatRN/Pods-defaults-ShareRocketChatRN.release.xcconfig"; sourceTree = "<group>"; };
|
95BB2D8B49B090E54CB0E6C4 /* libPods-defaults-Rocket.Chat.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-Rocket.Chat.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
99E7E1A036C0993816456EC8 /* 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 = "<group>"; };
|
95E4F27F34B2F45177152C0C /* 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 = "<group>"; };
|
||||||
A8C24C4BD4B58A39965CD302 /* libPods-defaults-ShareRocketChatRN.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-ShareRocketChatRN.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
995DDC82FEFCE80FAC748822 /* Pods-defaults-ShareRocketChatRN.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-defaults-ShareRocketChatRN.debug.xcconfig"; path = "Target Support Files/Pods-defaults-ShareRocketChatRN/Pods-defaults-ShareRocketChatRN.debug.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
A77129D0A3428801312D16C9 /* libPods-defaults-ShareRocketChatRN.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-ShareRocketChatRN.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; };
|
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; };
|
||||||
|
B3C998695BD48FC0C05EB743 /* 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 = "<group>"; };
|
||||||
|
B526DEF42C42CFCDC2BA4DE3 /* 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 = "<group>"; };
|
||||||
|
B96B87854157F6A51973415A /* 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 = "<group>"; };
|
||||||
BA7E862283664608B3894E34 /* libWatermelonDB.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libWatermelonDB.a; sourceTree = "<group>"; };
|
BA7E862283664608B3894E34 /* libWatermelonDB.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libWatermelonDB.a; sourceTree = "<group>"; };
|
||||||
C9B732133AD96F9C93DAAE92 /* 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 = "<group>"; };
|
C055F0F63FB8EE3AE75DD19A /* 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 = "<group>"; };
|
||||||
F380AA6A42141BB1B0512548 /* libPods-defaults-Rocket.Chat.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-Rocket.Chat.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
E15CDD2B6C40595B89CBE323 /* libPods-defaults-RocketChatRN.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-RocketChatRN.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
F4BF2B56AF0C399334E0AD0B /* 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 = "<group>"; };
|
|
||||||
FAD726E704E4DCF6C9EB71F0 /* 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 = "<group>"; };
|
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
@ -307,7 +307,7 @@
|
||||||
7ACD4897222860DE00442C55 /* JavaScriptCore.framework in Frameworks */,
|
7ACD4897222860DE00442C55 /* JavaScriptCore.framework in Frameworks */,
|
||||||
24A2AEF2383D44B586D31C01 /* libz.tbd in Frameworks */,
|
24A2AEF2383D44B586D31C01 /* libz.tbd in Frameworks */,
|
||||||
DD2BA30A89E64F189C2C24AC /* libWatermelonDB.a in Frameworks */,
|
DD2BA30A89E64F189C2C24AC /* libWatermelonDB.a in Frameworks */,
|
||||||
B6AE7655841584F76CF6F6E3 /* libPods-defaults-RocketChatRN.a in Frameworks */,
|
AA7822A0F1B9FC4EAA1B1705 /* libPods-defaults-RocketChatRN.a in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -316,7 +316,7 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
1E25743422CBA2CF005A877F /* JavaScriptCore.framework in Frameworks */,
|
1E25743422CBA2CF005A877F /* JavaScriptCore.framework in Frameworks */,
|
||||||
77CEAA62EF4A0883AB7594F0 /* libPods-defaults-ShareRocketChatRN.a in Frameworks */,
|
DB59BF968DBBB07A9DB32234 /* libPods-defaults-ShareRocketChatRN.a in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -324,7 +324,7 @@
|
||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
EAD2B6F1B2A7E88F391E7FC3 /* libPods-defaults-NotificationService.a in Frameworks */,
|
E0C21D47690209D0D6C9293A /* libPods-defaults-NotificationService.a in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -345,7 +345,7 @@
|
||||||
7AAB3E3D257E6A6E00707CF6 /* JavaScriptCore.framework in Frameworks */,
|
7AAB3E3D257E6A6E00707CF6 /* JavaScriptCore.framework in Frameworks */,
|
||||||
7AAB3E3E257E6A6E00707CF6 /* libz.tbd in Frameworks */,
|
7AAB3E3E257E6A6E00707CF6 /* libz.tbd in Frameworks */,
|
||||||
7AAB3E3F257E6A6E00707CF6 /* libWatermelonDB.a in Frameworks */,
|
7AAB3E3F257E6A6E00707CF6 /* libWatermelonDB.a in Frameworks */,
|
||||||
5D2080AFB7696E1A6A2B4209 /* libPods-defaults-Rocket.Chat.a in Frameworks */,
|
0B27ED342956F07641034CD4 /* libPods-defaults-Rocket.Chat.a in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -494,14 +494,14 @@
|
||||||
7AC2B09613AA7C3FEBAC9F57 /* Pods */ = {
|
7AC2B09613AA7C3FEBAC9F57 /* Pods */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
6DB79D72B15CF5F4FF58E661 /* Pods-defaults-NotificationService.debug.xcconfig */,
|
4C1CEE8C876A117AB69C9BED /* Pods-defaults-NotificationService.debug.xcconfig */,
|
||||||
50A6A15C33C12A702C5D7432 /* Pods-defaults-NotificationService.release.xcconfig */,
|
95E4F27F34B2F45177152C0C /* Pods-defaults-NotificationService.release.xcconfig */,
|
||||||
F4BF2B56AF0C399334E0AD0B /* Pods-defaults-Rocket.Chat.debug.xcconfig */,
|
B3C998695BD48FC0C05EB743 /* Pods-defaults-Rocket.Chat.debug.xcconfig */,
|
||||||
FAD726E704E4DCF6C9EB71F0 /* Pods-defaults-Rocket.Chat.release.xcconfig */,
|
B526DEF42C42CFCDC2BA4DE3 /* Pods-defaults-Rocket.Chat.release.xcconfig */,
|
||||||
99E7E1A036C0993816456EC8 /* Pods-defaults-RocketChatRN.debug.xcconfig */,
|
C055F0F63FB8EE3AE75DD19A /* Pods-defaults-RocketChatRN.debug.xcconfig */,
|
||||||
C9B732133AD96F9C93DAAE92 /* Pods-defaults-RocketChatRN.release.xcconfig */,
|
B96B87854157F6A51973415A /* Pods-defaults-RocketChatRN.release.xcconfig */,
|
||||||
254D36979DFB5715FCAB46F7 /* Pods-defaults-ShareRocketChatRN.debug.xcconfig */,
|
995DDC82FEFCE80FAC748822 /* Pods-defaults-ShareRocketChatRN.debug.xcconfig */,
|
||||||
88C94FFF94CEED3642725018 /* Pods-defaults-ShareRocketChatRN.release.xcconfig */,
|
20BE132DC55E2A128E828E6D /* Pods-defaults-ShareRocketChatRN.release.xcconfig */,
|
||||||
);
|
);
|
||||||
path = Pods;
|
path = Pods;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -592,10 +592,10 @@
|
||||||
7ACD4853222860DE00442C55 /* JavaScriptCore.framework */,
|
7ACD4853222860DE00442C55 /* JavaScriptCore.framework */,
|
||||||
B37C79D9BD0742CE936B6982 /* libc++.tbd */,
|
B37C79D9BD0742CE936B6982 /* libc++.tbd */,
|
||||||
06BB44DD4855498082A744AD /* libz.tbd */,
|
06BB44DD4855498082A744AD /* libz.tbd */,
|
||||||
0EC05AED6BE930F72082CECD /* libPods-defaults-NotificationService.a */,
|
516DD5885ACB76B0C02D9D71 /* libPods-defaults-NotificationService.a */,
|
||||||
F380AA6A42141BB1B0512548 /* libPods-defaults-Rocket.Chat.a */,
|
95BB2D8B49B090E54CB0E6C4 /* libPods-defaults-Rocket.Chat.a */,
|
||||||
3B25203B92671649A4D40DF1 /* libPods-defaults-RocketChatRN.a */,
|
E15CDD2B6C40595B89CBE323 /* libPods-defaults-RocketChatRN.a */,
|
||||||
A8C24C4BD4B58A39965CD302 /* libPods-defaults-ShareRocketChatRN.a */,
|
A77129D0A3428801312D16C9 /* libPods-defaults-ShareRocketChatRN.a */,
|
||||||
);
|
);
|
||||||
name = Frameworks;
|
name = Frameworks;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -615,7 +615,7 @@
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "RocketChatRN" */;
|
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "RocketChatRN" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
845019AB20743AD73331AE01 /* [CP] Check Pods Manifest.lock */,
|
5E876E97E065D255440BF14B /* [CP] Check Pods Manifest.lock */,
|
||||||
7AA5C63E23E30D110005C4A7 /* Start Packager */,
|
7AA5C63E23E30D110005C4A7 /* Start Packager */,
|
||||||
13B07F871A680F5B00A75B9A /* Sources */,
|
13B07F871A680F5B00A75B9A /* Sources */,
|
||||||
13B07F8C1A680F5B00A75B9A /* Frameworks */,
|
13B07F8C1A680F5B00A75B9A /* Frameworks */,
|
||||||
|
@ -624,8 +624,8 @@
|
||||||
1EC6ACF422CB9FC300A41C61 /* Embed App Extensions */,
|
1EC6ACF422CB9FC300A41C61 /* Embed App Extensions */,
|
||||||
1E1EA8082326CCE300E22452 /* ShellScript */,
|
1E1EA8082326CCE300E22452 /* ShellScript */,
|
||||||
7AAE9EB32891A0D20024F559 /* Upload source maps to Bugsnag */,
|
7AAE9EB32891A0D20024F559 /* Upload source maps to Bugsnag */,
|
||||||
658B70C0099713BF5CFB3BAF /* [CP] Embed Pods Frameworks */,
|
4D5466345115691D0CEFB787 /* [CP] Embed Pods Frameworks */,
|
||||||
4BBF4B26448A97A37A0149F9 /* [CP] Copy Pods Resources */,
|
0E5594782559C03CA9F86D07 /* [CP] Copy Pods Resources */,
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
|
@ -642,12 +642,12 @@
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = 1EC6ACF322CB9FC300A41C61 /* Build configuration list for PBXNativeTarget "ShareRocketChatRN" */;
|
buildConfigurationList = 1EC6ACF322CB9FC300A41C61 /* Build configuration list for PBXNativeTarget "ShareRocketChatRN" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
09E39CF1ED5A2E6315DB1464 /* [CP] Check Pods Manifest.lock */,
|
1829F5568F6A73113CC7055E /* [CP] Check Pods Manifest.lock */,
|
||||||
1EC6ACAC22CB9FC300A41C61 /* Sources */,
|
1EC6ACAC22CB9FC300A41C61 /* Sources */,
|
||||||
1EC6ACAD22CB9FC300A41C61 /* Frameworks */,
|
1EC6ACAD22CB9FC300A41C61 /* Frameworks */,
|
||||||
1EC6ACAE22CB9FC300A41C61 /* Resources */,
|
1EC6ACAE22CB9FC300A41C61 /* Resources */,
|
||||||
1EFE4DC322CBF36300B766B7 /* ShellScript */,
|
1EFE4DC322CBF36300B766B7 /* ShellScript */,
|
||||||
8EC6710078E2CFC3B3DB6B5F /* [CP] Copy Pods Resources */,
|
5A34EA3A3461E066BA3EB6DC /* [CP] Copy Pods Resources */,
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
|
@ -662,11 +662,11 @@
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = 1EFEB5A02493B6640072EDC0 /* Build configuration list for PBXNativeTarget "NotificationService" */;
|
buildConfigurationList = 1EFEB5A02493B6640072EDC0 /* Build configuration list for PBXNativeTarget "NotificationService" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
755328D542982EDBE9B03461 /* [CP] Check Pods Manifest.lock */,
|
1F7D2DA5D64EE2851767A711 /* [CP] Check Pods Manifest.lock */,
|
||||||
1EFEB5912493B6640072EDC0 /* Sources */,
|
1EFEB5912493B6640072EDC0 /* Sources */,
|
||||||
1EFEB5922493B6640072EDC0 /* Frameworks */,
|
1EFEB5922493B6640072EDC0 /* Frameworks */,
|
||||||
1EFEB5932493B6640072EDC0 /* Resources */,
|
1EFEB5932493B6640072EDC0 /* Resources */,
|
||||||
C2C0E6D8A6119C88C88FD59C /* [CP] Copy Pods Resources */,
|
F1D29D1347F1DD07D1DD6F3C /* [CP] Copy Pods Resources */,
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
|
@ -681,7 +681,7 @@
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = 7AAB3E4F257E6A6E00707CF6 /* Build configuration list for PBXNativeTarget "Rocket.Chat" */;
|
buildConfigurationList = 7AAB3E4F257E6A6E00707CF6 /* Build configuration list for PBXNativeTarget "Rocket.Chat" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
BE612231113152F17BE37B0F /* [CP] Check Pods Manifest.lock */,
|
51CAFCF15E12ADE7B1346351 /* [CP] Check Pods Manifest.lock */,
|
||||||
7AAB3E13257E6A6E00707CF6 /* Start Packager */,
|
7AAB3E13257E6A6E00707CF6 /* Start Packager */,
|
||||||
7AAB3E14257E6A6E00707CF6 /* Sources */,
|
7AAB3E14257E6A6E00707CF6 /* Sources */,
|
||||||
7AAB3E32257E6A6E00707CF6 /* Frameworks */,
|
7AAB3E32257E6A6E00707CF6 /* Frameworks */,
|
||||||
|
@ -690,8 +690,8 @@
|
||||||
7AAB3E48257E6A6E00707CF6 /* Embed App Extensions */,
|
7AAB3E48257E6A6E00707CF6 /* Embed App Extensions */,
|
||||||
7AAB3E4B257E6A6E00707CF6 /* ShellScript */,
|
7AAB3E4B257E6A6E00707CF6 /* ShellScript */,
|
||||||
7A10288726B1D15200E47EF8 /* Upload source maps to Bugsnag */,
|
7A10288726B1D15200E47EF8 /* Upload source maps to Bugsnag */,
|
||||||
48B05D1F0B2FD77783C36E35 /* [CP] Embed Pods Frameworks */,
|
3F0ACE5A0BFF572754F0B113 /* [CP] Embed Pods Frameworks */,
|
||||||
9E0342D251933ABA1560700C /* [CP] Copy Pods Resources */,
|
2DD06D385EF4607F24CDD7E6 /* [CP] Copy Pods Resources */,
|
||||||
);
|
);
|
||||||
buildRules = (
|
buildRules = (
|
||||||
);
|
);
|
||||||
|
@ -841,87 +841,7 @@
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "export 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";
|
shellScript = "export 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";
|
||||||
};
|
};
|
||||||
09E39CF1ED5A2E6315DB1464 /* [CP] Check Pods Manifest.lock */ = {
|
0E5594782559C03CA9F86D07 /* [CP] Copy Pods Resources */ = {
|
||||||
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-ShareRocketChatRN-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;
|
|
||||||
};
|
|
||||||
1E1EA8082326CCE300E22452 /* ShellScript */ = {
|
|
||||||
isa = PBXShellScriptBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
inputFileListPaths = (
|
|
||||||
);
|
|
||||||
inputPaths = (
|
|
||||||
);
|
|
||||||
outputFileListPaths = (
|
|
||||||
);
|
|
||||||
outputPaths = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
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";
|
|
||||||
};
|
|
||||||
1EFE4DC322CBF36300B766B7 /* ShellScript */ = {
|
|
||||||
isa = PBXShellScriptBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
inputFileListPaths = (
|
|
||||||
);
|
|
||||||
inputPaths = (
|
|
||||||
);
|
|
||||||
outputFileListPaths = (
|
|
||||||
);
|
|
||||||
outputPaths = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
shellPath = /bin/sh;
|
|
||||||
shellScript = "export 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";
|
|
||||||
};
|
|
||||||
48B05D1F0B2FD77783C36E35 /* [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}/JitsiMeetSDK/JitsiMeetSDK.framework/JitsiMeetSDK",
|
|
||||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/JitsiMeetSDK/WebRTC.framework/WebRTC",
|
|
||||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL",
|
|
||||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/hermes.framework/hermes",
|
|
||||||
);
|
|
||||||
name = "[CP] Embed Pods Frameworks";
|
|
||||||
outputPaths = (
|
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/JitsiMeetSDK.framework",
|
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WebRTC.framework",
|
|
||||||
"${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;
|
|
||||||
};
|
|
||||||
4BBF4B26448A97A37A0149F9 /* [CP] Copy Pods Resources */ = {
|
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
@ -977,7 +897,165 @@
|
||||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-resources.sh\"\n";
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-resources.sh\"\n";
|
||||||
showEnvVarsInLog = 0;
|
showEnvVarsInLog = 0;
|
||||||
};
|
};
|
||||||
658B70C0099713BF5CFB3BAF /* [CP] Embed Pods Frameworks */ = {
|
1829F5568F6A73113CC7055E /* [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-ShareRocketChatRN-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;
|
||||||
|
};
|
||||||
|
1E1EA8082326CCE300E22452 /* ShellScript */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
);
|
||||||
|
outputFileListPaths = (
|
||||||
|
);
|
||||||
|
outputPaths = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
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";
|
||||||
|
};
|
||||||
|
1EFE4DC322CBF36300B766B7 /* ShellScript */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
);
|
||||||
|
outputFileListPaths = (
|
||||||
|
);
|
||||||
|
outputPaths = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "export 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";
|
||||||
|
};
|
||||||
|
1F7D2DA5D64EE2851767A711 /* [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-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";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
|
2DD06D385EF4607F24CDD7E6 /* [CP] Copy Pods Resources */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
"${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-resources.sh",
|
||||||
|
"${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/AccessibilityResources.bundle",
|
||||||
|
"${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle",
|
||||||
|
"${PODS_CONFIGURATION_BUILD_DIR}/iosMath/mathFonts.bundle",
|
||||||
|
);
|
||||||
|
name = "[CP] Copy Pods Resources";
|
||||||
|
outputPaths = (
|
||||||
|
"${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}/AccessibilityResources.bundle",
|
||||||
|
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle",
|
||||||
|
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/mathFonts.bundle",
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-resources.sh\"\n";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
|
3F0ACE5A0BFF572754F0B113 /* [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}/JitsiMeetSDK/JitsiMeetSDK.framework/JitsiMeetSDK",
|
||||||
|
"${PODS_XCFRAMEWORKS_BUILD_DIR}/JitsiMeetSDK/WebRTC.framework/WebRTC",
|
||||||
|
"${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL",
|
||||||
|
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/hermes.framework/hermes",
|
||||||
|
);
|
||||||
|
name = "[CP] Embed Pods Frameworks";
|
||||||
|
outputPaths = (
|
||||||
|
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/JitsiMeetSDK.framework",
|
||||||
|
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WebRTC.framework",
|
||||||
|
"${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;
|
||||||
|
};
|
||||||
|
4D5466345115691D0CEFB787 /* [CP] Embed Pods Frameworks */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
@ -1001,7 +1079,7 @@
|
||||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-frameworks.sh\"\n";
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-frameworks.sh\"\n";
|
||||||
showEnvVarsInLog = 0;
|
showEnvVarsInLog = 0;
|
||||||
};
|
};
|
||||||
755328D542982EDBE9B03461 /* [CP] Check Pods Manifest.lock */ = {
|
51CAFCF15E12ADE7B1346351 /* [CP] Check Pods Manifest.lock */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
@ -1016,7 +1094,85 @@
|
||||||
outputFileListPaths = (
|
outputFileListPaths = (
|
||||||
);
|
);
|
||||||
outputPaths = (
|
outputPaths = (
|
||||||
"$(DERIVED_FILE_DIR)/Pods-defaults-NotificationService-checkManifestLockResult.txt",
|
"$(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;
|
||||||
|
};
|
||||||
|
5A34EA3A3461E066BA3EB6DC /* [CP] Copy Pods Resources */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
"${PODS_ROOT}/Target Support Files/Pods-defaults-ShareRocketChatRN/Pods-defaults-ShareRocketChatRN-resources.sh",
|
||||||
|
"${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/AccessibilityResources.bundle",
|
||||||
|
"${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle",
|
||||||
|
"${PODS_CONFIGURATION_BUILD_DIR}/iosMath/mathFonts.bundle",
|
||||||
|
);
|
||||||
|
name = "[CP] Copy Pods Resources";
|
||||||
|
outputPaths = (
|
||||||
|
"${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}/AccessibilityResources.bundle",
|
||||||
|
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle",
|
||||||
|
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/mathFonts.bundle",
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-ShareRocketChatRN/Pods-defaults-ShareRocketChatRN-resources.sh\"\n";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
|
5E876E97E065D255440BF14B /* [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-RocketChatRN-checkManifestLockResult.txt",
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
|
@ -1126,163 +1282,7 @@
|
||||||
shellPath = /bin/sh;
|
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";
|
shellScript = "SOURCE_MAP=\"$TMPDIR/$(md5 -qs \"$CONFIGURATION_BUILD_DIR\")-main.jsbundle.map\" ../node_modules/@bugsnag/react-native/bugsnag-react-native-xcode.sh\n";
|
||||||
};
|
};
|
||||||
845019AB20743AD73331AE01 /* [CP] Check Pods Manifest.lock */ = {
|
F1D29D1347F1DD07D1DD6F3C /* [CP] Copy Pods Resources */ = {
|
||||||
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-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;
|
|
||||||
};
|
|
||||||
8EC6710078E2CFC3B3DB6B5F /* [CP] Copy Pods Resources */ = {
|
|
||||||
isa = PBXShellScriptBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
inputPaths = (
|
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-defaults-ShareRocketChatRN/Pods-defaults-ShareRocketChatRN-resources.sh",
|
|
||||||
"${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/AccessibilityResources.bundle",
|
|
||||||
"${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle",
|
|
||||||
"${PODS_CONFIGURATION_BUILD_DIR}/iosMath/mathFonts.bundle",
|
|
||||||
);
|
|
||||||
name = "[CP] Copy Pods Resources";
|
|
||||||
outputPaths = (
|
|
||||||
"${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}/AccessibilityResources.bundle",
|
|
||||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle",
|
|
||||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/mathFonts.bundle",
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
shellPath = /bin/sh;
|
|
||||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-ShareRocketChatRN/Pods-defaults-ShareRocketChatRN-resources.sh\"\n";
|
|
||||||
showEnvVarsInLog = 0;
|
|
||||||
};
|
|
||||||
9E0342D251933ABA1560700C /* [CP] Copy Pods Resources */ = {
|
|
||||||
isa = PBXShellScriptBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
inputPaths = (
|
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-resources.sh",
|
|
||||||
"${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/AccessibilityResources.bundle",
|
|
||||||
"${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle",
|
|
||||||
"${PODS_CONFIGURATION_BUILD_DIR}/iosMath/mathFonts.bundle",
|
|
||||||
);
|
|
||||||
name = "[CP] Copy Pods Resources";
|
|
||||||
outputPaths = (
|
|
||||||
"${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}/AccessibilityResources.bundle",
|
|
||||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle",
|
|
||||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/mathFonts.bundle",
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
shellPath = /bin/sh;
|
|
||||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-resources.sh\"\n";
|
|
||||||
showEnvVarsInLog = 0;
|
|
||||||
};
|
|
||||||
BE612231113152F17BE37B0F /* [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;
|
|
||||||
};
|
|
||||||
C2C0E6D8A6119C88C88FD59C /* [CP] Copy Pods Resources */ = {
|
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
@ -1495,7 +1495,7 @@
|
||||||
/* Begin XCBuildConfiguration section */
|
/* Begin XCBuildConfiguration section */
|
||||||
13B07F941A680F5B00A75B9A /* Debug */ = {
|
13B07F941A680F5B00A75B9A /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
baseConfigurationReference = 99E7E1A036C0993816456EC8 /* Pods-defaults-RocketChatRN.debug.xcconfig */;
|
baseConfigurationReference = C055F0F63FB8EE3AE75DD19A /* Pods-defaults-RocketChatRN.debug.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
APPLICATION_EXTENSION_API_ONLY = NO;
|
APPLICATION_EXTENSION_API_ONLY = NO;
|
||||||
|
@ -1552,7 +1552,7 @@
|
||||||
};
|
};
|
||||||
13B07F951A680F5B00A75B9A /* Release */ = {
|
13B07F951A680F5B00A75B9A /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
baseConfigurationReference = C9B732133AD96F9C93DAAE92 /* Pods-defaults-RocketChatRN.release.xcconfig */;
|
baseConfigurationReference = B96B87854157F6A51973415A /* Pods-defaults-RocketChatRN.release.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
APPLICATION_EXTENSION_API_ONLY = NO;
|
APPLICATION_EXTENSION_API_ONLY = NO;
|
||||||
|
@ -1608,7 +1608,7 @@
|
||||||
};
|
};
|
||||||
1EC6ACBC22CB9FC300A41C61 /* Debug */ = {
|
1EC6ACBC22CB9FC300A41C61 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
baseConfigurationReference = 254D36979DFB5715FCAB46F7 /* Pods-defaults-ShareRocketChatRN.debug.xcconfig */;
|
baseConfigurationReference = 995DDC82FEFCE80FAC748822 /* Pods-defaults-ShareRocketChatRN.debug.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
APPLICATION_EXTENSION_API_ONLY = YES;
|
APPLICATION_EXTENSION_API_ONLY = YES;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
@ -1676,7 +1676,7 @@
|
||||||
};
|
};
|
||||||
1EC6ACBD22CB9FC300A41C61 /* Release */ = {
|
1EC6ACBD22CB9FC300A41C61 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
baseConfigurationReference = 88C94FFF94CEED3642725018 /* Pods-defaults-ShareRocketChatRN.release.xcconfig */;
|
baseConfigurationReference = 20BE132DC55E2A128E828E6D /* Pods-defaults-ShareRocketChatRN.release.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
APPLICATION_EXTENSION_API_ONLY = YES;
|
APPLICATION_EXTENSION_API_ONLY = YES;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
@ -1743,7 +1743,7 @@
|
||||||
};
|
};
|
||||||
1EFEB59D2493B6640072EDC0 /* Debug */ = {
|
1EFEB59D2493B6640072EDC0 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
baseConfigurationReference = 6DB79D72B15CF5F4FF58E661 /* Pods-defaults-NotificationService.debug.xcconfig */;
|
baseConfigurationReference = 4C1CEE8C876A117AB69C9BED /* Pods-defaults-NotificationService.debug.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
@ -1762,7 +1762,7 @@
|
||||||
INFOPLIST_FILE = NotificationService/Info.plist;
|
INFOPLIST_FILE = NotificationService/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||||
MARKETING_VERSION = 4.31.0;
|
MARKETING_VERSION = 4.32.0;
|
||||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
|
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
|
||||||
|
@ -1780,7 +1780,7 @@
|
||||||
};
|
};
|
||||||
1EFEB59E2493B6640072EDC0 /* Release */ = {
|
1EFEB59E2493B6640072EDC0 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
baseConfigurationReference = 50A6A15C33C12A702C5D7432 /* Pods-defaults-NotificationService.release.xcconfig */;
|
baseConfigurationReference = 95E4F27F34B2F45177152C0C /* Pods-defaults-NotificationService.release.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
@ -1801,7 +1801,7 @@
|
||||||
INFOPLIST_FILE = NotificationService/Info.plist;
|
INFOPLIST_FILE = NotificationService/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||||
MARKETING_VERSION = 4.31.0;
|
MARKETING_VERSION = 4.32.0;
|
||||||
MTL_FAST_MATH = YES;
|
MTL_FAST_MATH = YES;
|
||||||
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
|
OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.reactnative.NotificationService;
|
PRODUCT_BUNDLE_IDENTIFIER = chat.rocket.reactnative.NotificationService;
|
||||||
|
@ -1817,7 +1817,7 @@
|
||||||
};
|
};
|
||||||
7AAB3E50257E6A6E00707CF6 /* Debug */ = {
|
7AAB3E50257E6A6E00707CF6 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
baseConfigurationReference = F4BF2B56AF0C399334E0AD0B /* Pods-defaults-Rocket.Chat.debug.xcconfig */;
|
baseConfigurationReference = B3C998695BD48FC0C05EB743 /* Pods-defaults-Rocket.Chat.debug.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
APPLICATION_EXTENSION_API_ONLY = NO;
|
APPLICATION_EXTENSION_API_ONLY = NO;
|
||||||
|
@ -1871,7 +1871,7 @@
|
||||||
};
|
};
|
||||||
7AAB3E51257E6A6E00707CF6 /* Release */ = {
|
7AAB3E51257E6A6E00707CF6 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
baseConfigurationReference = FAD726E704E4DCF6C9EB71F0 /* Pods-defaults-Rocket.Chat.release.xcconfig */;
|
baseConfigurationReference = B526DEF42C42CFCDC2BA4DE3 /* Pods-defaults-Rocket.Chat.release.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
APPLICATION_EXTENSION_API_ONLY = NO;
|
APPLICATION_EXTENSION_API_ONLY = NO;
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17147" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
||||||
|
<device id="retina4_7" orientation="portrait" appearance="light"/>
|
||||||
|
<dependencies>
|
||||||
|
<deployment identifier="iOS"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17120"/>
|
||||||
|
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
|
</dependencies>
|
||||||
|
<scenes>
|
||||||
|
<!--View Controller-->
|
||||||
|
<scene sceneID="EHf-IW-A2E">
|
||||||
|
<objects>
|
||||||
|
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
|
||||||
|
<view key="view" autoresizesSubviews="NO" userInteractionEnabled="NO" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<imageView autoresizesSubviews="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" image="BootSplashLogo" translatesAutoresizingMaskIntoConstraints="NO" id="3lX-Ut-9ad">
|
||||||
|
<rect key="frame" x="137.5" y="283.5" width="100" height="100"/>
|
||||||
|
<accessibility key="accessibilityConfiguration">
|
||||||
|
<accessibilityTraits key="traits" image="YES" notEnabled="YES"/>
|
||||||
|
</accessibility>
|
||||||
|
</imageView>
|
||||||
|
</subviews>
|
||||||
|
<viewLayoutGuide key="safeArea" id="Bcu-3y-fUS"/>
|
||||||
|
<color key="backgroundColor" red="1.00000000000000" green="1.00000000000000" blue="1.00000000000000" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
<accessibility key="accessibilityConfiguration">
|
||||||
|
<accessibilityTraits key="traits" notEnabled="YES"/>
|
||||||
|
</accessibility>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="3lX-Ut-9ad" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="Fh9-Fy-1nT"/>
|
||||||
|
<constraint firstItem="3lX-Ut-9ad" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="nvB-Ic-PnI"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="0.0" y="0.0"/>
|
||||||
|
</scene>
|
||||||
|
</scenes>
|
||||||
|
<resources>
|
||||||
|
<image name="BootSplashLogo" width="100" height="100"/>
|
||||||
|
</resources>
|
||||||
|
</document>
|
|
@ -26,7 +26,7 @@
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>4.31.0</string>
|
<string>4.32.0</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleURLTypes</key>
|
<key>CFBundleURLTypes</key>
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>XPC!</string>
|
<string>XPC!</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>4.31.0</string>
|
<string>4.32.0</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>1</string>
|
<string>1</string>
|
||||||
<key>KeychainGroup</key>
|
<key>KeychainGroup</key>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "rocket-chat-reactnative",
|
"name": "rocket-chat-reactnative",
|
||||||
"version": "4.31.0",
|
"version": "4.32.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "react-native start",
|
"start": "react-native start",
|
||||||
|
@ -84,7 +84,7 @@
|
||||||
"react-native": "RocketChat/react-native#0.68.2",
|
"react-native": "RocketChat/react-native#0.68.2",
|
||||||
"react-native-animatable": "^1.3.3",
|
"react-native-animatable": "^1.3.3",
|
||||||
"react-native-background-timer": "2.4.1",
|
"react-native-background-timer": "2.4.1",
|
||||||
"react-native-bootsplash": "3.2.4",
|
"react-native-bootsplash": "^4.3.2",
|
||||||
"react-native-config-reader": "^4.1.1",
|
"react-native-config-reader": "^4.1.1",
|
||||||
"react-native-console-time-polyfill": "1.2.3",
|
"react-native-console-time-polyfill": "1.2.3",
|
||||||
"react-native-device-info": "8.4.8",
|
"react-native-device-info": "8.4.8",
|
||||||
|
@ -104,7 +104,7 @@
|
||||||
"react-native-mmkv-storage": "^0.7.6",
|
"react-native-mmkv-storage": "^0.7.6",
|
||||||
"react-native-modal": "13.0.1",
|
"react-native-modal": "13.0.1",
|
||||||
"react-native-navigation-bar-color": "2.0.1",
|
"react-native-navigation-bar-color": "2.0.1",
|
||||||
"react-native-notifications": "4.2.4",
|
"react-native-notifications": "^4.3.1",
|
||||||
"react-native-notifier": "1.6.1",
|
"react-native-notifier": "1.6.1",
|
||||||
"react-native-orientation-locker": "1.1.8",
|
"react-native-orientation-locker": "1.1.8",
|
||||||
"react-native-picker-select": "^8.0.4",
|
"react-native-picker-select": "^8.0.4",
|
||||||
|
|
|
@ -13,8 +13,60 @@ index f9c858b..94ea188 100644
|
||||||
|
|
||||||
public abstract class NotificationManagerCompatFacade {
|
public abstract class NotificationManagerCompatFacade {
|
||||||
public static NotificationManagerCompat from(@NonNull Context context) {
|
public static NotificationManagerCompat from(@NonNull Context context) {
|
||||||
|
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java
|
||||||
|
index 90969b2..4c00e69 100644
|
||||||
|
--- a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java
|
||||||
|
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsModule.java
|
||||||
|
@@ -63,7 +63,7 @@ public class RNNotificationsModule extends ReactContextBaseJavaModule implements
|
||||||
|
@Override
|
||||||
|
public void onNewIntent(Intent intent) {
|
||||||
|
if (NotificationIntentAdapter.canHandleIntent(intent)) {
|
||||||
|
- Bundle notificationData = intent.getExtras();
|
||||||
|
+ Bundle notificationData = NotificationIntentAdapter.extractPendingNotificationDataFromIntent(intent);
|
||||||
|
final IPushNotification notification = PushNotification.get(getReactApplicationContext().getApplicationContext(), notificationData);
|
||||||
|
if (notification != null) {
|
||||||
|
notification.onOpened();
|
||||||
|
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsPackage.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsPackage.java
|
||||||
|
index eadf41e..a3f71dd 100644
|
||||||
|
--- a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsPackage.java
|
||||||
|
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/RNNotificationsPackage.java
|
||||||
|
@@ -96,8 +96,7 @@ public class RNNotificationsPackage implements ReactPackage, AppLifecycleFacade.
|
||||||
|
Intent intent = activity.getIntent();
|
||||||
|
if (NotificationIntentAdapter.canHandleIntent(intent)) {
|
||||||
|
Context appContext = mApplication.getApplicationContext();
|
||||||
|
- Bundle notificationData = NotificationIntentAdapter.cannotHandleTrampolineActivity(appContext) ?
|
||||||
|
- NotificationIntentAdapter.extractPendingNotificationDataFromIntent(intent) : intent.getExtras();
|
||||||
|
+ Bundle notificationData = NotificationIntentAdapter.extractPendingNotificationDataFromIntent(intent);
|
||||||
|
final IPushNotification pushNotification = PushNotification.get(appContext, notificationData);
|
||||||
|
if (pushNotification != null) {
|
||||||
|
pushNotification.onOpened();
|
||||||
|
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/NotificationIntentAdapter.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/NotificationIntentAdapter.java
|
||||||
|
index 41b4824..4285ac5 100644
|
||||||
|
--- a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/NotificationIntentAdapter.java
|
||||||
|
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/NotificationIntentAdapter.java
|
||||||
|
@@ -14,17 +14,9 @@ public class NotificationIntentAdapter {
|
||||||
|
|
||||||
|
@SuppressLint("UnspecifiedImmutableFlag")
|
||||||
|
public static PendingIntent createPendingNotificationIntent(Context appContext, PushNotificationProps notification) {
|
||||||
|
- if (cannotHandleTrampolineActivity(appContext)) {
|
||||||
|
- Intent mainActivityIntent = appContext.getPackageManager().getLaunchIntentForPackage(appContext.getPackageName());
|
||||||
|
- mainActivityIntent.putExtra(PUSH_NOTIFICATION_EXTRA_NAME, notification.asBundle());
|
||||||
|
- TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(appContext);
|
||||||
|
- taskStackBuilder.addNextIntentWithParentStack(mainActivityIntent);
|
||||||
|
- return taskStackBuilder.getPendingIntent((int) System.currentTimeMillis(), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE);
|
||||||
|
- } else {
|
||||||
|
- Intent intent = new Intent(appContext, ProxyService.class);
|
||||||
|
- intent.putExtra(PUSH_NOTIFICATION_EXTRA_NAME, notification.asBundle());
|
||||||
|
- return PendingIntent.getService(appContext, (int) System.currentTimeMillis(), intent, PendingIntent.FLAG_ONE_SHOT);
|
||||||
|
- }
|
||||||
|
+ Intent intent = appContext.getPackageManager().getLaunchIntentForPackage(appContext.getPackageName());
|
||||||
|
+ intent.putExtra(PUSH_NOTIFICATION_EXTRA_NAME, notification.asBundle());
|
||||||
|
+ return PendingIntent.getActivity(appContext, (int) System.currentTimeMillis(), intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean cannotHandleTrampolineActivity(Context appContext) {
|
||||||
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java
|
diff --git a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java
|
||||||
index b93f762..c2b736a 100644
|
index 54a5fb8..06bbfb9 100644
|
||||||
--- a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java
|
--- a/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java
|
||||||
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java
|
+++ b/node_modules/react-native-notifications/lib/android/app/src/main/java/com/wix/reactnativenotifications/core/notification/PushNotification.java
|
||||||
@@ -28,7 +28,7 @@ public class PushNotification implements IPushNotification {
|
@@ -28,7 +28,7 @@ public class PushNotification implements IPushNotification {
|
29
yarn.lock
29
yarn.lock
|
@ -11337,6 +11337,15 @@ fs-extra@^1.0.0:
|
||||||
jsonfile "^2.1.0"
|
jsonfile "^2.1.0"
|
||||||
klaw "^1.0.0"
|
klaw "^1.0.0"
|
||||||
|
|
||||||
|
fs-extra@^10.1.0:
|
||||||
|
version "10.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
|
||||||
|
integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
|
||||||
|
dependencies:
|
||||||
|
graceful-fs "^4.2.0"
|
||||||
|
jsonfile "^6.0.1"
|
||||||
|
universalify "^2.0.0"
|
||||||
|
|
||||||
fs-extra@^4.0.2:
|
fs-extra@^4.0.2:
|
||||||
version "4.0.3"
|
version "4.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94"
|
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94"
|
||||||
|
@ -17053,14 +17062,14 @@ react-native-background-timer@2.4.1:
|
||||||
resolved "https://registry.yarnpkg.com/react-native-background-timer/-/react-native-background-timer-2.4.1.tgz#a3bc1cafa8c1e3aeefd0611de120298b67978a0f"
|
resolved "https://registry.yarnpkg.com/react-native-background-timer/-/react-native-background-timer-2.4.1.tgz#a3bc1cafa8c1e3aeefd0611de120298b67978a0f"
|
||||||
integrity sha512-TE4Kiy7jUyv+hugxDxitzu38sW1NqjCk4uE5IgU2WevLv7sZacaBc6PZKOShNRPGirLl1NWkaG3LDEkdb9Um5g==
|
integrity sha512-TE4Kiy7jUyv+hugxDxitzu38sW1NqjCk4uE5IgU2WevLv7sZacaBc6PZKOShNRPGirLl1NWkaG3LDEkdb9Um5g==
|
||||||
|
|
||||||
react-native-bootsplash@3.2.4:
|
react-native-bootsplash@^4.3.2:
|
||||||
version "3.2.4"
|
version "4.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/react-native-bootsplash/-/react-native-bootsplash-3.2.4.tgz#73d3b38606ddc7e1d489012f007c1fbd26fc68d1"
|
resolved "https://registry.yarnpkg.com/react-native-bootsplash/-/react-native-bootsplash-4.3.2.tgz#347b024975dc344310ee4d95cb3be56b0b39e381"
|
||||||
integrity sha512-xilF68y/UmypcFuEvt/QYuP03YklbIxp+42DWcU+M0wTVko+oswy+yboTh4JB5YN7zRGpqhbSGnIeIkx0xd98Q==
|
integrity sha512-HzXl6AKk4sRjEtV+1C7q4gSXP5kYMhpzGaB4DllZNObdZ8oVH8Ac7Y9ShKZ8wLQLJaG/TtzyGHKIDaNi0oNGJA==
|
||||||
dependencies:
|
dependencies:
|
||||||
chalk "^4.1.0"
|
fs-extra "^10.1.0"
|
||||||
fs-extra "^9.1.0"
|
|
||||||
jimp "^0.16.1"
|
jimp "^0.16.1"
|
||||||
|
picocolors "^1.0.0"
|
||||||
|
|
||||||
react-native-codegen@^0.0.17:
|
react-native-codegen@^0.0.17:
|
||||||
version "0.0.17"
|
version "0.0.17"
|
||||||
|
@ -17212,10 +17221,10 @@ react-native-navigation-bar-color@2.0.1:
|
||||||
resolved "https://registry.yarnpkg.com/react-native-navigation-bar-color/-/react-native-navigation-bar-color-2.0.1.tgz#ee2be25cc37105f7da355717b0a9a32c9c059ae6"
|
resolved "https://registry.yarnpkg.com/react-native-navigation-bar-color/-/react-native-navigation-bar-color-2.0.1.tgz#ee2be25cc37105f7da355717b0a9a32c9c059ae6"
|
||||||
integrity sha512-1kE/oxWt+HYjRxdZdvke9tJ365xaee5n3+euOQA1En8zQuSbOxiE4SYEGM7TeaWnmLJ0l37mRnPHaB2H4mGh0A==
|
integrity sha512-1kE/oxWt+HYjRxdZdvke9tJ365xaee5n3+euOQA1En8zQuSbOxiE4SYEGM7TeaWnmLJ0l37mRnPHaB2H4mGh0A==
|
||||||
|
|
||||||
react-native-notifications@4.2.4:
|
react-native-notifications@^4.3.1:
|
||||||
version "4.2.4"
|
version "4.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/react-native-notifications/-/react-native-notifications-4.2.4.tgz#0d686eb1576d3d9cb73dd9db1ee4f212e00f7d89"
|
resolved "https://registry.yarnpkg.com/react-native-notifications/-/react-native-notifications-4.3.1.tgz#ad9a8e6881bc17cf03ef16d4dfdaee9ec8bb721d"
|
||||||
integrity sha512-ffToxERa2bRUsXShCO19yXY6c6l4Esq7MqRKAb4mPSn+T428X7Je7WYvWOIOVw/BMGJ3R0lPrZk52vDpoYqanw==
|
integrity sha512-A668d+Q0/VQRjmrh+LvDpc/REA8GXgwCijXDCIlDHGMK8enmrtdxY5OANQf1VM3hecf+fD0wYFw2uqL/ZR8jgg==
|
||||||
|
|
||||||
react-native-notifier@1.6.1:
|
react-native-notifier@1.6.1:
|
||||||
version "1.6.1"
|
version "1.6.1"
|
||||||
|
|
Loading…
Reference in New Issue