Compare commits

...

32 Commits

Author SHA1 Message Date
GleidsonDaniel a6df0c4357 Merge branch 'expo-image-picker' of github.com:RocketChat/Rocket.Chat.ReactNative into expo-image-picker 2022-12-01 17:21:10 -03:00
GleidsonDaniel 69562c4eae update to expo 47 2022-12-01 17:18:35 -03:00
Gleidson Daniel Silva 201b893d26
Merge branch 'develop' into expo-image-picker 2022-12-01 14:48:07 -03:00
GleidsonDaniel 62290848b9 add temp fix 2022-11-21 09:03:00 -03:00
Gleidson Daniel Silva f7781246fd
Merge branch 'develop' into expo-image-picker 2022-11-21 08:47:30 -03:00
Gleidson Daniel b6e668ebe0 Merge branch 'develop' into expo-image-picker 2022-11-14 09:00:44 -03:00
Diego Mello 4700253815 Update pods 2022-10-04 17:34:22 -03:00
Gleidson Daniel 952135f7e0 fix share extension 2022-09-20 20:23:26 -03:00
Gleidson Daniel 22bcf3cb66 add crop image option 2022-09-20 20:14:34 -03:00
Gleidson Daniel a0887c6d9d set quality and remove editing 2022-09-20 20:08:09 -03:00
Gleidson Daniel 45183121c7 export canEdit prop 2022-09-20 20:07:39 -03:00
Gleidson Daniel 58a6e2286a add canEditProp 2022-09-20 20:07:25 -03:00
Gleidson Daniel 3bcbbffa8e remove useless memo and export thumb size 2022-09-20 20:07:12 -03:00
Gleidson Daniel 3e769f8220 add react-native-image-crop-picker 2022-09-20 18:21:51 -03:00
Gleidson Daniel f537920626 remove default param 2022-09-15 15:49:46 -03:00
Gleidson Daniel 553237caaf fix for gifs 2022-09-15 15:25:39 -03:00
Gleidson Daniel a01559a10d fix for one file 2022-09-15 14:44:31 -03:00
Gleidson Daniel b7a68d61ff remove react-native-image-crop-picker 2022-09-15 14:31:14 -03:00
Gleidson Daniel ff2ff5ccd8 create pickImageFromLibrary method 2022-09-15 14:24:30 -03:00
Gleidson Daniel f878986edb wip 2022-09-15 11:06:17 -03:00
Gleidson Daniel 909c8c8b7d add info to patch 2022-09-15 11:00:43 -03:00
Gleidson Daniel 9d39524fe7 update pods 2022-09-15 10:17:03 -03:00
Gleidson Daniel 03b0487680 fix pickImageAndVideoFromLibrary 2022-09-15 10:13:02 -03:00
Gleidson Daniel 3943518d6e update expo libs 2022-09-15 10:12:39 -03:00
Gleidson Daniel 1aecff2d69 update patch 2022-09-14 16:10:01 -03:00
Gleidson Daniel 878ed8b2fc update image picker 2022-09-14 15:00:21 -03:00
Gleidson Daniel Silva cc2b78b4fd
Merge branch 'develop' into expo-image-picker 2022-09-14 14:58:18 -03:00
Gleidson Daniel 8b80deb8b5 Merge branch 'expo-image-picker' of github.com:RocketChat/Rocket.Chat.ReactNative into expo-image-picker 2022-08-23 10:34:54 -03:00
Gleidson Daniel ab4f4aada9 remove react-native-image-crop-picker 2022-08-23 10:32:39 -03:00
Gleidson Daniel 7ab2727946 finish methods of pick images and videos 2022-08-23 10:32:28 -03:00
Gleidson Daniel 70e6ae40cf implements method pickImageFromCamera 2022-08-23 09:00:06 -03:00
Gleidson Daniel 75ae38edfa wip 2022-08-22 12:07:17 -03:00
14 changed files with 513 additions and 378 deletions

View File

@ -1,107 +0,0 @@
import { Image } from 'react-native-image-crop-picker';
import { forceJpgExtension } from './forceJpgExtension';
const attachment: Image = {
exif: null,
filename: 'IMG_0040.PNG',
path: 'tmp/temp',
height: 534,
width: 223,
data: null,
modificationDate: '1643984790',
localIdentifier: 'device/L0/001',
size: 16623,
sourceURL: '',
mime: 'image/jpeg',
cropRect: null,
creationDate: '1641490665'
};
describe('forceJpgExtension for iOS', () => {
jest.mock('react-native', () => ({ Platform: { OS: 'ios' } }));
describe('with mime as image/jpeg', () => {
test('filename.jpg should be filename.jpg', () => {
const newAttachment = attachment;
newAttachment.filename = 'filename.jpg';
const file = forceJpgExtension(newAttachment);
expect(file.filename).toBe('filename.jpg');
});
test('filename.png should be filename.jpg', () => {
const newAttachment = attachment;
newAttachment.filename = 'filename.png';
const file = forceJpgExtension(newAttachment);
expect(file.filename).toBe('filename.jpg');
});
test('filename.jpeg should be filename.jpg', () => {
const newAttachment = attachment;
newAttachment.filename = 'filename.jpeg';
const file = forceJpgExtension(newAttachment);
expect(file.filename).toBe('filename.jpg');
});
test('filename.heic should be filename.jpg', () => {
const newAttachment = attachment;
newAttachment.filename = 'filename.heic';
const file = forceJpgExtension(newAttachment);
expect(file.filename).toBe('filename.jpg');
});
});
describe('with mime different', () => {
test('filename.jpg should be filename.jpg', () => {
const newAttachment = attachment;
newAttachment.filename = 'filename.png';
newAttachment.mime = 'image/png';
const file = forceJpgExtension(newAttachment);
expect(file.filename).toBe('filename.png');
});
});
});
describe('forceJpgExtension for android', () => {
jest.mock('react-native', () => ({ Platform: { OS: 'android' } }));
describe('with mime as image/jpeg', () => {
test('filename.jpg should be filename.jpg', () => {
const newAttachment = attachment;
newAttachment.filename = 'filename.jpg';
const file = forceJpgExtension(newAttachment);
expect(file.filename).toBe('filename.jpg');
});
test('filename.png should be filename.png', () => {
const newAttachment = attachment;
newAttachment.filename = 'filename.png';
const file = forceJpgExtension(newAttachment);
expect(file.filename).toBe('filename.png');
});
test('filename.jpeg should be filename.jpeg', () => {
const newAttachment = attachment;
newAttachment.filename = 'filename.jpeg';
const file = forceJpgExtension(newAttachment);
expect(file.filename).toBe('filename.jpeg');
});
test('filename.heic should be filename.heic', () => {
const newAttachment = attachment;
newAttachment.filename = 'filename.heic';
const file = forceJpgExtension(newAttachment);
expect(file.filename).toBe('filename.heic');
});
});
describe('with mime different', () => {
test('filename.jpg should be filename.jpg', () => {
const newAttachment = attachment;
newAttachment.filename = 'filename.png';
newAttachment.mime = 'image/png';
const file = forceJpgExtension(newAttachment);
expect(file.filename).toBe('filename.png');
});
});
});

View File

@ -1,13 +0,0 @@
import { ImageOrVideo } from 'react-native-image-crop-picker';
import { isIOS } from '../../lib/methods/helpers';
const regex = new RegExp(/\.[^/.]+$/); // Check from last '.' of the string
export const forceJpgExtension = (attachment: ImageOrVideo): ImageOrVideo => {
if (isIOS && attachment.mime === 'image/jpeg' && attachment.filename) {
// Replace files extension that mime type is 'image/jpeg' to .jpg;
attachment.filename = attachment.filename.replace(regex, '.jpg');
}
return attachment;
};

View File

@ -2,7 +2,6 @@ import React, { Component } from 'react';
import { Alert, Keyboard, NativeModules, Text, View, BackHandler } from 'react-native'; import { Alert, Keyboard, NativeModules, Text, View, BackHandler } from 'react-native';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { KeyboardAccessoryView } from 'react-native-ui-lib/keyboard'; import { KeyboardAccessoryView } from 'react-native-ui-lib/keyboard';
import ImagePicker, { Image, ImageOrVideo, Options } from 'react-native-image-crop-picker';
import { dequal } from 'dequal'; import { dequal } from 'dequal';
import DocumentPicker from 'react-native-document-picker'; import DocumentPicker from 'react-native-document-picker';
import { Q } from '@nozbe/watermelondb'; import { Q } from '@nozbe/watermelondb';
@ -41,7 +40,6 @@ import Navigation from '../../lib/navigation/appNavigation';
import { TActionSheetOptionsItem, withActionSheet } from '../ActionSheet'; import { TActionSheetOptionsItem, withActionSheet } from '../ActionSheet';
import { sanitizeLikeString } from '../../lib/database/utils'; import { sanitizeLikeString } from '../../lib/database/utils';
import { CustomIcon } from '../CustomIcon'; import { CustomIcon } from '../CustomIcon';
import { forceJpgExtension } from './forceJpgExtension';
import { import {
IApplicationState, IApplicationState,
IBaseScreen, IBaseScreen,
@ -59,30 +57,13 @@ import { hasPermission, debounce, isAndroid, isIOS, isTablet, compareServerVersi
import { Services } from '../../lib/services'; import { Services } from '../../lib/services';
import { TSupportedThemes } from '../../theme'; import { TSupportedThemes } from '../../theme';
import { ChatsStackParamList } from '../../stacks/types'; import { ChatsStackParamList } from '../../stacks/types';
import { pickMultipleImageAndVideoFromLibrary, pickImageFromCamera, pickVideoFromCamera } from '../../lib/methods/mediaPicker';
import { EventTypes } from '../EmojiPicker/interfaces'; import { EventTypes } from '../EmojiPicker/interfaces';
import EmojiSearchbar from './EmojiSearchbar'; import EmojiSearchbar from './EmojiSearchbar';
import shortnameToUnicode from '../../lib/methods/helpers/shortnameToUnicode'; import shortnameToUnicode from '../../lib/methods/helpers/shortnameToUnicode';
require('./EmojiKeyboard'); require('./EmojiKeyboard');
const imagePickerConfig = {
cropping: true,
avoidEmptySpaceAroundImage: false,
freeStyleCropEnabled: true,
forceJpg: true
};
const libraryPickerConfig: Options = {
multiple: true,
compressVideoPreset: 'Passthrough',
mediaType: 'any',
forceJpg: true
};
const videoPickerConfig: Options = {
mediaType: 'video'
};
export interface IMessageBoxProps extends IBaseScreen<ChatsStackParamList & MasterDetailInsideStackParamList, any> { export interface IMessageBoxProps extends IBaseScreen<ChatsStackParamList & MasterDetailInsideStackParamList, any> {
rid: string; rid: string;
baseUrl: string; baseUrl: string;
@ -142,12 +123,6 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
private focused: boolean; private focused: boolean;
private imagePickerConfig: Options;
private libraryPickerConfig: Options;
private videoPickerConfig: Options;
private room!: TSubscriptionModel; private room!: TSubscriptionModel;
private thread!: TThreadModel; private thread!: TThreadModel;
@ -193,29 +168,6 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
this.text = ''; this.text = '';
this.selection = { start: 0, end: 0 }; this.selection = { start: 0, end: 0 };
this.focused = false; this.focused = false;
const libPickerLabels = {
cropperChooseText: I18n.t('Choose'),
cropperCancelText: I18n.t('Cancel'),
loadingLabelText: I18n.t('Processing')
};
this.imagePickerConfig = {
...imagePickerConfig,
...libPickerLabels
};
this.libraryPickerConfig = {
...libraryPickerConfig,
...libPickerLabels
};
this.videoPickerConfig = {
...videoPickerConfig,
...libPickerLabels
};
BackHandler.addEventListener('hardwareBackPress', this.handleBackPress);
} }
get sendThreadToChannel() { get sendThreadToChannel() {
@ -789,9 +741,8 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
takePhoto = async () => { takePhoto = async () => {
logEvent(events.ROOM_BOX_ACTION_PHOTO); logEvent(events.ROOM_BOX_ACTION_PHOTO);
try { try {
let image = (await ImagePicker.openCamera(this.imagePickerConfig)) as Image; const image = await pickImageFromCamera();
image = forceJpgExtension(image); if (image && this.canUploadFile(image)) {
if (this.canUploadFile(image)) {
this.openShareView([image]); this.openShareView([image]);
} }
} catch (e) { } catch (e) {
@ -802,8 +753,8 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
takeVideo = async () => { takeVideo = async () => {
logEvent(events.ROOM_BOX_ACTION_VIDEO); logEvent(events.ROOM_BOX_ACTION_VIDEO);
try { try {
const video = await ImagePicker.openCamera(this.videoPickerConfig); const video = await pickVideoFromCamera();
if (this.canUploadFile(video)) { if (video && this.canUploadFile(video)) {
this.openShareView([video]); this.openShareView([video]);
} }
} catch (e) { } catch (e) {
@ -814,10 +765,10 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
chooseFromLibrary = async () => { chooseFromLibrary = async () => {
logEvent(events.ROOM_BOX_ACTION_LIBRARY); logEvent(events.ROOM_BOX_ACTION_LIBRARY);
try { try {
// The type can be video or photo, however the lib understands that it is just one of them. const attachments = await pickMultipleImageAndVideoFromLibrary();
let attachments = (await ImagePicker.openPicker(this.libraryPickerConfig)) as unknown as ImageOrVideo[]; if (attachments) {
attachments = attachments.map(att => forceJpgExtension(att)); this.openShareView(attachments);
this.openShareView(attachments); }
} catch (e) { } catch (e) {
logEvent(events.ROOM_BOX_ACTION_LIBRARY_F); logEvent(events.ROOM_BOX_ACTION_LIBRARY_F);
} }
@ -864,7 +815,7 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
value = message; value = message;
replyCancel(); replyCancel();
} }
Navigation.navigate('ShareView', { room: this.room, thread: value, attachments }); Navigation.navigate('ShareView', { room: this.room, thread: value, attachments, canEdit: true });
}; };
createDiscussion = () => { createDiscussion = () => {

View File

@ -0,0 +1,118 @@
import * as FileSystem from 'expo-file-system';
import * as ImagePicker from 'expo-image-picker';
import { PermissionsAndroid } from 'react-native';
import * as mime from 'react-native-mime-types';
import { isAndroid } from './helpers';
import log from './helpers/log';
interface ImagePickerFile extends ImagePicker.ImageInfo {
path: string;
filename: string;
size?: number;
mime: string;
}
const handlePermission = async (): Promise<boolean> => {
if (isAndroid) {
const permissions = await PermissionsAndroid.requestMultiple([
PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
PermissionsAndroid.PERMISSIONS.CAMERA
]);
if (permissions['android.permission.CAMERA'] !== 'granted') {
return false;
}
} else {
const permission = await ImagePicker.requestCameraPermissionsAsync();
if (!permission.granted) {
return false;
}
}
const permission = await ImagePicker.getCameraPermissionsAsync();
if (!permission.granted) {
return false;
}
return true;
};
const addAdditionalPropsToFile = async (file: ImagePicker.ImageInfo) => {
const fileInfo = await FileSystem.getInfoAsync(file.uri);
const data = {
...file,
path: file.uri,
filename: `${file.uri.substring(file.uri.lastIndexOf('/') + 1)}`,
size: fileInfo.size,
mime: mime.lookup(file.uri)
};
return data;
};
const pickFromCamera = async (
allowsEditing: boolean,
mediaType: ImagePicker.MediaTypeOptions
): Promise<ImagePickerFile | null> => {
try {
const hasPermission = await handlePermission();
if (!hasPermission) return null;
const image = await ImagePicker.launchCameraAsync({
mediaTypes: mediaType,
quality: 0.8,
allowsEditing
});
if (!image.cancelled) return addAdditionalPropsToFile(image);
return null;
} catch (error) {
log(error);
return null;
}
};
export const pickMultipleImageAndVideoFromLibrary = async (): Promise<ImagePickerFile | ImagePickerFile[] | null> => {
try {
const result = await ImagePicker.launchImageLibraryAsync({
mediaTypes: ImagePicker.MediaTypeOptions.All,
quality: isAndroid ? 1 : undefined, // TODO - Apply fix for iOS processing error
allowsMultipleSelection: true
});
if (!result.cancelled) {
if (result.selected) {
const selectedFiles = result.selected.map(file => addAdditionalPropsToFile(file));
const files = await Promise.all(selectedFiles);
return files;
}
// @ts-ignore - The type for when returning only one file is wrong.
const selectedFile = await addAdditionalPropsToFile(result);
return [selectedFile];
}
return null;
} catch (error) {
log(error);
return null;
}
};
export async function pickImageFromLibrary({ animatedGif = true }: { animatedGif: boolean }): Promise<ImagePickerFile | null> {
try {
const image = await ImagePicker.launchImageLibraryAsync({
mediaTypes: ImagePicker.MediaTypeOptions.Images,
quality: animatedGif ? 1 : 0.8,
base64: true
});
if (!image.cancelled) {
const selectedImage = await addAdditionalPropsToFile(image);
return selectedImage;
}
return null;
} catch (error) {
log(error);
return null;
}
}
export const pickVideoFromCamera = (allowsEditing = false): Promise<ImagePickerFile | null> =>
pickFromCamera(allowsEditing, ImagePicker.MediaTypeOptions.Videos);
export const pickImageFromCamera = (allowsEditing = false): Promise<ImagePickerFile | null> =>
pickFromCamera(allowsEditing, ImagePicker.MediaTypeOptions.Images);

View File

@ -272,6 +272,7 @@ export type InsideStackParamList = {
text: string; text: string;
room: TSubscriptionModel; room: TSubscriptionModel;
thread: TThreadModel; thread: TThreadModel;
canEdit: boolean;
}; };
ModalBlockView: { ModalBlockView: {
data: any; // TODO: Change; data: any; // TODO: Change;

View File

@ -2,7 +2,6 @@ import React from 'react';
import { Keyboard, ScrollView, TextInput, View } from 'react-native'; import { Keyboard, ScrollView, TextInput, View } from 'react-native';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { sha256 } from 'js-sha256'; import { sha256 } from 'js-sha256';
import ImagePicker, { Image } from 'react-native-image-crop-picker';
import RNPickerSelect from 'react-native-picker-select'; import RNPickerSelect from 'react-native-picker-select';
import { dequal } from 'dequal'; import { dequal } from 'dequal';
import omit from 'lodash/omit'; import omit from 'lodash/omit';
@ -45,6 +44,7 @@ import { TwoFactorMethods } from '../../definitions/ITotp';
import { withActionSheet, IActionSheetProvider } from '../../containers/ActionSheet'; import { withActionSheet, IActionSheetProvider } from '../../containers/ActionSheet';
import { DeleteAccountActionSheetContent } from './components/DeleteAccountActionSheetContent'; import { DeleteAccountActionSheetContent } from './components/DeleteAccountActionSheetContent';
import ActionSheetContentWithInputAndSubmit from '../../containers/ActionSheet/ActionSheetContentWithInputAndSubmit'; import ActionSheetContentWithInputAndSubmit from '../../containers/ActionSheet/ActionSheetContentWithInputAndSubmit';
import { pickImageFromLibrary } from '../../lib/methods/mediaPicker';
interface IProfileViewProps extends IActionSheetProvider, IBaseScreen<ProfileStackParamList, 'ProfileView'> { interface IProfileViewProps extends IActionSheetProvider, IBaseScreen<ProfileStackParamList, 'ProfileView'> {
user: IUser; user: IUser;
@ -345,19 +345,12 @@ class ProfileView extends React.Component<IProfileViewProps, IProfileViewState>
return; return;
} }
const options = {
cropping: true,
compressImageQuality: 0.8,
freeStyleCropEnabled: true,
cropperAvoidEmptySpaceAroundImage: false,
cropperChooseText: I18n.t('Choose'),
cropperCancelText: I18n.t('Cancel'),
includeBase64: true
};
try { try {
logEvent(events.PROFILE_PICK_AVATAR); logEvent(events.PROFILE_PICK_AVATAR);
const response: Image = await ImagePicker.openPicker(options); const response = await pickImageFromLibrary({ animatedGif: false });
this.setAvatar({ url: response.path, data: `data:image/jpeg;base64,${response.data}`, service: 'upload' }); if (response) {
this.setAvatar({ url: response.path, data: `data:image/jpeg;base64,${response.base64}`, service: 'upload' });
}
} catch (error) { } catch (error) {
logEvent(events.PROFILE_PICK_AVATAR_F); logEvent(events.PROFILE_PICK_AVATAR_F);
console.warn(error); console.warn(error);

View File

@ -4,7 +4,6 @@ import { BlockContext } from '@rocket.chat/ui-kit';
import { dequal } from 'dequal'; import { dequal } from 'dequal';
import isEmpty from 'lodash/isEmpty'; import isEmpty from 'lodash/isEmpty';
import { Alert, Keyboard, ScrollView, Text, TextInput, TouchableOpacity, View, StyleSheet } from 'react-native'; import { Alert, Keyboard, ScrollView, Text, TextInput, TouchableOpacity, View, StyleSheet } from 'react-native';
import ImagePicker, { Image } from 'react-native-image-crop-picker';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { Subscription } from 'rxjs'; import { Subscription } from 'rxjs';
@ -51,6 +50,7 @@ import {
random random
} from '../../lib/methods/helpers'; } from '../../lib/methods/helpers';
import { Services } from '../../lib/services'; import { Services } from '../../lib/services';
import { pickImageFromLibrary } from '../../lib/methods/mediaPicker';
interface IRoomInfoEditViewState { interface IRoomInfoEditViewState {
room: ISubscription; room: ISubscription;
@ -488,18 +488,11 @@ class RoomInfoEditView extends React.Component<IRoomInfoEditViewProps, IRoomInfo
}; };
changeAvatar = async () => { changeAvatar = async () => {
const options = {
cropping: true,
compressImageQuality: 0.8,
cropperAvoidEmptySpaceAroundImage: false,
cropperChooseText: I18n.t('Choose'),
cropperCancelText: I18n.t('Cancel'),
includeBase64: true
};
try { try {
const response: Image = await ImagePicker.openPicker(options); const response = await pickImageFromLibrary({ animatedGif: false });
this.setState({ avatar: { url: response.path, data: `data:image/jpeg;base64,${response.data}`, service: 'upload' } }); if (response) {
this.setState({ avatar: { url: response.path, data: `data:image/jpeg;base64,${response.base64}`, service: 'upload' } });
}
} catch (e) { } catch (e) {
console.log(e); console.log(e);
} }

View File

@ -136,27 +136,29 @@ const Thumb = ({ item, theme, isShareExtension, onPress, onRemove }: IThumb) =>
</ThumbButton> </ThumbButton>
); );
const Thumbs = React.memo(({ attachments, theme, isShareExtension, onPress, onRemove }: IThumbs) => { const Thumbs = ({ attachments, theme, isShareExtension, onPress, onRemove }: IThumbs) => {
if (attachments?.length > 1) { if (attachments?.length > 1) {
return ( return (
<FlatList <View style={{ height: THUMB_SIZE }}>
horizontal <FlatList
data={attachments} horizontal
keyExtractor={item => item.path} data={attachments}
renderItem={({ item }) => ( keyExtractor={item => item.path}
<Thumb renderItem={({ item }) => (
item={item} <Thumb
theme={theme} item={item}
isShareExtension={isShareExtension} theme={theme}
onPress={() => onPress(item)} isShareExtension={isShareExtension}
onRemove={() => onRemove(item)} onPress={() => onPress(item)}
/> onRemove={() => onRemove(item)}
)} />
style={[styles.list, { backgroundColor: themes[theme].messageboxBackground }]} )}
/> style={[styles.list, { backgroundColor: themes[theme].messageboxBackground }]}
/>
</View>
); );
} }
return null; return null;
}); };
export default Thumbs; export default Thumbs;

View File

@ -5,6 +5,7 @@ import { NativeModules, Text, View } from 'react-native';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import ShareExtension from 'rn-extensions-share'; import ShareExtension from 'rn-extensions-share';
import { Q } from '@nozbe/watermelondb'; import { Q } from '@nozbe/watermelondb';
import ImagePicker, { Image } from 'react-native-image-crop-picker';
import { InsideStackParamList } from '../../stacks/types'; import { InsideStackParamList } from '../../stacks/types';
import { themes } from '../../lib/constants'; import { themes } from '../../lib/constants';
@ -62,6 +63,7 @@ class ShareView extends Component<IShareViewProps, IShareViewState> {
private files: any[]; private files: any[];
private isShareExtension: boolean; private isShareExtension: boolean;
private serverInfo: IServer; private serverInfo: IServer;
private canEdit: boolean;
constructor(props: IShareViewProps) { constructor(props: IShareViewProps) {
super(props); super(props);
@ -69,6 +71,7 @@ class ShareView extends Component<IShareViewProps, IShareViewState> {
this.files = props.route.params?.attachments ?? []; this.files = props.route.params?.attachments ?? [];
this.isShareExtension = props.route.params?.isShareExtension; this.isShareExtension = props.route.params?.isShareExtension;
this.serverInfo = props.route.params?.serverInfo ?? {}; this.serverInfo = props.route.params?.serverInfo ?? {};
this.canEdit = props.route.params?.canEdit;
this.state = { this.state = {
selected: {} as IShareAttachment, selected: {} as IShareAttachment,
@ -94,6 +97,45 @@ class ShareView extends Component<IShareViewProps, IShareViewState> {
console.countReset(`${this.constructor.name}.render calls`); console.countReset(`${this.constructor.name}.render calls`);
}; };
cropImage = () => {
const { attachments, selected } = this.state;
ImagePicker.openCropper({
path: this.state.selected.path,
mediaType: 'photo',
writeTempFile: true,
includeExif: true
})
.then((image: Image) => {
let editedAttachment: undefined | IShareAttachment;
const newAttachments = attachments.map(attachment => {
if (attachment.filename === selected.filename) {
const editedImage = {
...attachment,
...image,
uri: image.path,
filename: `${image.path.substring(image.path.lastIndexOf('/') + 1)}`
};
editedAttachment = editedImage;
return editedImage;
}
return attachment;
});
this.setState({ attachments: newAttachments, selected: editedAttachment! });
})
.catch(() => {});
};
headerRight = () => {
const { theme } = this.props;
if (!this.isShareExtension)
return (
<HeaderButton.Container>
<HeaderButton.Item iconName='edit' onPress={this.cropImage} color={themes[theme].previewTintColor} />
</HeaderButton.Container>
);
return null;
};
setHeader = () => { setHeader = () => {
const { room, thread, readOnly, attachments } = this.state; const { room, thread, readOnly, attachments } = this.state;
const { navigation, theme } = this.props; const { navigation, theme } = this.props;
@ -109,7 +151,9 @@ class ShareView extends Component<IShareViewProps, IShareViewState> {
options.headerLeft = () => <HeaderButton.CloseModal navigation={navigation} color={themes[theme].previewTintColor} />; options.headerLeft = () => <HeaderButton.CloseModal navigation={navigation} color={themes[theme].previewTintColor} />;
} }
if (!attachments.length && !readOnly) { if (this.canEdit && this.state.selected.mime === 'image/jpeg') {
options.headerRight = this.headerRight;
} else if (!attachments.length && !readOnly) {
options.headerRight = () => ( options.headerRight = () => (
<HeaderButton.Container> <HeaderButton.Container>
<HeaderButton.Item title={I18n.t('Send')} onPress={this.send} color={themes[theme].previewTintColor} /> <HeaderButton.Item title={I18n.t('Send')} onPress={this.send} color={themes[theme].previewTintColor} />
@ -256,6 +300,8 @@ class ShareView extends Component<IShareViewProps, IShareViewState> {
selectFile = (item: IShareAttachment) => { selectFile = (item: IShareAttachment) => {
const { attachments, selected } = this.state; const { attachments, selected } = this.state;
const { navigation } = this.props;
if (attachments.length > 0) { if (attachments.length > 0) {
const text = this.messagebox.current?.text; const text = this.messagebox.current?.text;
const newAttachments = attachments.map(att => { const newAttachments = attachments.map(att => {
@ -264,7 +310,14 @@ class ShareView extends Component<IShareViewProps, IShareViewState> {
} }
return att; return att;
}); });
return this.setState({ attachments: newAttachments, selected: item });
return this.setState({ attachments: newAttachments, selected: item }, () => {
if (item.mime === 'image/jpeg') {
navigation.setOptions({ headerRight: this.headerRight });
} else {
navigation.setOptions({ headerRight: undefined });
}
});
} }
}; };
@ -293,7 +346,6 @@ class ShareView extends Component<IShareViewProps, IShareViewState> {
renderContent = () => { renderContent = () => {
const { attachments, selected, room, text } = this.state; const { attachments, selected, room, text } = this.state;
const { theme, navigation } = this.props; const { theme, navigation } = this.props;
if (attachments.length) { if (attachments.length) {
return ( return (
<View style={styles.container}> <View style={styles.container}>
@ -318,15 +370,14 @@ class ShareView extends Component<IShareViewProps, IShareViewState> {
isFocused={navigation.isFocused} isFocused={navigation.isFocused}
iOSScrollBehavior={NativeModules.KeyboardTrackingViewManager?.KeyboardTrackingScrollBehaviorNone} iOSScrollBehavior={NativeModules.KeyboardTrackingViewManager?.KeyboardTrackingScrollBehaviorNone}
isActionsEnabled={false} isActionsEnabled={false}
> />
<Thumbs <Thumbs
attachments={attachments} attachments={attachments}
theme={theme} theme={theme}
isShareExtension={this.isShareExtension} isShareExtension={this.isShareExtension}
onPress={this.selectFile} onPress={this.selectFile}
onRemove={this.removeFile} onRemove={this.removeFile}
/> />
</MessageBox>
</View> </View>
); );
} }

View File

@ -2,7 +2,7 @@ require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking") require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking")
platform :ios, '12.0' platform :ios, '13.0'
install! 'cocoapods', :deterministic_uuids => false install! 'cocoapods', :deterministic_uuids => false
def all_pods def all_pods
@ -60,4 +60,15 @@ post_install do |installer|
end end
end end
end end
# This is necessary for Xcode 14, because it signs resource bundles by default
# when building for devices.
installer.target_installation_results.pod_target_installation_results
.each do |pod_name, target_installation_result|
target_installation_result.resource_bundle_targets.each do |resource_bundle_target|
resource_bundle_target.build_configurations.each do |config|
config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
end
end
end
end end

View File

@ -11,20 +11,25 @@ PODS:
- ExpoModulesCore - ExpoModulesCore
- React-runtimeexecutor - React-runtimeexecutor
- ReactCommon - ReactCommon
- EXFileSystem (14.0.0): - EXFileSystem (14.1.0):
- ExpoModulesCore - ExpoModulesCore
- EXImageLoader (4.0.0):
- ExpoModulesCore
- React-Core
- EXLocalAuthentication (12.2.0): - EXLocalAuthentication (12.2.0):
- ExpoModulesCore - ExpoModulesCore
- Expo (46.0.9): - Expo (47.0.8):
- ExpoModulesCore - ExpoModulesCore
- ExpoHaptics (11.2.0): - ExpoHaptics (12.0.1):
- ExpoModulesCore - ExpoModulesCore
- ExpoKeepAwake (10.1.1): - ExpoImagePicker (14.0.2):
- ExpoModulesCore - ExpoModulesCore
- ExpoModulesCore (0.11.4): - ExpoKeepAwake (11.0.1):
- ExpoModulesCore
- ExpoModulesCore (1.0.3):
- React-Core - React-Core
- ReactCommon/turbomodule/core - ReactCommon/turbomodule/core
- ExpoWebBrowser (10.2.1): - ExpoWebBrowser (12.0.0):
- ExpoModulesCore - ExpoModulesCore
- EXVideoThumbnails (6.3.0): - EXVideoThumbnails (6.3.0):
- ExpoModulesCore - ExpoModulesCore
@ -524,12 +529,12 @@ PODS:
- React-Core - React-Core
- RNGestureHandler (2.4.2): - RNGestureHandler (2.4.2):
- React-Core - React-Core
- RNImageCropPicker (0.36.3): - RNImageCropPicker (0.38.0):
- React-Core - React-Core
- React-RCTImage - React-RCTImage
- RNImageCropPicker/QBImagePickerController (= 0.36.3) - RNImageCropPicker/QBImagePickerController (= 0.38.0)
- TOCropViewController - TOCropViewController
- RNImageCropPicker/QBImagePickerController (0.36.3): - RNImageCropPicker/QBImagePickerController (0.38.0):
- React-Core - React-Core
- React-RCTImage - React-RCTImage
- TOCropViewController - TOCropViewController
@ -594,11 +599,13 @@ DEPENDENCIES:
- EXAppleAuthentication (from `../node_modules/expo-apple-authentication/ios`) - EXAppleAuthentication (from `../node_modules/expo-apple-authentication/ios`)
- EXAV (from `../node_modules/expo-av/ios`) - EXAV (from `../node_modules/expo-av/ios`)
- EXFileSystem (from `../node_modules/expo-file-system/ios`) - EXFileSystem (from `../node_modules/expo-file-system/ios`)
- EXImageLoader (from `../node_modules/expo-image-loader/ios`)
- EXLocalAuthentication (from `../node_modules/expo-local-authentication/ios`) - EXLocalAuthentication (from `../node_modules/expo-local-authentication/ios`)
- Expo (from `../node_modules/expo`) - Expo (from `../node_modules/expo`)
- ExpoHaptics (from `../node_modules/expo-haptics/ios`) - ExpoHaptics (from `../node_modules/expo-haptics/ios`)
- ExpoImagePicker (from `../node_modules/expo-image-picker/ios`)
- ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`) - ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`)
- ExpoModulesCore (from `../node_modules/expo-modules-core/ios`) - ExpoModulesCore (from `../node_modules/expo-modules-core`)
- ExpoWebBrowser (from `../node_modules/expo-web-browser/ios`) - ExpoWebBrowser (from `../node_modules/expo-web-browser/ios`)
- EXVideoThumbnails (from `../node_modules/expo-video-thumbnails/ios`) - EXVideoThumbnails (from `../node_modules/expo-video-thumbnails/ios`)
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
@ -721,16 +728,20 @@ EXTERNAL SOURCES:
:path: "../node_modules/expo-av/ios" :path: "../node_modules/expo-av/ios"
EXFileSystem: EXFileSystem:
:path: "../node_modules/expo-file-system/ios" :path: "../node_modules/expo-file-system/ios"
EXImageLoader:
:path: "../node_modules/expo-image-loader/ios"
EXLocalAuthentication: EXLocalAuthentication:
:path: "../node_modules/expo-local-authentication/ios" :path: "../node_modules/expo-local-authentication/ios"
Expo: Expo:
:path: "../node_modules/expo" :path: "../node_modules/expo"
ExpoHaptics: ExpoHaptics:
:path: "../node_modules/expo-haptics/ios" :path: "../node_modules/expo-haptics/ios"
ExpoImagePicker:
:path: "../node_modules/expo-image-picker/ios"
ExpoKeepAwake: ExpoKeepAwake:
:path: "../node_modules/expo-keep-awake/ios" :path: "../node_modules/expo-keep-awake/ios"
ExpoModulesCore: ExpoModulesCore:
:path: "../node_modules/expo-modules-core/ios" :path: "../node_modules/expo-modules-core"
ExpoWebBrowser: ExpoWebBrowser:
:path: "../node_modules/expo-web-browser/ios" :path: "../node_modules/expo-web-browser/ios"
EXVideoThumbnails: EXVideoThumbnails:
@ -898,13 +909,15 @@ SPEC CHECKSUMS:
DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662 DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662
EXAppleAuthentication: 709a807fe7f48ac6986a2ceed206ee6a8baf28df EXAppleAuthentication: 709a807fe7f48ac6986a2ceed206ee6a8baf28df
EXAV: 88f61c5af8415715b7ee51f084c1020235b85c56 EXAV: 88f61c5af8415715b7ee51f084c1020235b85c56
EXFileSystem: 2aa2d9289f84bca9532b9ccbd81504fa31eb1ded EXFileSystem: 927e0a8885aa9c49e50fc38eaba2c2389f2f1019
EXImageLoader: 84b65e6bd9d3345d6fbb3ab936a546c54496a64d
EXLocalAuthentication: 7f37b242eae73f9acf111d39bdee3f1379e68902 EXLocalAuthentication: 7f37b242eae73f9acf111d39bdee3f1379e68902
Expo: 73412414e62f5cbc6e713def821de70b92cd3ad6 Expo: 36b5f625d36728adbdd1934d4d57182f319ab832
ExpoHaptics: ad58ec96a25e57579c14a47c7d71f0de0de8656a ExpoHaptics: 5a56d30a87ea213dd00b09566dc4b441a4dff97f
ExpoKeepAwake: c0c494b442ecd8122974c13b93ccfb57bd408e88 ExpoImagePicker: d2a1cea4023008ae2fb0d95f33422b80772cc76e
ExpoModulesCore: e281bb7b78ea47e227dd5af94d04b24d8b2e1255 ExpoKeepAwake: 69b59d0a8d2b24de9f82759c39b3821fec030318
ExpoWebBrowser: 4b5f9633e5f169dc948587cb6d26d2d1d1406187 ExpoModulesCore: b5d21c8880afda6fb6ee95469f9ac2ec9b98e995
ExpoWebBrowser: 073e50f16669d498fb49063b9b7fe780b24f7fda
EXVideoThumbnails: 19e055dc3245b53c536da9e0ef9c618fd2118297 EXVideoThumbnails: 19e055dc3245b53c536da9e0ef9c618fd2118297
FBLazyVector: a7a655862f6b09625d11c772296b01cd5164b648 FBLazyVector: a7a655862f6b09625d11c772296b01cd5164b648
FBReactNativeSpec: 66b5770d86bfee27d67b850416dbc7123c4f6311 FBReactNativeSpec: 66b5770d86bfee27d67b850416dbc7123c4f6311
@ -989,7 +1002,7 @@ SPEC CHECKSUMS:
RNFBCrashlytics: 357955a1564721ca9001960e57b395c6a319f9be RNFBCrashlytics: 357955a1564721ca9001960e57b395c6a319f9be
RNFileViewer: ce7ca3ac370e18554d35d6355cffd7c30437c592 RNFileViewer: ce7ca3ac370e18554d35d6355cffd7c30437c592
RNGestureHandler: 61628a2c859172551aa2100d3e73d1e57878392f RNGestureHandler: 61628a2c859172551aa2100d3e73d1e57878392f
RNImageCropPicker: 97289cd94fb01ab79db4e5c92938be4d0d63415d RNImageCropPicker: ffbba608264885c241cbf3a8f78eb7aeeb978241
RNLocalize: 82a569022724d35461e2dc5b5d015a13c3ca995b RNLocalize: 82a569022724d35461e2dc5b5d015a13c3ca995b
RNMathView: 4c8a3c081fa671ab3136c51fa0bdca7ffb708bd5 RNMathView: 4c8a3c081fa671ab3136c51fa0bdca7ffb708bd5
RNReanimated: 64573e25e078ae6bec03b891586d50b9ec284393 RNReanimated: 64573e25e078ae6bec03b891586d50b9ec284393
@ -1004,6 +1017,6 @@ SPEC CHECKSUMS:
WatermelonDB: 577c61fceff16e9f9103b59d14aee4850c0307b6 WatermelonDB: 577c61fceff16e9f9103b59d14aee4850c0307b6
Yoga: 99652481fcd320aefa4a7ef90095b95acd181952 Yoga: 99652481fcd320aefa4a7ef90095b95acd181952
PODFILE CHECKSUM: 052cbf741847405abc3b902c9e107c1ebb48b252 PODFILE CHECKSUM: 8d2226713e77a455feba9d2ee3b2222cb6193697
COCOAPODS: 1.11.3 COCOAPODS: 1.11.3

View File

@ -61,15 +61,16 @@
"commonmark-react-renderer": "git+https://github.com/RocketChat/commonmark-react-renderer.git", "commonmark-react-renderer": "git+https://github.com/RocketChat/commonmark-react-renderer.git",
"dequal": "^2.0.3", "dequal": "^2.0.3",
"ejson": "^2.2.3", "ejson": "^2.2.3",
"expo": "^46.0.9", "expo": "^47.0.8",
"expo-apple-authentication": "4.2.1", "expo-apple-authentication": "4.2.1",
"expo-av": "11.2.3", "expo-av": "11.2.3",
"expo-file-system": "14.0.0", "expo-file-system": "^14.1.0",
"expo-haptics": "11.2.0", "expo-haptics": "12.0.1",
"expo-keep-awake": "10.1.1", "expo-image-picker": "^14.0.2",
"expo-keep-awake": "11.0.1",
"expo-local-authentication": "12.2.0", "expo-local-authentication": "12.2.0",
"expo-video-thumbnails": "6.3.0", "expo-video-thumbnails": "6.3.0",
"expo-web-browser": "10.2.1", "expo-web-browser": "12.0.0",
"hoist-non-react-statics": "3.3.2", "hoist-non-react-statics": "3.3.2",
"i18n-js": "3.9.2", "i18n-js": "3.9.2",
"js-base64": "3.6.1", "js-base64": "3.6.1",
@ -94,7 +95,7 @@
"react-native-fast-image": "RocketChat/react-native-fast-image.git#bump-version", "react-native-fast-image": "RocketChat/react-native-fast-image.git#bump-version",
"react-native-file-viewer": "^2.1.4", "react-native-file-viewer": "^2.1.4",
"react-native-gesture-handler": "2.4.2", "react-native-gesture-handler": "2.4.2",
"react-native-image-crop-picker": "RocketChat/react-native-image-crop-picker", "react-native-image-crop-picker": "^0.38.0",
"react-native-image-progress": "^1.1.1", "react-native-image-progress": "^1.1.1",
"react-native-jitsi-meet": "RocketChat/react-native-jitsi-meet", "react-native-jitsi-meet": "RocketChat/react-native-jitsi-meet",
"react-native-keycommands": "2.0.3", "react-native-keycommands": "2.0.3",

View File

@ -0,0 +1,12 @@
index 7a28702..77888fc 100644
--- a/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt
+++ b/node_modules/expo-image-picker/android/src/main/java/expo/modules/imagepicker/ImagePickerModule.kt
@@ -56,7 +56,7 @@ class ImagePickerModule : Module() {
AsyncFunction("launchCameraAsync") Coroutine { options: ImagePickerOptions ->
ensureTargetActivityIsAvailable(options)
- ensureCameraPermissionsAreGranted()
+ // ensureCameraPermissionsAreGranted()
val mediaFile = createOutputFile(context.cacheDir, options.mediaTypes.toFileExtension())
val uri = mediaFile.toContentUri(context)

349
yarn.lock
View File

@ -66,6 +66,11 @@
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d"
integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==
"@babel/compat-data@^7.20.0", "@babel/compat-data@^7.20.1":
version "7.20.5"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.5.tgz#86f172690b093373a933223b4745deeb6049e733"
integrity sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==
"@babel/core@7.12.9": "@babel/core@7.12.9":
version "7.12.9" version "7.12.9"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8"
@ -405,6 +410,16 @@
browserslist "^4.20.2" browserslist "^4.20.2"
semver "^6.3.0" semver "^6.3.0"
"@babel/helper-compilation-targets@^7.20.0":
version "7.20.0"
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz#6bf5374d424e1b3922822f1d9bdaa43b1a139d0a"
integrity sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==
dependencies:
"@babel/compat-data" "^7.20.0"
"@babel/helper-validator-option" "^7.18.6"
browserslist "^4.21.3"
semver "^6.3.0"
"@babel/helper-create-class-features-plugin@^7.14.5": "@babel/helper-create-class-features-plugin@^7.14.5":
version "7.14.5" version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.5.tgz#8842ec495516dd1ed8f6c572be92ba78b1e9beef" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.5.tgz#8842ec495516dd1ed8f6c572be92ba78b1e9beef"
@ -894,6 +909,11 @@
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f"
integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==
"@babel/helper-plugin-utils@^7.20.2":
version "7.20.2"
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629"
integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==
"@babel/helper-regex@^7.8.3": "@babel/helper-regex@^7.8.3":
version "7.8.3" version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965"
@ -1566,6 +1586,17 @@
"@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
"@babel/plugin-transform-parameters" "^7.18.8" "@babel/plugin-transform-parameters" "^7.18.8"
"@babel/plugin-proposal-object-rest-spread@^7.12.13":
version "7.20.2"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz#a556f59d555f06961df1e572bb5eca864c84022d"
integrity sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==
dependencies:
"@babel/compat-data" "^7.20.1"
"@babel/helper-compilation-targets" "^7.20.0"
"@babel/helper-plugin-utils" "^7.20.2"
"@babel/plugin-syntax-object-rest-spread" "^7.8.3"
"@babel/plugin-transform-parameters" "^7.20.1"
"@babel/plugin-proposal-object-rest-spread@^7.18.0": "@babel/plugin-proposal-object-rest-spread@^7.18.0":
version "7.18.0" version "7.18.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz#79f2390c892ba2a68ec112eb0d895cfbd11155e8" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz#79f2390c892ba2a68ec112eb0d895cfbd11155e8"
@ -2426,6 +2457,13 @@
dependencies: dependencies:
"@babel/helper-plugin-utils" "^7.17.12" "@babel/helper-plugin-utils" "^7.17.12"
"@babel/plugin-transform-parameters@^7.20.1":
version "7.20.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz#f8f9186c681d10c3de7620c916156d893c8a019e"
integrity sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ==
dependencies:
"@babel/helper-plugin-utils" "^7.20.2"
"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.18.6": "@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.18.6":
version "7.18.6" version "7.18.6"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3"
@ -3579,23 +3617,23 @@
mv "~2" mv "~2"
safe-json-stringify "~1" safe-json-stringify "~1"
"@expo/cli@0.2.11": "@expo/cli@0.4.10":
version "0.2.11" version "0.4.10"
resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.2.11.tgz#25d8db8e46c6f02ef3edc189fdb6e29c922dd377" resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.4.10.tgz#e965b97888c83cecdaddbb8dca3d5827643a0f36"
integrity sha512-TIlylp3nghiEdlVliZRcBg8Yb++tnU92HinuQQZznVGFXFCoqJ210SPUJS1j3rxxltt8NhIJjL9OTO7PYRqnsQ== integrity sha512-c8NJOVa5b8g9CYj8ahdaN21cVE2wPwUaFrtTE0kLeRR5ASy8reWLFEOcstEtt6eufdcN/uGgBWQ0FLovgLZuzw==
dependencies: dependencies:
"@babel/runtime" "^7.14.0" "@babel/runtime" "^7.14.0"
"@expo/code-signing-certificates" "^0.0.2" "@expo/code-signing-certificates" "0.0.5"
"@expo/config" "~7.0.1" "@expo/config" "~7.0.2"
"@expo/config-plugins" "~5.0.1" "@expo/config-plugins" "~5.0.3"
"@expo/dev-server" "~0.1.119" "@expo/dev-server" "0.1.123"
"@expo/devcert" "^1.0.0" "@expo/devcert" "^1.0.0"
"@expo/json-file" "^8.2.35" "@expo/json-file" "^8.2.35"
"@expo/metro-config" "~0.3.18" "@expo/metro-config" "~0.5.0"
"@expo/osascript" "^2.0.31" "@expo/osascript" "^2.0.31"
"@expo/package-manager" "~0.0.53" "@expo/package-manager" "~0.0.53"
"@expo/plist" "^0.0.18" "@expo/plist" "^0.0.18"
"@expo/prebuild-config" "~5.0.3" "@expo/prebuild-config" "5.0.7"
"@expo/rudder-sdk-node" "1.1.1" "@expo/rudder-sdk-node" "1.1.1"
"@expo/spawn-async" "1.5.0" "@expo/spawn-async" "1.5.0"
"@expo/xcpretty" "^4.2.1" "@expo/xcpretty" "^4.2.1"
@ -3616,6 +3654,7 @@
getenv "^1.0.0" getenv "^1.0.0"
graphql "15.8.0" graphql "15.8.0"
graphql-tag "^2.10.1" graphql-tag "^2.10.1"
https-proxy-agent "^5.0.1"
internal-ip "4.3.0" internal-ip "4.3.0"
is-root "^2.1.0" is-root "^2.1.0"
js-yaml "^3.13.1" js-yaml "^3.13.1"
@ -3645,14 +3684,35 @@
uuid "^3.4.0" uuid "^3.4.0"
wrap-ansi "^7.0.0" wrap-ansi "^7.0.0"
"@expo/code-signing-certificates@^0.0.2": "@expo/code-signing-certificates@0.0.5":
version "0.0.2" version "0.0.5"
resolved "https://registry.yarnpkg.com/@expo/code-signing-certificates/-/code-signing-certificates-0.0.2.tgz#65cd615800e6724b54831c966dd1a90145017246" resolved "https://registry.yarnpkg.com/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz#a693ff684fb20c4725dade4b88a6a9f96b02496c"
integrity sha512-vnPHFjwOqxQ1VLztktY+fYCfwvLzjqpzKn09rchcQE7Sdf0wtW5fFtIZBEFOOY5wasp8tXSnp627zrAwazPHzg== integrity sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==
dependencies: dependencies:
node-forge "^1.2.1" node-forge "^1.2.1"
nullthrows "^1.1.1" nullthrows "^1.1.1"
"@expo/config-plugins@5.0.4", "@expo/config-plugins@~5.0.3":
version "5.0.4"
resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-5.0.4.tgz#216fea6558fe66615af1370de55193f4181cb23e"
integrity sha512-vzUcVpqOMs3h+hyRdhGwk+eGIOhXa5xYdd92yO17RMNHav3v/+ekMbs7XA2c3lepMO8Yd4/5hqmRw9ZTL6jGzg==
dependencies:
"@expo/config-types" "^47.0.0"
"@expo/json-file" "8.2.36"
"@expo/plist" "0.0.18"
"@expo/sdk-runtime-versions" "^1.0.0"
"@react-native/normalize-color" "^2.0.0"
chalk "^4.1.2"
debug "^4.3.1"
find-up "~5.0.0"
getenv "^1.0.0"
glob "7.1.6"
resolve-from "^5.0.0"
semver "^7.3.5"
slash "^3.0.0"
xcode "^3.0.1"
xml2js "0.4.23"
"@expo/config-plugins@^4.0.14", "@expo/config-plugins@^4.1.5": "@expo/config-plugins@^4.0.14", "@expo/config-plugins@^4.1.5":
version "4.1.5" version "4.1.5"
resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-4.1.5.tgz#9d357d2cda9c095e511b51583ede8a3b76174068" resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-4.1.5.tgz#9d357d2cda9c095e511b51583ede8a3b76174068"
@ -3705,7 +3765,29 @@
resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-46.0.2.tgz#191f225ebfcbe624868ddc40efae79593f948dd8" resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-46.0.2.tgz#191f225ebfcbe624868ddc40efae79593f948dd8"
integrity sha512-PXkmOgNwRyBfgVT1HmFZhfh3Qm7WKKyV6mk3/5HJ/LzPh1t+Zs2JrWX8U2YncTLV1QzV7nV8tnkyvszzqnZEzQ== integrity sha512-PXkmOgNwRyBfgVT1HmFZhfh3Qm7WKKyV6mk3/5HJ/LzPh1t+Zs2JrWX8U2YncTLV1QzV7nV8tnkyvszzqnZEzQ==
"@expo/config@7.0.1", "@expo/config@~7.0.0", "@expo/config@~7.0.1": "@expo/config-types@^47.0.0":
version "47.0.0"
resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-47.0.0.tgz#99eeabe0bba7a776e0f252b78beb0c574692c38d"
integrity sha512-r0pWfuhkv7KIcXMUiNACJmJKKwlTBGMw9VZHNdppS8/0Nve8HZMTkNRFQzTHW1uH3pBj8jEXpyw/2vSWDHex9g==
"@expo/config@7.0.3", "@expo/config@~7.0.2":
version "7.0.3"
resolved "https://registry.yarnpkg.com/@expo/config/-/config-7.0.3.tgz#c9c634e76186de25e296485e51418f1e52966e6e"
integrity sha512-joVtB5o+NF40Tmsdp65UzryRtbnCuMbXkVO4wJnNJO4aaK0EYLdHCYSewORVqNcDfGN0LphQr8VTG2npbd9CJA==
dependencies:
"@babel/code-frame" "~7.10.4"
"@expo/config-plugins" "~5.0.3"
"@expo/config-types" "^47.0.0"
"@expo/json-file" "8.2.36"
getenv "^1.0.0"
glob "7.1.6"
require-from-string "^2.0.2"
resolve-from "^5.0.0"
semver "7.3.2"
slugify "^1.3.4"
sucrase "^3.20.0"
"@expo/config@~7.0.0":
version "7.0.1" version "7.0.1"
resolved "https://registry.yarnpkg.com/@expo/config/-/config-7.0.1.tgz#d8e2e5410bb0b8e305690bbc76e6bb76f6a6de31" resolved "https://registry.yarnpkg.com/@expo/config/-/config-7.0.1.tgz#d8e2e5410bb0b8e305690bbc76e6bb76f6a6de31"
integrity sha512-4lu0wr45XXJ2MXiLAm2+fmOyy/jjqF3NuDm92fO6nuulRzEEvTP4w3vsibJ690rT81ohtvhpruKhkRs0wSjKWA== integrity sha512-4lu0wr45XXJ2MXiLAm2+fmOyy/jjqF3NuDm92fO6nuulRzEEvTP4w3vsibJ690rT81ohtvhpruKhkRs0wSjKWA==
@ -3722,18 +3804,21 @@
slugify "^1.3.4" slugify "^1.3.4"
sucrase "^3.20.0" sucrase "^3.20.0"
"@expo/dev-server@~0.1.119": "@expo/dev-server@0.1.123":
version "0.1.119" version "0.1.123"
resolved "https://registry.yarnpkg.com/@expo/dev-server/-/dev-server-0.1.119.tgz#d85036d8ddfd5668fd50ef373616b55580dc7670" resolved "https://registry.yarnpkg.com/@expo/dev-server/-/dev-server-0.1.123.tgz#71304323b47db9ce300b9a774571ef2312b9d581"
integrity sha512-DcVnj4/YA+b+Ljsz2qffHHN5LbouXFKeE9ER0Yjq5vIb2moV1q3U6LezndFLCf42Uev7C2vSa8YCcP3WOpxuMw== integrity sha512-N6UVzzeemfX0AONUSWInvkAAbqon8hRXpyYE/nMPaC6TvAmgGY5ILZAGoXwlpxwY2VKNT0Lx4s/UJ53ytIaHbA==
dependencies: dependencies:
"@expo/bunyan" "4.0.0" "@expo/bunyan" "4.0.0"
"@expo/metro-config" "~0.3.18" "@expo/metro-config" "~0.5.1"
"@expo/osascript" "2.0.33" "@expo/osascript" "2.0.33"
"@expo/spawn-async" "^1.5.0"
body-parser "1.19.0" body-parser "1.19.0"
chalk "^4.0.0" chalk "^4.0.0"
connect "^3.7.0" connect "^3.7.0"
fs-extra "9.0.0" fs-extra "9.0.0"
is-docker "^2.0.0"
is-wsl "^2.1.1"
node-fetch "^2.6.0" node-fetch "^2.6.0"
open "^8.3.0" open "^8.3.0"
resolve-from "^5.0.0" resolve-from "^5.0.0"
@ -3760,10 +3845,10 @@
tmp "^0.0.33" tmp "^0.0.33"
tslib "^1.10.0" tslib "^1.10.0"
"@expo/image-utils@0.3.20": "@expo/image-utils@0.3.22":
version "0.3.20" version "0.3.22"
resolved "https://registry.yarnpkg.com/@expo/image-utils/-/image-utils-0.3.20.tgz#b8777a2ca18e331f084e62ee8e0f047a6fc52c16" resolved "https://registry.yarnpkg.com/@expo/image-utils/-/image-utils-0.3.22.tgz#3a45fb2e268d20fcc761c87bca3aca7fd8e24260"
integrity sha512-NgF/80XENyCS+amwC0P6uk1fauEtUq7gijD19jvl2xknJaADq8M2dMCRHwWMVOXosr2v46f3Z++G/NjmyOVS7A== integrity sha512-uzq+RERAtkWypOFOLssFnXXqEqKjNj9eXN7e97d/EXUAojNcLDoXc0sL+F5B1I4qtlsnhX01kcpoIBBZD8wZNQ==
dependencies: dependencies:
"@expo/spawn-async" "1.5.0" "@expo/spawn-async" "1.5.0"
chalk "^4.0.0" chalk "^4.0.0"
@ -3786,12 +3871,12 @@
json5 "^1.0.1" json5 "^1.0.1"
write-file-atomic "^2.3.0" write-file-atomic "^2.3.0"
"@expo/metro-config@~0.3.18": "@expo/metro-config@~0.5.0", "@expo/metro-config@~0.5.1":
version "0.3.22" version "0.5.1"
resolved "https://registry.yarnpkg.com/@expo/metro-config/-/metro-config-0.3.22.tgz#fa4a0729ec8ecbc9c9fb79c63ecc66a299505c82" resolved "https://registry.yarnpkg.com/@expo/metro-config/-/metro-config-0.5.1.tgz#58c715041e1773ad653519535c017138bfc766de"
integrity sha512-R81sLbaeUBjN8IXcxiVx7GcpSj8z7szILl1b5yJDb38WdIFwxhrseA5wXaTT1yMhI+59w6n99T2qtFV2yD5qYA== integrity sha512-Rvy4ZFgKNDfXO401z2OQF8fWbPj1lLVDL4GF1aqCIhCDHCKrezbwB0xejpcUyndJRCxBL2BMAM+P24t6cKv9Fw==
dependencies: dependencies:
"@expo/config" "7.0.1" "@expo/config" "~7.0.2"
"@expo/json-file" "8.2.36" "@expo/json-file" "8.2.36"
chalk "^4.1.0" chalk "^4.1.0"
debug "^4.3.2" debug "^4.3.2"
@ -3833,15 +3918,15 @@
base64-js "^1.2.3" base64-js "^1.2.3"
xmlbuilder "^14.0.0" xmlbuilder "^14.0.0"
"@expo/prebuild-config@~5.0.3": "@expo/prebuild-config@5.0.7":
version "5.0.3" version "5.0.7"
resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-5.0.3.tgz#f475797a592f074b5a66f02aef27c6c14c54591e" resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-5.0.7.tgz#4658b66126c4d32c7b6302571e458a71811b07aa"
integrity sha512-G4j1H3WFjRaiQ+FgFNULrnIm7RsQyjc4xp6lLTP2ydBv79wO3x8wAdeZvaZh7eOkfu9BESpQzACT1uuJTag5jg== integrity sha512-D+TBpJUHe4+oTGFPb4o0rrw/h1xxc6wF+abJnbDHUkhnaeiHkE2O3ByS7FdiZ2FT36t0OKqeSKG/xFwWT3m1Ew==
dependencies: dependencies:
"@expo/config" "7.0.1" "@expo/config" "~7.0.2"
"@expo/config-plugins" "~5.0.1" "@expo/config-plugins" "~5.0.3"
"@expo/config-types" "^46.0.0" "@expo/config-types" "^47.0.0"
"@expo/image-utils" "0.3.20" "@expo/image-utils" "0.3.22"
"@expo/json-file" "8.2.36" "@expo/json-file" "8.2.36"
debug "^4.3.1" debug "^4.3.1"
fs-extra "^9.0.0" fs-extra "^9.0.0"
@ -7623,17 +7708,18 @@ babel-preset-current-node-syntax@^1.0.0:
"@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3"
"@babel/plugin-syntax-top-level-await" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3"
babel-preset-expo@~9.2.0: babel-preset-expo@~9.2.2:
version "9.2.0" version "9.2.2"
resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-9.2.0.tgz#d01793e3a556065f103b3095fbbc959d52f08e88" resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-9.2.2.tgz#3f3819a224bbc32cefebb5d97a40c950a2f7ae2e"
integrity sha512-aM2htiNx0H49H+MWCp9+cKVSdcdNSn0tbE5Dln/GO1xna4ZlnA30clbfClcYJFUcZtW90IsYeZwQ/hj8zyWhNA== integrity sha512-69cSPObZWFz0AaUT6IhCu2VzPVTICUtXzhX5ecoDttFe+9wb9yMV8m7rBNZptJQ3wtiKB5iEL7/wvtKygPz/mQ==
dependencies: dependencies:
"@babel/plugin-proposal-decorators" "^7.12.9" "@babel/plugin-proposal-decorators" "^7.12.9"
"@babel/plugin-proposal-object-rest-spread" "^7.12.13"
"@babel/plugin-transform-react-jsx" "^7.12.17" "@babel/plugin-transform-react-jsx" "^7.12.17"
"@babel/preset-env" "^7.12.9" "@babel/preset-env" "^7.12.9"
babel-plugin-module-resolver "^4.1.0" babel-plugin-module-resolver "^4.1.0"
babel-plugin-react-native-web "~0.18.2" babel-plugin-react-native-web "~0.18.2"
metro-react-native-babel-preset "~0.70.3" metro-react-native-babel-preset "0.72.3"
babel-preset-fbjs@^3.4.0: babel-preset-fbjs@^3.4.0:
version "3.4.0" version "3.4.0"
@ -10628,19 +10714,19 @@ expo-apple-authentication@4.2.1:
dependencies: dependencies:
"@expo/config-plugins" "^4.0.14" "@expo/config-plugins" "^4.0.14"
expo-application@~4.2.2: expo-application@~5.0.1:
version "4.2.2" version "5.0.1"
resolved "https://registry.yarnpkg.com/expo-application/-/expo-application-4.2.2.tgz#c9500819723c59eaee5ca9832bf17d1fd4139f74" resolved "https://registry.yarnpkg.com/expo-application/-/expo-application-5.0.1.tgz#628aeee74697d7aa39d0c0173dbf9383e06e53e9"
integrity sha512-bFEaFRUdV6aK2iBd+HzkHNPYsyj88EAhaQW5leznmO0qQMJxpAQ3eoUXMey1hfDBh1qgkkHgSyCZ9BIgMAGJ1g== integrity sha512-bThxK5zH/Lc2tkCvEXGjfM7ayvOVmPWYcWzXsMIU1RtG73TyXo4cq+73FvfDNIWn6gKS0WyMcmoPB3WXEV/jsw==
expo-asset@~8.6.1: expo-asset@~8.6.2:
version "8.6.1" version "8.6.2"
resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-8.6.1.tgz#86355b3e231e8aa6cf68a456ce9746dff1478b48" resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-8.6.2.tgz#607dbbed988f7fc54a6f37cd33f86a2388264b4b"
integrity sha512-urbUp1YtwH2J0Qc3inGQJdqTjWKML77SeMNgff+iR9MUE8gDkFqSCDjrBi7i5Oj5DDtq43mmtDg8G8ei6Vchcg== integrity sha512-XqlXjkuUCEiojbHwbHPjQs1oboRz6w3eV96+9NBD+wb3EUqgAAYY2Do+IWyVCAl8UIFbFi3xzMiqk0Xm9+H8uQ==
dependencies: dependencies:
blueimp-md5 "^2.10.0" blueimp-md5 "^2.10.0"
expo-constants "~13.2.2" expo-constants "~14.0.0"
expo-file-system "~14.1.0" expo-file-system "~15.1.0"
invariant "^2.2.4" invariant "^2.2.4"
md5-file "^3.2.3" md5-file "^3.2.3"
path-browserify "^1.0.0" path-browserify "^1.0.0"
@ -10653,28 +10739,20 @@ expo-av@11.2.3:
dependencies: dependencies:
"@expo/config-plugins" "^4.0.14" "@expo/config-plugins" "^4.0.14"
expo-constants@~13.2.2, expo-constants@~13.2.4: expo-constants@~14.0.0, expo-constants@~14.0.2:
version "13.2.4" version "14.0.2"
resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-13.2.4.tgz#eab4a553f074b2c60ad7a158d3b82e3484a94606" resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-14.0.2.tgz#2cb1dec8f41a64c2fc5b4eecaf77d7661cad01cc"
integrity sha512-Zobau8EuTk2GgafwkfGnWM6CmSLB7X8qnQXVuXe0nd3v92hfQUmRWGhJwH88uxXj3LrfqctM6PaJ8taG1vxfBw== integrity sha512-wzV3nrzTXTI8yG0tfas3fnqCfKV6YE+1GphEREyVDAShEB6mBInX1b6HgtpHFy2wOtnml+lPVmTCeGtjjLnZhA==
dependencies: dependencies:
"@expo/config" "~7.0.0" "@expo/config" "~7.0.2"
uuid "^3.3.2" uuid "^3.3.2"
expo-error-recovery@~3.2.0: expo-error-recovery@~4.0.1:
version "3.2.0" version "4.0.1"
resolved "https://registry.yarnpkg.com/expo-error-recovery/-/expo-error-recovery-3.2.0.tgz#3a4543382904a5e70829cb41d7fc0f022c2bef6e" resolved "https://registry.yarnpkg.com/expo-error-recovery/-/expo-error-recovery-4.0.1.tgz#3e3333e134c992c234539d3773fe78915c883755"
integrity sha512-XZ630ks5HNxa9oc2Ya1hEn1ez031Cy4VnyxerPC2o9fKNKSrD/64cRqGF9NkGM3X2uf8+PCB9adxVflAIXBf6w== integrity sha512-wceptnRX+N3qCSVTNbIchUFu3GmY30onRH5L66OF8HMLpAIQfrZMLxJfz7SAMJTcr3jxsJ11vSa2l2RaPKgHsQ==
expo-file-system@14.0.0: expo-file-system@^14.1.0:
version "14.0.0"
resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-14.0.0.tgz#8367af10969a486fcba2f1e1c7cc0148f855e962"
integrity sha512-Asva7ehLUq/PIem6Y+/OQvoIqhFqYDd7l4l49yDRDgLSbK2I7Fr8qGhDeDpnUXrMVamg2uwt9zRGhyrjFNRhVw==
dependencies:
"@expo/config-plugins" "^4.0.14"
uuid "^3.4.0"
expo-file-system@~14.1.0:
version "14.1.0" version "14.1.0"
resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-14.1.0.tgz#4fa410873ef12ac8bec873593f7489f4305a14b8" resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-14.1.0.tgz#4fa410873ef12ac8bec873593f7489f4305a14b8"
integrity sha512-lJcPGQ8yKXVknVkD5TmcJnR/TpQbEL0JP8hknLejfq3FIqPqI/LBFn31YiP37grxW8lITz1al8pq5T6CSUjAzQ== integrity sha512-lJcPGQ8yKXVknVkD5TmcJnR/TpQbEL0JP8hknLejfq3FIqPqI/LBFn31YiP37grxW8lITz1al8pq5T6CSUjAzQ==
@ -10682,27 +10760,42 @@ expo-file-system@~14.1.0:
"@expo/config-plugins" "~5.0.0" "@expo/config-plugins" "~5.0.0"
uuid "^3.4.0" uuid "^3.4.0"
expo-font@~10.2.0: expo-file-system@~15.1.0, expo-file-system@~15.1.1:
version "10.2.0" version "15.1.1"
resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-10.2.0.tgz#881f767e13b2b534a4d3ffaedcf675ce6b63439d" resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-15.1.1.tgz#724090f83ff1e6378cadc0a64b83552f769eb16b"
integrity sha512-2V4EcpmhNoppaLn+lPprZVS+3bmV9hxLPKttKh2u8ghjH/oX9bv3u4JVo77SYh0EfrWO4toqVyXn8pXH8GpbIg== integrity sha512-MYYDKxjLo9VOkvGHqym5EOAUS+ero9O66X5zI+EXJzqNznKvnfScdXeeAaQzShmWtmLkdVDCoYFGOaTvTA1wTQ==
dependencies:
uuid "^3.4.0"
expo-font@~11.0.1:
version "11.0.1"
resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-11.0.1.tgz#0758ce4e505995d0193a33e3c4325b35bf1fb7f7"
integrity sha512-LGAIluWZfru0J0n87dzb6pwAB6TVMTEiLcsd/ktozzbn4DlN7SeQy40+ruU6bvAKCOGrnRneYbKSIOGkrd7oNg==
dependencies: dependencies:
fontfaceobserver "^2.1.0" fontfaceobserver "^2.1.0"
expo-haptics@11.2.0: expo-haptics@12.0.1:
version "11.2.0" version "12.0.1"
resolved "https://registry.yarnpkg.com/expo-haptics/-/expo-haptics-11.2.0.tgz#0ffb9f82395e88f9f66ceebb0f3279739311412c" resolved "https://registry.yarnpkg.com/expo-haptics/-/expo-haptics-12.0.1.tgz#151dc57bc01c1fa16d021e4714b23916bbc9f8e5"
integrity sha512-ijuWU2ljLBGjIf7OQCvnBQIu/chezndnWkfi518XxvK0hudA4+fAe98mqHO6hom9GexNRxhQZbXc0hcVnxkaiA== integrity sha512-YubK3P3WTdjp5mFZcaF3ienqXHoDqzPpe61yTEIR5y+CVWqk+If9cC3ZYxn6lSp8KiNUmz7zC0GvUAVEqn8t6Q==
expo-keep-awake@10.1.1: expo-image-loader@~4.0.0:
version "10.1.1" version "4.0.0"
resolved "https://registry.yarnpkg.com/expo-keep-awake/-/expo-keep-awake-10.1.1.tgz#03023c130f7e3824b738e3fdd5353b8a2c0c1980" resolved "https://registry.yarnpkg.com/expo-image-loader/-/expo-image-loader-4.0.0.tgz#a17e5f95a4c1671791168dd5dfc221bf2f88480c"
integrity sha512-9zC0sdhQljUeMr2yQ7o4kzEZXVAy82fFOAZE1+TwPL7qR0b0sphe7OJ5T1GX1qLcwuVaJ8YewaPoLSHRk79+Rg== integrity sha512-hVMhXagsO1cSng5s70IEjuJAuHy2hX/inu5MM3T0ecJMf7L/7detKf22molQBRymerbk6Tzu+20h11eU0n/3jQ==
expo-keep-awake@~10.2.0: expo-image-picker@^14.0.2:
version "10.2.0" version "14.0.2"
resolved "https://registry.yarnpkg.com/expo-keep-awake/-/expo-keep-awake-10.2.0.tgz#46f04740bccd321732bbbed93491e2076d5dbbd7" resolved "https://registry.yarnpkg.com/expo-image-picker/-/expo-image-picker-14.0.2.tgz#a611a43142be4c6f763ee39efd80e55f5a414ed7"
integrity sha512-kIRtO4Hmrvxh4E45IPWG/NiUZsuRe1AQwBT09pq+kx8nm6tUS4B9TeL6+1NFy+qVBLbGKDqoQD5Ez7XYTFtBeQ== integrity sha512-dC0efykReusbjOtcvXYagABrVuwuOFwTfEx87VNjCZejig5aIPPj14UsViSV7xEQ+wkHvVnxyirox5xIbD196w==
dependencies:
expo-image-loader "~4.0.0"
uuid "7.0.2"
expo-keep-awake@11.0.1, expo-keep-awake@~11.0.1:
version "11.0.1"
resolved "https://registry.yarnpkg.com/expo-keep-awake/-/expo-keep-awake-11.0.1.tgz#ee354465892a94040ffe09901b85b469e7d54fb3"
integrity sha512-44ZjgLE4lnce2d40Pv8xsjMVc6R5GvgHOwZfkLYtGmgYG9TYrEJeEj5UfSeweXPL3pBFhXKfFU8xpGYMaHdP0A==
expo-local-authentication@12.2.0: expo-local-authentication@12.2.0:
version "12.2.0" version "12.2.0"
@ -10712,10 +10805,10 @@ expo-local-authentication@12.2.0:
"@expo/config-plugins" "^4.0.14" "@expo/config-plugins" "^4.0.14"
invariant "^2.2.4" invariant "^2.2.4"
expo-modules-autolinking@0.10.3: expo-modules-autolinking@1.0.0:
version "0.10.3" version "1.0.0"
resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-0.10.3.tgz#31bfcf3e4b613a7c3949fb1f1e9c23eea4c14caf" resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-1.0.0.tgz#2daac20035e1ecf8e66d74dca9bd1b0d6c09166c"
integrity sha512-av9ln2zwUt303g98raX7sDmESgL3SXs1sbbtIjh1rL7R0676XIUacIKgbydR0/4tMbOShWx14Z9fozpk9xIAJA== integrity sha512-MoRRkOVMoGUH/Lr8XS6UmBIZT/qrwbRt2IzUBALcM6MWZKtDn9Uct9XgMRxue82FJhRCfy9p1xZJVKHBRo4zEA==
dependencies: dependencies:
chalk "^4.1.0" chalk "^4.1.0"
commander "^7.2.0" commander "^7.2.0"
@ -10723,10 +10816,10 @@ expo-modules-autolinking@0.10.3:
find-up "^5.0.0" find-up "^5.0.0"
fs-extra "^9.1.0" fs-extra "^9.1.0"
expo-modules-core@0.11.4: expo-modules-core@1.0.3:
version "0.11.4" version "1.0.3"
resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-0.11.4.tgz#6b7a27bb212f3fbf7d6803f747f6491aa73a2a09" resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-1.0.3.tgz#3d94da3524e7e7d81ae1e7e632a5e0e24db0f3f1"
integrity sha512-8dEYICk7hUi1GPz5hWm8dBuZDGc+4Tm7zDhSIhKApo5jY/5vB4Bk+fjPo693iWn6pp3+XBHT8Ri8rJ3G7wH1vQ== integrity sha512-XqyA5c+zsK+cHDNVBVYu62HLBHyGMG0iWpXVP0bBQJWz0eyg5rcuEqLsnRTmoEz0YnH6QBf/cwRl+FfgnnH5Og==
dependencies: dependencies:
compare-versions "^3.4.0" compare-versions "^3.4.0"
invariant "^2.2.4" invariant "^2.2.4"
@ -10736,31 +10829,33 @@ expo-video-thumbnails@6.3.0:
resolved "https://registry.yarnpkg.com/expo-video-thumbnails/-/expo-video-thumbnails-6.3.0.tgz#07daa798ad175242fef4e62c8f2040b11606a41b" resolved "https://registry.yarnpkg.com/expo-video-thumbnails/-/expo-video-thumbnails-6.3.0.tgz#07daa798ad175242fef4e62c8f2040b11606a41b"
integrity sha512-oVy9XlzNxnpXFDz3FiWOrMOBWmYtZrNYnXc3XaVyj8ayRqwDNvW4P95kQeUhB04uwaMDOm4vIxc5SQxDAyxPGg== integrity sha512-oVy9XlzNxnpXFDz3FiWOrMOBWmYtZrNYnXc3XaVyj8ayRqwDNvW4P95kQeUhB04uwaMDOm4vIxc5SQxDAyxPGg==
expo-web-browser@10.2.1: expo-web-browser@12.0.0:
version "10.2.1" version "12.0.0"
resolved "https://registry.yarnpkg.com/expo-web-browser/-/expo-web-browser-10.2.1.tgz#4bd9214f7aefcd1af6ea26ae068a0e3e25a1e0bd" resolved "https://registry.yarnpkg.com/expo-web-browser/-/expo-web-browser-12.0.0.tgz#c8e117bfd6357df05ae3cf85acb423b44c4f6304"
integrity sha512-om34EL7OX5ouBM/hq2PrjHDLKmjVhAy+1H7YqRY6nS8dWsewnLFdLq4d8GPwWQBYb6kHKYVzwFRj+WLTfpAOBQ== integrity sha512-7/RUuE0sv5kf+mTw5/SOnks0Am1ctoxvT1Xi53Nom2EuXTKBV+b2Kf5xAw3ItoW5W4MHJUX3FdNI6qc9sS9+Pw==
dependencies: dependencies:
compare-urls "^2.0.0" compare-urls "^2.0.0"
expo@^46.0.9: expo@^47.0.8:
version "46.0.9" version "47.0.8"
resolved "https://registry.yarnpkg.com/expo/-/expo-46.0.9.tgz#4b4b943343c45c3a05c71da49c1cfd5555ab5f85" resolved "https://registry.yarnpkg.com/expo/-/expo-47.0.8.tgz#80390fd63f8305103445069c647011915f7c32dd"
integrity sha512-UsBjm0BL7w+OyF6kypVPrk3jhg9cCXF0D9CaOWQ+cedm7oT4mTVQx9+A45VsDvLzNWBjJejZQZ1PFKqOY5HNcQ== integrity sha512-PGNCIvrnYwHH4TDFsVocq/xhWZ5DW8N3bLkZJPZZgX6VgjtVLNsbZ+0lm1inLCZHP+6xSpSKRccjGHO/QQoMBQ==
dependencies: dependencies:
"@babel/runtime" "^7.14.0" "@babel/runtime" "^7.14.0"
"@expo/cli" "0.2.11" "@expo/cli" "0.4.10"
"@expo/config" "7.0.3"
"@expo/config-plugins" "5.0.4"
"@expo/vector-icons" "^13.0.0" "@expo/vector-icons" "^13.0.0"
babel-preset-expo "~9.2.0" babel-preset-expo "~9.2.2"
cross-spawn "^6.0.5" cross-spawn "^6.0.5"
expo-application "~4.2.2" expo-application "~5.0.1"
expo-asset "~8.6.1" expo-asset "~8.6.2"
expo-constants "~13.2.4" expo-constants "~14.0.2"
expo-file-system "~14.1.0" expo-file-system "~15.1.1"
expo-font "~10.2.0" expo-font "~11.0.1"
expo-keep-awake "~10.2.0" expo-keep-awake "~11.0.1"
expo-modules-autolinking "0.10.3" expo-modules-autolinking "1.0.0"
expo-modules-core "0.11.4" expo-modules-core "1.0.3"
fbemitter "^3.0.0" fbemitter "^3.0.0"
getenv "^1.0.0" getenv "^1.0.0"
invariant "^2.2.4" invariant "^2.2.4"
@ -10769,7 +10864,7 @@ expo@^46.0.9:
pretty-format "^26.5.2" pretty-format "^26.5.2"
uuid "^3.4.0" uuid "^3.4.0"
optionalDependencies: optionalDependencies:
expo-error-recovery "~3.2.0" expo-error-recovery "~4.0.1"
express@^4.17.1: express@^4.17.1:
version "4.18.1" version "4.18.1"
@ -12227,6 +12322,14 @@ https-proxy-agent@^5.0.0:
agent-base "6" agent-base "6"
debug "4" debug "4"
https-proxy-agent@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
dependencies:
agent-base "6"
debug "4"
human-signals@^2.1.0: human-signals@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
@ -14689,10 +14792,10 @@ metro-react-native-babel-preset@0.67.0, metro-react-native-babel-preset@^0.67.0:
"@babel/template" "^7.0.0" "@babel/template" "^7.0.0"
react-refresh "^0.4.0" react-refresh "^0.4.0"
metro-react-native-babel-preset@~0.70.3: metro-react-native-babel-preset@0.72.3:
version "0.70.3" version "0.72.3"
resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.70.3.tgz#1c77ec4544ecd5fb6c803e70b21284d7483e4842" resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.72.3.tgz#e549199fa310fef34364fdf19bd210afd0c89432"
integrity sha512-4Nxc1zEiHEu+GTdEMEsHnRgfaBkg8f/Td3+FcQ8NTSvs+xL3LBrQy6N07idWSQZHIdGFf+tTHvRfSIWLD8u8Tg== integrity sha512-uJx9y/1NIqoYTp6ZW1osJ7U5ZrXGAJbOQ/Qzl05BdGYvN1S7Qmbzid6xOirgK0EIT0pJKEEh1s8qbassYZe4cw==
dependencies: dependencies:
"@babel/core" "^7.14.0" "@babel/core" "^7.14.0"
"@babel/plugin-proposal-async-generator-functions" "^7.0.0" "@babel/plugin-proposal-async-generator-functions" "^7.0.0"
@ -17156,9 +17259,10 @@ react-native-gradle-plugin@^0.0.6:
resolved "https://registry.yarnpkg.com/react-native-gradle-plugin/-/react-native-gradle-plugin-0.0.6.tgz#b61a9234ad2f61430937911003cddd7e15c72b45" resolved "https://registry.yarnpkg.com/react-native-gradle-plugin/-/react-native-gradle-plugin-0.0.6.tgz#b61a9234ad2f61430937911003cddd7e15c72b45"
integrity sha512-eIlgtsmDp1jLC24dRn43hB3kEcZVqx6DUQbR0N1ABXGnMEafm9I3V3dUUeD1vh+Dy5WqijSoEwLNUPLgu5zDMg== integrity sha512-eIlgtsmDp1jLC24dRn43hB3kEcZVqx6DUQbR0N1ABXGnMEafm9I3V3dUUeD1vh+Dy5WqijSoEwLNUPLgu5zDMg==
react-native-image-crop-picker@RocketChat/react-native-image-crop-picker: react-native-image-crop-picker@^0.38.0:
version "0.36.3" version "0.38.0"
resolved "https://codeload.github.com/RocketChat/react-native-image-crop-picker/tar.gz/f347776247afb5cbd1400dde215689d7ca8fd6f2" resolved "https://registry.yarnpkg.com/react-native-image-crop-picker/-/react-native-image-crop-picker-0.38.0.tgz#3f67a0ec40618e3cd6e05d3e7b90e70d01eaddf8"
integrity sha512-FaLASXOP7R23pi20vMiVlXl0Y7cwTdl7y7yBqrlrsSH9gl9ibsU5y4mYWPYRbe8x9F/3zPGUE+1F0Gj/QF/peg==
react-native-image-progress@^1.1.1: react-native-image-progress@^1.1.1:
version "1.1.1" version "1.1.1"
@ -20358,6 +20462,11 @@ utils-merge@1.0.1:
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
uuid@7.0.2:
version "7.0.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.2.tgz#7ff5c203467e91f5e0d85cfcbaaf7d2ebbca9be6"
integrity sha512-vy9V/+pKG+5ZTYKf+VcphF5Oc6EFiu3W8Nv3P3zIh0EqVI80ZxOzuPfe9EHjkFNvf8+xuTHVeei4Drydlx4zjw==
uuid@^3.0.1, uuid@^3.3.2, uuid@^3.4.0: uuid@^3.0.1, uuid@^3.3.2, uuid@^3.4.0:
version "3.4.0" version "3.4.0"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"