Skip to content

Commit 7da2ab6

Browse files
committed
fix: unify file and image types
1 parent eae044b commit 7da2ab6

File tree

23 files changed

+335
-666
lines changed

23 files changed

+335
-666
lines changed

package/expo-package/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,21 @@
1010
"main": "src/index.js",
1111
"types": "types/index.d.ts",
1212
"dependencies": {
13+
"mime": "^4.0.6",
1314
"stream-chat-react-native-core": "link:../"
1415
},
1516
"peerDependencies": {
1617
"expo": ">=51.0.0",
1718
"expo-av": "*",
18-
"expo-video": "*",
1919
"expo-clipboard": "*",
2020
"expo-document-picker": "*",
2121
"expo-file-system": "*",
2222
"expo-haptics": "*",
2323
"expo-image-manipulator": "*",
2424
"expo-image-picker": "*",
2525
"expo-media-library": "*",
26-
"expo-sharing": "*"
26+
"expo-sharing": "*",
27+
"expo-video": "*"
2728
},
2829
"peerDependenciesMeta": {
2930
"expo-av": {

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

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Platform } from 'react-native';
2-
2+
import mime from 'mime';
33
let MediaLibrary;
44

55
try {
@@ -13,12 +13,12 @@ if (!MediaLibrary) {
1313
'expo-media-library is not installed. Please install it or you can choose to install expo-image-picker for native image picker.',
1414
);
1515
}
16-
import type { Asset } from 'stream-chat-react-native-core';
16+
import type { File } from 'stream-chat-react-native-core';
1717

1818
import { getLocalAssetUri } from './getLocalAssetUri';
1919

2020
type ReturnType = {
21-
assets: Array<Omit<Asset, 'source'> & { source: 'picker' }>;
21+
assets: Array<File & { source: 'picker' }>;
2222
endCursor: string | undefined;
2323
hasNextPage: boolean;
2424
iOSLimited: boolean;
@@ -52,14 +52,15 @@ export const getPhotos = MediaLibrary
5252
const assets = await Promise.all(
5353
results.assets.map(async (asset) => {
5454
const localUri = await getLocalAssetUri(asset.id);
55+
const mimeType = mime.getType(asset.filename);
56+
5557
return {
5658
duration: asset.duration * 1000,
5759
height: asset.height,
58-
id: asset.id,
60+
mimeType,
5961
name: asset.filename,
60-
originalUri: asset.uri,
61-
source: 'picker' as const,
62-
type: asset.mediaType,
62+
thumb_url: asset.mediaType === 'photo' ? undefined : asset.uri,
63+
type: asset.mediaType === 'photo' ? 'image' : 'video',
6364
uri: localUri || asset.uri,
6465
width: asset.width,
6566
};

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,21 @@ export const pickDocument = DocumentPicker
3838
// Applicable to latest version of expo-document-picker
3939
if (assets) {
4040
return {
41-
assets,
41+
assets: assets.map((asset) => ({
42+
...asset,
43+
type: asset.mimeType.split('/')[0],
44+
})),
4245
cancelled: false,
4346
};
4447
}
4548
// Applicable to older version of expo-document-picker
4649
return {
47-
assets: [rest],
50+
assets: [
51+
{
52+
...rest,
53+
type: rest.mimeType.split('/')[0],
54+
},
55+
],
4856
cancelled: false,
4957
};
5058
} catch (err) {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,11 @@ export const pickImage = ImagePicker
4545
duration: asset.duration,
4646
name: asset.fileName,
4747
size: asset.fileSize,
48-
source: 'picker',
49-
type: asset.mimeType,
48+
mimeType: asset.mimeType,
49+
type: asset.mimeType.split('/')[0],
5050
uri: asset.uri,
5151
}));
52-
return { assets, cancelled: false, source: 'picker' };
52+
return { assets, cancelled: false };
5353
} else {
5454
return { cancelled: true };
5555
}

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,8 @@ export const takePhoto = ImagePicker
6363
duration: photo.duration, // in milliseconds
6464
name: 'video_recording_' + date + '.' + photo.uri.split('.').pop(),
6565
size: photo.fileSize,
66-
source: 'camera',
67-
type: photo.mimeType,
6866
uri: photo.uri,
67+
type: photo.mimeType.split('/')[0],
6968
};
7069
} else {
7170
if (photo && photo.height && photo.width && photo.uri) {
@@ -98,9 +97,8 @@ export const takePhoto = ImagePicker
9897
mimeType: photo.mimeType,
9998
name: 'image_' + date + '.' + photo.uri.split('.').pop(),
10099
size: photo.fileSize,
101-
source: 'camera',
102-
type: photo.mimeType,
103100
uri: photo.uri,
101+
type: photo.mimeType.split('/')[0],
104102
...size,
105103
};
106104
}

package/expo-package/yarn.lock

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3764,6 +3764,11 @@ [email protected]:
37643764
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
37653765
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
37663766

3767+
mime@^4.0.6:
3768+
version "4.0.7"
3769+
resolved "https://registry.yarnpkg.com/mime/-/mime-4.0.7.tgz#0b7a98b08c63bd3c10251e797d67840c9bde9f13"
3770+
integrity sha512-2OfDPL+e03E0LrXaGYOtTFIYhiuzep94NSsuhrNULq+stylcJedcHdzHtz0atMUuGwJfFYs0YL5xeC/Ca2x0eQ==
3771+
37673772
mimic-fn@^1.0.0:
37683773
version "1.2.0"
37693774
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"

package/native-package/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,17 @@
2020
"types": "types/index.d.ts",
2121
"dependencies": {
2222
"es6-symbol": "^3.1.4",
23+
"mime": "^4.0.6",
2324
"stream-chat-react-native-core": "link:../"
2425
},
2526
"peerDependencies": {
2627
"@react-native-camera-roll/camera-roll": ">=7.8.0",
2728
"@react-native-clipboard/clipboard": ">=1.14.1",
29+
"@react-native-documents/picker": ">=10.1.1",
2830
"@stream-io/flat-list-mvcp": ">=0.10.3",
2931
"react-native": ">=0.71.0",
3032
"react-native-audio-recorder-player": ">=3.6.4",
3133
"react-native-blob-util": ">=0.19.9",
32-
"@react-native-documents/picker": ">=10.1.1",
3334
"react-native-haptic-feedback": ">=2.2.0",
3435
"react-native-image-picker": ">=7.1.2",
3536
"react-native-share": ">=10.2.1",

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

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { PermissionsAndroid, Platform } from 'react-native';
2+
import mime from 'mime';
23

34
let CameraRollDependency;
45

@@ -11,12 +12,12 @@ try {
1112
);
1213
}
1314

14-
import type { Asset } from 'stream-chat-react-native-core';
15+
import type { File } from 'stream-chat-react-native-core';
1516

1617
import { getLocalAssetUri } from './getLocalAssetUri';
1718

1819
type ReturnType = {
19-
assets: Array<Omit<Asset, 'source'> & { source: 'picker' }>;
20+
assets: Array<File & { source: 'picker' }>;
2021
endCursor: string | undefined;
2122
hasNextPage: boolean;
2223
iOSLimited: boolean;
@@ -90,16 +91,25 @@ export const getPhotos = CameraRollDependency
9091
const assets = await Promise.all(
9192
results.edges.map(async (edge) => {
9293
const originalUri = edge.node?.image?.uri;
93-
const uri = getLocalAssetUri ? await getLocalAssetUri(originalUri) : originalUri;
94+
const mimeType =
95+
Platform.OS === 'ios'
96+
? mime.getType(edge.node.image.filename as string)
97+
: edge.node.type;
98+
const isImage = mimeType.includes('image');
99+
100+
// TODO: Review this is needed or not
101+
const uri =
102+
isImage && getLocalAssetUri ? await getLocalAssetUri(originalUri) : originalUri;
103+
94104
return {
95105
...edge.node.image,
106+
name: edge.node.image.filename as string,
96107
duration: edge.node.image.playableDuration * 1000,
97108
// since we include filename, fileSize in the query, we can safely assume it will be defined
98-
name: edge.node.image.filename as string,
99-
originalUri,
109+
thumb_url: isImage ? undefined : originalUri,
100110
size: edge.node.image.fileSize as number,
101-
source: 'picker' as const,
102-
type: edge.node.type,
111+
mimeType,
112+
type: isImage ? 'image' : 'video',
103113
uri,
104114
};
105115
}),

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ export const pickDocument = DocumentPicker
4646
mimeType: type,
4747
name,
4848
size,
49+
type: type.split('/')[0],
4950
uri,
5051
})),
5152
cancelled: false,

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ export const pickImage = ImagePicker
2626
duration: asset.duration ? asset.duration * 1000 : undefined, // in milliseconds
2727
name: asset.fileName,
2828
size: asset.fileSize,
29-
source: 'picker',
30-
type: asset.type,
29+
mimeType: asset.type,
30+
type: asset.type.split('/')[0],
3131
uri: asset.uri,
3232
}));
33-
return { assets, cancelled: false, source: 'picker' };
33+
return { assets, cancelled: false };
3434
} else {
3535
return { cancelled: true };
3636
}

0 commit comments

Comments
 (0)