Skip to content

Commit c4dcfe2

Browse files
committed
fix: handle edge cases
1 parent c3f522c commit c4dcfe2

File tree

2 files changed

+18
-12
lines changed

2 files changed

+18
-12
lines changed

package/expo-package/src/optionalDependencies/takePhoto.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ type Size = {
2121

2222
// Media type mapping for iOS and Android
2323
const mediaTypeMap = {
24-
mixed: ['images', 'videos'],
2524
image: 'images',
25+
mixed: ['images', 'videos'],
2626
video: 'videos',
2727
};
2828

@@ -42,27 +42,28 @@ export const takePhoto = ImagePicker
4242
}
4343

4444
if (permissionGranted) {
45-
const imagePickerSuccessResult = await ImagePicker.launchCameraAsync({
45+
const result = await ImagePicker.launchCameraAsync({
4646
mediaTypes: mediaTypeMap[mediaType],
4747
quality: Math.min(Math.max(0, compressImageQuality), 1),
4848
});
49-
const canceled = imagePickerSuccessResult.canceled;
50-
const assets = imagePickerSuccessResult.assets;
51-
if (canceled || !assets.length) {
49+
if (!result || !result.assets || !result.assets.length || result.canceled) {
5250
return { cancelled: true };
5351
}
5452
// since we only support single photo upload for now we will only be focusing on 0'th element.
55-
const photo = assets[0];
53+
const photo = result.assets[0];
54+
if (!photo) {
55+
return { cancelled: true };
56+
}
5657
if (photo.mimeType.includes('video')) {
5758
const clearFilter = new RegExp('[.:]', 'g');
5859
const date = new Date().toISOString().replace(clearFilter, '_');
5960
return {
6061
...photo,
6162
cancelled: false,
6263
duration: photo.duration, // in milliseconds
63-
source: 'camera',
6464
name: 'video_recording_' + date + photo.uri.split('.').pop(),
6565
size: photo.fileSize,
66+
source: 'camera',
6667
type: photo.mimeType,
6768
uri: photo.uri,
6869
};
@@ -94,8 +95,8 @@ export const takePhoto = ImagePicker
9495
return {
9596
cancelled: false,
9697
size: photo.fileSize,
97-
type: photo.mimeType,
9898
source: 'camera',
99+
type: photo.mimeType,
99100
uri: photo.uri,
100101
...size,
101102
};

package/native-package/src/optionalDependencies/takePhoto.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,25 +32,30 @@ export const takePhoto = ImagePicker
3232
}
3333
try {
3434
const result = await ImagePicker.launchCamera({
35-
mediaType: mediaType,
35+
mediaType,
3636
quality: Math.min(Math.max(0, compressImageQuality), 1),
3737
});
38-
if (!result.assets.length || result.didCancel) {
38+
if (!result || !result.assets || !result.assets.length || result.didCancel) {
3939
return {
4040
cancelled: true,
4141
};
4242
}
4343
const asset = result.assets[0];
44+
if (!asset) {
45+
return {
46+
cancelled: true,
47+
};
48+
}
4449
if (asset.type.includes('video')) {
4550
const clearFilter = new RegExp('[.:]', 'g');
4651
const date = new Date().toISOString().replace(clearFilter, '_');
4752
return {
4853
...asset,
4954
cancelled: false,
5055
duration: asset.duration * 1000,
51-
source: 'camera',
5256
name: 'video_recording_' + date + asset.fileName.split('.').pop(),
5357
size: asset.fileSize,
58+
source: 'camera',
5459
type: asset.type,
5560
uri: asset.uri,
5661
};
@@ -82,9 +87,9 @@ export const takePhoto = ImagePicker
8287
}
8388
return {
8489
cancelled: false,
85-
type: asset.type,
8690
size: asset.size,
8791
source: 'camera',
92+
type: asset.type,
8893
uri: asset.uri,
8994
...size,
9095
};

0 commit comments

Comments
 (0)