@amityco/react-native-social-uikit 4.0.0 → 4.0.1-0037d7d.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/core/hooks/useUpload.js +6 -7
- package/lib/commonjs/core/hooks/useUpload.js.map +1 -1
- package/lib/commonjs/core/legacy/file.js +4 -19
- package/lib/commonjs/core/legacy/file.js.map +1 -1
- package/lib/commonjs/core/utils/fileUpload.js +59 -0
- package/lib/commonjs/core/utils/fileUpload.js.map +1 -0
- package/lib/commonjs/social/features/story/Draft/Draft.js +2 -5
- package/lib/commonjs/social/features/story/Draft/Draft.js.map +1 -1
- package/lib/module/core/hooks/useUpload.js +7 -8
- package/lib/module/core/hooks/useUpload.js.map +1 -1
- package/lib/module/core/legacy/file.js +4 -19
- package/lib/module/core/legacy/file.js.map +1 -1
- package/lib/module/core/utils/fileUpload.js +54 -0
- package/lib/module/core/utils/fileUpload.js.map +1 -0
- package/lib/module/social/features/story/Draft/Draft.js +2 -5
- package/lib/module/social/features/story/Draft/Draft.js.map +1 -1
- package/lib/typescript/core/hooks/useUpload.d.ts.map +1 -1
- package/lib/typescript/core/legacy/file.d.ts.map +1 -1
- package/lib/typescript/core/utils/fileUpload.d.ts +39 -0
- package/lib/typescript/core/utils/fileUpload.d.ts.map +1 -0
- package/lib/typescript/social/features/story/Draft/Draft.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/core/hooks/useUpload.ts +6 -8
- package/src/core/legacy/file.tsx +16 -22
- package/src/core/utils/fileUpload.ts +60 -0
- package/src/social/features/story/Draft/Draft.tsx +9 -5
|
@@ -8,6 +8,7 @@ var _tsSdkReactNative = require("@amityco/ts-sdk-react-native");
|
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
9
|
var _reactQuery = require("@tanstack/react-query");
|
|
10
10
|
var _constants = require("../constants");
|
|
11
|
+
var _fileUpload = require("../utils/fileUpload");
|
|
11
12
|
function useUpload() {
|
|
12
13
|
const {
|
|
13
14
|
mutateAsync,
|
|
@@ -27,13 +28,11 @@ function useUpload() {
|
|
|
27
28
|
const formData = new FormData();
|
|
28
29
|
const parts = file.split('/');
|
|
29
30
|
const fileName = parts[parts.length - 1];
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
uri: uri
|
|
36
|
-
});
|
|
31
|
+
|
|
32
|
+
// Attach the file as a React-Native { uri, name, type } multipart part.
|
|
33
|
+
// This works on both the Old and New (Bridgeless) Architecture and is what
|
|
34
|
+
// the SDK's uploadImage expects (it reads files[0].name for preferredFilename).
|
|
35
|
+
(0, _fileUpload.appendFileToFormData)(formData, 'files', file, fileName, 'image/jpeg');
|
|
37
36
|
return await mutateAsync({
|
|
38
37
|
file: formData,
|
|
39
38
|
onProgress,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_tsSdkReactNative","require","_reactNative","_reactQuery","_constants","useUpload","mutateAsync","isPending","useMutation","mutationFn","file","onProgress","altText","FileRepository","uploadImage","formData","FormData","parts","split","fileName","length","
|
|
1
|
+
{"version":3,"names":["_tsSdkReactNative","require","_reactNative","_reactQuery","_constants","_fileUpload","useUpload","mutateAsync","isPending","useMutation","mutationFn","file","onProgress","altText","FileRepository","uploadImage","formData","FormData","parts","split","fileName","length","appendFileToFormData","onError","error","message","includes","ERROR_CODE","INVALID_IMAGE","VIOLENCE","Alert","alert","text","isImageUploading"],"sourceRoot":"../../../../src","sources":["core/hooks/useUpload.ts"],"mappings":";;;;;;AAAA,IAAAA,iBAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AAoBO,SAASK,SAASA,CAAA,EAAG;EAC1B,MAAM;IAAEC,WAAW;IAAEC;EAAU,CAAC,GAAG,IAAAC,uBAAW,EAI5C;IACAC,UAAU,EAAEA,CAAC;MAAEC,IAAI;MAAEC,UAAU;MAAEC;IAAQ,CAAC,KACxCC,gCAAc,CAACC,WAAW,CAACJ,IAAI,EAAEC,UAAU,EAAEC,OAAO;EACxD,CAAC,CAAC;EAEF,MAAME,WAAW,GAAG,MAAAA,CAAO;IACzBJ,IAAI;IACJC,UAAU;IACVC;EACuB,CAAC,KAAK;IAC7B,MAAMG,QAAQ,GAAG,IAAIC,QAAQ,CAAC,CAAC;IAC/B,MAAMC,KAAK,GAAGP,IAAI,CAACQ,KAAK,CAAC,GAAG,CAAC;IAC7B,MAAMC,QAAQ,GAAGF,KAAK,CAACA,KAAK,CAACG,MAAM,GAAG,CAAC,CAAC;;IAExC;IACA;IACA;IACA,IAAAC,gCAAoB,EAACN,QAAQ,EAAE,OAAO,EAAEL,IAAI,EAAES,QAAQ,EAAE,YAAY,CAAC;IAErE,OAAO,MAAMb,WAAW,CACtB;MACEI,IAAI,EAAEK,QAAQ;MACdJ,UAAU;MACVC;IACF,CAAC,EACD;MACEU,OAAO,EAAGC,KAAK,IAAK;QAClB,IACEA,KAAK,CAACC,OAAO,CAACC,QAAQ,CAACC,qBAAU,CAACC,aAAa,CAAC,IAChDJ,KAAK,CAACC,OAAO,CAACC,QAAQ,CAACC,qBAAU,CAACE,QAAQ,CAAC,EAC3C;UACAC,kBAAK,CAACC,KAAK,CACT,qBAAqB,EACrB,4CAA4C,EAC5C,CAAC;YAAEC,IAAI,EAAE;UAAK,CAAC,CACjB,CAAC;QACH,CAAC,MAAM;UACLF,kBAAK,CAACC,KAAK,CAAC,eAAe,EAAE,mBAAmB,EAAE,CAAC;YAAEC,IAAI,EAAE;UAAK,CAAC,CAAC,CAAC;QACrE;MACF;IACF,CACF,CAAC;EACH,CAAC;EAED,OAAO;IACLjB,WAAW;IACXkB,gBAAgB,EAAEzB;EACpB,CAAC;AACH","ignoreList":[]}
|
|
@@ -9,18 +9,14 @@ exports.uploadImageFile = uploadImageFile;
|
|
|
9
9
|
exports.uploadVideoFile = uploadVideoFile;
|
|
10
10
|
var _tsSdkReactNative = require("@amityco/ts-sdk-react-native");
|
|
11
11
|
var _reactNative = require("react-native");
|
|
12
|
+
var _fileUpload = require("../utils/fileUpload");
|
|
12
13
|
async function uploadFile(filePath, perCentCallback) {
|
|
13
14
|
return await new Promise(async (resolve, reject) => {
|
|
14
15
|
const formData = new FormData();
|
|
15
16
|
const parts = filePath.split('/');
|
|
16
17
|
const fileName = parts[parts.length - 1];
|
|
17
18
|
const fileType = _reactNative.Platform.OS === 'ios' ? 'image/jpeg' : 'image/jpg';
|
|
18
|
-
|
|
19
|
-
formData.append('files', {
|
|
20
|
-
name: fileName,
|
|
21
|
-
type: fileType,
|
|
22
|
-
uri: uri
|
|
23
|
-
});
|
|
19
|
+
await (0, _fileUpload.appendFileToFormData)(formData, 'files', filePath, fileName, fileType);
|
|
24
20
|
const {
|
|
25
21
|
data: file
|
|
26
22
|
} = await _tsSdkReactNative.FileRepository.uploadFile(formData, percent => {
|
|
@@ -40,12 +36,7 @@ async function uploadImageFile(filePath, perCentCallback) {
|
|
|
40
36
|
const parts = filePath.split('/');
|
|
41
37
|
const fileName = parts[parts.length - 1];
|
|
42
38
|
const fileType = _reactNative.Platform.OS === 'ios' ? 'image/jpeg' : 'image/jpg';
|
|
43
|
-
|
|
44
|
-
formData.append('files', {
|
|
45
|
-
name: fileName,
|
|
46
|
-
type: fileType,
|
|
47
|
-
uri: uri
|
|
48
|
-
});
|
|
39
|
+
await (0, _fileUpload.appendFileToFormData)(formData, 'files', filePath, fileName, fileType);
|
|
49
40
|
const {
|
|
50
41
|
data: file
|
|
51
42
|
} = await _tsSdkReactNative.FileRepository.uploadImage(formData, percent => {
|
|
@@ -81,13 +72,7 @@ async function uploadVideoFile(filePath, perCentCallback) {
|
|
|
81
72
|
const formData = new FormData();
|
|
82
73
|
const parts = filePath.split('/');
|
|
83
74
|
const fileName = parts[parts.length - 1];
|
|
84
|
-
|
|
85
|
-
const uri = _reactNative.Platform.OS === 'android' ? filePath : filePath.replace('file://', '');
|
|
86
|
-
formData.append('files', {
|
|
87
|
-
name: fileName,
|
|
88
|
-
type: 'video/*',
|
|
89
|
-
uri: uri
|
|
90
|
-
});
|
|
75
|
+
await (0, _fileUpload.appendFileToFormData)(formData, 'files', filePath, fileName, 'video/mp4');
|
|
91
76
|
const {
|
|
92
77
|
data: file
|
|
93
78
|
} = await _tsSdkReactNative.FileRepository.uploadVideo(formData, _tsSdkReactNative.ContentFeedType.POST, percent => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_tsSdkReactNative","require","_reactNative","uploadFile","filePath","perCentCallback","Promise","resolve","reject","formData","FormData","parts","split","fileName","length","fileType","Platform","OS","
|
|
1
|
+
{"version":3,"names":["_tsSdkReactNative","require","_reactNative","_fileUpload","uploadFile","filePath","perCentCallback","Promise","resolve","reject","formData","FormData","parts","split","fileName","length","fileType","Platform","OS","appendFileToFormData","data","file","FileRepository","percent","uploadImageFile","uploadImage","message","error","_error$message","_error$message2","includes","details","code","originalError","uploadVideoFile","uploadVideo","ContentFeedType","POST","deleteAmityFile","fileId","reactionObject","isFileDeleted","deleteFile"],"sourceRoot":"../../../../src","sources":["core/legacy/file.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.appendFileToFormData = appendFileToFormData;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
/**
|
|
9
|
+
* fileUpload.ts
|
|
10
|
+
*
|
|
11
|
+
* Helper for attaching a local file to a FormData for upload to the Amity SDK.
|
|
12
|
+
*
|
|
13
|
+
* Why the `{ uri, name, type }` object (and NOT a Blob)
|
|
14
|
+
* -----------------------------------------------------
|
|
15
|
+
* React Native's `FormData.getParts()` only turns a value into a multipart
|
|
16
|
+
* *file* part when that value is an object carrying a `uri`:
|
|
17
|
+
*
|
|
18
|
+
* • `name` → the `filename` in the `Content-Disposition` header
|
|
19
|
+
* • `type` → the part's `Content-Type`
|
|
20
|
+
* • `uri` → the local path the native networking layer streams bytes from
|
|
21
|
+
*
|
|
22
|
+
* This is the canonical React Native upload pattern and works on BOTH the Old
|
|
23
|
+
* and the New (Bridgeless / JSI) Architecture — RN 0.83 did not change this JS
|
|
24
|
+
* API. The Amity SDK's `uploadImage` is built around it too: it calls
|
|
25
|
+
* `formData.getAll('files')` and reads `files[0].name` to set
|
|
26
|
+
* `preferredFilename`.
|
|
27
|
+
*
|
|
28
|
+
* Do NOT append a Blob here. A Blob produced by `fetch(uri).blob()` has:
|
|
29
|
+
* • no `uri` → RN attaches no file body, so the request carries no
|
|
30
|
+
* bytes and the server responds `400 "No files
|
|
31
|
+
* uploaded."`
|
|
32
|
+
* • no top-level `name` → `files[0].name` is `null`, so `preferredFilename`
|
|
33
|
+
* is sent as `null`.
|
|
34
|
+
* That combination is exactly the failure seen in PDT-3461.
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Append a local file to `formData` as a React-Native multipart file part.
|
|
39
|
+
*
|
|
40
|
+
* @param formData The FormData instance to mutate.
|
|
41
|
+
* @param fieldName The multipart field name (e.g. `'files'`).
|
|
42
|
+
* @param fileUri Local file URI (`file://…` or `content://…`).
|
|
43
|
+
* @param fileName The filename sent in the Content-Disposition header.
|
|
44
|
+
* @param mimeType MIME type for the part (e.g. `'image/jpeg'`).
|
|
45
|
+
*/
|
|
46
|
+
function appendFileToFormData(formData, fieldName, fileUri, fileName, mimeType) {
|
|
47
|
+
// Android keeps the URI as-is (`content://` / `file://` are both streamable);
|
|
48
|
+
// iOS expects the `file://` scheme stripped to a bare path.
|
|
49
|
+
const uri = _reactNative.Platform.OS === 'android' ? fileUri : fileUri.replace('file://', '');
|
|
50
|
+
|
|
51
|
+
// RN's FormData.append is typed for the legacy `{ uri, name, type }` object
|
|
52
|
+
// but its TS types don't expose that overload, so we cast to `any`.
|
|
53
|
+
formData.append(fieldName, {
|
|
54
|
+
uri,
|
|
55
|
+
name: fileName,
|
|
56
|
+
type: mimeType
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=fileUpload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","appendFileToFormData","formData","fieldName","fileUri","fileName","mimeType","uri","Platform","OS","replace","append","name","type"],"sourceRoot":"../../../../src","sources":["core/utils/fileUpload.ts"],"mappings":";;;;;;AA6BA,IAAAA,YAAA,GAAAC,OAAA;AA7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,oBAAoBA,CAClCC,QAAkB,EAClBC,SAAiB,EACjBC,OAAe,EACfC,QAAgB,EAChBC,QAAgB,EACV;EACN;EACA;EACA,MAAMC,GAAG,GACPC,qBAAQ,CAACC,EAAE,KAAK,SAAS,GAAGL,OAAO,GAAGA,OAAO,CAACM,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;;EAEtE;EACA;EACAR,QAAQ,CAACS,MAAM,CAACR,SAAS,EAAE;IACzBI,GAAG;IACHK,IAAI,EAAEP,QAAQ;IACdQ,IAAI,EAAEP;EACR,CAAQ,CAAC;AACX","ignoreList":[]}
|
|
@@ -20,6 +20,7 @@ var _useFile = require("../../../hooks/useFile");
|
|
|
20
20
|
var _url = require("../../../../core/utils/url");
|
|
21
21
|
var _LoadingOverlay = require("../../../components/legacy/LoadingOverlay");
|
|
22
22
|
var _mime = _interopRequireDefault(require("mime"));
|
|
23
|
+
var _fileUpload = require("../../../../core/utils/fileUpload");
|
|
23
24
|
var _toastSlice = require("../../../../core/stores/slices/toastSlice");
|
|
24
25
|
var _reactNativeSafeAreaContext = require("react-native-safe-area-context");
|
|
25
26
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -101,11 +102,7 @@ const AmityDraftStoryPage = ({
|
|
|
101
102
|
const formData = new FormData();
|
|
102
103
|
const isImage = type === _enums.StoryType.image;
|
|
103
104
|
const mimeType = _mime.default.getType(mediaType.uri) ?? (isImage ? 'image/jpeg' : 'video/mp4');
|
|
104
|
-
|
|
105
|
-
uri: mediaType.uri,
|
|
106
|
-
name: mediaType.name,
|
|
107
|
-
type: mimeType
|
|
108
|
-
});
|
|
105
|
+
await (0, _fileUpload.appendFileToFormData)(formData, 'files', mediaType.uri, mediaType.name, mimeType);
|
|
109
106
|
try {
|
|
110
107
|
setLoading(true);
|
|
111
108
|
if (type === _enums.StoryType.image) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_react","_reactNativeLinearGradient","_interopRequireDefault","_reactNativeVideo","_xml","_reactNativeSvg","_styles","_tsSdkReactNative","_enums","_reactNativePaper","_useConfigImageUri","_HyperLinkConfig","_useFile","_url","_LoadingOverlay","_mime","_toastSlice","_reactNativeSafeAreaContext","e","__esModule","default","AmityDraftStoryPage","targetId","targetType","mediaType","onCreateStory","onDiscardStory","_hyperlink$","_hyperlink$2","_hyperlink$3","_hyperlink$4","type","getMediaTypeFromUrl","uri","styles","useStyles","getImage","useFile","imageDisplayMode","setImageDisplayMode","useState","isVisibleModal","setIsVisibleModal","communityAvatarUrl","setCommunityAvatarUrl","hyperlink","setHyperlink","undefined","loading","setLoading","theme","useTheme","aspectRatioIcon","useConfigImageUri","configPath","page","PageID","CreateStoryPage","component","ComponentID","WildCardComponent","element","ElementID","AspectRatioBtn","configKey","hyperLinkIcon","StoryHyperLinkBtn","showToast","useToast","useEffect","CommunityRepository","getCommunity","error","isLoading","data","image","fileId","avatarFileId","imageSize","ImageSizeState","small","onPressBack","useCallback","Alert","alert","text","style","onPress","onPressAspectRatio","prev","onPressHyperLink","onPressShareStory","formData","FormData","isImage","StoryType","mimeType","mime","getType","append","name","StoryRepository","createImageStory","createVideoStory","message","onHyperLinkSubmit","item","storyItem","React","createElement","SafeAreaView","container","View","imageContainer","Fragment","Image","source","blurredBackground","resizeMode","blurRadius","paused","repeat","colors","start","x","y","end","storyGradient","length","TouchableOpacity","hyperlinkContainer","SvgXml","xml","storyHyperLinkIcon","width","height","Text","hyperlinkText","customText","url","shareStoryBtn","avatar","shareStoryTxt","rightLongArrow","baseShade2","backBtn","leftLongArrow","aspectRatioBtn","aspectRationIcon","hyperLinkBtn","hyperlinkItem","LoadingOverlay","_default","exports","memo"],"sourceRoot":"../../../../../../src","sources":["social/features/story/Draft/Draft.tsx"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_react","_reactNativeLinearGradient","_interopRequireDefault","_reactNativeVideo","_xml","_reactNativeSvg","_styles","_tsSdkReactNative","_enums","_reactNativePaper","_useConfigImageUri","_HyperLinkConfig","_useFile","_url","_LoadingOverlay","_mime","_fileUpload","_toastSlice","_reactNativeSafeAreaContext","e","__esModule","default","AmityDraftStoryPage","targetId","targetType","mediaType","onCreateStory","onDiscardStory","_hyperlink$","_hyperlink$2","_hyperlink$3","_hyperlink$4","type","getMediaTypeFromUrl","uri","styles","useStyles","getImage","useFile","imageDisplayMode","setImageDisplayMode","useState","isVisibleModal","setIsVisibleModal","communityAvatarUrl","setCommunityAvatarUrl","hyperlink","setHyperlink","undefined","loading","setLoading","theme","useTheme","aspectRatioIcon","useConfigImageUri","configPath","page","PageID","CreateStoryPage","component","ComponentID","WildCardComponent","element","ElementID","AspectRatioBtn","configKey","hyperLinkIcon","StoryHyperLinkBtn","showToast","useToast","useEffect","CommunityRepository","getCommunity","error","isLoading","data","image","fileId","avatarFileId","imageSize","ImageSizeState","small","onPressBack","useCallback","Alert","alert","text","style","onPress","onPressAspectRatio","prev","onPressHyperLink","onPressShareStory","formData","FormData","isImage","StoryType","mimeType","mime","getType","appendFileToFormData","name","StoryRepository","createImageStory","createVideoStory","message","onHyperLinkSubmit","item","storyItem","React","createElement","SafeAreaView","container","View","imageContainer","Fragment","Image","source","blurredBackground","resizeMode","blurRadius","paused","repeat","colors","start","x","y","end","storyGradient","length","TouchableOpacity","hyperlinkContainer","SvgXml","xml","storyHyperLinkIcon","width","height","Text","hyperlinkText","customText","url","shareStoryBtn","avatar","shareStoryTxt","rightLongArrow","baseShade2","backBtn","leftLongArrow","aspectRatioBtn","aspectRationIcon","hyperLinkBtn","hyperlinkItem","LoadingOverlay","_default","exports","memo"],"sourceRoot":"../../../../../../src","sources":["social/features/story/Draft/Draft.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { FileRepository } from '@amityco/ts-sdk-react-native';
|
|
2
|
-
import { Alert
|
|
2
|
+
import { Alert } from 'react-native';
|
|
3
3
|
import { useMutation } from '@tanstack/react-query';
|
|
4
4
|
import { ERROR_CODE } from '../constants';
|
|
5
|
+
import { appendFileToFormData } from '../utils/fileUpload';
|
|
5
6
|
export function useUpload() {
|
|
6
7
|
const {
|
|
7
8
|
mutateAsync,
|
|
@@ -21,13 +22,11 @@ export function useUpload() {
|
|
|
21
22
|
const formData = new FormData();
|
|
22
23
|
const parts = file.split('/');
|
|
23
24
|
const fileName = parts[parts.length - 1];
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
uri: uri
|
|
30
|
-
});
|
|
25
|
+
|
|
26
|
+
// Attach the file as a React-Native { uri, name, type } multipart part.
|
|
27
|
+
// This works on both the Old and New (Bridgeless) Architecture and is what
|
|
28
|
+
// the SDK's uploadImage expects (it reads files[0].name for preferredFilename).
|
|
29
|
+
appendFileToFormData(formData, 'files', file, fileName, 'image/jpeg');
|
|
31
30
|
return await mutateAsync({
|
|
32
31
|
file: formData,
|
|
33
32
|
onProgress,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["FileRepository","Alert","
|
|
1
|
+
{"version":3,"names":["FileRepository","Alert","useMutation","ERROR_CODE","appendFileToFormData","useUpload","mutateAsync","isPending","mutationFn","file","onProgress","altText","uploadImage","formData","FormData","parts","split","fileName","length","onError","error","message","includes","INVALID_IMAGE","VIOLENCE","alert","text","isImageUploading"],"sourceRoot":"../../../../src","sources":["core/hooks/useUpload.ts"],"mappings":"AAAA,SAASA,cAAc,QAAQ,8BAA8B;AAC7D,SAASC,KAAK,QAAQ,cAAc;AACpC,SAASC,WAAW,QAAQ,uBAAuB;AACnD,SAASC,UAAU,QAAQ,cAAc;AACzC,SAASC,oBAAoB,QAAQ,qBAAqB;AAoB1D,OAAO,SAASC,SAASA,CAAA,EAAG;EAC1B,MAAM;IAAEC,WAAW;IAAEC;EAAU,CAAC,GAAGL,WAAW,CAI5C;IACAM,UAAU,EAAEA,CAAC;MAAEC,IAAI;MAAEC,UAAU;MAAEC;IAAQ,CAAC,KACxCX,cAAc,CAACY,WAAW,CAACH,IAAI,EAAEC,UAAU,EAAEC,OAAO;EACxD,CAAC,CAAC;EAEF,MAAMC,WAAW,GAAG,MAAAA,CAAO;IACzBH,IAAI;IACJC,UAAU;IACVC;EACuB,CAAC,KAAK;IAC7B,MAAME,QAAQ,GAAG,IAAIC,QAAQ,CAAC,CAAC;IAC/B,MAAMC,KAAK,GAAGN,IAAI,CAACO,KAAK,CAAC,GAAG,CAAC;IAC7B,MAAMC,QAAQ,GAAGF,KAAK,CAACA,KAAK,CAACG,MAAM,GAAG,CAAC,CAAC;;IAExC;IACA;IACA;IACAd,oBAAoB,CAACS,QAAQ,EAAE,OAAO,EAAEJ,IAAI,EAAEQ,QAAQ,EAAE,YAAY,CAAC;IAErE,OAAO,MAAMX,WAAW,CACtB;MACEG,IAAI,EAAEI,QAAQ;MACdH,UAAU;MACVC;IACF,CAAC,EACD;MACEQ,OAAO,EAAGC,KAAK,IAAK;QAClB,IACEA,KAAK,CAACC,OAAO,CAACC,QAAQ,CAACnB,UAAU,CAACoB,aAAa,CAAC,IAChDH,KAAK,CAACC,OAAO,CAACC,QAAQ,CAACnB,UAAU,CAACqB,QAAQ,CAAC,EAC3C;UACAvB,KAAK,CAACwB,KAAK,CACT,qBAAqB,EACrB,4CAA4C,EAC5C,CAAC;YAAEC,IAAI,EAAE;UAAK,CAAC,CACjB,CAAC;QACH,CAAC,MAAM;UACLzB,KAAK,CAACwB,KAAK,CAAC,eAAe,EAAE,mBAAmB,EAAE,CAAC;YAAEC,IAAI,EAAE;UAAK,CAAC,CAAC,CAAC;QACrE;MACF;IACF,CACF,CAAC;EACH,CAAC;EAED,OAAO;IACLd,WAAW;IACXe,gBAAgB,EAAEpB;EACpB,CAAC;AACH","ignoreList":[]}
|
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
import { FileRepository, ContentFeedType } from '@amityco/ts-sdk-react-native';
|
|
2
2
|
import { Platform } from 'react-native';
|
|
3
|
+
import { appendFileToFormData } from '../utils/fileUpload';
|
|
3
4
|
export async function uploadFile(filePath, perCentCallback) {
|
|
4
5
|
return await new Promise(async (resolve, reject) => {
|
|
5
6
|
const formData = new FormData();
|
|
6
7
|
const parts = filePath.split('/');
|
|
7
8
|
const fileName = parts[parts.length - 1];
|
|
8
9
|
const fileType = Platform.OS === 'ios' ? 'image/jpeg' : 'image/jpg';
|
|
9
|
-
|
|
10
|
-
formData.append('files', {
|
|
11
|
-
name: fileName,
|
|
12
|
-
type: fileType,
|
|
13
|
-
uri: uri
|
|
14
|
-
});
|
|
10
|
+
await appendFileToFormData(formData, 'files', filePath, fileName, fileType);
|
|
15
11
|
const {
|
|
16
12
|
data: file
|
|
17
13
|
} = await FileRepository.uploadFile(formData, percent => {
|
|
@@ -31,12 +27,7 @@ export async function uploadImageFile(filePath, perCentCallback) {
|
|
|
31
27
|
const parts = filePath.split('/');
|
|
32
28
|
const fileName = parts[parts.length - 1];
|
|
33
29
|
const fileType = Platform.OS === 'ios' ? 'image/jpeg' : 'image/jpg';
|
|
34
|
-
|
|
35
|
-
formData.append('files', {
|
|
36
|
-
name: fileName,
|
|
37
|
-
type: fileType,
|
|
38
|
-
uri: uri
|
|
39
|
-
});
|
|
30
|
+
await appendFileToFormData(formData, 'files', filePath, fileName, fileType);
|
|
40
31
|
const {
|
|
41
32
|
data: file
|
|
42
33
|
} = await FileRepository.uploadImage(formData, percent => {
|
|
@@ -72,13 +63,7 @@ export async function uploadVideoFile(filePath, perCentCallback) {
|
|
|
72
63
|
const formData = new FormData();
|
|
73
64
|
const parts = filePath.split('/');
|
|
74
65
|
const fileName = parts[parts.length - 1];
|
|
75
|
-
|
|
76
|
-
const uri = Platform.OS === 'android' ? filePath : filePath.replace('file://', '');
|
|
77
|
-
formData.append('files', {
|
|
78
|
-
name: fileName,
|
|
79
|
-
type: 'video/*',
|
|
80
|
-
uri: uri
|
|
81
|
-
});
|
|
66
|
+
await appendFileToFormData(formData, 'files', filePath, fileName, 'video/mp4');
|
|
82
67
|
const {
|
|
83
68
|
data: file
|
|
84
69
|
} = await FileRepository.uploadVideo(formData, ContentFeedType.POST, percent => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["FileRepository","ContentFeedType","Platform","uploadFile","filePath","perCentCallback","Promise","resolve","reject","formData","FormData","parts","split","fileName","length","fileType","OS","
|
|
1
|
+
{"version":3,"names":["FileRepository","ContentFeedType","Platform","appendFileToFormData","uploadFile","filePath","perCentCallback","Promise","resolve","reject","formData","FormData","parts","split","fileName","length","fileType","OS","data","file","percent","uploadImageFile","uploadImage","message","error","_error$message","_error$message2","includes","details","code","originalError","uploadVideoFile","uploadVideo","POST","deleteAmityFile","fileId","reactionObject","isFileDeleted","deleteFile"],"sourceRoot":"../../../../src","sources":["core/legacy/file.tsx"],"mappings":"AAAA,SAASA,cAAc,EAAEC,eAAe,QAAQ,8BAA8B;AAE9E,SAASC,QAAQ,QAAQ,cAAc;AACvC,SAASC,oBAAoB,QAAQ,qBAAqB;AAE1D,OAAO,eAAeC,UAAUA,CAC9BC,QAAgB,EAChBC,eAA2C,EACf;EAC5B,OAAO,MAAM,IAAIC,OAAO,CAAC,OAAOC,OAAO,EAAEC,MAAM,KAAK;IAClD,MAAMC,QAAQ,GAAG,IAAIC,QAAQ,CAAC,CAAC;IAC/B,MAAMC,KAAK,GAAGP,QAAQ,CAACQ,KAAK,CAAC,GAAG,CAAC;IACjC,MAAMC,QAAQ,GAAGF,KAAK,CAACA,KAAK,CAACG,MAAM,GAAG,CAAC,CAAC;IACxC,MAAMC,QAAQ,GAAGd,QAAQ,CAACe,EAAE,KAAK,KAAK,GAAG,YAAY,GAAG,WAAW;IAEnE,MAAMd,oBAAoB,CAACO,QAAQ,EAAE,OAAO,EAAEL,QAAQ,EAAES,QAAQ,EAAEE,QAAQ,CAAC;IAE3E,MAAM;MAAEE,IAAI,EAAEC;IAAK,CAAC,GAAG,MAAMnB,cAAc,CAACI,UAAU,CACpDM,QAAQ,EACPU,OAAO,IAAK;MACXd,eAAe,IAAIA,eAAe,CAACc,OAAO,CAAC;IAC7C,CACF,CAAC;IACD,IAAID,IAAI,EAAE;MACRX,OAAO,CAACW,IAAI,CAAC;IACf,CAAC,MAAM;MACLV,MAAM,CAAC,cAAc,CAAC;IACxB;EACF,CAAC,CAAC;AACJ;AACA,OAAO,eAAeY,eAAeA,CACnChB,QAAgB,EAChBC,eAA2C,EACX;EAChC,OAAO,MAAM,IAAIC,OAAO,CAAC,OAAOC,OAAO,EAAEC,MAAM,KAAK;IAClD,IAAI;MACF,MAAMC,QAAQ,GAAG,IAAIC,QAAQ,CAAC,CAAC;MAC/B,MAAMC,KAAK,GAAGP,QAAQ,CAACQ,KAAK,CAAC,GAAG,CAAC;MACjC,MAAMC,QAAQ,GAAGF,KAAK,CAACA,KAAK,CAACG,MAAM,GAAG,CAAC,CAAC;MACxC,MAAMC,QAAQ,GAAGd,QAAQ,CAACe,EAAE,KAAK,KAAK,GAAG,YAAY,GAAG,WAAW;MAEnE,MAAMd,oBAAoB,CACxBO,QAAQ,EACR,OAAO,EACPL,QAAQ,EACRS,QAAQ,EACRE,QACF,CAAC;MAED,MAAM;QAAEE,IAAI,EAAEC;MAAK,CAAC,GAAG,MAAMnB,cAAc,CAACsB,WAAW,CACrDZ,QAAQ,EACPU,OAAO,IAAK;QACXd,eAAe,IAAIA,eAAe,CAACc,OAAO,CAAC;MAC7C,CACF,CAAC;MAED,IAAID,IAAI,EAAE;QACRX,OAAO,CAACW,IAAI,CAAC;MACf,CAAC,MAAM;QACLV,MAAM,CAAC;UAAEc,OAAO,EAAE;QAAwC,CAAC,CAAC;MAC9D;IACF,CAAC,CAAC,OAAOC,KAAU,EAAE;MAAA,IAAAC,cAAA,EAAAC,eAAA;MACnB,IACEF,KAAK,aAALA,KAAK,gBAAAC,cAAA,GAALD,KAAK,CAAED,OAAO,cAAAE,cAAA,eAAdA,cAAA,CAAgBE,QAAQ,CAAC,eAAe,CAAC,IACzCH,KAAK,aAALA,KAAK,gBAAAE,eAAA,GAALF,KAAK,CAAED,OAAO,cAAAG,eAAA,eAAdA,eAAA,CAAgBC,QAAQ,CAAC,eAAe,CAAC,EACzC;QACAlB,MAAM,CAAC;UACLc,OAAO,EAAE,qBAAqB;UAC9BK,OAAO,EAAE,4CAA4C;UACrDC,IAAI,EAAE;QACR,CAAC,CAAC;MACJ,CAAC,MAAM;QACLpB,MAAM,CAAC;UACLc,OAAO,EAAE,eAAe;UACxBK,OAAO,EACL,CAAAJ,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAED,OAAO,KACd,qDAAqD;UACvDO,aAAa,EAAEN;QACjB,CAAC,CAAC;MACJ;IACF;EACF,CAAC,CAAC;AACJ;AACA,OAAO,eAAeO,eAAeA,CACnC1B,QAAgB,EAChBC,eAA2C,EACf;EAC5B,OAAO,MAAM,IAAIC,OAAO,CAAC,OAAOC,OAAO,EAAEC,MAAM,KAAK;IAClD,MAAMC,QAAQ,GAAG,IAAIC,QAAQ,CAAC,CAAC;IAC/B,MAAMC,KAAK,GAAGP,QAAQ,CAACQ,KAAK,CAAC,GAAG,CAAC;IACjC,MAAMC,QAAQ,GAAGF,KAAK,CAACA,KAAK,CAACG,MAAM,GAAG,CAAC,CAAC;IAExC,MAAMZ,oBAAoB,CACxBO,QAAQ,EACR,OAAO,EACPL,QAAQ,EACRS,QAAQ,EACR,WACF,CAAC;IAED,MAAM;MAAEI,IAAI,EAAEC;IAAK,CAAC,GAAG,MAAMnB,cAAc,CAACgC,WAAW,CACrDtB,QAAQ,EACRT,eAAe,CAACgC,IAAI,EACnBb,OAAO,IAAK;MACXd,eAAe,IAAIA,eAAe,CAACc,OAAO,CAAC;IAC7C,CACF,CAAC;IACD,IAAID,IAAI,EAAE;MACRX,OAAO,CAACW,IAAI,CAAC;IACf,CAAC,MAAM;MACLV,MAAM,CAAC,cAAc,CAAC;IACxB;EACF,CAAC,CAAC;AACJ;AACA,OAAO,eAAeyB,eAAeA,CACnCC,MAAc,EACiB;EAC/B,MAAMC,cAA6C,GAAG,IAAI7B,OAAO,CAC/D,OAAOC,OAAO,EAAEC,MAAM,KAAK;IACzB,IAAI;MACF,MAAM4B,aAAa,GAAG,MAAMrC,cAAc,CAACsC,UAAU,CAACH,MAAM,CAAC;MAC7D3B,OAAO,CAAC6B,aAAa,CAAC;IACxB,CAAC,CAAC,OAAOb,KAAK,EAAE;MACdf,MAAM,CAACe,KAAK,CAAC;IACf;EACF,CACF,CAAC;EACD,OAAOY,cAAc;AACvB","ignoreList":[]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* fileUpload.ts
|
|
3
|
+
*
|
|
4
|
+
* Helper for attaching a local file to a FormData for upload to the Amity SDK.
|
|
5
|
+
*
|
|
6
|
+
* Why the `{ uri, name, type }` object (and NOT a Blob)
|
|
7
|
+
* -----------------------------------------------------
|
|
8
|
+
* React Native's `FormData.getParts()` only turns a value into a multipart
|
|
9
|
+
* *file* part when that value is an object carrying a `uri`:
|
|
10
|
+
*
|
|
11
|
+
* • `name` → the `filename` in the `Content-Disposition` header
|
|
12
|
+
* • `type` → the part's `Content-Type`
|
|
13
|
+
* • `uri` → the local path the native networking layer streams bytes from
|
|
14
|
+
*
|
|
15
|
+
* This is the canonical React Native upload pattern and works on BOTH the Old
|
|
16
|
+
* and the New (Bridgeless / JSI) Architecture — RN 0.83 did not change this JS
|
|
17
|
+
* API. The Amity SDK's `uploadImage` is built around it too: it calls
|
|
18
|
+
* `formData.getAll('files')` and reads `files[0].name` to set
|
|
19
|
+
* `preferredFilename`.
|
|
20
|
+
*
|
|
21
|
+
* Do NOT append a Blob here. A Blob produced by `fetch(uri).blob()` has:
|
|
22
|
+
* • no `uri` → RN attaches no file body, so the request carries no
|
|
23
|
+
* bytes and the server responds `400 "No files
|
|
24
|
+
* uploaded."`
|
|
25
|
+
* • no top-level `name` → `files[0].name` is `null`, so `preferredFilename`
|
|
26
|
+
* is sent as `null`.
|
|
27
|
+
* That combination is exactly the failure seen in PDT-3461.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import { Platform } from 'react-native';
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Append a local file to `formData` as a React-Native multipart file part.
|
|
34
|
+
*
|
|
35
|
+
* @param formData The FormData instance to mutate.
|
|
36
|
+
* @param fieldName The multipart field name (e.g. `'files'`).
|
|
37
|
+
* @param fileUri Local file URI (`file://…` or `content://…`).
|
|
38
|
+
* @param fileName The filename sent in the Content-Disposition header.
|
|
39
|
+
* @param mimeType MIME type for the part (e.g. `'image/jpeg'`).
|
|
40
|
+
*/
|
|
41
|
+
export function appendFileToFormData(formData, fieldName, fileUri, fileName, mimeType) {
|
|
42
|
+
// Android keeps the URI as-is (`content://` / `file://` are both streamable);
|
|
43
|
+
// iOS expects the `file://` scheme stripped to a bare path.
|
|
44
|
+
const uri = Platform.OS === 'android' ? fileUri : fileUri.replace('file://', '');
|
|
45
|
+
|
|
46
|
+
// RN's FormData.append is typed for the legacy `{ uri, name, type }` object
|
|
47
|
+
// but its TS types don't expose that overload, so we cast to `any`.
|
|
48
|
+
formData.append(fieldName, {
|
|
49
|
+
uri,
|
|
50
|
+
name: fileName,
|
|
51
|
+
type: mimeType
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=fileUpload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Platform","appendFileToFormData","formData","fieldName","fileUri","fileName","mimeType","uri","OS","replace","append","name","type"],"sourceRoot":"../../../../src","sources":["core/utils/fileUpload.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,QAAQ,QAAQ,cAAc;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,oBAAoBA,CAClCC,QAAkB,EAClBC,SAAiB,EACjBC,OAAe,EACfC,QAAgB,EAChBC,QAAgB,EACV;EACN;EACA;EACA,MAAMC,GAAG,GACPP,QAAQ,CAACQ,EAAE,KAAK,SAAS,GAAGJ,OAAO,GAAGA,OAAO,CAACK,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;;EAEtE;EACA;EACAP,QAAQ,CAACQ,MAAM,CAACP,SAAS,EAAE;IACzBI,GAAG;IACHI,IAAI,EAAEN,QAAQ;IACdO,IAAI,EAAEN;EACR,CAAQ,CAAC;AACX","ignoreList":[]}
|
|
@@ -14,6 +14,7 @@ import { useFile } from '../../../hooks/useFile';
|
|
|
14
14
|
import { getMediaTypeFromUrl } from '../../../../core/utils/url';
|
|
15
15
|
import { LoadingOverlay } from '../../../components/legacy/LoadingOverlay';
|
|
16
16
|
import mime from 'mime';
|
|
17
|
+
import { appendFileToFormData } from '../../../../core/utils/fileUpload';
|
|
17
18
|
import { useToast } from '../../../../core/stores/slices/toastSlice';
|
|
18
19
|
import { SafeAreaView } from 'react-native-safe-area-context';
|
|
19
20
|
const AmityDraftStoryPage = ({
|
|
@@ -94,11 +95,7 @@ const AmityDraftStoryPage = ({
|
|
|
94
95
|
const formData = new FormData();
|
|
95
96
|
const isImage = type === StoryType.image;
|
|
96
97
|
const mimeType = mime.getType(mediaType.uri) ?? (isImage ? 'image/jpeg' : 'video/mp4');
|
|
97
|
-
formData
|
|
98
|
-
uri: mediaType.uri,
|
|
99
|
-
name: mediaType.name,
|
|
100
|
-
type: mimeType
|
|
101
|
-
});
|
|
98
|
+
await appendFileToFormData(formData, 'files', mediaType.uri, mediaType.name, mimeType);
|
|
102
99
|
try {
|
|
103
100
|
setLoading(true);
|
|
104
101
|
if (type === StoryType.image) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Alert","Image","Text","TouchableOpacity","View","useCallback","useState","useEffect","memo","LinearGradient","Video","leftLongArrow","rightLongArrow","storyHyperLinkIcon","SvgXml","useStyles","CommunityRepository","StoryRepository","ComponentID","ElementID","PageID","StoryType","ImageSizeState","useTheme","useConfigImageUri","HyperlinkConfig","useFile","getMediaTypeFromUrl","LoadingOverlay","mime","useToast","SafeAreaView","AmityDraftStoryPage","targetId","targetType","mediaType","onCreateStory","onDiscardStory","_hyperlink$","_hyperlink$2","_hyperlink$3","_hyperlink$4","type","uri","styles","getImage","imageDisplayMode","setImageDisplayMode","isVisibleModal","setIsVisibleModal","communityAvatarUrl","setCommunityAvatarUrl","hyperlink","setHyperlink","undefined","loading","setLoading","theme","aspectRatioIcon","configPath","page","CreateStoryPage","component","WildCardComponent","element","AspectRatioBtn","configKey","hyperLinkIcon","StoryHyperLinkBtn","showToast","getCommunity","error","isLoading","data","image","fileId","avatarFileId","imageSize","small","onPressBack","alert","text","style","onPress","onPressAspectRatio","prev","onPressHyperLink","onPressShareStory","formData","FormData","isImage","mimeType","getType","
|
|
1
|
+
{"version":3,"names":["Alert","Image","Text","TouchableOpacity","View","useCallback","useState","useEffect","memo","LinearGradient","Video","leftLongArrow","rightLongArrow","storyHyperLinkIcon","SvgXml","useStyles","CommunityRepository","StoryRepository","ComponentID","ElementID","PageID","StoryType","ImageSizeState","useTheme","useConfigImageUri","HyperlinkConfig","useFile","getMediaTypeFromUrl","LoadingOverlay","mime","appendFileToFormData","useToast","SafeAreaView","AmityDraftStoryPage","targetId","targetType","mediaType","onCreateStory","onDiscardStory","_hyperlink$","_hyperlink$2","_hyperlink$3","_hyperlink$4","type","uri","styles","getImage","imageDisplayMode","setImageDisplayMode","isVisibleModal","setIsVisibleModal","communityAvatarUrl","setCommunityAvatarUrl","hyperlink","setHyperlink","undefined","loading","setLoading","theme","aspectRatioIcon","configPath","page","CreateStoryPage","component","WildCardComponent","element","AspectRatioBtn","configKey","hyperLinkIcon","StoryHyperLinkBtn","showToast","getCommunity","error","isLoading","data","image","fileId","avatarFileId","imageSize","small","onPressBack","alert","text","style","onPress","onPressAspectRatio","prev","onPressHyperLink","onPressShareStory","formData","FormData","isImage","mimeType","getType","name","createImageStory","createVideoStory","message","onHyperLinkSubmit","item","storyItem","React","createElement","container","imageContainer","Fragment","source","blurredBackground","resizeMode","blurRadius","paused","repeat","colors","start","x","y","end","storyGradient","length","hyperlinkContainer","xml","width","height","hyperlinkText","customText","url","shareStoryBtn","require","avatar","shareStoryTxt","baseShade2","backBtn","aspectRatioBtn","aspectRationIcon","hyperLinkBtn","hyperlinkItem"],"sourceRoot":"../../../../../../src","sources":["social/features/story/Draft/Draft.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUpload.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/useUpload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"useUpload.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/useUpload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAU9D,KAAK,iBAAiB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC;AAEvE,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC3B,UAAU,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;CAChC,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAC9C,OAAO,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;CACzC,CAAC;AAEF,wBAAgB,SAAS;kDAcpB,uBAAuB;;;;;;EAuC3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../../src/core/legacy/file.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../../src/core/legacy/file.tsx"],"names":[],"mappings":"AAKA,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAC1C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAqB5B;AACD,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAC1C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAiDhC;AACD,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAC1C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CA2B5B;AACD,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAY/B"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* fileUpload.ts
|
|
3
|
+
*
|
|
4
|
+
* Helper for attaching a local file to a FormData for upload to the Amity SDK.
|
|
5
|
+
*
|
|
6
|
+
* Why the `{ uri, name, type }` object (and NOT a Blob)
|
|
7
|
+
* -----------------------------------------------------
|
|
8
|
+
* React Native's `FormData.getParts()` only turns a value into a multipart
|
|
9
|
+
* *file* part when that value is an object carrying a `uri`:
|
|
10
|
+
*
|
|
11
|
+
* • `name` → the `filename` in the `Content-Disposition` header
|
|
12
|
+
* • `type` → the part's `Content-Type`
|
|
13
|
+
* • `uri` → the local path the native networking layer streams bytes from
|
|
14
|
+
*
|
|
15
|
+
* This is the canonical React Native upload pattern and works on BOTH the Old
|
|
16
|
+
* and the New (Bridgeless / JSI) Architecture — RN 0.83 did not change this JS
|
|
17
|
+
* API. The Amity SDK's `uploadImage` is built around it too: it calls
|
|
18
|
+
* `formData.getAll('files')` and reads `files[0].name` to set
|
|
19
|
+
* `preferredFilename`.
|
|
20
|
+
*
|
|
21
|
+
* Do NOT append a Blob here. A Blob produced by `fetch(uri).blob()` has:
|
|
22
|
+
* • no `uri` → RN attaches no file body, so the request carries no
|
|
23
|
+
* bytes and the server responds `400 "No files
|
|
24
|
+
* uploaded."`
|
|
25
|
+
* • no top-level `name` → `files[0].name` is `null`, so `preferredFilename`
|
|
26
|
+
* is sent as `null`.
|
|
27
|
+
* That combination is exactly the failure seen in PDT-3461.
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Append a local file to `formData` as a React-Native multipart file part.
|
|
31
|
+
*
|
|
32
|
+
* @param formData The FormData instance to mutate.
|
|
33
|
+
* @param fieldName The multipart field name (e.g. `'files'`).
|
|
34
|
+
* @param fileUri Local file URI (`file://…` or `content://…`).
|
|
35
|
+
* @param fileName The filename sent in the Content-Disposition header.
|
|
36
|
+
* @param mimeType MIME type for the part (e.g. `'image/jpeg'`).
|
|
37
|
+
*/
|
|
38
|
+
export declare function appendFileToFormData(formData: FormData, fieldName: string, fileUri: string, fileName: string, mimeType: string): void;
|
|
39
|
+
//# sourceMappingURL=fileUpload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileUpload.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/fileUpload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,IAAI,CAaN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Draft.d.ts","sourceRoot":"","sources":["../../../../../../src/social/features/story/Draft/Draft.tsx"],"names":[],"mappings":"AA0BA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;;
|
|
1
|
+
{"version":3,"file":"Draft.d.ts","sourceRoot":"","sources":["../../../../../../src/social/features/story/Draft/Draft.tsx"],"names":[],"mappings":"AA0BA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;;AA+PtD,wBAAyC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { FileRepository } from '@amityco/ts-sdk-react-native';
|
|
2
|
-
import { Alert
|
|
2
|
+
import { Alert } from 'react-native';
|
|
3
3
|
import { useMutation } from '@tanstack/react-query';
|
|
4
4
|
import { ERROR_CODE } from '../constants';
|
|
5
|
+
import { appendFileToFormData } from '../utils/fileUpload';
|
|
5
6
|
|
|
6
7
|
type UploadImageResponse = Awaited<
|
|
7
8
|
ReturnType<typeof FileRepository.uploadImage>
|
|
@@ -39,14 +40,11 @@ export function useUpload() {
|
|
|
39
40
|
const formData = new FormData();
|
|
40
41
|
const parts = file.split('/');
|
|
41
42
|
const fileName = parts[parts.length - 1];
|
|
42
|
-
const fileType = Platform.OS === 'ios' ? 'image/jpeg' : 'image/jpg';
|
|
43
|
-
const uri = Platform.OS === 'android' ? file : file.replace('file://', '');
|
|
44
43
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
});
|
|
44
|
+
// Attach the file as a React-Native { uri, name, type } multipart part.
|
|
45
|
+
// This works on both the Old and New (Bridgeless) Architecture and is what
|
|
46
|
+
// the SDK's uploadImage expects (it reads files[0].name for preferredFilename).
|
|
47
|
+
appendFileToFormData(formData, 'files', file, fileName, 'image/jpeg');
|
|
50
48
|
|
|
51
49
|
return await mutateAsync(
|
|
52
50
|
{
|
package/src/core/legacy/file.tsx
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { FileRepository, ContentFeedType } from '@amityco/ts-sdk-react-native';
|
|
2
2
|
|
|
3
3
|
import { Platform } from 'react-native';
|
|
4
|
+
import { appendFileToFormData } from '../utils/fileUpload';
|
|
4
5
|
|
|
5
6
|
export async function uploadFile(
|
|
6
7
|
filePath: string,
|
|
@@ -11,14 +12,8 @@ export async function uploadFile(
|
|
|
11
12
|
const parts = filePath.split('/');
|
|
12
13
|
const fileName = parts[parts.length - 1];
|
|
13
14
|
const fileType = Platform.OS === 'ios' ? 'image/jpeg' : 'image/jpg';
|
|
14
|
-
const uri =
|
|
15
|
-
Platform.OS === 'android' ? filePath : filePath.replace('file://', '');
|
|
16
15
|
|
|
17
|
-
formData
|
|
18
|
-
name: fileName,
|
|
19
|
-
type: fileType,
|
|
20
|
-
uri: uri,
|
|
21
|
-
});
|
|
16
|
+
await appendFileToFormData(formData, 'files', filePath, fileName, fileType);
|
|
22
17
|
|
|
23
18
|
const { data: file } = await FileRepository.uploadFile(
|
|
24
19
|
formData,
|
|
@@ -43,14 +38,14 @@ export async function uploadImageFile(
|
|
|
43
38
|
const parts = filePath.split('/');
|
|
44
39
|
const fileName = parts[parts.length - 1];
|
|
45
40
|
const fileType = Platform.OS === 'ios' ? 'image/jpeg' : 'image/jpg';
|
|
46
|
-
const uri =
|
|
47
|
-
Platform.OS === 'android' ? filePath : filePath.replace('file://', '');
|
|
48
41
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
42
|
+
await appendFileToFormData(
|
|
43
|
+
formData,
|
|
44
|
+
'files',
|
|
45
|
+
filePath,
|
|
46
|
+
fileName,
|
|
47
|
+
fileType
|
|
48
|
+
);
|
|
54
49
|
|
|
55
50
|
const { data: file } = await FileRepository.uploadImage(
|
|
56
51
|
formData,
|
|
@@ -94,15 +89,14 @@ export async function uploadVideoFile(
|
|
|
94
89
|
const formData = new FormData();
|
|
95
90
|
const parts = filePath.split('/');
|
|
96
91
|
const fileName = parts[parts.length - 1];
|
|
97
|
-
// const fileType = Platform.OS === 'ios' ? 'image/jpeg' : 'image/jpg';
|
|
98
|
-
const uri =
|
|
99
|
-
Platform.OS === 'android' ? filePath : filePath.replace('file://', '');
|
|
100
92
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
93
|
+
await appendFileToFormData(
|
|
94
|
+
formData,
|
|
95
|
+
'files',
|
|
96
|
+
filePath,
|
|
97
|
+
fileName,
|
|
98
|
+
'video/mp4'
|
|
99
|
+
);
|
|
106
100
|
|
|
107
101
|
const { data: file } = await FileRepository.uploadVideo(
|
|
108
102
|
formData,
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* fileUpload.ts
|
|
3
|
+
*
|
|
4
|
+
* Helper for attaching a local file to a FormData for upload to the Amity SDK.
|
|
5
|
+
*
|
|
6
|
+
* Why the `{ uri, name, type }` object (and NOT a Blob)
|
|
7
|
+
* -----------------------------------------------------
|
|
8
|
+
* React Native's `FormData.getParts()` only turns a value into a multipart
|
|
9
|
+
* *file* part when that value is an object carrying a `uri`:
|
|
10
|
+
*
|
|
11
|
+
* • `name` → the `filename` in the `Content-Disposition` header
|
|
12
|
+
* • `type` → the part's `Content-Type`
|
|
13
|
+
* • `uri` → the local path the native networking layer streams bytes from
|
|
14
|
+
*
|
|
15
|
+
* This is the canonical React Native upload pattern and works on BOTH the Old
|
|
16
|
+
* and the New (Bridgeless / JSI) Architecture — RN 0.83 did not change this JS
|
|
17
|
+
* API. The Amity SDK's `uploadImage` is built around it too: it calls
|
|
18
|
+
* `formData.getAll('files')` and reads `files[0].name` to set
|
|
19
|
+
* `preferredFilename`.
|
|
20
|
+
*
|
|
21
|
+
* Do NOT append a Blob here. A Blob produced by `fetch(uri).blob()` has:
|
|
22
|
+
* • no `uri` → RN attaches no file body, so the request carries no
|
|
23
|
+
* bytes and the server responds `400 "No files
|
|
24
|
+
* uploaded."`
|
|
25
|
+
* • no top-level `name` → `files[0].name` is `null`, so `preferredFilename`
|
|
26
|
+
* is sent as `null`.
|
|
27
|
+
* That combination is exactly the failure seen in PDT-3461.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import { Platform } from 'react-native';
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Append a local file to `formData` as a React-Native multipart file part.
|
|
34
|
+
*
|
|
35
|
+
* @param formData The FormData instance to mutate.
|
|
36
|
+
* @param fieldName The multipart field name (e.g. `'files'`).
|
|
37
|
+
* @param fileUri Local file URI (`file://…` or `content://…`).
|
|
38
|
+
* @param fileName The filename sent in the Content-Disposition header.
|
|
39
|
+
* @param mimeType MIME type for the part (e.g. `'image/jpeg'`).
|
|
40
|
+
*/
|
|
41
|
+
export function appendFileToFormData(
|
|
42
|
+
formData: FormData,
|
|
43
|
+
fieldName: string,
|
|
44
|
+
fileUri: string,
|
|
45
|
+
fileName: string,
|
|
46
|
+
mimeType: string
|
|
47
|
+
): void {
|
|
48
|
+
// Android keeps the URI as-is (`content://` / `file://` are both streamable);
|
|
49
|
+
// iOS expects the `file://` scheme stripped to a bare path.
|
|
50
|
+
const uri =
|
|
51
|
+
Platform.OS === 'android' ? fileUri : fileUri.replace('file://', '');
|
|
52
|
+
|
|
53
|
+
// RN's FormData.append is typed for the legacy `{ uri, name, type }` object
|
|
54
|
+
// but its TS types don't expose that overload, so we cast to `any`.
|
|
55
|
+
formData.append(fieldName, {
|
|
56
|
+
uri,
|
|
57
|
+
name: fileName,
|
|
58
|
+
type: mimeType,
|
|
59
|
+
} as any);
|
|
60
|
+
}
|
|
@@ -29,6 +29,7 @@ import { useFile } from '../../../hooks/useFile';
|
|
|
29
29
|
import { getMediaTypeFromUrl } from '../../../../core/utils/url';
|
|
30
30
|
import { LoadingOverlay } from '../../../components/legacy/LoadingOverlay';
|
|
31
31
|
import mime from 'mime';
|
|
32
|
+
import { appendFileToFormData } from '../../../../core/utils/fileUpload';
|
|
32
33
|
import { useToast } from '../../../../core/stores/slices/toastSlice';
|
|
33
34
|
import { SafeAreaView } from 'react-native-safe-area-context';
|
|
34
35
|
|
|
@@ -119,11 +120,14 @@ const AmityDraftStoryPage: FC<IAmityDraftStoryPage> = ({
|
|
|
119
120
|
const isImage = type === StoryType.image;
|
|
120
121
|
const mimeType =
|
|
121
122
|
mime.getType(mediaType.uri) ?? (isImage ? 'image/jpeg' : 'video/mp4');
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
123
|
+
|
|
124
|
+
await appendFileToFormData(
|
|
125
|
+
formData,
|
|
126
|
+
'files',
|
|
127
|
+
mediaType.uri,
|
|
128
|
+
mediaType.name,
|
|
129
|
+
mimeType
|
|
130
|
+
);
|
|
127
131
|
|
|
128
132
|
try {
|
|
129
133
|
setLoading(true);
|