Compare commits
32 Commits
develop
...
expo-image
Author | SHA1 | Date |
---|---|---|
GleidsonDaniel | a6df0c4357 | |
GleidsonDaniel | 69562c4eae | |
Gleidson Daniel Silva | 201b893d26 | |
GleidsonDaniel | 62290848b9 | |
Gleidson Daniel Silva | f7781246fd | |
Gleidson Daniel | b6e668ebe0 | |
Diego Mello | 4700253815 | |
Gleidson Daniel | 952135f7e0 | |
Gleidson Daniel | 22bcf3cb66 | |
Gleidson Daniel | a0887c6d9d | |
Gleidson Daniel | 45183121c7 | |
Gleidson Daniel | 58a6e2286a | |
Gleidson Daniel | 3bcbbffa8e | |
Gleidson Daniel | 3e769f8220 | |
Gleidson Daniel | f537920626 | |
Gleidson Daniel | 553237caaf | |
Gleidson Daniel | a01559a10d | |
Gleidson Daniel | b7a68d61ff | |
Gleidson Daniel | ff2ff5ccd8 | |
Gleidson Daniel | f878986edb | |
Gleidson Daniel | 909c8c8b7d | |
Gleidson Daniel | 9d39524fe7 | |
Gleidson Daniel | 03b0487680 | |
Gleidson Daniel | 3943518d6e | |
Gleidson Daniel | 1aecff2d69 | |
Gleidson Daniel | 878ed8b2fc | |
Gleidson Daniel Silva | cc2b78b4fd | |
Gleidson Daniel | 8b80deb8b5 | |
Gleidson Daniel | ab4f4aada9 | |
Gleidson Daniel | 7ab2727946 | |
Gleidson Daniel | 70e6ae40cf | |
Gleidson Daniel | 75ae38edfa |
|
@ -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');
|
||||
});
|
||||
});
|
||||
});
|
|
@ -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;
|
||||
};
|
|
@ -2,7 +2,6 @@ import React, { Component } from 'react';
|
|||
import { Alert, Keyboard, NativeModules, Text, View, BackHandler } from 'react-native';
|
||||
import { connect } from 'react-redux';
|
||||
import { KeyboardAccessoryView } from 'react-native-ui-lib/keyboard';
|
||||
import ImagePicker, { Image, ImageOrVideo, Options } from 'react-native-image-crop-picker';
|
||||
import { dequal } from 'dequal';
|
||||
import DocumentPicker from 'react-native-document-picker';
|
||||
import { Q } from '@nozbe/watermelondb';
|
||||
|
@ -41,7 +40,6 @@ import Navigation from '../../lib/navigation/appNavigation';
|
|||
import { TActionSheetOptionsItem, withActionSheet } from '../ActionSheet';
|
||||
import { sanitizeLikeString } from '../../lib/database/utils';
|
||||
import { CustomIcon } from '../CustomIcon';
|
||||
import { forceJpgExtension } from './forceJpgExtension';
|
||||
import {
|
||||
IApplicationState,
|
||||
IBaseScreen,
|
||||
|
@ -59,30 +57,13 @@ import { hasPermission, debounce, isAndroid, isIOS, isTablet, compareServerVersi
|
|||
import { Services } from '../../lib/services';
|
||||
import { TSupportedThemes } from '../../theme';
|
||||
import { ChatsStackParamList } from '../../stacks/types';
|
||||
import { pickMultipleImageAndVideoFromLibrary, pickImageFromCamera, pickVideoFromCamera } from '../../lib/methods/mediaPicker';
|
||||
import { EventTypes } from '../EmojiPicker/interfaces';
|
||||
import EmojiSearchbar from './EmojiSearchbar';
|
||||
import shortnameToUnicode from '../../lib/methods/helpers/shortnameToUnicode';
|
||||
|
||||
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> {
|
||||
rid: string;
|
||||
baseUrl: string;
|
||||
|
@ -142,12 +123,6 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
|
|||
|
||||
private focused: boolean;
|
||||
|
||||
private imagePickerConfig: Options;
|
||||
|
||||
private libraryPickerConfig: Options;
|
||||
|
||||
private videoPickerConfig: Options;
|
||||
|
||||
private room!: TSubscriptionModel;
|
||||
|
||||
private thread!: TThreadModel;
|
||||
|
@ -193,29 +168,6 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
|
|||
this.text = '';
|
||||
this.selection = { start: 0, end: 0 };
|
||||
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() {
|
||||
|
@ -789,9 +741,8 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
|
|||
takePhoto = async () => {
|
||||
logEvent(events.ROOM_BOX_ACTION_PHOTO);
|
||||
try {
|
||||
let image = (await ImagePicker.openCamera(this.imagePickerConfig)) as Image;
|
||||
image = forceJpgExtension(image);
|
||||
if (this.canUploadFile(image)) {
|
||||
const image = await pickImageFromCamera();
|
||||
if (image && this.canUploadFile(image)) {
|
||||
this.openShareView([image]);
|
||||
}
|
||||
} catch (e) {
|
||||
|
@ -802,8 +753,8 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
|
|||
takeVideo = async () => {
|
||||
logEvent(events.ROOM_BOX_ACTION_VIDEO);
|
||||
try {
|
||||
const video = await ImagePicker.openCamera(this.videoPickerConfig);
|
||||
if (this.canUploadFile(video)) {
|
||||
const video = await pickVideoFromCamera();
|
||||
if (video && this.canUploadFile(video)) {
|
||||
this.openShareView([video]);
|
||||
}
|
||||
} catch (e) {
|
||||
|
@ -814,10 +765,10 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
|
|||
chooseFromLibrary = async () => {
|
||||
logEvent(events.ROOM_BOX_ACTION_LIBRARY);
|
||||
try {
|
||||
// The type can be video or photo, however the lib understands that it is just one of them.
|
||||
let attachments = (await ImagePicker.openPicker(this.libraryPickerConfig)) as unknown as ImageOrVideo[];
|
||||
attachments = attachments.map(att => forceJpgExtension(att));
|
||||
this.openShareView(attachments);
|
||||
const attachments = await pickMultipleImageAndVideoFromLibrary();
|
||||
if (attachments) {
|
||||
this.openShareView(attachments);
|
||||
}
|
||||
} catch (e) {
|
||||
logEvent(events.ROOM_BOX_ACTION_LIBRARY_F);
|
||||
}
|
||||
|
@ -864,7 +815,7 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
|
|||
value = message;
|
||||
replyCancel();
|
||||
}
|
||||
Navigation.navigate('ShareView', { room: this.room, thread: value, attachments });
|
||||
Navigation.navigate('ShareView', { room: this.room, thread: value, attachments, canEdit: true });
|
||||
};
|
||||
|
||||
createDiscussion = () => {
|
||||
|
|
|
@ -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);
|
|
@ -272,6 +272,7 @@ export type InsideStackParamList = {
|
|||
text: string;
|
||||
room: TSubscriptionModel;
|
||||
thread: TThreadModel;
|
||||
canEdit: boolean;
|
||||
};
|
||||
ModalBlockView: {
|
||||
data: any; // TODO: Change;
|
||||
|
|
|
@ -2,7 +2,6 @@ import React from 'react';
|
|||
import { Keyboard, ScrollView, TextInput, View } from 'react-native';
|
||||
import { connect } from 'react-redux';
|
||||
import { sha256 } from 'js-sha256';
|
||||
import ImagePicker, { Image } from 'react-native-image-crop-picker';
|
||||
import RNPickerSelect from 'react-native-picker-select';
|
||||
import { dequal } from 'dequal';
|
||||
import omit from 'lodash/omit';
|
||||
|
@ -45,6 +44,7 @@ import { TwoFactorMethods } from '../../definitions/ITotp';
|
|||
import { withActionSheet, IActionSheetProvider } from '../../containers/ActionSheet';
|
||||
import { DeleteAccountActionSheetContent } from './components/DeleteAccountActionSheetContent';
|
||||
import ActionSheetContentWithInputAndSubmit from '../../containers/ActionSheet/ActionSheetContentWithInputAndSubmit';
|
||||
import { pickImageFromLibrary } from '../../lib/methods/mediaPicker';
|
||||
|
||||
interface IProfileViewProps extends IActionSheetProvider, IBaseScreen<ProfileStackParamList, 'ProfileView'> {
|
||||
user: IUser;
|
||||
|
@ -345,19 +345,12 @@ class ProfileView extends React.Component<IProfileViewProps, IProfileViewState>
|
|||
return;
|
||||
}
|
||||
|
||||
const options = {
|
||||
cropping: true,
|
||||
compressImageQuality: 0.8,
|
||||
freeStyleCropEnabled: true,
|
||||
cropperAvoidEmptySpaceAroundImage: false,
|
||||
cropperChooseText: I18n.t('Choose'),
|
||||
cropperCancelText: I18n.t('Cancel'),
|
||||
includeBase64: true
|
||||
};
|
||||
try {
|
||||
logEvent(events.PROFILE_PICK_AVATAR);
|
||||
const response: Image = await ImagePicker.openPicker(options);
|
||||
this.setAvatar({ url: response.path, data: `data:image/jpeg;base64,${response.data}`, service: 'upload' });
|
||||
const response = await pickImageFromLibrary({ animatedGif: false });
|
||||
if (response) {
|
||||
this.setAvatar({ url: response.path, data: `data:image/jpeg;base64,${response.base64}`, service: 'upload' });
|
||||
}
|
||||
} catch (error) {
|
||||
logEvent(events.PROFILE_PICK_AVATAR_F);
|
||||
console.warn(error);
|
||||
|
|
|
@ -4,7 +4,6 @@ import { BlockContext } from '@rocket.chat/ui-kit';
|
|||
import { dequal } from 'dequal';
|
||||
import isEmpty from 'lodash/isEmpty';
|
||||
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 { Subscription } from 'rxjs';
|
||||
|
||||
|
@ -51,6 +50,7 @@ import {
|
|||
random
|
||||
} from '../../lib/methods/helpers';
|
||||
import { Services } from '../../lib/services';
|
||||
import { pickImageFromLibrary } from '../../lib/methods/mediaPicker';
|
||||
|
||||
interface IRoomInfoEditViewState {
|
||||
room: ISubscription;
|
||||
|
@ -488,18 +488,11 @@ class RoomInfoEditView extends React.Component<IRoomInfoEditViewProps, IRoomInfo
|
|||
};
|
||||
|
||||
changeAvatar = async () => {
|
||||
const options = {
|
||||
cropping: true,
|
||||
compressImageQuality: 0.8,
|
||||
cropperAvoidEmptySpaceAroundImage: false,
|
||||
cropperChooseText: I18n.t('Choose'),
|
||||
cropperCancelText: I18n.t('Cancel'),
|
||||
includeBase64: true
|
||||
};
|
||||
|
||||
try {
|
||||
const response: Image = await ImagePicker.openPicker(options);
|
||||
this.setState({ avatar: { url: response.path, data: `data:image/jpeg;base64,${response.data}`, service: 'upload' } });
|
||||
const response = await pickImageFromLibrary({ animatedGif: false });
|
||||
if (response) {
|
||||
this.setState({ avatar: { url: response.path, data: `data:image/jpeg;base64,${response.base64}`, service: 'upload' } });
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
|
|
|
@ -136,27 +136,29 @@ const Thumb = ({ item, theme, isShareExtension, onPress, onRemove }: IThumb) =>
|
|||
</ThumbButton>
|
||||
);
|
||||
|
||||
const Thumbs = React.memo(({ attachments, theme, isShareExtension, onPress, onRemove }: IThumbs) => {
|
||||
const Thumbs = ({ attachments, theme, isShareExtension, onPress, onRemove }: IThumbs) => {
|
||||
if (attachments?.length > 1) {
|
||||
return (
|
||||
<FlatList
|
||||
horizontal
|
||||
data={attachments}
|
||||
keyExtractor={item => item.path}
|
||||
renderItem={({ item }) => (
|
||||
<Thumb
|
||||
item={item}
|
||||
theme={theme}
|
||||
isShareExtension={isShareExtension}
|
||||
onPress={() => onPress(item)}
|
||||
onRemove={() => onRemove(item)}
|
||||
/>
|
||||
)}
|
||||
style={[styles.list, { backgroundColor: themes[theme].messageboxBackground }]}
|
||||
/>
|
||||
<View style={{ height: THUMB_SIZE }}>
|
||||
<FlatList
|
||||
horizontal
|
||||
data={attachments}
|
||||
keyExtractor={item => item.path}
|
||||
renderItem={({ item }) => (
|
||||
<Thumb
|
||||
item={item}
|
||||
theme={theme}
|
||||
isShareExtension={isShareExtension}
|
||||
onPress={() => onPress(item)}
|
||||
onRemove={() => onRemove(item)}
|
||||
/>
|
||||
)}
|
||||
style={[styles.list, { backgroundColor: themes[theme].messageboxBackground }]}
|
||||
/>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
};
|
||||
|
||||
export default Thumbs;
|
||||
|
|
|
@ -5,6 +5,7 @@ import { NativeModules, Text, View } from 'react-native';
|
|||
import { connect } from 'react-redux';
|
||||
import ShareExtension from 'rn-extensions-share';
|
||||
import { Q } from '@nozbe/watermelondb';
|
||||
import ImagePicker, { Image } from 'react-native-image-crop-picker';
|
||||
|
||||
import { InsideStackParamList } from '../../stacks/types';
|
||||
import { themes } from '../../lib/constants';
|
||||
|
@ -62,6 +63,7 @@ class ShareView extends Component<IShareViewProps, IShareViewState> {
|
|||
private files: any[];
|
||||
private isShareExtension: boolean;
|
||||
private serverInfo: IServer;
|
||||
private canEdit: boolean;
|
||||
|
||||
constructor(props: IShareViewProps) {
|
||||
super(props);
|
||||
|
@ -69,6 +71,7 @@ class ShareView extends Component<IShareViewProps, IShareViewState> {
|
|||
this.files = props.route.params?.attachments ?? [];
|
||||
this.isShareExtension = props.route.params?.isShareExtension;
|
||||
this.serverInfo = props.route.params?.serverInfo ?? {};
|
||||
this.canEdit = props.route.params?.canEdit;
|
||||
|
||||
this.state = {
|
||||
selected: {} as IShareAttachment,
|
||||
|
@ -94,6 +97,45 @@ class ShareView extends Component<IShareViewProps, IShareViewState> {
|
|||
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 = () => {
|
||||
const { room, thread, readOnly, attachments } = this.state;
|
||||
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} />;
|
||||
}
|
||||
|
||||
if (!attachments.length && !readOnly) {
|
||||
if (this.canEdit && this.state.selected.mime === 'image/jpeg') {
|
||||
options.headerRight = this.headerRight;
|
||||
} else if (!attachments.length && !readOnly) {
|
||||
options.headerRight = () => (
|
||||
<HeaderButton.Container>
|
||||
<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) => {
|
||||
const { attachments, selected } = this.state;
|
||||
const { navigation } = this.props;
|
||||
|
||||
if (attachments.length > 0) {
|
||||
const text = this.messagebox.current?.text;
|
||||
const newAttachments = attachments.map(att => {
|
||||
|
@ -264,7 +310,14 @@ class ShareView extends Component<IShareViewProps, IShareViewState> {
|
|||
}
|
||||
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 = () => {
|
||||
const { attachments, selected, room, text } = this.state;
|
||||
const { theme, navigation } = this.props;
|
||||
|
||||
if (attachments.length) {
|
||||
return (
|
||||
<View style={styles.container}>
|
||||
|
@ -318,15 +370,14 @@ class ShareView extends Component<IShareViewProps, IShareViewState> {
|
|||
isFocused={navigation.isFocused}
|
||||
iOSScrollBehavior={NativeModules.KeyboardTrackingViewManager?.KeyboardTrackingScrollBehaviorNone}
|
||||
isActionsEnabled={false}
|
||||
>
|
||||
<Thumbs
|
||||
attachments={attachments}
|
||||
theme={theme}
|
||||
isShareExtension={this.isShareExtension}
|
||||
onPress={this.selectFile}
|
||||
onRemove={this.removeFile}
|
||||
/>
|
||||
</MessageBox>
|
||||
/>
|
||||
<Thumbs
|
||||
attachments={attachments}
|
||||
theme={theme}
|
||||
isShareExtension={this.isShareExtension}
|
||||
onPress={this.selectFile}
|
||||
onRemove={this.removeFile}
|
||||
/>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
|
13
ios/Podfile
13
ios/Podfile
|
@ -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 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
|
||||
|
||||
def all_pods
|
||||
|
@ -60,4 +60,15 @@ post_install do |installer|
|
|||
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
|
||||
|
|
|
@ -11,20 +11,25 @@ PODS:
|
|||
- ExpoModulesCore
|
||||
- React-runtimeexecutor
|
||||
- ReactCommon
|
||||
- EXFileSystem (14.0.0):
|
||||
- EXFileSystem (14.1.0):
|
||||
- ExpoModulesCore
|
||||
- EXImageLoader (4.0.0):
|
||||
- ExpoModulesCore
|
||||
- React-Core
|
||||
- EXLocalAuthentication (12.2.0):
|
||||
- ExpoModulesCore
|
||||
- Expo (46.0.9):
|
||||
- Expo (47.0.8):
|
||||
- ExpoModulesCore
|
||||
- ExpoHaptics (11.2.0):
|
||||
- ExpoHaptics (12.0.1):
|
||||
- ExpoModulesCore
|
||||
- ExpoKeepAwake (10.1.1):
|
||||
- ExpoImagePicker (14.0.2):
|
||||
- ExpoModulesCore
|
||||
- ExpoModulesCore (0.11.4):
|
||||
- ExpoKeepAwake (11.0.1):
|
||||
- ExpoModulesCore
|
||||
- ExpoModulesCore (1.0.3):
|
||||
- React-Core
|
||||
- ReactCommon/turbomodule/core
|
||||
- ExpoWebBrowser (10.2.1):
|
||||
- ExpoWebBrowser (12.0.0):
|
||||
- ExpoModulesCore
|
||||
- EXVideoThumbnails (6.3.0):
|
||||
- ExpoModulesCore
|
||||
|
@ -524,12 +529,12 @@ PODS:
|
|||
- React-Core
|
||||
- RNGestureHandler (2.4.2):
|
||||
- React-Core
|
||||
- RNImageCropPicker (0.36.3):
|
||||
- RNImageCropPicker (0.38.0):
|
||||
- React-Core
|
||||
- React-RCTImage
|
||||
- RNImageCropPicker/QBImagePickerController (= 0.36.3)
|
||||
- RNImageCropPicker/QBImagePickerController (= 0.38.0)
|
||||
- TOCropViewController
|
||||
- RNImageCropPicker/QBImagePickerController (0.36.3):
|
||||
- RNImageCropPicker/QBImagePickerController (0.38.0):
|
||||
- React-Core
|
||||
- React-RCTImage
|
||||
- TOCropViewController
|
||||
|
@ -594,11 +599,13 @@ DEPENDENCIES:
|
|||
- EXAppleAuthentication (from `../node_modules/expo-apple-authentication/ios`)
|
||||
- EXAV (from `../node_modules/expo-av/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`)
|
||||
- Expo (from `../node_modules/expo`)
|
||||
- ExpoHaptics (from `../node_modules/expo-haptics/ios`)
|
||||
- ExpoImagePicker (from `../node_modules/expo-image-picker/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`)
|
||||
- EXVideoThumbnails (from `../node_modules/expo-video-thumbnails/ios`)
|
||||
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
|
||||
|
@ -721,16 +728,20 @@ EXTERNAL SOURCES:
|
|||
:path: "../node_modules/expo-av/ios"
|
||||
EXFileSystem:
|
||||
:path: "../node_modules/expo-file-system/ios"
|
||||
EXImageLoader:
|
||||
:path: "../node_modules/expo-image-loader/ios"
|
||||
EXLocalAuthentication:
|
||||
:path: "../node_modules/expo-local-authentication/ios"
|
||||
Expo:
|
||||
:path: "../node_modules/expo"
|
||||
ExpoHaptics:
|
||||
:path: "../node_modules/expo-haptics/ios"
|
||||
ExpoImagePicker:
|
||||
:path: "../node_modules/expo-image-picker/ios"
|
||||
ExpoKeepAwake:
|
||||
:path: "../node_modules/expo-keep-awake/ios"
|
||||
ExpoModulesCore:
|
||||
:path: "../node_modules/expo-modules-core/ios"
|
||||
:path: "../node_modules/expo-modules-core"
|
||||
ExpoWebBrowser:
|
||||
:path: "../node_modules/expo-web-browser/ios"
|
||||
EXVideoThumbnails:
|
||||
|
@ -898,13 +909,15 @@ SPEC CHECKSUMS:
|
|||
DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662
|
||||
EXAppleAuthentication: 709a807fe7f48ac6986a2ceed206ee6a8baf28df
|
||||
EXAV: 88f61c5af8415715b7ee51f084c1020235b85c56
|
||||
EXFileSystem: 2aa2d9289f84bca9532b9ccbd81504fa31eb1ded
|
||||
EXFileSystem: 927e0a8885aa9c49e50fc38eaba2c2389f2f1019
|
||||
EXImageLoader: 84b65e6bd9d3345d6fbb3ab936a546c54496a64d
|
||||
EXLocalAuthentication: 7f37b242eae73f9acf111d39bdee3f1379e68902
|
||||
Expo: 73412414e62f5cbc6e713def821de70b92cd3ad6
|
||||
ExpoHaptics: ad58ec96a25e57579c14a47c7d71f0de0de8656a
|
||||
ExpoKeepAwake: c0c494b442ecd8122974c13b93ccfb57bd408e88
|
||||
ExpoModulesCore: e281bb7b78ea47e227dd5af94d04b24d8b2e1255
|
||||
ExpoWebBrowser: 4b5f9633e5f169dc948587cb6d26d2d1d1406187
|
||||
Expo: 36b5f625d36728adbdd1934d4d57182f319ab832
|
||||
ExpoHaptics: 5a56d30a87ea213dd00b09566dc4b441a4dff97f
|
||||
ExpoImagePicker: d2a1cea4023008ae2fb0d95f33422b80772cc76e
|
||||
ExpoKeepAwake: 69b59d0a8d2b24de9f82759c39b3821fec030318
|
||||
ExpoModulesCore: b5d21c8880afda6fb6ee95469f9ac2ec9b98e995
|
||||
ExpoWebBrowser: 073e50f16669d498fb49063b9b7fe780b24f7fda
|
||||
EXVideoThumbnails: 19e055dc3245b53c536da9e0ef9c618fd2118297
|
||||
FBLazyVector: a7a655862f6b09625d11c772296b01cd5164b648
|
||||
FBReactNativeSpec: 66b5770d86bfee27d67b850416dbc7123c4f6311
|
||||
|
@ -989,7 +1002,7 @@ SPEC CHECKSUMS:
|
|||
RNFBCrashlytics: 357955a1564721ca9001960e57b395c6a319f9be
|
||||
RNFileViewer: ce7ca3ac370e18554d35d6355cffd7c30437c592
|
||||
RNGestureHandler: 61628a2c859172551aa2100d3e73d1e57878392f
|
||||
RNImageCropPicker: 97289cd94fb01ab79db4e5c92938be4d0d63415d
|
||||
RNImageCropPicker: ffbba608264885c241cbf3a8f78eb7aeeb978241
|
||||
RNLocalize: 82a569022724d35461e2dc5b5d015a13c3ca995b
|
||||
RNMathView: 4c8a3c081fa671ab3136c51fa0bdca7ffb708bd5
|
||||
RNReanimated: 64573e25e078ae6bec03b891586d50b9ec284393
|
||||
|
@ -1004,6 +1017,6 @@ SPEC CHECKSUMS:
|
|||
WatermelonDB: 577c61fceff16e9f9103b59d14aee4850c0307b6
|
||||
Yoga: 99652481fcd320aefa4a7ef90095b95acd181952
|
||||
|
||||
PODFILE CHECKSUM: 052cbf741847405abc3b902c9e107c1ebb48b252
|
||||
PODFILE CHECKSUM: 8d2226713e77a455feba9d2ee3b2222cb6193697
|
||||
|
||||
COCOAPODS: 1.11.3
|
||||
|
|
13
package.json
13
package.json
|
@ -61,15 +61,16 @@
|
|||
"commonmark-react-renderer": "git+https://github.com/RocketChat/commonmark-react-renderer.git",
|
||||
"dequal": "^2.0.3",
|
||||
"ejson": "^2.2.3",
|
||||
"expo": "^46.0.9",
|
||||
"expo": "^47.0.8",
|
||||
"expo-apple-authentication": "4.2.1",
|
||||
"expo-av": "11.2.3",
|
||||
"expo-file-system": "14.0.0",
|
||||
"expo-haptics": "11.2.0",
|
||||
"expo-keep-awake": "10.1.1",
|
||||
"expo-file-system": "^14.1.0",
|
||||
"expo-haptics": "12.0.1",
|
||||
"expo-image-picker": "^14.0.2",
|
||||
"expo-keep-awake": "11.0.1",
|
||||
"expo-local-authentication": "12.2.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",
|
||||
"i18n-js": "3.9.2",
|
||||
"js-base64": "3.6.1",
|
||||
|
@ -94,7 +95,7 @@
|
|||
"react-native-fast-image": "RocketChat/react-native-fast-image.git#bump-version",
|
||||
"react-native-file-viewer": "^2.1.4",
|
||||
"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-jitsi-meet": "RocketChat/react-native-jitsi-meet",
|
||||
"react-native-keycommands": "2.0.3",
|
||||
|
|
|
@ -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
349
yarn.lock
|
@ -66,6 +66,11 @@
|
|||
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d"
|
||||
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":
|
||||
version "7.12.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8"
|
||||
|
@ -405,6 +410,16 @@
|
|||
browserslist "^4.20.2"
|
||||
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":
|
||||
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"
|
||||
|
@ -894,6 +909,11 @@
|
|||
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f"
|
||||
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":
|
||||
version "7.8.3"
|
||||
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-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":
|
||||
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"
|
||||
|
@ -2426,6 +2457,13 @@
|
|||
dependencies:
|
||||
"@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":
|
||||
version "7.18.6"
|
||||
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"
|
||||
safe-json-stringify "~1"
|
||||
|
||||
"@expo/cli@0.2.11":
|
||||
version "0.2.11"
|
||||
resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.2.11.tgz#25d8db8e46c6f02ef3edc189fdb6e29c922dd377"
|
||||
integrity sha512-TIlylp3nghiEdlVliZRcBg8Yb++tnU92HinuQQZznVGFXFCoqJ210SPUJS1j3rxxltt8NhIJjL9OTO7PYRqnsQ==
|
||||
"@expo/cli@0.4.10":
|
||||
version "0.4.10"
|
||||
resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.4.10.tgz#e965b97888c83cecdaddbb8dca3d5827643a0f36"
|
||||
integrity sha512-c8NJOVa5b8g9CYj8ahdaN21cVE2wPwUaFrtTE0kLeRR5ASy8reWLFEOcstEtt6eufdcN/uGgBWQ0FLovgLZuzw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.14.0"
|
||||
"@expo/code-signing-certificates" "^0.0.2"
|
||||
"@expo/config" "~7.0.1"
|
||||
"@expo/config-plugins" "~5.0.1"
|
||||
"@expo/dev-server" "~0.1.119"
|
||||
"@expo/code-signing-certificates" "0.0.5"
|
||||
"@expo/config" "~7.0.2"
|
||||
"@expo/config-plugins" "~5.0.3"
|
||||
"@expo/dev-server" "0.1.123"
|
||||
"@expo/devcert" "^1.0.0"
|
||||
"@expo/json-file" "^8.2.35"
|
||||
"@expo/metro-config" "~0.3.18"
|
||||
"@expo/metro-config" "~0.5.0"
|
||||
"@expo/osascript" "^2.0.31"
|
||||
"@expo/package-manager" "~0.0.53"
|
||||
"@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/spawn-async" "1.5.0"
|
||||
"@expo/xcpretty" "^4.2.1"
|
||||
|
@ -3616,6 +3654,7 @@
|
|||
getenv "^1.0.0"
|
||||
graphql "15.8.0"
|
||||
graphql-tag "^2.10.1"
|
||||
https-proxy-agent "^5.0.1"
|
||||
internal-ip "4.3.0"
|
||||
is-root "^2.1.0"
|
||||
js-yaml "^3.13.1"
|
||||
|
@ -3645,14 +3684,35 @@
|
|||
uuid "^3.4.0"
|
||||
wrap-ansi "^7.0.0"
|
||||
|
||||
"@expo/code-signing-certificates@^0.0.2":
|
||||
version "0.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@expo/code-signing-certificates/-/code-signing-certificates-0.0.2.tgz#65cd615800e6724b54831c966dd1a90145017246"
|
||||
integrity sha512-vnPHFjwOqxQ1VLztktY+fYCfwvLzjqpzKn09rchcQE7Sdf0wtW5fFtIZBEFOOY5wasp8tXSnp627zrAwazPHzg==
|
||||
"@expo/code-signing-certificates@0.0.5":
|
||||
version "0.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz#a693ff684fb20c4725dade4b88a6a9f96b02496c"
|
||||
integrity sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==
|
||||
dependencies:
|
||||
node-forge "^1.2.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":
|
||||
version "4.1.5"
|
||||
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"
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/@expo/config/-/config-7.0.1.tgz#d8e2e5410bb0b8e305690bbc76e6bb76f6a6de31"
|
||||
integrity sha512-4lu0wr45XXJ2MXiLAm2+fmOyy/jjqF3NuDm92fO6nuulRzEEvTP4w3vsibJ690rT81ohtvhpruKhkRs0wSjKWA==
|
||||
|
@ -3722,18 +3804,21 @@
|
|||
slugify "^1.3.4"
|
||||
sucrase "^3.20.0"
|
||||
|
||||
"@expo/dev-server@~0.1.119":
|
||||
version "0.1.119"
|
||||
resolved "https://registry.yarnpkg.com/@expo/dev-server/-/dev-server-0.1.119.tgz#d85036d8ddfd5668fd50ef373616b55580dc7670"
|
||||
integrity sha512-DcVnj4/YA+b+Ljsz2qffHHN5LbouXFKeE9ER0Yjq5vIb2moV1q3U6LezndFLCf42Uev7C2vSa8YCcP3WOpxuMw==
|
||||
"@expo/dev-server@0.1.123":
|
||||
version "0.1.123"
|
||||
resolved "https://registry.yarnpkg.com/@expo/dev-server/-/dev-server-0.1.123.tgz#71304323b47db9ce300b9a774571ef2312b9d581"
|
||||
integrity sha512-N6UVzzeemfX0AONUSWInvkAAbqon8hRXpyYE/nMPaC6TvAmgGY5ILZAGoXwlpxwY2VKNT0Lx4s/UJ53ytIaHbA==
|
||||
dependencies:
|
||||
"@expo/bunyan" "4.0.0"
|
||||
"@expo/metro-config" "~0.3.18"
|
||||
"@expo/metro-config" "~0.5.1"
|
||||
"@expo/osascript" "2.0.33"
|
||||
"@expo/spawn-async" "^1.5.0"
|
||||
body-parser "1.19.0"
|
||||
chalk "^4.0.0"
|
||||
connect "^3.7.0"
|
||||
fs-extra "9.0.0"
|
||||
is-docker "^2.0.0"
|
||||
is-wsl "^2.1.1"
|
||||
node-fetch "^2.6.0"
|
||||
open "^8.3.0"
|
||||
resolve-from "^5.0.0"
|
||||
|
@ -3760,10 +3845,10 @@
|
|||
tmp "^0.0.33"
|
||||
tslib "^1.10.0"
|
||||
|
||||
"@expo/image-utils@0.3.20":
|
||||
version "0.3.20"
|
||||
resolved "https://registry.yarnpkg.com/@expo/image-utils/-/image-utils-0.3.20.tgz#b8777a2ca18e331f084e62ee8e0f047a6fc52c16"
|
||||
integrity sha512-NgF/80XENyCS+amwC0P6uk1fauEtUq7gijD19jvl2xknJaADq8M2dMCRHwWMVOXosr2v46f3Z++G/NjmyOVS7A==
|
||||
"@expo/image-utils@0.3.22":
|
||||
version "0.3.22"
|
||||
resolved "https://registry.yarnpkg.com/@expo/image-utils/-/image-utils-0.3.22.tgz#3a45fb2e268d20fcc761c87bca3aca7fd8e24260"
|
||||
integrity sha512-uzq+RERAtkWypOFOLssFnXXqEqKjNj9eXN7e97d/EXUAojNcLDoXc0sL+F5B1I4qtlsnhX01kcpoIBBZD8wZNQ==
|
||||
dependencies:
|
||||
"@expo/spawn-async" "1.5.0"
|
||||
chalk "^4.0.0"
|
||||
|
@ -3786,12 +3871,12 @@
|
|||
json5 "^1.0.1"
|
||||
write-file-atomic "^2.3.0"
|
||||
|
||||
"@expo/metro-config@~0.3.18":
|
||||
version "0.3.22"
|
||||
resolved "https://registry.yarnpkg.com/@expo/metro-config/-/metro-config-0.3.22.tgz#fa4a0729ec8ecbc9c9fb79c63ecc66a299505c82"
|
||||
integrity sha512-R81sLbaeUBjN8IXcxiVx7GcpSj8z7szILl1b5yJDb38WdIFwxhrseA5wXaTT1yMhI+59w6n99T2qtFV2yD5qYA==
|
||||
"@expo/metro-config@~0.5.0", "@expo/metro-config@~0.5.1":
|
||||
version "0.5.1"
|
||||
resolved "https://registry.yarnpkg.com/@expo/metro-config/-/metro-config-0.5.1.tgz#58c715041e1773ad653519535c017138bfc766de"
|
||||
integrity sha512-Rvy4ZFgKNDfXO401z2OQF8fWbPj1lLVDL4GF1aqCIhCDHCKrezbwB0xejpcUyndJRCxBL2BMAM+P24t6cKv9Fw==
|
||||
dependencies:
|
||||
"@expo/config" "7.0.1"
|
||||
"@expo/config" "~7.0.2"
|
||||
"@expo/json-file" "8.2.36"
|
||||
chalk "^4.1.0"
|
||||
debug "^4.3.2"
|
||||
|
@ -3833,15 +3918,15 @@
|
|||
base64-js "^1.2.3"
|
||||
xmlbuilder "^14.0.0"
|
||||
|
||||
"@expo/prebuild-config@~5.0.3":
|
||||
version "5.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-5.0.3.tgz#f475797a592f074b5a66f02aef27c6c14c54591e"
|
||||
integrity sha512-G4j1H3WFjRaiQ+FgFNULrnIm7RsQyjc4xp6lLTP2ydBv79wO3x8wAdeZvaZh7eOkfu9BESpQzACT1uuJTag5jg==
|
||||
"@expo/prebuild-config@5.0.7":
|
||||
version "5.0.7"
|
||||
resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-5.0.7.tgz#4658b66126c4d32c7b6302571e458a71811b07aa"
|
||||
integrity sha512-D+TBpJUHe4+oTGFPb4o0rrw/h1xxc6wF+abJnbDHUkhnaeiHkE2O3ByS7FdiZ2FT36t0OKqeSKG/xFwWT3m1Ew==
|
||||
dependencies:
|
||||
"@expo/config" "7.0.1"
|
||||
"@expo/config-plugins" "~5.0.1"
|
||||
"@expo/config-types" "^46.0.0"
|
||||
"@expo/image-utils" "0.3.20"
|
||||
"@expo/config" "~7.0.2"
|
||||
"@expo/config-plugins" "~5.0.3"
|
||||
"@expo/config-types" "^47.0.0"
|
||||
"@expo/image-utils" "0.3.22"
|
||||
"@expo/json-file" "8.2.36"
|
||||
debug "^4.3.1"
|
||||
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-top-level-await" "^7.8.3"
|
||||
|
||||
babel-preset-expo@~9.2.0:
|
||||
version "9.2.0"
|
||||
resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-9.2.0.tgz#d01793e3a556065f103b3095fbbc959d52f08e88"
|
||||
integrity sha512-aM2htiNx0H49H+MWCp9+cKVSdcdNSn0tbE5Dln/GO1xna4ZlnA30clbfClcYJFUcZtW90IsYeZwQ/hj8zyWhNA==
|
||||
babel-preset-expo@~9.2.2:
|
||||
version "9.2.2"
|
||||
resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-9.2.2.tgz#3f3819a224bbc32cefebb5d97a40c950a2f7ae2e"
|
||||
integrity sha512-69cSPObZWFz0AaUT6IhCu2VzPVTICUtXzhX5ecoDttFe+9wb9yMV8m7rBNZptJQ3wtiKB5iEL7/wvtKygPz/mQ==
|
||||
dependencies:
|
||||
"@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/preset-env" "^7.12.9"
|
||||
babel-plugin-module-resolver "^4.1.0"
|
||||
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:
|
||||
version "3.4.0"
|
||||
|
@ -10628,19 +10714,19 @@ expo-apple-authentication@4.2.1:
|
|||
dependencies:
|
||||
"@expo/config-plugins" "^4.0.14"
|
||||
|
||||
expo-application@~4.2.2:
|
||||
version "4.2.2"
|
||||
resolved "https://registry.yarnpkg.com/expo-application/-/expo-application-4.2.2.tgz#c9500819723c59eaee5ca9832bf17d1fd4139f74"
|
||||
integrity sha512-bFEaFRUdV6aK2iBd+HzkHNPYsyj88EAhaQW5leznmO0qQMJxpAQ3eoUXMey1hfDBh1qgkkHgSyCZ9BIgMAGJ1g==
|
||||
expo-application@~5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/expo-application/-/expo-application-5.0.1.tgz#628aeee74697d7aa39d0c0173dbf9383e06e53e9"
|
||||
integrity sha512-bThxK5zH/Lc2tkCvEXGjfM7ayvOVmPWYcWzXsMIU1RtG73TyXo4cq+73FvfDNIWn6gKS0WyMcmoPB3WXEV/jsw==
|
||||
|
||||
expo-asset@~8.6.1:
|
||||
version "8.6.1"
|
||||
resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-8.6.1.tgz#86355b3e231e8aa6cf68a456ce9746dff1478b48"
|
||||
integrity sha512-urbUp1YtwH2J0Qc3inGQJdqTjWKML77SeMNgff+iR9MUE8gDkFqSCDjrBi7i5Oj5DDtq43mmtDg8G8ei6Vchcg==
|
||||
expo-asset@~8.6.2:
|
||||
version "8.6.2"
|
||||
resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-8.6.2.tgz#607dbbed988f7fc54a6f37cd33f86a2388264b4b"
|
||||
integrity sha512-XqlXjkuUCEiojbHwbHPjQs1oboRz6w3eV96+9NBD+wb3EUqgAAYY2Do+IWyVCAl8UIFbFi3xzMiqk0Xm9+H8uQ==
|
||||
dependencies:
|
||||
blueimp-md5 "^2.10.0"
|
||||
expo-constants "~13.2.2"
|
||||
expo-file-system "~14.1.0"
|
||||
expo-constants "~14.0.0"
|
||||
expo-file-system "~15.1.0"
|
||||
invariant "^2.2.4"
|
||||
md5-file "^3.2.3"
|
||||
path-browserify "^1.0.0"
|
||||
|
@ -10653,28 +10739,20 @@ expo-av@11.2.3:
|
|||
dependencies:
|
||||
"@expo/config-plugins" "^4.0.14"
|
||||
|
||||
expo-constants@~13.2.2, expo-constants@~13.2.4:
|
||||
version "13.2.4"
|
||||
resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-13.2.4.tgz#eab4a553f074b2c60ad7a158d3b82e3484a94606"
|
||||
integrity sha512-Zobau8EuTk2GgafwkfGnWM6CmSLB7X8qnQXVuXe0nd3v92hfQUmRWGhJwH88uxXj3LrfqctM6PaJ8taG1vxfBw==
|
||||
expo-constants@~14.0.0, expo-constants@~14.0.2:
|
||||
version "14.0.2"
|
||||
resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-14.0.2.tgz#2cb1dec8f41a64c2fc5b4eecaf77d7661cad01cc"
|
||||
integrity sha512-wzV3nrzTXTI8yG0tfas3fnqCfKV6YE+1GphEREyVDAShEB6mBInX1b6HgtpHFy2wOtnml+lPVmTCeGtjjLnZhA==
|
||||
dependencies:
|
||||
"@expo/config" "~7.0.0"
|
||||
"@expo/config" "~7.0.2"
|
||||
uuid "^3.3.2"
|
||||
|
||||
expo-error-recovery@~3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/expo-error-recovery/-/expo-error-recovery-3.2.0.tgz#3a4543382904a5e70829cb41d7fc0f022c2bef6e"
|
||||
integrity sha512-XZ630ks5HNxa9oc2Ya1hEn1ez031Cy4VnyxerPC2o9fKNKSrD/64cRqGF9NkGM3X2uf8+PCB9adxVflAIXBf6w==
|
||||
expo-error-recovery@~4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/expo-error-recovery/-/expo-error-recovery-4.0.1.tgz#3e3333e134c992c234539d3773fe78915c883755"
|
||||
integrity sha512-wceptnRX+N3qCSVTNbIchUFu3GmY30onRH5L66OF8HMLpAIQfrZMLxJfz7SAMJTcr3jxsJ11vSa2l2RaPKgHsQ==
|
||||
|
||||
expo-file-system@14.0.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:
|
||||
expo-file-system@^14.1.0:
|
||||
version "14.1.0"
|
||||
resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-14.1.0.tgz#4fa410873ef12ac8bec873593f7489f4305a14b8"
|
||||
integrity sha512-lJcPGQ8yKXVknVkD5TmcJnR/TpQbEL0JP8hknLejfq3FIqPqI/LBFn31YiP37grxW8lITz1al8pq5T6CSUjAzQ==
|
||||
|
@ -10682,27 +10760,42 @@ expo-file-system@~14.1.0:
|
|||
"@expo/config-plugins" "~5.0.0"
|
||||
uuid "^3.4.0"
|
||||
|
||||
expo-font@~10.2.0:
|
||||
version "10.2.0"
|
||||
resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-10.2.0.tgz#881f767e13b2b534a4d3ffaedcf675ce6b63439d"
|
||||
integrity sha512-2V4EcpmhNoppaLn+lPprZVS+3bmV9hxLPKttKh2u8ghjH/oX9bv3u4JVo77SYh0EfrWO4toqVyXn8pXH8GpbIg==
|
||||
expo-file-system@~15.1.0, expo-file-system@~15.1.1:
|
||||
version "15.1.1"
|
||||
resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-15.1.1.tgz#724090f83ff1e6378cadc0a64b83552f769eb16b"
|
||||
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:
|
||||
fontfaceobserver "^2.1.0"
|
||||
|
||||
expo-haptics@11.2.0:
|
||||
version "11.2.0"
|
||||
resolved "https://registry.yarnpkg.com/expo-haptics/-/expo-haptics-11.2.0.tgz#0ffb9f82395e88f9f66ceebb0f3279739311412c"
|
||||
integrity sha512-ijuWU2ljLBGjIf7OQCvnBQIu/chezndnWkfi518XxvK0hudA4+fAe98mqHO6hom9GexNRxhQZbXc0hcVnxkaiA==
|
||||
expo-haptics@12.0.1:
|
||||
version "12.0.1"
|
||||
resolved "https://registry.yarnpkg.com/expo-haptics/-/expo-haptics-12.0.1.tgz#151dc57bc01c1fa16d021e4714b23916bbc9f8e5"
|
||||
integrity sha512-YubK3P3WTdjp5mFZcaF3ienqXHoDqzPpe61yTEIR5y+CVWqk+If9cC3ZYxn6lSp8KiNUmz7zC0GvUAVEqn8t6Q==
|
||||
|
||||
expo-keep-awake@10.1.1:
|
||||
version "10.1.1"
|
||||
resolved "https://registry.yarnpkg.com/expo-keep-awake/-/expo-keep-awake-10.1.1.tgz#03023c130f7e3824b738e3fdd5353b8a2c0c1980"
|
||||
integrity sha512-9zC0sdhQljUeMr2yQ7o4kzEZXVAy82fFOAZE1+TwPL7qR0b0sphe7OJ5T1GX1qLcwuVaJ8YewaPoLSHRk79+Rg==
|
||||
expo-image-loader@~4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/expo-image-loader/-/expo-image-loader-4.0.0.tgz#a17e5f95a4c1671791168dd5dfc221bf2f88480c"
|
||||
integrity sha512-hVMhXagsO1cSng5s70IEjuJAuHy2hX/inu5MM3T0ecJMf7L/7detKf22molQBRymerbk6Tzu+20h11eU0n/3jQ==
|
||||
|
||||
expo-keep-awake@~10.2.0:
|
||||
version "10.2.0"
|
||||
resolved "https://registry.yarnpkg.com/expo-keep-awake/-/expo-keep-awake-10.2.0.tgz#46f04740bccd321732bbbed93491e2076d5dbbd7"
|
||||
integrity sha512-kIRtO4Hmrvxh4E45IPWG/NiUZsuRe1AQwBT09pq+kx8nm6tUS4B9TeL6+1NFy+qVBLbGKDqoQD5Ez7XYTFtBeQ==
|
||||
expo-image-picker@^14.0.2:
|
||||
version "14.0.2"
|
||||
resolved "https://registry.yarnpkg.com/expo-image-picker/-/expo-image-picker-14.0.2.tgz#a611a43142be4c6f763ee39efd80e55f5a414ed7"
|
||||
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:
|
||||
version "12.2.0"
|
||||
|
@ -10712,10 +10805,10 @@ expo-local-authentication@12.2.0:
|
|||
"@expo/config-plugins" "^4.0.14"
|
||||
invariant "^2.2.4"
|
||||
|
||||
expo-modules-autolinking@0.10.3:
|
||||
version "0.10.3"
|
||||
resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-0.10.3.tgz#31bfcf3e4b613a7c3949fb1f1e9c23eea4c14caf"
|
||||
integrity sha512-av9ln2zwUt303g98raX7sDmESgL3SXs1sbbtIjh1rL7R0676XIUacIKgbydR0/4tMbOShWx14Z9fozpk9xIAJA==
|
||||
expo-modules-autolinking@1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-1.0.0.tgz#2daac20035e1ecf8e66d74dca9bd1b0d6c09166c"
|
||||
integrity sha512-MoRRkOVMoGUH/Lr8XS6UmBIZT/qrwbRt2IzUBALcM6MWZKtDn9Uct9XgMRxue82FJhRCfy9p1xZJVKHBRo4zEA==
|
||||
dependencies:
|
||||
chalk "^4.1.0"
|
||||
commander "^7.2.0"
|
||||
|
@ -10723,10 +10816,10 @@ expo-modules-autolinking@0.10.3:
|
|||
find-up "^5.0.0"
|
||||
fs-extra "^9.1.0"
|
||||
|
||||
expo-modules-core@0.11.4:
|
||||
version "0.11.4"
|
||||
resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-0.11.4.tgz#6b7a27bb212f3fbf7d6803f747f6491aa73a2a09"
|
||||
integrity sha512-8dEYICk7hUi1GPz5hWm8dBuZDGc+4Tm7zDhSIhKApo5jY/5vB4Bk+fjPo693iWn6pp3+XBHT8Ri8rJ3G7wH1vQ==
|
||||
expo-modules-core@1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-1.0.3.tgz#3d94da3524e7e7d81ae1e7e632a5e0e24db0f3f1"
|
||||
integrity sha512-XqyA5c+zsK+cHDNVBVYu62HLBHyGMG0iWpXVP0bBQJWz0eyg5rcuEqLsnRTmoEz0YnH6QBf/cwRl+FfgnnH5Og==
|
||||
dependencies:
|
||||
compare-versions "^3.4.0"
|
||||
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"
|
||||
integrity sha512-oVy9XlzNxnpXFDz3FiWOrMOBWmYtZrNYnXc3XaVyj8ayRqwDNvW4P95kQeUhB04uwaMDOm4vIxc5SQxDAyxPGg==
|
||||
|
||||
expo-web-browser@10.2.1:
|
||||
version "10.2.1"
|
||||
resolved "https://registry.yarnpkg.com/expo-web-browser/-/expo-web-browser-10.2.1.tgz#4bd9214f7aefcd1af6ea26ae068a0e3e25a1e0bd"
|
||||
integrity sha512-om34EL7OX5ouBM/hq2PrjHDLKmjVhAy+1H7YqRY6nS8dWsewnLFdLq4d8GPwWQBYb6kHKYVzwFRj+WLTfpAOBQ==
|
||||
expo-web-browser@12.0.0:
|
||||
version "12.0.0"
|
||||
resolved "https://registry.yarnpkg.com/expo-web-browser/-/expo-web-browser-12.0.0.tgz#c8e117bfd6357df05ae3cf85acb423b44c4f6304"
|
||||
integrity sha512-7/RUuE0sv5kf+mTw5/SOnks0Am1ctoxvT1Xi53Nom2EuXTKBV+b2Kf5xAw3ItoW5W4MHJUX3FdNI6qc9sS9+Pw==
|
||||
dependencies:
|
||||
compare-urls "^2.0.0"
|
||||
|
||||
expo@^46.0.9:
|
||||
version "46.0.9"
|
||||
resolved "https://registry.yarnpkg.com/expo/-/expo-46.0.9.tgz#4b4b943343c45c3a05c71da49c1cfd5555ab5f85"
|
||||
integrity sha512-UsBjm0BL7w+OyF6kypVPrk3jhg9cCXF0D9CaOWQ+cedm7oT4mTVQx9+A45VsDvLzNWBjJejZQZ1PFKqOY5HNcQ==
|
||||
expo@^47.0.8:
|
||||
version "47.0.8"
|
||||
resolved "https://registry.yarnpkg.com/expo/-/expo-47.0.8.tgz#80390fd63f8305103445069c647011915f7c32dd"
|
||||
integrity sha512-PGNCIvrnYwHH4TDFsVocq/xhWZ5DW8N3bLkZJPZZgX6VgjtVLNsbZ+0lm1inLCZHP+6xSpSKRccjGHO/QQoMBQ==
|
||||
dependencies:
|
||||
"@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"
|
||||
babel-preset-expo "~9.2.0"
|
||||
babel-preset-expo "~9.2.2"
|
||||
cross-spawn "^6.0.5"
|
||||
expo-application "~4.2.2"
|
||||
expo-asset "~8.6.1"
|
||||
expo-constants "~13.2.4"
|
||||
expo-file-system "~14.1.0"
|
||||
expo-font "~10.2.0"
|
||||
expo-keep-awake "~10.2.0"
|
||||
expo-modules-autolinking "0.10.3"
|
||||
expo-modules-core "0.11.4"
|
||||
expo-application "~5.0.1"
|
||||
expo-asset "~8.6.2"
|
||||
expo-constants "~14.0.2"
|
||||
expo-file-system "~15.1.1"
|
||||
expo-font "~11.0.1"
|
||||
expo-keep-awake "~11.0.1"
|
||||
expo-modules-autolinking "1.0.0"
|
||||
expo-modules-core "1.0.3"
|
||||
fbemitter "^3.0.0"
|
||||
getenv "^1.0.0"
|
||||
invariant "^2.2.4"
|
||||
|
@ -10769,7 +10864,7 @@ expo@^46.0.9:
|
|||
pretty-format "^26.5.2"
|
||||
uuid "^3.4.0"
|
||||
optionalDependencies:
|
||||
expo-error-recovery "~3.2.0"
|
||||
expo-error-recovery "~4.0.1"
|
||||
|
||||
express@^4.17.1:
|
||||
version "4.18.1"
|
||||
|
@ -12227,6 +12322,14 @@ https-proxy-agent@^5.0.0:
|
|||
agent-base "6"
|
||||
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:
|
||||
version "2.1.0"
|
||||
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"
|
||||
react-refresh "^0.4.0"
|
||||
|
||||
metro-react-native-babel-preset@~0.70.3:
|
||||
version "0.70.3"
|
||||
resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.70.3.tgz#1c77ec4544ecd5fb6c803e70b21284d7483e4842"
|
||||
integrity sha512-4Nxc1zEiHEu+GTdEMEsHnRgfaBkg8f/Td3+FcQ8NTSvs+xL3LBrQy6N07idWSQZHIdGFf+tTHvRfSIWLD8u8Tg==
|
||||
metro-react-native-babel-preset@0.72.3:
|
||||
version "0.72.3"
|
||||
resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.72.3.tgz#e549199fa310fef34364fdf19bd210afd0c89432"
|
||||
integrity sha512-uJx9y/1NIqoYTp6ZW1osJ7U5ZrXGAJbOQ/Qzl05BdGYvN1S7Qmbzid6xOirgK0EIT0pJKEEh1s8qbassYZe4cw==
|
||||
dependencies:
|
||||
"@babel/core" "^7.14.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"
|
||||
integrity sha512-eIlgtsmDp1jLC24dRn43hB3kEcZVqx6DUQbR0N1ABXGnMEafm9I3V3dUUeD1vh+Dy5WqijSoEwLNUPLgu5zDMg==
|
||||
|
||||
react-native-image-crop-picker@RocketChat/react-native-image-crop-picker:
|
||||
version "0.36.3"
|
||||
resolved "https://codeload.github.com/RocketChat/react-native-image-crop-picker/tar.gz/f347776247afb5cbd1400dde215689d7ca8fd6f2"
|
||||
react-native-image-crop-picker@^0.38.0:
|
||||
version "0.38.0"
|
||||
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:
|
||||
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"
|
||||
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:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
|
||||
|
|
Loading…
Reference in New Issue