chore: Merge 4.38.0 into master (#5069)
This commit is contained in:
commit
3bc1cb92a0
|
@ -7,7 +7,7 @@ orbs:
|
||||||
macos: &macos
|
macos: &macos
|
||||||
macos:
|
macos:
|
||||||
xcode: "14.2.0"
|
xcode: "14.2.0"
|
||||||
resource_class: large
|
resource_class: macos.m1.large.gen1
|
||||||
|
|
||||||
bash-env: &bash-env
|
bash-env: &bash-env
|
||||||
BASH_ENV: "~/.nvm/nvm.sh"
|
BASH_ENV: "~/.nvm/nvm.sh"
|
||||||
|
|
|
@ -9,9 +9,9 @@ module.exports = {
|
||||||
},
|
},
|
||||||
artifacts: {
|
artifacts: {
|
||||||
plugins: {
|
plugins: {
|
||||||
screenshot: 'failing',
|
screenshot: process.env.CI ? undefined : 'failing',
|
||||||
video: 'failing',
|
video: process.env.CI ? undefined : 'failing',
|
||||||
uiHierarchy: 'enabled'
|
uiHierarchy: process.env.CI ? undefined : 'enabled'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
apps: {
|
apps: {
|
||||||
|
|
|
@ -18,7 +18,7 @@ exports[`Storyshots Avatar Custom Style 1`] = `"{\\"type\\":\\"View\\",\\"props\
|
||||||
|
|
||||||
exports[`Storyshots Avatar Direct 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4},null],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/avatar/diego.mello?format=png&size=112\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]}"`;
|
exports[`Storyshots Avatar Direct 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4},null],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/avatar/diego.mello?format=png&size=112\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]}"`;
|
||||||
|
|
||||||
exports[`Storyshots Avatar Emoji 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4},null],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},[{\\"width\\":30,\\"height\\":30},{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4}]]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/emoji-custom/troll.jpg\\",\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"contain\\"},\\"children\\":null}]}]}"`;
|
exports[`Storyshots Avatar Emoji 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4},null],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},[{\\"width\\":30,\\"height\\":30}]]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/emoji-custom/troll.jpg\\",\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"contain\\"},\\"children\\":null}]}]}"`;
|
||||||
|
|
||||||
exports[`Storyshots Avatar Static 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4},null],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://user-images.githubusercontent.com/29778115/89444446-14738480-d728-11ea-9412-75fd978d95fb.jpg\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]}"`;
|
exports[`Storyshots Avatar Static 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4},null],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://user-images.githubusercontent.com/29778115/89444446-14738480-d728-11ea-9412-75fd978d95fb.jpg\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]}"`;
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
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.37.1"
|
versionName "4.38.0"
|
||||||
vectorDrawables.useSupportLibrary = true
|
vectorDrawables.useSupportLibrary = true
|
||||||
if (!isFoss) {
|
if (!isFoss) {
|
||||||
manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String]
|
manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String]
|
||||||
|
|
|
@ -79,10 +79,4 @@
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
</application>
|
</application>
|
||||||
<queries>
|
|
||||||
<package android:name="org.jitsi.meet" />
|
|
||||||
<intent>
|
|
||||||
<action android:name="android.intent.action.SEND" />
|
|
||||||
</intent>
|
|
||||||
</queries>
|
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|
|
@ -138,7 +138,7 @@ public class ReplyBroadcast extends BroadcastReceiver {
|
||||||
|
|
||||||
final Resources res = mContext.getResources();
|
final Resources res = mContext.getResources();
|
||||||
String packageName = mContext.getPackageName();
|
String packageName = mContext.getPackageName();
|
||||||
int smallIconResId = res.getIdentifier("ic_notification", "mipmap", packageName);
|
int smallIconResId = res.getIdentifier("ic_notification", "drawable", packageName);
|
||||||
|
|
||||||
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, CHANNEL_ID, NotificationManager.IMPORTANCE_LOW);
|
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, CHANNEL_ID, NotificationManager.IMPORTANCE_LOW);
|
||||||
notificationManager.createNotificationChannel(channel);
|
notificationManager.createNotificationChannel(channel);
|
||||||
|
|
|
@ -39,7 +39,7 @@ const AllReactionsListItem = ({ item, getCustomEmoji }: IAllReactionsListItemPro
|
||||||
.join(', ');
|
.join(', ');
|
||||||
}
|
}
|
||||||
if (count > 3) {
|
if (count > 3) {
|
||||||
displayNames = `${displayNames} ${I18n.t('and_more')} ${count - 3}`;
|
displayNames = `${displayNames} ${I18n.t('and_N_more', { count: count - 3 })}`;
|
||||||
} else {
|
} else {
|
||||||
displayNames = displayNames.replace(/,(?=[^,]*$)/, ` ${I18n.t('and')}`);
|
displayNames = displayNames.replace(/,(?=[^,]*$)/, ` ${I18n.t('and')}`);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ const Emoji = React.memo(({ literal, isMessageContainsOnlyEmoji, getCustomEmoji,
|
||||||
const emojiUnicode = shortnameToUnicode(literal);
|
const emojiUnicode = shortnameToUnicode(literal);
|
||||||
const emoji: any = getCustomEmoji && getCustomEmoji(literal.replace(/:/g, ''));
|
const emoji: any = getCustomEmoji && getCustomEmoji(literal.replace(/:/g, ''));
|
||||||
if (emoji && customEmojis) {
|
if (emoji && customEmojis) {
|
||||||
return <CustomEmoji style={[isMessageContainsOnlyEmoji ? styles.customEmojiBig : styles.customEmoji, style]} emoji={emoji} />;
|
return <CustomEmoji style={[isMessageContainsOnlyEmoji ? styles.customEmojiBig : styles.customEmoji]} emoji={emoji} />;
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<Text style={[{ color: colors.bodyText }, isMessageContainsOnlyEmoji ? styles.textBig : styles.text, style]}>
|
<Text style={[{ color: colors.bodyText }, isMessageContainsOnlyEmoji ? styles.textBig : styles.text, style]}>
|
||||||
|
|
|
@ -3,6 +3,7 @@ import { StyleSheet, Text, View } from 'react-native';
|
||||||
|
|
||||||
import { TSupportedThemes } from '../../theme';
|
import { TSupportedThemes } from '../../theme';
|
||||||
import { themes } from '../../lib/constants';
|
import { themes } from '../../lib/constants';
|
||||||
|
import styles from './styles';
|
||||||
|
|
||||||
const style = StyleSheet.create({
|
const style = StyleSheet.create({
|
||||||
container: {
|
container: {
|
||||||
|
@ -43,7 +44,7 @@ const ListItem = React.memo(({ children, level, bulletWidth, continue: _continue
|
||||||
return (
|
return (
|
||||||
<View style={style.container}>
|
<View style={style.container}>
|
||||||
<View style={[{ width: bulletWidth }, style.bullet]}>
|
<View style={[{ width: bulletWidth }, style.bullet]}>
|
||||||
<Text style={{ color: themes[theme].bodyText }}>{bullet}</Text>
|
<Text style={[styles.text, styles.listPrefix, { color: themes[theme].bodyText }]}>{bullet}</Text>
|
||||||
</View>
|
</View>
|
||||||
<View style={style.contents}>{children}</View>
|
<View style={style.contents}>{children}</View>
|
||||||
</View>
|
</View>
|
||||||
|
|
|
@ -16,8 +16,8 @@ const OrderedList = ({ value }: IOrderedListProps): React.ReactElement => {
|
||||||
<View>
|
<View>
|
||||||
{value.map(item => (
|
{value.map(item => (
|
||||||
<View style={styles.row} key={item.number?.toString()}>
|
<View style={styles.row} key={item.number?.toString()}>
|
||||||
<Text style={[styles.text, { color: colors.bodyText }]}>{item.number}. </Text>
|
<Text style={[styles.text, styles.listPrefix, { color: colors.bodyText }]}>{item.number}. </Text>
|
||||||
<Text style={[styles.inline, { color: colors.bodyText }]}>
|
<Text style={[styles.text, styles.inline, { color: colors.bodyText }]}>
|
||||||
<Inline value={item.value} />
|
<Inline value={item.value} />
|
||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
|
|
|
@ -17,8 +17,8 @@ const UnorderedList = ({ value }: IUnorderedListProps) => {
|
||||||
<View>
|
<View>
|
||||||
{value.map(item => (
|
{value.map(item => (
|
||||||
<View style={styles.row}>
|
<View style={styles.row}>
|
||||||
<Text style={[styles.text, { color: themes[theme].bodyText }]}>- </Text>
|
<Text style={[styles.text, styles.listPrefix, { color: themes[theme].bodyText }]}>- </Text>
|
||||||
<Text style={[styles.inline, { color: themes[theme].bodyText }]}>
|
<Text style={[styles.text, styles.inline, { color: themes[theme].bodyText }]}>
|
||||||
<Inline value={item.value} />
|
<Inline value={item.value} />
|
||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
|
|
|
@ -162,5 +162,8 @@ export default StyleSheet.create({
|
||||||
},
|
},
|
||||||
inline: {
|
inline: {
|
||||||
flexShrink: 1
|
flexShrink: 1
|
||||||
|
},
|
||||||
|
listPrefix: {
|
||||||
|
fontVariant: ['tabular-nums']
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import React, { useContext } from 'react';
|
import React, { useContext } from 'react';
|
||||||
import { dequal } from 'dequal';
|
import { dequal } from 'dequal';
|
||||||
import { Text } from 'react-native';
|
|
||||||
|
|
||||||
import { IMessageAttachments } from './interfaces';
|
import { IMessageAttachments } from './interfaces';
|
||||||
import Image from './Image';
|
import Image from './Image';
|
||||||
|
@ -8,13 +7,12 @@ import Audio from './Audio';
|
||||||
import Video from './Video';
|
import Video from './Video';
|
||||||
import Reply from './Reply';
|
import Reply from './Reply';
|
||||||
import Button from '../Button';
|
import Button from '../Button';
|
||||||
import styles from './styles';
|
|
||||||
import MessageContext from './Context';
|
import MessageContext from './Context';
|
||||||
import { useTheme } from '../../theme';
|
import { useTheme } from '../../theme';
|
||||||
import { IAttachment } from '../../definitions';
|
import { IAttachment, TGetCustomEmoji } from '../../definitions';
|
||||||
import CollapsibleQuote from './Components/CollapsibleQuote';
|
import CollapsibleQuote from './Components/CollapsibleQuote';
|
||||||
import openLink from '../../lib/methods/helpers/openLink';
|
import openLink from '../../lib/methods/helpers/openLink';
|
||||||
import { themes } from '../../lib/constants';
|
import Markdown from '../markdown';
|
||||||
|
|
||||||
export type TElement = {
|
export type TElement = {
|
||||||
type: string;
|
type: string;
|
||||||
|
@ -23,9 +21,8 @@ export type TElement = {
|
||||||
text: string;
|
text: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
const AttachedActions = ({ attachment }: { attachment: IAttachment }) => {
|
const AttachedActions = ({ attachment, getCustomEmoji }: { attachment: IAttachment; getCustomEmoji: TGetCustomEmoji }) => {
|
||||||
const { onAnswerButtonPress } = useContext(MessageContext);
|
const { onAnswerButtonPress } = useContext(MessageContext);
|
||||||
const { theme } = useTheme();
|
|
||||||
|
|
||||||
if (!attachment.actions) {
|
if (!attachment.actions) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -50,7 +47,7 @@ const AttachedActions = ({ attachment }: { attachment: IAttachment }) => {
|
||||||
});
|
});
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Text style={[styles.text, { color: themes[theme].bodyText }]}>{attachment.text}</Text>
|
<Markdown msg={attachment.text} getCustomEmoji={getCustomEmoji} />
|
||||||
{attachedButtons}
|
{attachedButtons}
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
@ -106,7 +103,7 @@ const Attachments: React.FC<IMessageAttachments> = React.memo(
|
||||||
}
|
}
|
||||||
|
|
||||||
if (file && file.actions && file.actions.length > 0) {
|
if (file && file.actions && file.actions.length > 0) {
|
||||||
return <AttachedActions attachment={file} />;
|
return <AttachedActions attachment={file} getCustomEmoji={getCustomEmoji} />;
|
||||||
}
|
}
|
||||||
if (typeof file.collapsed === 'boolean') {
|
if (typeof file.collapsed === 'boolean') {
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -1,37 +1,33 @@
|
||||||
import React, { useRef } from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
import { messageBlockWithContext } from '../UIKit/MessageBlock';
|
import { messageBlockWithContext } from '../UIKit/MessageBlock';
|
||||||
import { IMessageBlocks } from './interfaces';
|
import { IMessageBlocks } from './interfaces';
|
||||||
|
|
||||||
const Blocks = React.memo(({ blocks, id: mid, rid, blockAction }: IMessageBlocks) => {
|
const Blocks = ({ blocks, id: mid, rid, blockAction }: IMessageBlocks) => {
|
||||||
if (blocks && blocks.length > 0) {
|
if (blocks && blocks.length > 0) {
|
||||||
const appId = blocks[0]?.appId || '';
|
const appId = blocks[0]?.appId || '';
|
||||||
// eslint-disable-next-line react-hooks/rules-of-hooks
|
return React.createElement(
|
||||||
const comp = useRef(
|
messageBlockWithContext({
|
||||||
React.createElement(
|
action: async ({ actionId, value, blockId }: { actionId: string; value: string; blockId: string }) => {
|
||||||
messageBlockWithContext({
|
if (blockAction) {
|
||||||
action: async ({ actionId, value, blockId }: { actionId: string; value: string; blockId: string }) => {
|
await blockAction({
|
||||||
if (blockAction) {
|
actionId,
|
||||||
await blockAction({
|
appId,
|
||||||
actionId,
|
value,
|
||||||
appId,
|
blockId,
|
||||||
value,
|
rid,
|
||||||
blockId,
|
mid
|
||||||
rid,
|
});
|
||||||
mid
|
}
|
||||||
});
|
},
|
||||||
}
|
appId,
|
||||||
},
|
rid
|
||||||
appId,
|
}),
|
||||||
rid
|
{ blocks }
|
||||||
}),
|
|
||||||
{ blocks }
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return comp.current;
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
});
|
};
|
||||||
|
|
||||||
Blocks.displayName = 'MessageBlocks';
|
Blocks.displayName = 'MessageBlocks';
|
||||||
|
|
||||||
|
|
|
@ -508,6 +508,24 @@ export const MessageWithReply = () => (
|
||||||
}
|
}
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
|
<Message
|
||||||
|
msg='Yes, I am'
|
||||||
|
attachments={[
|
||||||
|
{
|
||||||
|
author_name: 'rocket.cat',
|
||||||
|
attachments: [
|
||||||
|
{
|
||||||
|
author_name: 'rocket.cat',
|
||||||
|
ts: date,
|
||||||
|
timeFormat: 'LT',
|
||||||
|
description: 'Are you seeing this mario :marioparty: ?',
|
||||||
|
image_url: 'https://octodex.github.com/images/yaktocat.png'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
text: ''
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -857,21 +875,38 @@ export const Ignored = () => <Message isIgnored />;
|
||||||
export const CustomStyle = () => <Message msg='Message' style={[{ backgroundColor: '#ddd' }]} />;
|
export const CustomStyle = () => <Message msg='Message' style={[{ backgroundColor: '#ddd' }]} />;
|
||||||
|
|
||||||
export const ShowButtonAsAttachment = () => (
|
export const ShowButtonAsAttachment = () => (
|
||||||
<Message
|
<>
|
||||||
attachments={[
|
<Message
|
||||||
{
|
attachments={[
|
||||||
text: 'Test Button',
|
{
|
||||||
actions: [
|
text: 'Test Button',
|
||||||
{
|
actions: [
|
||||||
type: 'button',
|
{
|
||||||
text: 'Text button',
|
type: 'button',
|
||||||
msg: 'Response message',
|
text: 'Text button',
|
||||||
msg_in_chat_window: true
|
msg: 'Response message',
|
||||||
}
|
msg_in_chat_window: true
|
||||||
]
|
}
|
||||||
}
|
]
|
||||||
]}
|
}
|
||||||
/>
|
]}
|
||||||
|
/>
|
||||||
|
<Message
|
||||||
|
attachments={[
|
||||||
|
{
|
||||||
|
text: ':avocado: **Message with markdown**\n\n_Some text_\n\nThis is a test',
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
type: 'button',
|
||||||
|
text: 'Text button',
|
||||||
|
msg: 'Response message',
|
||||||
|
msg_in_chat_window: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
);
|
);
|
||||||
|
|
||||||
export const ThumbnailFromServer = () => (
|
export const ThumbnailFromServer = () => (
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Keyboard, ViewStyle } from 'react-native';
|
import { Keyboard, ViewStyle } from 'react-native';
|
||||||
import { Subscription } from 'rxjs';
|
|
||||||
|
|
||||||
import Message from './Message';
|
import Message from './Message';
|
||||||
import MessageContext from './Context';
|
import MessageContext from './Context';
|
||||||
|
@ -78,13 +77,16 @@ class MessageContainer extends React.Component<IMessageContainerProps, IMessageC
|
||||||
|
|
||||||
state = { isManualUnignored: false };
|
state = { isManualUnignored: false };
|
||||||
|
|
||||||
private subscription?: Subscription;
|
private subscription?: Function;
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
const { item } = this.props;
|
const { item } = this.props;
|
||||||
if (item && item.observe) {
|
// @ts-ignore
|
||||||
const observable = item.observe();
|
if (item && item.experimentalSubscribe) {
|
||||||
this.subscription = observable.subscribe(() => {
|
// TODO: Update watermelonDB to recognize experimentalSubscribe at types
|
||||||
|
// experimentalSubscribe(subscriber: (isDeleted: boolean) => void, debugInfo?: any): Unsubscribe
|
||||||
|
// @ts-ignore
|
||||||
|
this.subscription = item.experimentalSubscribe(() => {
|
||||||
this.forceUpdate();
|
this.forceUpdate();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -112,8 +114,8 @@ class MessageContainer extends React.Component<IMessageContainerProps, IMessageC
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillUnmount() {
|
componentWillUnmount() {
|
||||||
if (this.subscription && this.subscription.unsubscribe) {
|
if (this.subscription) {
|
||||||
this.subscription.unsubscribe();
|
this.subscription();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -102,6 +102,7 @@ export interface ISubscription {
|
||||||
onHold?: boolean;
|
onHold?: boolean;
|
||||||
source?: IOmnichannelSource;
|
source?: IOmnichannelSource;
|
||||||
hideMentionStatus?: boolean;
|
hideMentionStatus?: boolean;
|
||||||
|
usersCount?: number;
|
||||||
// https://nozbe.github.io/WatermelonDB/Relation.html#relation-api
|
// https://nozbe.github.io/WatermelonDB/Relation.html#relation-api
|
||||||
messages: RelationModified<TMessageModel>;
|
messages: RelationModified<TMessageModel>;
|
||||||
threads: RelationModified<TThreadModel>;
|
threads: RelationModified<TThreadModel>;
|
||||||
|
|
|
@ -9,7 +9,6 @@ declare module 'react-native-config-reader';
|
||||||
declare module 'react-native-keycommands';
|
declare module 'react-native-keycommands';
|
||||||
declare module 'react-native-mime-types';
|
declare module 'react-native-mime-types';
|
||||||
declare module 'react-native-restart';
|
declare module 'react-native-restart';
|
||||||
declare module 'react-native-jitsi-meet';
|
|
||||||
declare module 'rn-root-view';
|
declare module 'rn-root-view';
|
||||||
declare module 'react-native-math-view';
|
declare module 'react-native-math-view';
|
||||||
declare module '@env' {
|
declare module '@env' {
|
||||||
|
|
|
@ -634,5 +634,6 @@
|
||||||
"Logout_failed": "فشل تسجيل الخروج!",
|
"Logout_failed": "فشل تسجيل الخروج!",
|
||||||
"Log_analytics_events": "تحليلات سجل الأحداث",
|
"Log_analytics_events": "تحليلات سجل الأحداث",
|
||||||
"invalid-room": "غرفة غير صالحة",
|
"invalid-room": "غرفة غير صالحة",
|
||||||
"Broadcast_hint": "يمكن فقط للمستخدمين المصرح لهم كتابة رسائل جديدة، ولكن سيتمكن المستخدمون الآخرون من الرد"
|
"Broadcast_hint": "يمكن فقط للمستخدمين المصرح لهم كتابة رسائل جديدة، ولكن سيتمكن المستخدمون الآخرون من الرد",
|
||||||
|
"and_N_more": "و{{count}} آخرين"
|
||||||
}
|
}
|
|
@ -858,5 +858,6 @@
|
||||||
"Channel_hint_not_read_only": "Alle Nutzer im Kanal können neue Nachrichten schreiben",
|
"Channel_hint_not_read_only": "Alle Nutzer im Kanal können neue Nachrichten schreiben",
|
||||||
"Channel_hint_encrypted_not_available": "Nicht verfügbar in öffentlichen Kanälen",
|
"Channel_hint_encrypted_not_available": "Nicht verfügbar in öffentlichen Kanälen",
|
||||||
"Read_only_hint": "Nur autorisierte Benutzer können neue Nachrichten schreiben",
|
"Read_only_hint": "Nur autorisierte Benutzer können neue Nachrichten schreiben",
|
||||||
"Discussion": "Diskussion"
|
"Discussion": "Diskussion",
|
||||||
|
"and_N_more": "und {{count}} weitere"
|
||||||
}
|
}
|
|
@ -899,5 +899,6 @@
|
||||||
"admin-video-conf-provider-not-configured-body": "Configure conference calls in order to make it available on this workspace.",
|
"admin-video-conf-provider-not-configured-body": "Configure conference calls in order to make it available on this workspace.",
|
||||||
"Presence_Cap_Warning_Title": "User status temporarily disabled",
|
"Presence_Cap_Warning_Title": "User status temporarily disabled",
|
||||||
"Presence_Cap_Warning_Description": "Active connections have reached the limit for the workspace, thus the service that handles user status is disabled. It can be re-enabled manually in workspace settings.",
|
"Presence_Cap_Warning_Description": "Active connections have reached the limit for the workspace, thus the service that handles user status is disabled. It can be re-enabled manually in workspace settings.",
|
||||||
"Learn_more": "Learn more"
|
"Learn_more": "Learn more",
|
||||||
|
"and_N_more": "and {{count}} more"
|
||||||
}
|
}
|
|
@ -425,5 +425,6 @@
|
||||||
"Server_selection_numbers": "Seleccionar servidor 1...9",
|
"Server_selection_numbers": "Seleccionar servidor 1...9",
|
||||||
"Add_server": "Añadir servidor",
|
"Add_server": "Añadir servidor",
|
||||||
"New_line": "Nueva línea",
|
"New_line": "Nueva línea",
|
||||||
"Broadcast_hint": "Sólo los usuarios autorizados pueden escribir nuevos mensajes, el resto podrán responder sobre los mismos."
|
"Broadcast_hint": "Sólo los usuarios autorizados pueden escribir nuevos mensajes, el resto podrán responder sobre los mismos.",
|
||||||
|
"and_N_more": "y {{count}} más"
|
||||||
}
|
}
|
|
@ -876,5 +876,6 @@
|
||||||
"Call": "Soita",
|
"Call": "Soita",
|
||||||
"Reply_in_direct_message": "Vastaa suoralla viestillä",
|
"Reply_in_direct_message": "Vastaa suoralla viestillä",
|
||||||
"room_archived": "arkistoi huoneen",
|
"room_archived": "arkistoi huoneen",
|
||||||
"room_unarchived": "palautti huoneen arkistosta"
|
"room_unarchived": "palautti huoneen arkistosta",
|
||||||
|
"and_N_more": "ja {{count}} lisää"
|
||||||
}
|
}
|
|
@ -791,5 +791,6 @@
|
||||||
"Omnichannel_on_hold_chat_resumed": "Le chat en attente a repris : {{comment}}",
|
"Omnichannel_on_hold_chat_resumed": "Le chat en attente a repris : {{comment}}",
|
||||||
"Omnichannel_queue": "File d'attente omnicanale",
|
"Omnichannel_queue": "File d'attente omnicanale",
|
||||||
"Empty": "Vide",
|
"Empty": "Vide",
|
||||||
"Broadcast_hint": "Seuls les utilisateurs autorisés peuvent écrire de nouveaux messages, mais les autres utilisateurs pourront répondre."
|
"Broadcast_hint": "Seuls les utilisateurs autorisés peuvent écrire de nouveaux messages, mais les autres utilisateurs pourront répondre.",
|
||||||
|
"and_N_more": "et {{count}} de plus"
|
||||||
}
|
}
|
|
@ -690,5 +690,6 @@
|
||||||
"Workspace_URL_Example": "Es. tua-azienda.rocket.chat",
|
"Workspace_URL_Example": "Es. tua-azienda.rocket.chat",
|
||||||
"invalid-room": "Canale non valido",
|
"invalid-room": "Canale non valido",
|
||||||
"Open_Livechats": "Chat in corso",
|
"Open_Livechats": "Chat in corso",
|
||||||
"Broadcast_hint": "Solo gli utenti autorizzati possono scrivere messaggi, ma gli altri utenti saranno in grado di rispondere"
|
"Broadcast_hint": "Solo gli utenti autorizzati possono scrivere messaggi, ma gli altri utenti saranno in grado di rispondere",
|
||||||
|
"and_N_more": "e altri {{count}}"
|
||||||
}
|
}
|
|
@ -547,5 +547,6 @@
|
||||||
"Clear": "クリア",
|
"Clear": "クリア",
|
||||||
"This_will_clear_all_your_offline_data": "オフラインデータをすべて削除します。",
|
"This_will_clear_all_your_offline_data": "オフラインデータをすべて削除します。",
|
||||||
"invalid-room": "無効なルーム",
|
"invalid-room": "無効なルーム",
|
||||||
"Broadcast_hint": "許可されたユーザーのみが新しいメッセージを書き込めます。他のユーザーは返信することができます"
|
"Broadcast_hint": "許可されたユーザーのみが新しいメッセージを書き込めます。他のユーザーは返信することができます",
|
||||||
|
"and_N_more": "さらに{{count}}つ"
|
||||||
}
|
}
|
|
@ -791,5 +791,6 @@
|
||||||
"Omnichannel_on_hold_chat_resumed": "Chat in de wacht hervat: {{comment}}",
|
"Omnichannel_on_hold_chat_resumed": "Chat in de wacht hervat: {{comment}}",
|
||||||
"Omnichannel_queue": "Omnichannel-wachtrij",
|
"Omnichannel_queue": "Omnichannel-wachtrij",
|
||||||
"Empty": "Leeg",
|
"Empty": "Leeg",
|
||||||
"Broadcast_hint": "Alleen geautoriseerde gebruikers kunnen nieuwe berichten schrijven, maar de andere gebruikers zullen kunnen antwoorden"
|
"Broadcast_hint": "Alleen geautoriseerde gebruikers kunnen nieuwe berichten schrijven, maar de andere gebruikers zullen kunnen antwoorden",
|
||||||
|
"and_N_more": "en nog {{count}}"
|
||||||
}
|
}
|
|
@ -885,5 +885,6 @@
|
||||||
"Discard":"Descartar",
|
"Discard":"Descartar",
|
||||||
"Discard_changes_description":"Todas as alterações serão perdidas, se você sair sem salvar.",
|
"Discard_changes_description":"Todas as alterações serão perdidas, se você sair sem salvar.",
|
||||||
"Presence_Cap_Warning_Title": "Status do usuário desabilitado temporariamente",
|
"Presence_Cap_Warning_Title": "Status do usuário desabilitado temporariamente",
|
||||||
"Presence_Cap_Warning_Description": "O limite de conexões ativas para a workspace foi atingido, por isso o serviço responsável pela presença dos usuários está temporariamente desabilitado. Ele pode ser reabilitado manualmente nas configurações da workspace."
|
"Presence_Cap_Warning_Description": "O limite de conexões ativas para a workspace foi atingido, por isso o serviço responsável pela presença dos usuários está temporariamente desabilitado. Ele pode ser reabilitado manualmente nas configurações da workspace.",
|
||||||
|
"and_N_more": "e mais {{count}}"
|
||||||
}
|
}
|
|
@ -494,5 +494,6 @@
|
||||||
"You": "Você",
|
"You": "Você",
|
||||||
"You_will_not_be_able_to_recover_this_message": "Você será incapaz de recuperar esta mensagem!",
|
"You_will_not_be_able_to_recover_this_message": "Você será incapaz de recuperar esta mensagem!",
|
||||||
"Open_Livechats": "Chats em andamento",
|
"Open_Livechats": "Chats em andamento",
|
||||||
"Broadcast_hint": "Apenas utilizadores autorizados podem escrever novas mensagens, mas os outros utilizadores poderão responder"
|
"Broadcast_hint": "Apenas utilizadores autorizados podem escrever novas mensagens, mas os outros utilizadores poderão responder",
|
||||||
|
"and_N_more": "e mais {{count}}"
|
||||||
}
|
}
|
|
@ -844,5 +844,6 @@
|
||||||
"Calling": "Идет вызов",
|
"Calling": "Идет вызов",
|
||||||
"Start_a_call": "Начать звонок",
|
"Start_a_call": "Начать звонок",
|
||||||
"Call": "Звонок",
|
"Call": "Звонок",
|
||||||
"Reply_in_direct_message": "Ответить в личном сообщении"
|
"Reply_in_direct_message": "Ответить в личном сообщении",
|
||||||
|
"and_N_more": "и еще {{count}}"
|
||||||
}
|
}
|
|
@ -809,5 +809,6 @@
|
||||||
"error-init-video-conf": "Napaka Zagon video klica",
|
"error-init-video-conf": "Napaka Zagon video klica",
|
||||||
"totp-invalid": "Koda ali geslo neveljavno",
|
"totp-invalid": "Koda ali geslo neveljavno",
|
||||||
"Close_Chat": "Zaprite klepet",
|
"Close_Chat": "Zaprite klepet",
|
||||||
"Select_tags": "Izberite oznake"
|
"Select_tags": "Izberite oznake",
|
||||||
|
"and_N_more": "in še {{count}}"
|
||||||
}
|
}
|
|
@ -874,5 +874,6 @@
|
||||||
"Call": "Ring",
|
"Call": "Ring",
|
||||||
"Reply_in_direct_message": "Svara med direktmeddelande",
|
"Reply_in_direct_message": "Svara med direktmeddelande",
|
||||||
"room_archived": "arkiverade rum",
|
"room_archived": "arkiverade rum",
|
||||||
"room_unarchived": "avarkiverade rum"
|
"room_unarchived": "avarkiverade rum",
|
||||||
|
"and_N_more": "och ytterligare {{count}}"
|
||||||
}
|
}
|
|
@ -670,5 +670,6 @@
|
||||||
"Workspace_URL_Example": "Örn. sirketiniz.rocket.chat",
|
"Workspace_URL_Example": "Örn. sirketiniz.rocket.chat",
|
||||||
"invalid-room": "Geçersiz oda",
|
"invalid-room": "Geçersiz oda",
|
||||||
"Open_Livechats": "Devam Eden Sohbetler",
|
"Open_Livechats": "Devam Eden Sohbetler",
|
||||||
"Broadcast_hint": "Yalnızca yetkili kullanıcılar yeni ileti yazabilir, ancak diğer kullanıcılar yanıt verebilir"
|
"Broadcast_hint": "Yalnızca yetkili kullanıcılar yeni ileti yazabilir, ancak diğer kullanıcılar yanıt verebilir",
|
||||||
|
"and_N_more": "ve {{count}} daha"
|
||||||
}
|
}
|
|
@ -645,5 +645,6 @@
|
||||||
"No_threads_following": "当前没有正在追踪的讨论",
|
"No_threads_following": "当前没有正在追踪的讨论",
|
||||||
"No_threads_unread": "当前没有未读的讨论",
|
"No_threads_unread": "当前没有未读的讨论",
|
||||||
"Messagebox_Send_to_channel": "发送至频道",
|
"Messagebox_Send_to_channel": "发送至频道",
|
||||||
"Broadcast_hint": "只有经过授权的用户才能写新信息,但其他用户可以回复"
|
"Broadcast_hint": "只有经过授权的用户才能写新信息,但其他用户可以回复",
|
||||||
|
"and_N_more": "另外{{count}}个"
|
||||||
}
|
}
|
|
@ -655,5 +655,6 @@
|
||||||
"Confirmation": "確認",
|
"Confirmation": "確認",
|
||||||
"invalid-room": "無效的房間",
|
"invalid-room": "無效的房間",
|
||||||
"Open_Livechats": "打開即時聊天",
|
"Open_Livechats": "打開即時聊天",
|
||||||
"Broadcast_hint": "只有經過授權的使用者才能發送新訊息,但其他使用者可以回覆"
|
"Broadcast_hint": "只有經過授權的使用者才能發送新訊息,但其他使用者可以回覆",
|
||||||
|
"and_N_more": "另外{{count}}個"
|
||||||
}
|
}
|
|
@ -11,3 +11,4 @@ export * from './messageTypeLoad';
|
||||||
export * from './notifications';
|
export * from './notifications';
|
||||||
export * from './defaultSettings';
|
export * from './defaultSettings';
|
||||||
export * from './tablet';
|
export * from './tablet';
|
||||||
|
export * from './userAgent';
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
import { isIOS } from '../methods/helpers';
|
||||||
|
|
||||||
|
export const userAgent = isIOS
|
||||||
|
? 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Mobile/15E148 Safari/604.1'
|
||||||
|
: 'Mozilla/5.0 (Linux; Android 12; SM-A315G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Mobile Safari/537.36';
|
|
@ -137,5 +137,7 @@ export default class Subscription extends Model {
|
||||||
|
|
||||||
@field('on_hold') onHold;
|
@field('on_hold') onHold;
|
||||||
|
|
||||||
|
@field('users_count') usersCount;
|
||||||
|
|
||||||
@json('source', sanitizer) source;
|
@json('source', sanitizer) source;
|
||||||
}
|
}
|
||||||
|
|
|
@ -257,6 +257,15 @@ export default schemaMigrations({
|
||||||
columns: [{ name: 'e2e_suggested_key', type: 'string', isOptional: true }]
|
columns: [{ name: 'e2e_suggested_key', type: 'string', isOptional: true }]
|
||||||
})
|
})
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
toVersion: 21,
|
||||||
|
steps: [
|
||||||
|
addColumns({
|
||||||
|
table: 'subscriptions',
|
||||||
|
columns: [{ name: 'users_count', type: 'string', isOptional: true }]
|
||||||
|
})
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { appSchema, tableSchema } from '@nozbe/watermelondb';
|
import { appSchema, tableSchema } from '@nozbe/watermelondb';
|
||||||
|
|
||||||
export default appSchema({
|
export default appSchema({
|
||||||
version: 20,
|
version: 21,
|
||||||
tables: [
|
tables: [
|
||||||
tableSchema({
|
tableSchema({
|
||||||
name: 'subscriptions',
|
name: 'subscriptions',
|
||||||
|
@ -63,7 +63,8 @@ export default appSchema({
|
||||||
{ name: 'team_main', type: 'boolean', isOptional: true }, // Use `Q.notEq(true)` to get false or null
|
{ name: 'team_main', type: 'boolean', isOptional: true }, // Use `Q.notEq(true)` to get false or null
|
||||||
{ name: 'on_hold', type: 'boolean', isOptional: true },
|
{ name: 'on_hold', type: 'boolean', isOptional: true },
|
||||||
{ name: 'source', type: 'string', isOptional: true },
|
{ name: 'source', type: 'string', isOptional: true },
|
||||||
{ name: 'hide_mention_status', type: 'boolean', isOptional: true }
|
{ name: 'hide_mention_status', type: 'boolean', isOptional: true },
|
||||||
|
{ name: 'users_count', type: 'number', isOptional: true }
|
||||||
]
|
]
|
||||||
}),
|
}),
|
||||||
tableSchema({
|
tableSchema({
|
||||||
|
|
|
@ -85,6 +85,9 @@ export const merge = (
|
||||||
if (room && 'source' in room) {
|
if (room && 'source' in room) {
|
||||||
mergedSubscription.source = room?.source;
|
mergedSubscription.source = room?.source;
|
||||||
}
|
}
|
||||||
|
if (room && 'usersCount' in room) {
|
||||||
|
mergedSubscription.usersCount = room.usersCount;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mergedSubscription.name) {
|
if (!mergedSubscription.name) {
|
||||||
|
|
|
@ -104,6 +104,7 @@ export const search = async ({ text = '', filterUsers = true, filterRooms = true
|
||||||
...user,
|
...user,
|
||||||
rid: user.username,
|
rid: user.username,
|
||||||
name: user.username,
|
name: user.username,
|
||||||
|
fname: user.name,
|
||||||
t: SubscriptionType.DIRECT,
|
t: SubscriptionType.DIRECT,
|
||||||
search: true
|
search: true
|
||||||
});
|
});
|
||||||
|
|
|
@ -10,15 +10,12 @@ import { OutsideModalParamList } from '../stacks/types';
|
||||||
import StatusBar from '../containers/StatusBar';
|
import StatusBar from '../containers/StatusBar';
|
||||||
import ActivityIndicator from '../containers/ActivityIndicator';
|
import ActivityIndicator from '../containers/ActivityIndicator';
|
||||||
import { TSupportedThemes, withTheme } from '../theme';
|
import { TSupportedThemes, withTheme } from '../theme';
|
||||||
import { debounce, isIOS } from '../lib/methods/helpers';
|
import { userAgent } from '../lib/constants';
|
||||||
|
import { debounce } from '../lib/methods/helpers';
|
||||||
import * as HeaderButton from '../containers/HeaderButton';
|
import * as HeaderButton from '../containers/HeaderButton';
|
||||||
import { Services } from '../lib/services';
|
import { Services } from '../lib/services';
|
||||||
import { IApplicationState, ICredentials } from '../definitions';
|
import { IApplicationState, ICredentials } from '../definitions';
|
||||||
|
|
||||||
const userAgent = isIOS
|
|
||||||
? 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Mobile/15E148 Safari/604.1'
|
|
||||||
: 'Mozilla/5.0 (Linux; Android 12; SM-A315G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Mobile Safari/537.36';
|
|
||||||
|
|
||||||
// iframe uses a postMessage to send the token to the client
|
// iframe uses a postMessage to send the token to the client
|
||||||
// We'll handle this sending the token to the hash of the window.location
|
// We'll handle this sending the token to the hash of the window.location
|
||||||
// https://docs.rocket.chat/guides/developer-guides/iframe-integration/authentication#iframe-url
|
// https://docs.rocket.chat/guides/developer-guides/iframe-integration/authentication#iframe-url
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
import React from 'react';
|
|
||||||
|
|
||||||
declare const JitsiMeetView: React.SFC<>;
|
|
||||||
|
|
||||||
export default JitsiMeetView;
|
|
|
@ -1,74 +0,0 @@
|
||||||
// @ts-ignore
|
|
||||||
// eslint-disable-next-line import/no-unresolved
|
|
||||||
import JitsiMeet from '@socialcode-rob1/react-native-jitsimeet-custom';
|
|
||||||
import React, { useEffect } from 'react';
|
|
||||||
import { RouteProp, useNavigation, useRoute } from '@react-navigation/native';
|
|
||||||
|
|
||||||
import RCActivityIndicator from '../containers/ActivityIndicator';
|
|
||||||
import { useAppSelector } from '../lib/hooks';
|
|
||||||
import { events, logEvent } from '../lib/methods/helpers/log';
|
|
||||||
import { getUserSelector } from '../selectors/login';
|
|
||||||
import { ChatsStackParamList } from '../stacks/types';
|
|
||||||
import { endVideoConfTimer, initVideoConfTimer } from '../lib/methods/videoConfTimer';
|
|
||||||
|
|
||||||
const formatUrl = (url: string, baseUrl: string, uriSize: number, avatarAuthURLFragment: string) =>
|
|
||||||
`${baseUrl}/avatar/${url}?format=png&width=${uriSize}&height=${uriSize}${avatarAuthURLFragment}`;
|
|
||||||
|
|
||||||
const JitsiMeetView = (): React.ReactElement => {
|
|
||||||
const { goBack } = useNavigation();
|
|
||||||
const {
|
|
||||||
params: { url, onlyAudio, videoConf, rid }
|
|
||||||
} = useRoute<RouteProp<ChatsStackParamList, 'JitsiMeetView'>>();
|
|
||||||
const user = useAppSelector(state => getUserSelector(state));
|
|
||||||
const baseUrl = useAppSelector(state => state.server.server);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
initJitsi();
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const initJitsi = async () => {
|
|
||||||
const audioOnly = onlyAudio ?? false;
|
|
||||||
const { name, id: userId, token, username } = user;
|
|
||||||
const avatarAuthURLFragment = `&rc_token=${token}&rc_uid=${userId}`;
|
|
||||||
const avatar = formatUrl(username, baseUrl, 100, avatarAuthURLFragment);
|
|
||||||
|
|
||||||
const userInfo = {
|
|
||||||
displayName: name as string,
|
|
||||||
avatar
|
|
||||||
};
|
|
||||||
const regex = /(?:\/.*\/)(.*)/;
|
|
||||||
const urlWithoutServer = regex.exec(url)![1];
|
|
||||||
const serverUrl = url.replace(`/${urlWithoutServer}`, '');
|
|
||||||
const room = (url.includes('jwt=') ? urlWithoutServer.split('jwt=')[0] : urlWithoutServer.split('#')[0]).replace('?', '');
|
|
||||||
const jwtToken = url.includes('jwt=') ? url.substring(url.indexOf('jwt=') + 4, url.lastIndexOf('#config')) : undefined;
|
|
||||||
const conferenceOptions = {
|
|
||||||
room,
|
|
||||||
serverUrl,
|
|
||||||
userInfo: {
|
|
||||||
displayName: userInfo.displayName,
|
|
||||||
avatar: userInfo.avatar
|
|
||||||
},
|
|
||||||
subject: room,
|
|
||||||
audioOnly,
|
|
||||||
audioMuted: false,
|
|
||||||
videoMuted: audioOnly,
|
|
||||||
token: jwtToken,
|
|
||||||
featureFlags: {
|
|
||||||
'calendar.enabled': false
|
|
||||||
},
|
|
||||||
configOverrides: {
|
|
||||||
'breakoutRooms.hideAddRoomButton': false
|
|
||||||
}
|
|
||||||
};
|
|
||||||
logEvent(videoConf ? events.LIVECHAT_VIDEOCONF_JOIN : events.JM_CONFERENCE_JOIN);
|
|
||||||
if (!videoConf) initVideoConfTimer(rid);
|
|
||||||
await JitsiMeet.launchJitsiMeetView(conferenceOptions);
|
|
||||||
logEvent(videoConf ? events.LIVECHAT_VIDEOCONF_TERMINATE : events.JM_CONFERENCE_TERMINATE);
|
|
||||||
if (!videoConf) endVideoConfTimer();
|
|
||||||
goBack();
|
|
||||||
};
|
|
||||||
|
|
||||||
return <RCActivityIndicator absolute size='large' />;
|
|
||||||
};
|
|
||||||
|
|
||||||
export default JitsiMeetView;
|
|
|
@ -1,18 +1,17 @@
|
||||||
import { activateKeepAwake, deactivateKeepAwake } from 'expo-keep-awake';
|
import { activateKeepAwake, deactivateKeepAwake } from 'expo-keep-awake';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { BackHandler, NativeEventSubscription } from 'react-native';
|
import { BackHandler, Linking, NativeEventSubscription, SafeAreaView } from 'react-native';
|
||||||
import { isAppInstalled, openAppWithUri } from 'react-native-send-intent';
|
|
||||||
import WebView from 'react-native-webview';
|
import WebView from 'react-native-webview';
|
||||||
import { WebViewMessage, WebViewNavigation } from 'react-native-webview/lib/WebViewTypes';
|
import { WebViewNavigation } from 'react-native-webview/lib/WebViewTypes';
|
||||||
|
|
||||||
import { IBaseScreen } from '../definitions';
|
import { IBaseScreen } from '../definitions';
|
||||||
|
import { userAgent } from '../lib/constants';
|
||||||
|
import { isIOS } from '../lib/methods/helpers';
|
||||||
import { events, logEvent } from '../lib/methods/helpers/log';
|
import { events, logEvent } from '../lib/methods/helpers/log';
|
||||||
import { endVideoConfTimer, initVideoConfTimer } from '../lib/methods/videoConfTimer';
|
import { endVideoConfTimer, initVideoConfTimer } from '../lib/methods/videoConfTimer';
|
||||||
import { ChatsStackParamList } from '../stacks/types';
|
import { ChatsStackParamList } from '../stacks/types';
|
||||||
import { withTheme } from '../theme';
|
import { withTheme } from '../theme';
|
||||||
|
|
||||||
const JITSI_INTENT = 'org.jitsi.meet';
|
|
||||||
|
|
||||||
type TJitsiMeetViewProps = IBaseScreen<ChatsStackParamList, 'JitsiMeetView'>;
|
type TJitsiMeetViewProps = IBaseScreen<ChatsStackParamList, 'JitsiMeetView'>;
|
||||||
|
|
||||||
class JitsiMeetView extends React.Component<TJitsiMeetViewProps> {
|
class JitsiMeetView extends React.Component<TJitsiMeetViewProps> {
|
||||||
|
@ -29,19 +28,8 @@ class JitsiMeetView extends React.Component<TJitsiMeetViewProps> {
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
const { route, navigation } = this.props;
|
this.handleJitsiApp();
|
||||||
isAppInstalled(JITSI_INTENT)
|
|
||||||
.then(function (isInstalled) {
|
|
||||||
if (isInstalled) {
|
|
||||||
const callUrl = route.params.url.replace(/^https?:\/\//, '').split('#')[0];
|
|
||||||
openAppWithUri(`intent://${callUrl}#Intent;scheme=${JITSI_INTENT};package=${JITSI_INTENT};end`)
|
|
||||||
.then(() => navigation.pop())
|
|
||||||
.catch(() => {});
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(() => {});
|
|
||||||
this.onConferenceJoined();
|
this.onConferenceJoined();
|
||||||
this.backHandler = BackHandler.addEventListener('hardwareBackPress', () => true);
|
|
||||||
activateKeepAwake();
|
activateKeepAwake();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,10 +38,24 @@ class JitsiMeetView extends React.Component<TJitsiMeetViewProps> {
|
||||||
if (!this.videoConf) {
|
if (!this.videoConf) {
|
||||||
endVideoConfTimer();
|
endVideoConfTimer();
|
||||||
}
|
}
|
||||||
this.backHandler.remove();
|
if (this.backHandler) {
|
||||||
|
this.backHandler.remove();
|
||||||
|
}
|
||||||
deactivateKeepAwake();
|
deactivateKeepAwake();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleJitsiApp = async () => {
|
||||||
|
const { route, navigation } = this.props;
|
||||||
|
const callUrl = route.params.url.replace(/^https?:\/\//, '');
|
||||||
|
try {
|
||||||
|
await Linking.openURL(`org.jitsi.meet://${callUrl}`);
|
||||||
|
navigation.pop();
|
||||||
|
} catch (error) {
|
||||||
|
// As the jitsi app was not opened disable the backhandler on android
|
||||||
|
this.backHandler = BackHandler.addEventListener('hardwareBackPress', () => true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// Jitsi Update Timeout needs to be called every 10 seconds to make sure
|
// Jitsi Update Timeout needs to be called every 10 seconds to make sure
|
||||||
// call is not ended and is available to web users.
|
// call is not ended and is available to web users.
|
||||||
onConferenceJoined = () => {
|
onConferenceJoined = () => {
|
||||||
|
@ -63,28 +65,36 @@ class JitsiMeetView extends React.Component<TJitsiMeetViewProps> {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
onNavigationStateChange = (webViewState: WebViewNavigation | WebViewMessage) => {
|
onNavigationStateChange = (webViewState: WebViewNavigation) => {
|
||||||
const { navigation, route } = this.props;
|
const { navigation, route } = this.props;
|
||||||
const jitsiRoomId = route.params.url
|
const jitsiRoomId = route.params.url
|
||||||
?.split(/^https?:\/\//)[1]
|
?.split(/^https?:\/\//)[1]
|
||||||
?.split('#')[0]
|
?.split('#')[0]
|
||||||
?.split('/')[1];
|
?.split('/')[1];
|
||||||
if ((jitsiRoomId && !webViewState.url.includes(jitsiRoomId)) || webViewState.url.includes('close')) {
|
if ((jitsiRoomId && !webViewState.url.includes(jitsiRoomId)) || webViewState.url.includes('close')) {
|
||||||
navigation.pop();
|
if (isIOS) {
|
||||||
|
if (webViewState.navigationType) {
|
||||||
|
navigation.pop();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
navigation.pop();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<WebView
|
<SafeAreaView style={{ flex: 1 }}>
|
||||||
source={{ uri: `${this.url}${this.url.includes('#config') ? '&' : '#'}config.disableDeepLinking=true` }}
|
<WebView
|
||||||
onMessage={({ nativeEvent }) => this.onNavigationStateChange(nativeEvent)}
|
source={{ uri: `${this.url}${this.url.includes('#config') ? '&' : '#'}config.disableDeepLinking=true` }}
|
||||||
onNavigationStateChange={this.onNavigationStateChange}
|
onNavigationStateChange={this.onNavigationStateChange}
|
||||||
style={{ flex: 1 }}
|
style={{ flex: 1 }}
|
||||||
javaScriptEnabled
|
userAgent={userAgent}
|
||||||
domStorageEnabled
|
javaScriptEnabled
|
||||||
mediaPlaybackRequiresUserAction={false}
|
domStorageEnabled
|
||||||
/>
|
mediaPlaybackRequiresUserAction={false}
|
||||||
|
/>
|
||||||
|
</SafeAreaView>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -22,7 +22,7 @@ import { sanitizeLikeString } from '../../lib/database/utils';
|
||||||
import UserPreferences from '../../lib/methods/userPreferences';
|
import UserPreferences from '../../lib/methods/userPreferences';
|
||||||
import { OutsideParamList } from '../../stacks/types';
|
import { OutsideParamList } from '../../stacks/types';
|
||||||
import { withTheme } from '../../theme';
|
import { withTheme } from '../../theme';
|
||||||
import { isTablet } from '../../lib/methods/helpers';
|
import { isIOS, isTablet } from '../../lib/methods/helpers';
|
||||||
import EventEmitter from '../../lib/methods/helpers/events';
|
import EventEmitter from '../../lib/methods/helpers/events';
|
||||||
import { BASIC_AUTH_KEY, setBasicAuth } from '../../lib/methods/helpers/fetch';
|
import { BASIC_AUTH_KEY, setBasicAuth } from '../../lib/methods/helpers/fetch';
|
||||||
import { showConfirmationAlert } from '../../lib/methods/helpers/info';
|
import { showConfirmationAlert } from '../../lib/methods/helpers/info';
|
||||||
|
@ -392,28 +392,32 @@ class NewServerView extends React.Component<INewServerViewProps, INewServerViewS
|
||||||
style={[styles.connectButton, { marginTop: verticalScale({ size: 16, height }) }]}
|
style={[styles.connectButton, { marginTop: verticalScale({ size: 16, height }) }]}
|
||||||
testID='new-server-view-button'
|
testID='new-server-view-button'
|
||||||
/>
|
/>
|
||||||
<OrSeparator theme={theme} />
|
{isIOS ? (
|
||||||
<Text
|
<>
|
||||||
style={[
|
<OrSeparator theme={theme} />
|
||||||
styles.description,
|
<Text
|
||||||
{
|
style={[
|
||||||
color: themes[theme].auxiliaryText,
|
styles.description,
|
||||||
fontSize: moderateScale({ size: 14, width }),
|
{
|
||||||
marginBottom: verticalScale({ size: 16, height })
|
color: themes[theme].auxiliaryText,
|
||||||
}
|
fontSize: moderateScale({ size: 14, width }),
|
||||||
]}
|
marginBottom: verticalScale({ size: 16, height })
|
||||||
>
|
}
|
||||||
{I18n.t('Onboarding_join_open_description')}
|
]}
|
||||||
</Text>
|
>
|
||||||
<Button
|
{I18n.t('Onboarding_join_open_description')}
|
||||||
title={I18n.t('Join_our_open_workspace')}
|
</Text>
|
||||||
type='secondary'
|
<Button
|
||||||
backgroundColor={themes[theme].chatComponentBackground}
|
title={I18n.t('Join_our_open_workspace')}
|
||||||
onPress={this.connectOpen}
|
type='secondary'
|
||||||
disabled={connecting}
|
backgroundColor={themes[theme].chatComponentBackground}
|
||||||
loading={connectingOpen && connecting}
|
onPress={this.connectOpen}
|
||||||
testID='new-server-view-open'
|
disabled={connecting}
|
||||||
/>
|
loading={connectingOpen && connecting}
|
||||||
|
testID='new-server-view-open'
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
) : null}
|
||||||
</FormContainerInner>
|
</FormContainerInner>
|
||||||
{this.renderCertificatePicker()}
|
{this.renderCertificatePicker()}
|
||||||
</FormContainer>
|
</FormContainer>
|
||||||
|
|
|
@ -86,7 +86,7 @@ interface IRoomActionsViewProps extends IActionSheetProvider, IBaseScreen<ChatsS
|
||||||
|
|
||||||
interface IRoomActionsViewState {
|
interface IRoomActionsViewState {
|
||||||
room: TSubscriptionModel;
|
room: TSubscriptionModel;
|
||||||
membersCount: number;
|
membersCount?: number;
|
||||||
member: Partial<IUser>;
|
member: Partial<IUser>;
|
||||||
joined: boolean;
|
joined: boolean;
|
||||||
canViewMembers: boolean;
|
canViewMembers: boolean;
|
||||||
|
@ -153,10 +153,12 @@ class RoomActionsView extends React.Component<IRoomActionsViewProps, IRoomAction
|
||||||
this.roomObservable = room.observe();
|
this.roomObservable = room.observe();
|
||||||
this.subscription = this.roomObservable.subscribe(changes => {
|
this.subscription = this.roomObservable.subscribe(changes => {
|
||||||
if (this.mounted) {
|
if (this.mounted) {
|
||||||
this.setState({ room: changes });
|
this.setState({ room: changes, membersCount: changes.usersCount });
|
||||||
} else {
|
} else {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
this.state.room = changes;
|
this.state.room = changes;
|
||||||
|
// @ts-ignore
|
||||||
|
this.state.membersCount = changes.usersCount;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -191,7 +193,8 @@ class RoomActionsView extends React.Component<IRoomActionsViewProps, IRoomAction
|
||||||
try {
|
try {
|
||||||
const counters = await Services.getRoomCounters(room.rid, room.t as any);
|
const counters = await Services.getRoomCounters(room.rid, room.t as any);
|
||||||
if (counters.success) {
|
if (counters.success) {
|
||||||
this.setState({ membersCount: counters.members, joined: counters.joined });
|
await this.updateUsersCount(counters.members);
|
||||||
|
this.setState({ joined: counters.joined });
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
log(e);
|
log(e);
|
||||||
|
@ -231,6 +234,23 @@ class RoomActionsView extends React.Component<IRoomActionsViewProps, IRoomAction
|
||||||
return room.t === 'l' && room.status === 'queued' && !this.joined;
|
return room.t === 'l' && room.status === 'queued' && !this.joined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateUsersCount = async (members: number) => {
|
||||||
|
const { room } = this.state;
|
||||||
|
if (members === room.usersCount) return;
|
||||||
|
try {
|
||||||
|
const db = database.active;
|
||||||
|
await db.write(async () => {
|
||||||
|
await room.update(
|
||||||
|
protectedFunction((r: TSubscriptionModel) => {
|
||||||
|
r.usersCount = members;
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
} catch {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
onPressTouchable: IOnPressTouch = (item: {
|
onPressTouchable: IOnPressTouch = (item: {
|
||||||
route?: keyof ChatsStackParamList;
|
route?: keyof ChatsStackParamList;
|
||||||
params?: ChatsStackParamList[keyof ChatsStackParamList];
|
params?: ChatsStackParamList[keyof ChatsStackParamList];
|
||||||
|
@ -1052,7 +1072,7 @@ class RoomActionsView extends React.Component<IRoomActionsViewProps, IRoomAction
|
||||||
<>
|
<>
|
||||||
<List.Item
|
<List.Item
|
||||||
title='Members'
|
title='Members'
|
||||||
subtitle={membersCount > 0 ? `${membersCount} ${I18n.t('members')}` : undefined}
|
subtitle={membersCount && membersCount > 0 ? `${membersCount} ${I18n.t('members')}` : undefined}
|
||||||
onPress={() => this.onPressTouchable({ route: 'RoomMembersView', params: { rid, room, joined: this.joined } })}
|
onPress={() => this.onPressTouchable({ route: 'RoomMembersView', params: { rid, room, joined: this.joined } })}
|
||||||
testID='room-actions-members'
|
testID='room-actions-members'
|
||||||
left={() => <List.Icon name='team' />}
|
left={() => <List.Icon name='team' />}
|
||||||
|
|
|
@ -906,7 +906,7 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
|
||||||
const { selectedMessage } = this.state;
|
const { selectedMessage } = this.state;
|
||||||
this.handleCloseEmoji(showActionSheet, {
|
this.handleCloseEmoji(showActionSheet, {
|
||||||
children: <ReactionsList reactions={selectedMessage?.reactions} getCustomEmoji={this.getCustomEmoji} />,
|
children: <ReactionsList reactions={selectedMessage?.reactions} getCustomEmoji={this.getCustomEmoji} />,
|
||||||
snaps: ['50%', '80%'],
|
snaps: ['50%'],
|
||||||
enableContentPanningGesture: false
|
enableContentPanningGesture: false
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
|
@ -31,7 +31,7 @@ const data = {
|
||||||
return {
|
return {
|
||||||
username: `user${randomVal}`,
|
username: `user${randomVal}`,
|
||||||
name: `user${randomVal}`, // FIXME: apply a different name
|
name: `user${randomVal}`, // FIXME: apply a different name
|
||||||
password: `password${randomVal}`,
|
password: `Password1@${randomVal}`,
|
||||||
email: `mobile+${randomVal}@rocket.chat`
|
email: `mobile+${randomVal}@rocket.chat`
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -108,7 +108,10 @@ describe('E2E Encryption', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should tap "How it works" and navigate', async () => {
|
it('should tap "How it works" and navigate', async () => {
|
||||||
await element(by.id('e2e-save-password-view-how-it-works').and(by.label('How It Works'))).tap();
|
await waitFor(element(by[textMatcher]('How It Works')).atIndex(0))
|
||||||
|
.toExist()
|
||||||
|
.withTimeout(1000);
|
||||||
|
await element(by.id('e2e-save-password-view-how-it-works')).tap();
|
||||||
await waitFor(element(by.id('e2e-how-it-works-view')))
|
await waitFor(element(by.id('e2e-how-it-works-view')))
|
||||||
.toBeVisible()
|
.toBeVisible()
|
||||||
.withTimeout(2000);
|
.withTimeout(2000);
|
||||||
|
@ -116,7 +119,10 @@ describe('E2E Encryption', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should tap "Save my password" and close modal', async () => {
|
it('should tap "Save my password" and close modal', async () => {
|
||||||
await element(by.id('e2e-save-password-view-saved-password').and(by.label('I Saved My E2E Password'))).tap();
|
await waitFor(element(by[textMatcher]('I Saved My E2E Password')).atIndex(0))
|
||||||
|
.toExist()
|
||||||
|
.withTimeout(1000);
|
||||||
|
await element(by.id('e2e-save-password-view-saved-password')).tap();
|
||||||
await sleep(300); // wait for animation
|
await sleep(300); // wait for animation
|
||||||
await waitFor(element(by.id('rooms-list-view')))
|
await waitFor(element(by.id('rooms-list-view')))
|
||||||
.toBeVisible()
|
.toBeVisible()
|
||||||
|
@ -237,8 +243,14 @@ describe('E2E Encryption', () => {
|
||||||
.toBeVisible()
|
.toBeVisible()
|
||||||
.withTimeout(2000);
|
.withTimeout(2000);
|
||||||
await expect(element(by.id('e2e-encryption-security-view-password'))).toExist();
|
await expect(element(by.id('e2e-encryption-security-view-password'))).toExist();
|
||||||
await expect(element(by.id('e2e-encryption-security-view-change-password').and(by.label('Save Changes')))).toExist();
|
await waitFor(element(by[textMatcher]('Save Changes')).atIndex(0))
|
||||||
await expect(element(by.id('e2e-encryption-security-view-reset-key').and(by.label('Reset E2E Key')))).toExist();
|
.toExist()
|
||||||
|
.withTimeout(1000);
|
||||||
|
await expect(element(by.id('e2e-encryption-security-view-change-password'))).toExist();
|
||||||
|
await waitFor(element(by[textMatcher]('Reset E2E Key')).atIndex(0))
|
||||||
|
.toExist()
|
||||||
|
.withTimeout(1000);
|
||||||
|
await expect(element(by.id('e2e-encryption-security-view-reset-key'))).toExist();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -330,7 +342,10 @@ describe('E2E Encryption', () => {
|
||||||
await waitFor(element(by.id('e2e-encryption-security-view')))
|
await waitFor(element(by.id('e2e-encryption-security-view')))
|
||||||
.toBeVisible()
|
.toBeVisible()
|
||||||
.withTimeout(2000);
|
.withTimeout(2000);
|
||||||
await element(by.id('e2e-encryption-security-view-reset-key').and(by.label('Reset E2E Key'))).tap();
|
await waitFor(element(by[textMatcher]('Reset E2E Key')).atIndex(0))
|
||||||
|
.toExist()
|
||||||
|
.withTimeout(1000);
|
||||||
|
await element(by.id('e2e-encryption-security-view-reset-key')).tap();
|
||||||
await waitFor(element(by[textMatcher]('Are you sure?')))
|
await waitFor(element(by[textMatcher]('Are you sure?')))
|
||||||
.toExist()
|
.toExist()
|
||||||
.withTimeout(2000);
|
.withTimeout(2000);
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
import Detox, { device, waitFor, element, by, expect } from 'detox';
|
import Detox, { device, waitFor, element, by, expect } from 'detox';
|
||||||
|
|
||||||
import { navigateToLogin, login } from '../../helpers/app';
|
import { navigateToLogin, login, TTextMatcher, platformTypes } from '../../helpers/app';
|
||||||
import { createRandomUser, ITestUser } from '../../helpers/data_setup';
|
import { createRandomUser, ITestUser } from '../../helpers/data_setup';
|
||||||
|
|
||||||
const defaultLaunchArgs = { permissions: { notifications: 'YES' } } as Detox.DeviceLaunchAppConfig;
|
const defaultLaunchArgs = { permissions: { notifications: 'YES' } } as Detox.DeviceLaunchAppConfig;
|
||||||
|
let textMatcher: TTextMatcher;
|
||||||
|
|
||||||
const navToLanguage = async () => {
|
const navToLanguage = async () => {
|
||||||
await waitFor(element(by.id('rooms-list-view')))
|
await waitFor(element(by.id('rooms-list-view')))
|
||||||
|
@ -28,10 +29,13 @@ const navToLanguage = async () => {
|
||||||
|
|
||||||
describe('i18n', () => {
|
describe('i18n', () => {
|
||||||
describe('OS language', () => {
|
describe('OS language', () => {
|
||||||
|
beforeAll(() => {
|
||||||
|
({ textMatcher } = platformTypes[device.getPlatform()]);
|
||||||
|
});
|
||||||
it("OS set to 'en' and proper translate to 'en'", async () => {
|
it("OS set to 'en' and proper translate to 'en'", async () => {
|
||||||
// if (device.getPlatform() === 'android') {
|
if (device.getPlatform() === 'android') {
|
||||||
// return; // FIXME: Passing language with launch parameters doesn't work with Android
|
return; // FIXME: Passing language with launch parameters doesn't work with Android
|
||||||
// }
|
}
|
||||||
await device.launchApp({
|
await device.launchApp({
|
||||||
...defaultLaunchArgs,
|
...defaultLaunchArgs,
|
||||||
languageAndLocale: {
|
languageAndLocale: {
|
||||||
|
@ -43,13 +47,16 @@ describe('i18n', () => {
|
||||||
await waitFor(element(by.id('new-server-view')))
|
await waitFor(element(by.id('new-server-view')))
|
||||||
.toBeVisible()
|
.toBeVisible()
|
||||||
.withTimeout(20000);
|
.withTimeout(20000);
|
||||||
await expect(element(by.id('new-server-view-open').and(by.label('Join our open workspace')))).toBeVisible();
|
await expect(element(by.id('new-server-view-open'))).toBeVisible();
|
||||||
|
await waitFor(element(by[textMatcher]('Join our open workspace')).atIndex(0))
|
||||||
|
.toExist()
|
||||||
|
.withTimeout(1000);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("OS set to unavailable language and fallback to 'en'", async () => {
|
it("OS set to unavailable language and fallback to 'en'", async () => {
|
||||||
// if (device.getPlatform() === 'android') {
|
if (device.getPlatform() === 'android') {
|
||||||
// return; // FIXME: Passing language with launch parameters doesn't work with Android
|
return; // FIXME: Passing language with launch parameters doesn't work with Android
|
||||||
// }
|
}
|
||||||
await device.launchApp({
|
await device.launchApp({
|
||||||
...defaultLaunchArgs,
|
...defaultLaunchArgs,
|
||||||
languageAndLocale: {
|
languageAndLocale: {
|
||||||
|
@ -60,7 +67,10 @@ describe('i18n', () => {
|
||||||
await waitFor(element(by.id('new-server-view')))
|
await waitFor(element(by.id('new-server-view')))
|
||||||
.toBeVisible()
|
.toBeVisible()
|
||||||
.withTimeout(20000);
|
.withTimeout(20000);
|
||||||
await expect(element(by.id('new-server-view-open').and(by.label('Join our open workspace')))).toBeVisible();
|
await expect(element(by.id('new-server-view-open'))).toBeVisible();
|
||||||
|
await waitFor(element(by[textMatcher]('Join our open workspace')).atIndex(0))
|
||||||
|
.toExist()
|
||||||
|
.withTimeout(1000);
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -19,9 +19,9 @@ describe('Onboarding', () => {
|
||||||
await expect(element(by.id('new-server-view'))).toBeVisible();
|
await expect(element(by.id('new-server-view'))).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should have "Join our open workspace"', async () => {
|
// it('should have "Join our open workspace"', async () => {
|
||||||
await expect(element(by.id('new-server-view-open'))).toBeVisible();
|
// await expect(element(by.id('new-server-view-open'))).toBeVisible();
|
||||||
});
|
// });
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Usage', () => {
|
describe('Usage', () => {
|
||||||
|
@ -34,12 +34,12 @@ describe('Onboarding', () => {
|
||||||
await element(by[textMatcher]('OK').and(by.type(alertButtonType))).tap();
|
await element(by[textMatcher]('OK').and(by.type(alertButtonType))).tap();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should tap on "Join our open workspace" and navigate', async () => {
|
// it('should tap on "Join our open workspace" and navigate', async () => {
|
||||||
await element(by.id('new-server-view-open')).tap();
|
// await element(by.id('new-server-view-open')).tap();
|
||||||
await waitFor(element(by.id('workspace-view')))
|
// await waitFor(element(by.id('workspace-view')))
|
||||||
.toBeVisible()
|
// .toBeVisible()
|
||||||
.withTimeout(60000);
|
// .withTimeout(60000);
|
||||||
});
|
// });
|
||||||
|
|
||||||
it('should enter a valid server without login services and navigate to login', async () => {
|
it('should enter a valid server without login services and navigate to login', async () => {
|
||||||
await device.launchApp({ newInstance: true });
|
await device.launchApp({ newInstance: true });
|
||||||
|
|
|
@ -103,6 +103,7 @@ describe('Room actions screen', () => {
|
||||||
|
|
||||||
it('should have members', async () => {
|
it('should have members', async () => {
|
||||||
await expect(element(by.id('room-actions-members'))).toExist();
|
await expect(element(by.id('room-actions-members'))).toExist();
|
||||||
|
await expect(element(by[textMatcher]('1 members'))).toExist();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should have files', async () => {
|
it('should have files', async () => {
|
||||||
|
@ -338,6 +339,9 @@ describe('Room actions screen', () => {
|
||||||
await element(by.id('selected-users-view-submit')).tap();
|
await element(by.id('selected-users-view-submit')).tap();
|
||||||
await sleep(300);
|
await sleep(300);
|
||||||
await backToActions();
|
await backToActions();
|
||||||
|
await waitFor(element(by[textMatcher]('3 members')))
|
||||||
|
.toExist()
|
||||||
|
.withTimeout(5000);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Room Members', () => {
|
describe('Room Members', () => {
|
||||||
|
|
|
@ -48,6 +48,13 @@ async function waitForLoading() {
|
||||||
// .withTimeout(10000);
|
// .withTimeout(10000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getIndex() {
|
||||||
|
if (device.getPlatform() === 'android') {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
describe('Room', () => {
|
describe('Room', () => {
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
|
await device.launchApp({ permissions: { notifications: 'YES' }, delete: true });
|
||||||
|
@ -123,11 +130,11 @@ describe('Room', () => {
|
||||||
.toExist()
|
.toExist()
|
||||||
.withTimeout(5000);
|
.withTimeout(5000);
|
||||||
await element(by.id('search-message-view-input')).replaceText('30');
|
await element(by.id('search-message-view-input')).replaceText('30');
|
||||||
await waitFor(element(by[textMatcher]('30')).atIndex(1))
|
await waitFor(element(by[textMatcher]('30')).atIndex(getIndex()))
|
||||||
.toExist()
|
.toExist()
|
||||||
.withTimeout(30000);
|
.withTimeout(30000);
|
||||||
await sleep(1000);
|
await sleep(1000);
|
||||||
await element(by[textMatcher]('30')).atIndex(1).tap();
|
await element(by[textMatcher]('30')).atIndex(getIndex()).tap();
|
||||||
await waitForLoading();
|
await waitForLoading();
|
||||||
await waitFor(element(by[textMatcher]('30')).atIndex(0))
|
await waitFor(element(by[textMatcher]('30')).atIndex(0))
|
||||||
.toExist()
|
.toExist()
|
||||||
|
@ -267,10 +274,10 @@ describe('Threads', () => {
|
||||||
.toExist()
|
.toExist()
|
||||||
.withTimeout(5000);
|
.withTimeout(5000);
|
||||||
await element(by.id('search-message-view-input')).replaceText('to be searched');
|
await element(by.id('search-message-view-input')).replaceText('to be searched');
|
||||||
await waitFor(element(by[textMatcher]('to be searched')).atIndex(1))
|
await waitFor(element(by[textMatcher]('to be searched')).atIndex(getIndex()))
|
||||||
.toExist()
|
.toExist()
|
||||||
.withTimeout(30000);
|
.withTimeout(30000);
|
||||||
await element(by[textMatcher]('to be searched')).atIndex(1).tap();
|
await element(by[textMatcher]('to be searched')).atIndex(getIndex()).tap();
|
||||||
await expectThreadMessages('to be searched');
|
await expectThreadMessages('to be searched');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -107,9 +107,6 @@ PODS:
|
||||||
- GoogleUtilities/Logger
|
- GoogleUtilities/Logger
|
||||||
- hermes-engine (0.11.0)
|
- hermes-engine (0.11.0)
|
||||||
- iosMath (0.9.4)
|
- iosMath (0.9.4)
|
||||||
- JitsiMeetSDKLite (7.0.1-lite):
|
|
||||||
- JitsiWebRTC (~> 106.0)
|
|
||||||
- JitsiWebRTC (106.0.0)
|
|
||||||
- KeyCommands (2.0.3):
|
- KeyCommands (2.0.3):
|
||||||
- React
|
- React
|
||||||
- libevent (2.1.12)
|
- libevent (2.1.12)
|
||||||
|
@ -366,9 +363,6 @@ PODS:
|
||||||
- React-Core
|
- React-Core
|
||||||
- react-native-document-picker (8.1.2):
|
- react-native-document-picker (8.1.2):
|
||||||
- React-Core
|
- React-Core
|
||||||
- react-native-jitsimeet-custom (2.5.0):
|
|
||||||
- JitsiMeetSDKLite (= 7.0.1-lite)
|
|
||||||
- React-Core
|
|
||||||
- react-native-mmkv-storage (0.8.0):
|
- react-native-mmkv-storage (0.8.0):
|
||||||
- MMKV (= 1.2.13)
|
- MMKV (= 1.2.13)
|
||||||
- React-Core
|
- React-Core
|
||||||
|
@ -630,7 +624,6 @@ DEPENDENCIES:
|
||||||
- "react-native-cameraroll (from `../node_modules/@react-native-community/cameraroll`)"
|
- "react-native-cameraroll (from `../node_modules/@react-native-community/cameraroll`)"
|
||||||
- "react-native-cookies (from `../node_modules/@react-native-cookies/cookies`)"
|
- "react-native-cookies (from `../node_modules/@react-native-cookies/cookies`)"
|
||||||
- react-native-document-picker (from `../node_modules/react-native-document-picker`)
|
- react-native-document-picker (from `../node_modules/react-native-document-picker`)
|
||||||
- "react-native-jitsimeet-custom (from `../node_modules/@socialcode-rob1/react-native-jitsimeet-custom`)"
|
|
||||||
- react-native-mmkv-storage (from `../node_modules/react-native-mmkv-storage`)
|
- react-native-mmkv-storage (from `../node_modules/react-native-mmkv-storage`)
|
||||||
- "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)"
|
- "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)"
|
||||||
- react-native-notifications (from `../node_modules/react-native-notifications`)
|
- react-native-notifications (from `../node_modules/react-native-notifications`)
|
||||||
|
@ -696,8 +689,6 @@ SPEC REPOS:
|
||||||
- GoogleUtilities
|
- GoogleUtilities
|
||||||
- hermes-engine
|
- hermes-engine
|
||||||
- iosMath
|
- iosMath
|
||||||
- JitsiMeetSDKLite
|
|
||||||
- JitsiWebRTC
|
|
||||||
- libevent
|
- libevent
|
||||||
- libwebp
|
- libwebp
|
||||||
- MMKV
|
- MMKV
|
||||||
|
@ -784,8 +775,6 @@ EXTERNAL SOURCES:
|
||||||
:path: "../node_modules/@react-native-cookies/cookies"
|
:path: "../node_modules/@react-native-cookies/cookies"
|
||||||
react-native-document-picker:
|
react-native-document-picker:
|
||||||
:path: "../node_modules/react-native-document-picker"
|
:path: "../node_modules/react-native-document-picker"
|
||||||
react-native-jitsimeet-custom:
|
|
||||||
:path: "../node_modules/@socialcode-rob1/react-native-jitsimeet-custom"
|
|
||||||
react-native-mmkv-storage:
|
react-native-mmkv-storage:
|
||||||
:path: "../node_modules/react-native-mmkv-storage"
|
:path: "../node_modules/react-native-mmkv-storage"
|
||||||
react-native-netinfo:
|
react-native-netinfo:
|
||||||
|
@ -917,8 +906,6 @@ SPEC CHECKSUMS:
|
||||||
GoogleUtilities: c2bdc4cf2ce786c4d2e6b3bcfd599a25ca78f06f
|
GoogleUtilities: c2bdc4cf2ce786c4d2e6b3bcfd599a25ca78f06f
|
||||||
hermes-engine: 84e3af1ea01dd7351ac5d8689cbbea1f9903ffc3
|
hermes-engine: 84e3af1ea01dd7351ac5d8689cbbea1f9903ffc3
|
||||||
iosMath: f7a6cbadf9d836d2149c2a84c435b1effc244cba
|
iosMath: f7a6cbadf9d836d2149c2a84c435b1effc244cba
|
||||||
JitsiMeetSDKLite: d59573336ce887ec52327a9927aa8443f560d0b9
|
|
||||||
JitsiWebRTC: f441eb0e2d67f0588bf24e21c5162e97342714fb
|
|
||||||
KeyCommands: f66c535f698ed14b3d3a4e58859d79a827ea907e
|
KeyCommands: f66c535f698ed14b3d3a4e58859d79a827ea907e
|
||||||
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
|
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
|
||||||
libwebp: f62cb61d0a484ba548448a4bd52aabf150ff6eef
|
libwebp: f62cb61d0a484ba548448a4bd52aabf150ff6eef
|
||||||
|
@ -946,7 +933,6 @@ SPEC CHECKSUMS:
|
||||||
react-native-cameraroll: 2957f2bce63ae896a848fbe0d5352c1bd4d20866
|
react-native-cameraroll: 2957f2bce63ae896a848fbe0d5352c1bd4d20866
|
||||||
react-native-cookies: f54fcded06bb0cda05c11d86788020b43528a26c
|
react-native-cookies: f54fcded06bb0cda05c11d86788020b43528a26c
|
||||||
react-native-document-picker: f5ec1a712ca2a975c233117f044817bb8393cad4
|
react-native-document-picker: f5ec1a712ca2a975c233117f044817bb8393cad4
|
||||||
react-native-jitsimeet-custom: a57ca376bfc1c69f639b138f2de2a10e0ed42c04
|
|
||||||
react-native-mmkv-storage: 8ba3c0216a6df283ece11205b442a3e435aec4e5
|
react-native-mmkv-storage: 8ba3c0216a6df283ece11205b442a3e435aec4e5
|
||||||
react-native-netinfo: e849fc21ca2f4128a5726c801a82fc6f4a6db50d
|
react-native-netinfo: e849fc21ca2f4128a5726c801a82fc6f4a6db50d
|
||||||
react-native-notifications: 83b4fd4a127a6c918fc846cae90da60f84819e44
|
react-native-notifications: 83b4fd4a127a6c918fc846cae90da60f84819e44
|
||||||
|
|
|
@ -8,10 +8,8 @@
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
0C6E2DE448364EA896869ADF /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B37C79D9BD0742CE936B6982 /* libc++.tbd */; };
|
0C6E2DE448364EA896869ADF /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B37C79D9BD0742CE936B6982 /* libc++.tbd */; };
|
||||||
120231A2D6D72F6F158D427F /* libPods-defaults-ShareRocketChatRN.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A12689B57CCCE8779F27F1BB /* libPods-defaults-ShareRocketChatRN.a */; };
|
|
||||||
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 */; };
|
||||||
169B5F4627F418BF3F4EEDA9 /* libPods-defaults-NotificationService.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27622696E038BD9807E430F4 /* libPods-defaults-NotificationService.a */; };
|
|
||||||
1E01C81C2511208400FEF824 /* URL+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E01C81B2511208400FEF824 /* URL+Extensions.swift */; };
|
1E01C81C2511208400FEF824 /* URL+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E01C81B2511208400FEF824 /* URL+Extensions.swift */; };
|
||||||
1E01C8212511301400FEF824 /* PushResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E01C8202511301400FEF824 /* PushResponse.swift */; };
|
1E01C8212511301400FEF824 /* PushResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E01C8202511301400FEF824 /* PushResponse.swift */; };
|
||||||
1E01C8252511303100FEF824 /* Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E01C8242511303100FEF824 /* Notification.swift */; };
|
1E01C8252511303100FEF824 /* Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E01C8242511303100FEF824 /* Notification.swift */; };
|
||||||
|
@ -80,7 +78,6 @@
|
||||||
1EF5FBD1250C109E00614FEA /* Encryption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EF5FBD0250C109E00614FEA /* Encryption.swift */; };
|
1EF5FBD1250C109E00614FEA /* Encryption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EF5FBD0250C109E00614FEA /* Encryption.swift */; };
|
||||||
1EFEB5982493B6640072EDC0 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EFEB5972493B6640072EDC0 /* NotificationService.swift */; };
|
1EFEB5982493B6640072EDC0 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EFEB5972493B6640072EDC0 /* NotificationService.swift */; };
|
||||||
1EFEB59C2493B6640072EDC0 /* NotificationService.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 1EFEB5952493B6640072EDC0 /* NotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
1EFEB59C2493B6640072EDC0 /* NotificationService.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 1EFEB5952493B6640072EDC0 /* NotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||||
22CA8612B15DD734B5743B5D /* libPods-defaults-RocketChatRN.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 13DB30BB858F5EADA8D901D1 /* libPods-defaults-RocketChatRN.a */; };
|
|
||||||
24A2AEF2383D44B586D31C01 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 06BB44DD4855498082A744AD /* libz.tbd */; };
|
24A2AEF2383D44B586D31C01 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 06BB44DD4855498082A744AD /* libz.tbd */; };
|
||||||
39C3AEAFF2EED802FEB72103 /* libPods-defaults-RocketChatRN.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6346D438F967C4A0CF0218B4 /* libPods-defaults-RocketChatRN.a */; };
|
39C3AEAFF2EED802FEB72103 /* libPods-defaults-RocketChatRN.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6346D438F967C4A0CF0218B4 /* libPods-defaults-RocketChatRN.a */; };
|
||||||
4C4C8603EF082F0A33A95522 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45D5C142B655F8EFD006792C /* ExpoModulesProvider.swift */; };
|
4C4C8603EF082F0A33A95522 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45D5C142B655F8EFD006792C /* ExpoModulesProvider.swift */; };
|
||||||
|
@ -220,9 +217,7 @@
|
||||||
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>"; };
|
||||||
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = RocketChatRN/Info.plist; sourceTree = "<group>"; };
|
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = RocketChatRN/Info.plist; sourceTree = "<group>"; };
|
||||||
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = RocketChatRN/main.m; sourceTree = "<group>"; };
|
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = RocketChatRN/main.m; sourceTree = "<group>"; };
|
||||||
13DB30BB858F5EADA8D901D1 /* libPods-defaults-RocketChatRN.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-RocketChatRN.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
||||||
194D9A8897F4A486C2C6F89A /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-defaults-NotificationService/ExpoModulesProvider.swift"; sourceTree = "<group>"; };
|
194D9A8897F4A486C2C6F89A /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-defaults-NotificationService/ExpoModulesProvider.swift"; sourceTree = "<group>"; };
|
||||||
19D2E2FEA39121FD901D67BD /* 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>"; };
|
|
||||||
1E01C81B2511208400FEF824 /* URL+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URL+Extensions.swift"; sourceTree = "<group>"; };
|
1E01C81B2511208400FEF824 /* URL+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URL+Extensions.swift"; sourceTree = "<group>"; };
|
||||||
1E01C8202511301400FEF824 /* PushResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushResponse.swift; sourceTree = "<group>"; };
|
1E01C8202511301400FEF824 /* PushResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushResponse.swift; sourceTree = "<group>"; };
|
||||||
1E01C8242511303100FEF824 /* Notification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notification.swift; sourceTree = "<group>"; };
|
1E01C8242511303100FEF824 /* Notification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notification.swift; sourceTree = "<group>"; };
|
||||||
|
@ -278,7 +273,6 @@
|
||||||
56A64DDF0C1730D640D3931C /* libPods-defaults-NotificationService.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-NotificationService.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
56A64DDF0C1730D640D3931C /* 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>"; };
|
||||||
6346D438F967C4A0CF0218B4 /* libPods-defaults-RocketChatRN.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-RocketChatRN.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
6346D438F967C4A0CF0218B4 /* libPods-defaults-RocketChatRN.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-defaults-RocketChatRN.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
65360F272979AA1500778C04 /* JitsiMeetViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = JitsiMeetViewController.swift; path = "../node_modules/@socialcode-rob1/react-native-jitsimeet-custom/ios/JitsiMeetViewController.swift"; 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>"; };
|
||||||
|
@ -364,7 +358,6 @@
|
||||||
13B07FAE1A68108700A75B9A /* RocketChatRN */ = {
|
13B07FAE1A68108700A75B9A /* RocketChatRN */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
65360F272979AA1500778C04 /* JitsiMeetViewController.swift */,
|
|
||||||
7A006F13229C83B600803143 /* GoogleService-Info.plist */,
|
7A006F13229C83B600803143 /* GoogleService-Info.plist */,
|
||||||
60B2A6A31FC4588700BD58E5 /* RocketChatRN.entitlements */,
|
60B2A6A31FC4588700BD58E5 /* RocketChatRN.entitlements */,
|
||||||
008F07F21AC5B25A0029DE68 /* main.jsbundle */,
|
008F07F21AC5B25A0029DE68 /* main.jsbundle */,
|
||||||
|
@ -950,15 +943,11 @@
|
||||||
);
|
);
|
||||||
inputPaths = (
|
inputPaths = (
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-frameworks.sh",
|
"${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-frameworks.sh",
|
||||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/JitsiMeetSDKLite/JitsiMeetSDK.framework/JitsiMeetSDK",
|
|
||||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/JitsiWebRTC/WebRTC.framework/WebRTC",
|
|
||||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL",
|
"${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL",
|
||||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/hermes.framework/hermes",
|
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/hermes.framework/hermes",
|
||||||
);
|
);
|
||||||
name = "[CP] Embed Pods Frameworks";
|
name = "[CP] Embed Pods Frameworks";
|
||||||
outputPaths = (
|
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}/OpenSSL.framework",
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework",
|
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework",
|
||||||
);
|
);
|
||||||
|
@ -1220,12 +1209,28 @@
|
||||||
"${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle",
|
"${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle",
|
||||||
"${PODS_CONFIGURATION_BUILD_DIR}/iosMath/mathFonts.bundle",
|
"${PODS_CONFIGURATION_BUILD_DIR}/iosMath/mathFonts.bundle",
|
||||||
);
|
);
|
||||||
name = "[CP] Embed Pods Frameworks";
|
name = "[CP] Copy Pods Resources";
|
||||||
outputPaths = (
|
outputPaths = (
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/JitsiMeetSDK.framework",
|
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/QBImagePicker.bundle",
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WebRTC.framework",
|
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf",
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework",
|
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf",
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework",
|
"${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;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
|
@ -1294,22 +1299,18 @@
|
||||||
files = (
|
files = (
|
||||||
);
|
);
|
||||||
inputPaths = (
|
inputPaths = (
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-frameworks.sh",
|
"${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-frameworks.sh",
|
||||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/JitsiMeetSDKLite/JitsiMeetSDK.framework/JitsiMeetSDK",
|
|
||||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/JitsiWebRTC/WebRTC.framework/WebRTC",
|
|
||||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL",
|
"${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL",
|
||||||
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/hermes.framework/hermes",
|
"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/hermes.framework/hermes",
|
||||||
);
|
);
|
||||||
name = "[CP] Embed Pods Frameworks";
|
name = "[CP] Embed Pods Frameworks";
|
||||||
outputPaths = (
|
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}/OpenSSL.framework",
|
||||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework",
|
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework",
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-RocketChatRN/Pods-defaults-RocketChatRN-frameworks.sh\"\n";
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-defaults-Rocket.Chat/Pods-defaults-Rocket.Chat-frameworks.sh\"\n";
|
||||||
showEnvVarsInLog = 0;
|
showEnvVarsInLog = 0;
|
||||||
};
|
};
|
||||||
DE72B5F3C33906DA8D140E16 /* [CP] Check Pods Manifest.lock */ = {
|
DE72B5F3C33906DA8D140E16 /* [CP] Check Pods Manifest.lock */ = {
|
||||||
|
@ -1317,51 +1318,17 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
);
|
);
|
||||||
inputPaths = (
|
inputFileListPaths = (
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-defaults-NotificationService/Pods-defaults-NotificationService-resources.sh",
|
);
|
||||||
"${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/QBImagePicker.bundle",
|
inputPaths = (
|
||||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf",
|
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
|
||||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf",
|
"${PODS_ROOT}/Manifest.lock",
|
||||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf",
|
);
|
||||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf",
|
name = "[CP] Check Pods Manifest.lock";
|
||||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf",
|
outputFileListPaths = (
|
||||||
"${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 = (
|
outputPaths = (
|
||||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/QBImagePicker.bundle",
|
"$(DERIVED_FILE_DIR)/Pods-defaults-RocketChatRN-checkManifestLockResult.txt",
|
||||||
"${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;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
|
@ -1793,7 +1760,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.37.1;
|
MARKETING_VERSION = 4.38.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";
|
||||||
|
@ -1832,7 +1799,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.37.1;
|
MARKETING_VERSION = 4.38.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;
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>4.37.1</string>
|
<string>4.38.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.37.1</string>
|
<string>4.38.0</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>1</string>
|
<string>1</string>
|
||||||
<key>KeychainGroup</key>
|
<key>KeychainGroup</key>
|
||||||
|
|
|
@ -21,7 +21,6 @@ module.exports = {
|
||||||
},
|
},
|
||||||
maxWorkers: 2,
|
maxWorkers: 2,
|
||||||
resolver: {
|
resolver: {
|
||||||
blocklistRE: blocklist([/ios\/Pods\/JitsiMeetSDK\/Frameworks\/JitsiMeet.framework\/assets\/node_modules\/react-native\/.*/]),
|
|
||||||
resolverMainFields: ['sbmodern', 'react-native', 'browser', 'main'],
|
resolverMainFields: ['sbmodern', 'react-native', 'browser', 'main'],
|
||||||
sourceExts: process.env.RUNNING_E2E_TESTS ? ['mock.ts', ...defaultSourceExts] : defaultSourceExts
|
sourceExts: process.env.RUNNING_E2E_TESTS ? ['mock.ts', ...defaultSourceExts] : defaultSourceExts
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "rocket-chat-reactnative",
|
"name": "rocket-chat-reactnative",
|
||||||
"version": "4.37.1",
|
"version": "4.38.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "react-native start",
|
"start": "react-native start",
|
||||||
|
@ -64,7 +64,6 @@
|
||||||
"@rocket.chat/message-parser": "^0.31.14",
|
"@rocket.chat/message-parser": "^0.31.14",
|
||||||
"@rocket.chat/sdk": "RocketChat/Rocket.Chat.js.SDK#mobile",
|
"@rocket.chat/sdk": "RocketChat/Rocket.Chat.js.SDK#mobile",
|
||||||
"@rocket.chat/ui-kit": "^0.31.19",
|
"@rocket.chat/ui-kit": "^0.31.19",
|
||||||
"@socialcode-rob1/react-native-jitsimeet-custom": "socialcode-rob1/react-native-jitsimeet-custom.git",
|
|
||||||
"bytebuffer": "^5.0.1",
|
"bytebuffer": "^5.0.1",
|
||||||
"color2k": "1.2.4",
|
"color2k": "1.2.4",
|
||||||
"commonmark": "git+https://github.com/RocketChat/commonmark.js.git",
|
"commonmark": "git+https://github.com/RocketChat/commonmark.js.git",
|
||||||
|
@ -127,7 +126,6 @@
|
||||||
"react-native-safe-area-context": "3.2.0",
|
"react-native-safe-area-context": "3.2.0",
|
||||||
"react-native-screens": "3.13.1",
|
"react-native-screens": "3.13.1",
|
||||||
"react-native-scrollable-tab-view": "ptomasroos/react-native-scrollable-tab-view",
|
"react-native-scrollable-tab-view": "ptomasroos/react-native-scrollable-tab-view",
|
||||||
"react-native-send-intent": "^1.3.0",
|
|
||||||
"react-native-simple-crypto": "RocketChat/react-native-simple-crypto#0.5.1",
|
"react-native-simple-crypto": "RocketChat/react-native-simple-crypto#0.5.1",
|
||||||
"react-native-skeleton-placeholder": "^5.2.3",
|
"react-native-skeleton-placeholder": "^5.2.3",
|
||||||
"react-native-slowlog": "^1.0.2",
|
"react-native-slowlog": "^1.0.2",
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
diff --git a/node_modules/@socialcode-rob1/react-native-jitsimeet-custom/react-native-jitsimeet-custom.podspec b/node_modules/@socialcode-rob1/react-native-jitsimeet-custom/react-native-jitsimeet-custom.podspec
|
|
||||||
index 80a584b..5b2f71c 100644
|
|
||||||
--- a/node_modules/@socialcode-rob1/react-native-jitsimeet-custom/react-native-jitsimeet-custom.podspec
|
|
||||||
+++ b/node_modules/@socialcode-rob1/react-native-jitsimeet-custom/react-native-jitsimeet-custom.podspec
|
|
||||||
@@ -16,5 +16,5 @@ Pod::Spec.new do |s|
|
|
||||||
s.source_files = "ios/**/*.{h,m,mm,swift}"
|
|
||||||
|
|
||||||
s.dependency "React-Core"
|
|
||||||
- s.dependency 'JitsiMeetSDK', '6.2.2'
|
|
||||||
+ s.dependency 'JitsiMeetSDKLite', '7.0.1-lite'
|
|
||||||
end
|
|
|
@ -14,11 +14,6 @@ module.exports = {
|
||||||
platforms: {
|
platforms: {
|
||||||
android: null
|
android: null
|
||||||
}
|
}
|
||||||
},
|
|
||||||
'@socialcode-rob1/react-native-jitsimeet-custom': {
|
|
||||||
platforms: {
|
|
||||||
android: null
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -5431,10 +5431,6 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@sinonjs/commons" "^1.7.0"
|
"@sinonjs/commons" "^1.7.0"
|
||||||
|
|
||||||
"@socialcode-rob1/react-native-jitsimeet-custom@socialcode-rob1/react-native-jitsimeet-custom.git":
|
|
||||||
version "2.5.0"
|
|
||||||
resolved "https://codeload.github.com/socialcode-rob1/react-native-jitsimeet-custom/tar.gz/b1f57cd065028fef2e806824e176d2b54e12cfaf"
|
|
||||||
|
|
||||||
"@storybook/addon-storyshots@6.3":
|
"@storybook/addon-storyshots@6.3":
|
||||||
version "6.3.13"
|
version "6.3.13"
|
||||||
resolved "https://registry.yarnpkg.com/@storybook/addon-storyshots/-/addon-storyshots-6.3.13.tgz#282a48880e5074baea7b84f5b091591eb21a9485"
|
resolved "https://registry.yarnpkg.com/@storybook/addon-storyshots/-/addon-storyshots-6.3.13.tgz#282a48880e5074baea7b84f5b091591eb21a9485"
|
||||||
|
@ -17581,11 +17577,6 @@ react-native-scrollable-tab-view@ptomasroos/react-native-scrollable-tab-view:
|
||||||
prop-types "^15.6.0"
|
prop-types "^15.6.0"
|
||||||
react-timer-mixin "^0.13.3"
|
react-timer-mixin "^0.13.3"
|
||||||
|
|
||||||
react-native-send-intent@^1.3.0:
|
|
||||||
version "1.3.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/react-native-send-intent/-/react-native-send-intent-1.3.0.tgz#d8c7898827da1b8b10e25a645ce6802d1a0b440c"
|
|
||||||
integrity sha512-ODTX7BHITFxdcAL0K2iHfa3qVYnqG8GPcv1NbLBNC1DyCaOSJiiGtVH6Kc5YBqzQ8+1pV9uN5nfQ5wyFgiq74g==
|
|
||||||
|
|
||||||
react-native-simple-crypto@RocketChat/react-native-simple-crypto#0.5.1:
|
react-native-simple-crypto@RocketChat/react-native-simple-crypto#0.5.1:
|
||||||
version "0.5.1"
|
version "0.5.1"
|
||||||
resolved "https://codeload.github.com/RocketChat/react-native-simple-crypto/tar.gz/dcf6eef5359c739d521371918e13a73f2ea6cb42"
|
resolved "https://codeload.github.com/RocketChat/react-native-simple-crypto/tar.gz/dcf6eef5359c739d521371918e13a73f2ea6cb42"
|
||||||
|
|
Loading…
Reference in New Issue