react-native-my-uploader-android 1.0.38 → 1.0.40
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/android/src/main/java/com/myuploaderandroid/MyUploaderModule.kt +82 -32
- package/lib/commonjs/components/MyUploader.js +17 -4
- package/lib/commonjs/components/MyUploader.js.map +1 -1
- package/lib/commonjs/index.d.js.map +1 -1
- package/lib/commonjs/index.js +7 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/components/MyUploader.js +15 -3
- package/lib/module/components/MyUploader.js.map +1 -1
- package/lib/module/index.d.js +0 -2
- package/lib/module/index.d.js.map +1 -1
- package/lib/module/index.js +2 -2
- package/lib/module/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/MyUploader.tsx +20 -5
- package/src/index.d.ts +3 -1
- package/src/index.ts +2 -2
|
@@ -102,70 +102,120 @@ class MyUploaderModule(private val reactContext: ReactApplicationContext) :
|
|
|
102
102
|
fun rotateImage(base64String: String, angle: Double, promise: Promise) {
|
|
103
103
|
Thread {
|
|
104
104
|
try {
|
|
105
|
-
|
|
106
|
-
val cleanBase64 =
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
105
|
+
/* 1️⃣ Base64 Temizleme (Prefix, Boşluk ve Satır Başlarını yok eder) */
|
|
106
|
+
val cleanBase64 = base64String
|
|
107
|
+
.substringAfter(",")
|
|
108
|
+
.replace("\n", "")
|
|
109
|
+
.replace("\r", "")
|
|
110
|
+
.replace(" ", "")
|
|
111
|
+
.trim()
|
|
112
|
+
|
|
113
|
+
if (cleanBase64.isEmpty()) {
|
|
114
|
+
reactContext.runOnUiQueueThread {
|
|
115
|
+
promise.reject("E_EMPTY_BASE64", "Base64 verisi boş veya geçersiz.")
|
|
116
|
+
}
|
|
117
|
+
return@Thread
|
|
110
118
|
}
|
|
111
119
|
|
|
112
|
-
|
|
120
|
+
/* 2️⃣ Base64 Decode */
|
|
121
|
+
val decodedBytes = try {
|
|
122
|
+
Base64.decode(cleanBase64, Base64.DEFAULT)
|
|
123
|
+
} catch (e: IllegalArgumentException) {
|
|
124
|
+
reactContext.runOnUiQueueThread {
|
|
125
|
+
promise.reject("E_BASE64_ERROR", "Geçersiz Base64 formatı.")
|
|
126
|
+
}
|
|
127
|
+
return@Thread
|
|
128
|
+
}
|
|
113
129
|
|
|
114
|
-
|
|
130
|
+
/* 3️⃣ Bitmap Decode - Downscale Stratejisi */
|
|
115
131
|
val options = BitmapFactory.Options().apply {
|
|
116
132
|
inPreferredConfig = Bitmap.Config.ARGB_8888
|
|
117
133
|
}
|
|
118
134
|
|
|
119
|
-
|
|
120
|
-
|
|
135
|
+
var originalBitmap = BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.size, options)
|
|
136
|
+
|
|
137
|
+
// EĞER RESİM ÇOK BÜYÜKSE (null dönerse), 1/2 oranında küçülterek tekrar dene
|
|
138
|
+
if (originalBitmap == null) {
|
|
139
|
+
options.inSampleSize = 2
|
|
140
|
+
originalBitmap = BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.size, options)
|
|
141
|
+
}
|
|
121
142
|
|
|
122
143
|
if (originalBitmap == null) {
|
|
123
144
|
reactContext.runOnUiQueueThread {
|
|
124
|
-
promise.reject("E_DECODE_ERROR", "Görüntü çözümlenemedi.")
|
|
145
|
+
promise.reject("E_DECODE_ERROR", "Görüntü çözümlenemedi (Hafıza yetersiz veya veri bozuk).")
|
|
125
146
|
}
|
|
126
147
|
return@Thread
|
|
127
148
|
}
|
|
128
149
|
|
|
129
|
-
|
|
130
|
-
val matrix = Matrix()
|
|
131
|
-
|
|
150
|
+
/* 4️⃣ Döndürme (Rotate) İşlemi */
|
|
151
|
+
val matrix = Matrix().apply {
|
|
152
|
+
postRotate(angle.toFloat())
|
|
153
|
+
}
|
|
132
154
|
|
|
133
155
|
val rotatedBitmap = Bitmap.createBitmap(
|
|
134
|
-
originalBitmap,
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
originalBitmap.height,
|
|
139
|
-
matrix,
|
|
140
|
-
true
|
|
141
|
-
)
|
|
142
|
-
|
|
143
|
-
// 4. Base64 encode
|
|
156
|
+
originalBitmap, 0, 0, originalBitmap.width, originalBitmap.height, matrix, true
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
/* 5️⃣ Tekrar Base64'e Encode Etme */
|
|
144
160
|
val outputStream = ByteArrayOutputStream()
|
|
145
161
|
rotatedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream)
|
|
162
|
+
val rotatedBytes = outputStream.toByteArray()
|
|
163
|
+
val encodedBase64 = Base64.encodeToString(rotatedBytes, Base64.NO_WRAP)
|
|
146
164
|
|
|
147
|
-
|
|
148
|
-
outputStream.toByteArray(),
|
|
149
|
-
Base64.NO_WRAP
|
|
150
|
-
)
|
|
151
|
-
|
|
152
|
-
// 5. Memory cleanup
|
|
165
|
+
/* 6️⃣ Bellek Temizliği (Cleanup) */
|
|
153
166
|
originalBitmap.recycle()
|
|
154
167
|
rotatedBitmap.recycle()
|
|
168
|
+
outputStream.close()
|
|
155
169
|
|
|
156
|
-
|
|
170
|
+
/* 7️⃣ Sonucu UI Thread üzerinden döndür */
|
|
157
171
|
reactContext.runOnUiQueueThread {
|
|
158
|
-
promise.resolve(
|
|
172
|
+
promise.resolve(encodedBase64)
|
|
159
173
|
}
|
|
160
174
|
|
|
175
|
+
} catch (e: OutOfMemoryError) {
|
|
176
|
+
reactContext.runOnUiQueueThread {
|
|
177
|
+
promise.reject("E_OOM", "Hafıza limitine ulaşıldı, resim çok büyük.")
|
|
178
|
+
}
|
|
161
179
|
} catch (e: Exception) {
|
|
162
180
|
reactContext.runOnUiQueueThread {
|
|
163
|
-
promise.reject("E_ROTATE_ERROR", "
|
|
181
|
+
promise.reject("E_ROTATE_ERROR", "Döndürme hatası: ${e.message}")
|
|
164
182
|
}
|
|
165
183
|
}
|
|
166
184
|
}.start()
|
|
167
185
|
}
|
|
186
|
+
|
|
187
|
+
@ReactMethod
|
|
188
|
+
fun getBase64FromUri(cropFileUri: String, promise: Promise) {
|
|
189
|
+
Thread {
|
|
190
|
+
try {
|
|
191
|
+
val uri = Uri.parse(cropFileUri)
|
|
192
|
+
val contentResolver = reactApplicationContext.contentResolver
|
|
193
|
+
|
|
194
|
+
// 1️⃣ MIME TYPE tespiti
|
|
195
|
+
val mimeType = contentResolver.getType(uri)
|
|
196
|
+
?: URLConnection.guessContentTypeFromName(cropFileUri)
|
|
197
|
+
?: "image/jpeg"
|
|
198
|
+
|
|
199
|
+
// 2️⃣ InputStream açma ve Byte okuma
|
|
200
|
+
val inputStream = contentResolver.openInputStream(uri)
|
|
201
|
+
?: throw Exception("Dosya yolu geçersiz veya erişilemedi.")
|
|
202
|
+
|
|
203
|
+
inputStream.use { stream ->
|
|
204
|
+
// NOT: Crop sonrası küçük dosyalar için readBytes performanslıdır.
|
|
205
|
+
val bytes = stream.readBytes()
|
|
206
|
+
|
|
207
|
+
// 3️⃣ Base64 çevrimi
|
|
208
|
+
val base64 = Base64.encodeToString(bytes, Base64.NO_WRAP)
|
|
209
|
+
|
|
210
|
+
// 4️⃣ Sonucu doğrudan döndür (Thread-safe)
|
|
211
|
+
promise.resolve("data:$mimeType;base64,$base64")
|
|
212
|
+
}
|
|
168
213
|
|
|
214
|
+
} catch (e: Exception) {
|
|
215
|
+
promise.reject("E_BASE64_ERROR", e.message)
|
|
216
|
+
}
|
|
217
|
+
}.start()
|
|
218
|
+
}
|
|
169
219
|
|
|
170
220
|
override fun onActivityResult(activity: Activity, requestCode: Int, resultCode: Int, data: Intent?) {
|
|
171
221
|
if (requestCode != REQUEST_CODE || pickerPromise == null) { return }
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.pickFile = exports.default = exports.RotateImage = void 0;
|
|
6
|
+
exports.pickFile = exports.getBase64FromUri = exports.default = exports.RotateImage = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
9
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
@@ -27,20 +27,33 @@ const pickFile = async (options = {}) => {
|
|
|
27
27
|
return await NativeUploadPicker.openDocument(nativeOptions);
|
|
28
28
|
};
|
|
29
29
|
exports.pickFile = pickFile;
|
|
30
|
+
const getBase64FromUri = async cropFileUri => {
|
|
31
|
+
if (!NativeUploadPicker) {
|
|
32
|
+
throw new Error("UploadDocumentPicker modülü linklenmemiş.");
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
return await NativeUploadPicker.getBase64FromUri(cropFileUri);
|
|
36
|
+
} catch (error) {
|
|
37
|
+
throw new Error(`getBase64FromUri Hatası: ${error.message}`);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
exports.getBase64FromUri = getBase64FromUri;
|
|
30
41
|
const RotateImage = async ({
|
|
31
42
|
base64,
|
|
32
43
|
angle
|
|
33
44
|
}) => {
|
|
34
45
|
if (!NativeUploadPicker) {
|
|
35
|
-
throw new Error("UploadDocumentPicker
|
|
46
|
+
throw new Error("UploadDocumentPicker modülü linklenmemiş.");
|
|
36
47
|
}
|
|
37
48
|
try {
|
|
49
|
+
// Native sadece saf base64 string'i döner
|
|
38
50
|
const rotatedBase64 = await NativeUploadPicker.rotateImage(base64, angle);
|
|
39
51
|
|
|
40
|
-
//
|
|
52
|
+
// Uygulama tarafında doğrudan <Image /> içinde kullanılabilmesi için prefix eklenir
|
|
41
53
|
return `data:image/jpeg;base64,${rotatedBase64}`;
|
|
42
54
|
} catch (error) {
|
|
43
|
-
|
|
55
|
+
// Hata mesajını daha okunaklı fırlatıyoruz
|
|
56
|
+
throw new Error(`RotateImage Hatası: ${error.message}`);
|
|
44
57
|
}
|
|
45
58
|
};
|
|
46
59
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","UploadDocumentPicker","NativeUploadPicker","NativeModules","pickFile","options","_options$multipleFile","_options$maxFiles","_options$maxSize","_options$fileTypes","_options$excludedUris","Error","nativeOptions","multipleFiles","maxFiles","maxSize","fileTypes","excludedUris","openDocument","exports","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","UploadDocumentPicker","NativeUploadPicker","NativeModules","pickFile","options","_options$multipleFile","_options$maxFiles","_options$maxSize","_options$fileTypes","_options$excludedUris","Error","nativeOptions","multipleFiles","maxFiles","maxSize","fileTypes","excludedUris","openDocument","exports","getBase64FromUri","cropFileUri","error","message","RotateImage","base64","angle","rotatedBase64","rotateImage","MyUploader","onSelect","onError","buttonPlaceHolder","ButtonStyle","ButtonTextStyle","disabled","isLoading","setIsLoading","useState","handlePress","files","console","createElement","TouchableOpacity","style","styles","button","onPress","ActivityIndicator","color","Text","text","StyleSheet","create","backgroundColor","padding","borderRadius","alignItems","justifyContent","fontWeight","fontSize","_default"],"sources":["MyUploader.tsx"],"sourcesContent":["import React, { useState } from 'react';\r\nimport { TouchableOpacity, Text, StyleSheet, ActivityIndicator, NativeModules } from 'react-native';\r\nimport type { MyUploaderProps, DocumentPickerOptions, FileInfo, RotateImageProps } from '../types';\r\n\r\nconst { UploadDocumentPicker: NativeUploadPicker } = NativeModules;\r\n\r\n// 1. Standalone pickFile Fonksiyonu\r\nexport const pickFile = async (options: DocumentPickerOptions = {}): Promise<FileInfo[]> => {\r\n if (!NativeUploadPicker) throw new Error(\"DocumentPicker module is not linked.\");\r\n\r\n // Native tarafa gönderilecek options\r\n const nativeOptions = {\r\n multipleFiles: options.multipleFiles ?? false,\r\n maxFiles: options.maxFiles ?? 0,\r\n maxSize: options.maxSize ?? 0,\r\n fileTypes: options.fileTypes ?? ['*/*'],\r\n excludedUris: options.excludedUris ?? [],\r\n };\r\n\r\n return await NativeUploadPicker.openDocument(nativeOptions);\r\n};\r\n\r\nexport const getBase64FromUri = async (cropFileUri: string): Promise<string> => {\r\n if (!NativeUploadPicker) {\r\n throw new Error(\"UploadDocumentPicker modülü linklenmemiş.\");\r\n }\r\n\r\n try {\r\n return await NativeUploadPicker.getBase64FromUri(cropFileUri);\r\n } catch (error: any) {\r\n throw new Error(`getBase64FromUri Hatası: ${error.message}`);\r\n }\r\n};\r\n\r\n\r\n\r\nexport const RotateImage = async ({ base64, angle }: RotateImageProps): Promise<string> => {\r\n if (!NativeUploadPicker) {\r\n throw new Error(\"UploadDocumentPicker modülü linklenmemiş.\");\r\n }\r\n\r\n try {\r\n // Native sadece saf base64 string'i döner\r\n const rotatedBase64: string = await NativeUploadPicker.rotateImage(base64, angle);\r\n\r\n // Uygulama tarafında doğrudan <Image /> içinde kullanılabilmesi için prefix eklenir\r\n return `data:image/jpeg;base64,${rotatedBase64}`;\r\n } catch (error: any) {\r\n // Hata mesajını daha okunaklı fırlatıyoruz\r\n throw new Error(`RotateImage Hatası: ${error.message}`);\r\n }\r\n};\r\n\r\n// 2. MyUploader Bileşeni\r\nconst MyUploader: React.FC<MyUploaderProps> = ({\r\n onSelect,\r\n onError,\r\n buttonPlaceHolder = \"Dosya Seç\",\r\n ButtonStyle,\r\n ButtonTextStyle,\r\n disabled = false,\r\n multipleFiles = false,\r\n fileTypes = ['*/*'],\r\n maxSize = 0,\r\n maxFiles = 0,\r\n excludedUris = [],\r\n}) => {\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const handlePress = async () => {\r\n if (disabled || isLoading) return;\r\n setIsLoading(true);\r\n\r\n try {\r\n const files = await pickFile({\r\n multipleFiles,\r\n fileTypes,\r\n maxSize,\r\n maxFiles,\r\n excludedUris\r\n });\r\n\r\n onSelect(files);\r\n } catch (error: any) {\r\n if (onError) {\r\n onError(error);\r\n } else {\r\n console.error(\"MyUploader Error:\", error);\r\n }\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n return (\r\n <TouchableOpacity\r\n style={[styles.button, ButtonStyle, (disabled || isLoading) && styles.disabled]}\r\n onPress={handlePress}\r\n disabled={disabled || isLoading}\r\n >\r\n {isLoading ? (\r\n <ActivityIndicator color=\"#FFF\" />\r\n ) : (\r\n <Text style={[styles.text, ButtonTextStyle]}>{buttonPlaceHolder}</Text>\r\n )}\r\n </TouchableOpacity>\r\n );\r\n};\r\n\r\nconst styles = StyleSheet.create({\r\n button: {\r\n backgroundColor: '#6200EE',\r\n padding: 12,\r\n borderRadius: 8,\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n },\r\n text: {\r\n color: '#FFF',\r\n fontWeight: '600',\r\n fontSize: 16\r\n },\r\n disabled: {\r\n backgroundColor: '#B0B0B0'\r\n }\r\n});\r\n\r\nexport default MyUploader;"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_types","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["index.d.ts"],"sourcesContent":["import * as React from 'react';\r\nimport type { DocumentPickerOptions, MyUploaderProps, FileInfo, DownloadFileProps ,RotateImageProps } from './types';\r\n// import type { DownloadFileProps } from './types';\r\n\r\nexport * from './types';\r\n\r\n// DownloadFile Component Tanımı (3. Bunu ekledik)\r\n// export declare const DownloadFile: React.FC<DownloadFileProps>;\r\n\r\n
|
|
1
|
+
{"version":3,"names":["_types","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["index.d.ts"],"sourcesContent":["import * as React from 'react';\r\nimport type { DocumentPickerOptions, MyUploaderProps, FileInfo, DownloadFileProps ,RotateImageProps } from './types';\r\n// import type { DownloadFileProps } from './types';\r\n\r\nexport * from './types';\r\n\r\n// DownloadFile Component Tanımı (3. Bunu ekledik)\r\n// export declare const DownloadFile: React.FC<DownloadFileProps>;\r\n\r\n\r\nexport declare function pickFile(options?: DocumentPickerOptions): Promise<FileInfo[]>;\r\nexport declare function RotateImage(props:RotateImageProps):Promise<string>;\r\nexport declare function getBase64FromUri(cropFileUri: string): Promise<string>;\r\n\r\nexport declare const DownloadFile :React.FC<DownloadFileProps>;\r\nexport declare const MyUploader: React.FC<MyUploaderProps>;\r\n\r\n// Varsayılan dışa aktarım (İsteğe bağlı, genellikle ana bileşen verilir)\r\ndeclare const _default: React.FC<MyUploaderProps>;\r\nexport default _default;"],"mappings":";;;;;AAIA,IAAAA,MAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,MAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,MAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,MAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -7,6 +7,7 @@ var _exportNames = {
|
|
|
7
7
|
MyUploader: true,
|
|
8
8
|
pickFile: true,
|
|
9
9
|
RotateImage: true,
|
|
10
|
+
getBase64FromUri: true,
|
|
10
11
|
DownloadFile: true
|
|
11
12
|
};
|
|
12
13
|
Object.defineProperty(exports, "DownloadFile", {
|
|
@@ -28,6 +29,12 @@ Object.defineProperty(exports, "RotateImage", {
|
|
|
28
29
|
}
|
|
29
30
|
});
|
|
30
31
|
exports.default = void 0;
|
|
32
|
+
Object.defineProperty(exports, "getBase64FromUri", {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
get: function () {
|
|
35
|
+
return _MyUploader.getBase64FromUri;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
31
38
|
Object.defineProperty(exports, "pickFile", {
|
|
32
39
|
enumerable: true,
|
|
33
40
|
get: function () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_MyUploader","_interopRequireWildcard","require","_DownloadFile","_types","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","set","getOwnPropertyDescriptor","_default","MyUploader"],"sources":["index.ts"],"sourcesContent":["import MyUploader,{pickFile,RotateImage} from \"./components/MyUploader\";\r\nimport {DownloadFile} from \"./components/DownloadFile\";\r\n\r\n\r\n// Sadece bu paketle ilgili olanları dışa aktar\r\nexport { MyUploader, pickFile ,DownloadFile ,RotateImage };\r\nexport * from './types';\r\n\r\n// Varsayılan dışa aktarım olarak da ana bileşeni verelim\r\nexport default MyUploader;\r\n\r\n\r\n\r\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["_MyUploader","_interopRequireWildcard","require","_DownloadFile","_types","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","set","getOwnPropertyDescriptor","_default","MyUploader"],"sources":["index.ts"],"sourcesContent":["import MyUploader,{pickFile,RotateImage,getBase64FromUri} from \"./components/MyUploader\";\r\nimport {DownloadFile} from \"./components/DownloadFile\";\r\n\r\n\r\n// Sadece bu paketle ilgili olanları dışa aktar\r\nexport { MyUploader, pickFile ,DownloadFile ,RotateImage,getBase64FromUri };\r\nexport * from './types';\r\n\r\n// Varsayılan dışa aktarım olarak da ana bileşeni verelim\r\nexport default MyUploader;\r\n\r\n\r\n\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAKA,IAAAE,MAAA,GAAAF,OAAA;AAAAG,MAAA,CAAAC,IAAA,CAAAF,MAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,MAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,MAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AAAwB,SAAAP,wBAAAgB,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAlB,uBAAA,YAAAA,CAAAgB,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAP,GAAA,CAAAC,CAAA,GAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAR,cAAA,CAAAC,IAAA,CAAAM,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAlB,MAAA,CAAAS,cAAA,KAAAT,MAAA,CAAAyB,wBAAA,CAAAb,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAR,GAAA,IAAAQ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAFxB;AAIA;AAAA,IAAAa,QAAA,GAAAlB,OAAA,CAAAc,OAAA,GACeK,mBAAU","ignoreList":[]}
|
|
@@ -19,20 +19,32 @@ export const pickFile = async (options = {}) => {
|
|
|
19
19
|
};
|
|
20
20
|
return await NativeUploadPicker.openDocument(nativeOptions);
|
|
21
21
|
};
|
|
22
|
+
export const getBase64FromUri = async cropFileUri => {
|
|
23
|
+
if (!NativeUploadPicker) {
|
|
24
|
+
throw new Error("UploadDocumentPicker modülü linklenmemiş.");
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
return await NativeUploadPicker.getBase64FromUri(cropFileUri);
|
|
28
|
+
} catch (error) {
|
|
29
|
+
throw new Error(`getBase64FromUri Hatası: ${error.message}`);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
22
32
|
export const RotateImage = async ({
|
|
23
33
|
base64,
|
|
24
34
|
angle
|
|
25
35
|
}) => {
|
|
26
36
|
if (!NativeUploadPicker) {
|
|
27
|
-
throw new Error("UploadDocumentPicker
|
|
37
|
+
throw new Error("UploadDocumentPicker modülü linklenmemiş.");
|
|
28
38
|
}
|
|
29
39
|
try {
|
|
40
|
+
// Native sadece saf base64 string'i döner
|
|
30
41
|
const rotatedBase64 = await NativeUploadPicker.rotateImage(base64, angle);
|
|
31
42
|
|
|
32
|
-
//
|
|
43
|
+
// Uygulama tarafında doğrudan <Image /> içinde kullanılabilmesi için prefix eklenir
|
|
33
44
|
return `data:image/jpeg;base64,${rotatedBase64}`;
|
|
34
45
|
} catch (error) {
|
|
35
|
-
|
|
46
|
+
// Hata mesajını daha okunaklı fırlatıyoruz
|
|
47
|
+
throw new Error(`RotateImage Hatası: ${error.message}`);
|
|
36
48
|
}
|
|
37
49
|
};
|
|
38
50
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useState","TouchableOpacity","Text","StyleSheet","ActivityIndicator","NativeModules","UploadDocumentPicker","NativeUploadPicker","pickFile","options","_options$multipleFile","_options$maxFiles","_options$maxSize","_options$fileTypes","_options$excludedUris","Error","nativeOptions","multipleFiles","maxFiles","maxSize","fileTypes","excludedUris","openDocument","
|
|
1
|
+
{"version":3,"names":["React","useState","TouchableOpacity","Text","StyleSheet","ActivityIndicator","NativeModules","UploadDocumentPicker","NativeUploadPicker","pickFile","options","_options$multipleFile","_options$maxFiles","_options$maxSize","_options$fileTypes","_options$excludedUris","Error","nativeOptions","multipleFiles","maxFiles","maxSize","fileTypes","excludedUris","openDocument","getBase64FromUri","cropFileUri","error","message","RotateImage","base64","angle","rotatedBase64","rotateImage","MyUploader","onSelect","onError","buttonPlaceHolder","ButtonStyle","ButtonTextStyle","disabled","isLoading","setIsLoading","handlePress","files","console","createElement","style","styles","button","onPress","color","text","create","backgroundColor","padding","borderRadius","alignItems","justifyContent","fontWeight","fontSize"],"sources":["MyUploader.tsx"],"sourcesContent":["import React, { useState } from 'react';\r\nimport { TouchableOpacity, Text, StyleSheet, ActivityIndicator, NativeModules } from 'react-native';\r\nimport type { MyUploaderProps, DocumentPickerOptions, FileInfo, RotateImageProps } from '../types';\r\n\r\nconst { UploadDocumentPicker: NativeUploadPicker } = NativeModules;\r\n\r\n// 1. Standalone pickFile Fonksiyonu\r\nexport const pickFile = async (options: DocumentPickerOptions = {}): Promise<FileInfo[]> => {\r\n if (!NativeUploadPicker) throw new Error(\"DocumentPicker module is not linked.\");\r\n\r\n // Native tarafa gönderilecek options\r\n const nativeOptions = {\r\n multipleFiles: options.multipleFiles ?? false,\r\n maxFiles: options.maxFiles ?? 0,\r\n maxSize: options.maxSize ?? 0,\r\n fileTypes: options.fileTypes ?? ['*/*'],\r\n excludedUris: options.excludedUris ?? [],\r\n };\r\n\r\n return await NativeUploadPicker.openDocument(nativeOptions);\r\n};\r\n\r\nexport const getBase64FromUri = async (cropFileUri: string): Promise<string> => {\r\n if (!NativeUploadPicker) {\r\n throw new Error(\"UploadDocumentPicker modülü linklenmemiş.\");\r\n }\r\n\r\n try {\r\n return await NativeUploadPicker.getBase64FromUri(cropFileUri);\r\n } catch (error: any) {\r\n throw new Error(`getBase64FromUri Hatası: ${error.message}`);\r\n }\r\n};\r\n\r\n\r\n\r\nexport const RotateImage = async ({ base64, angle }: RotateImageProps): Promise<string> => {\r\n if (!NativeUploadPicker) {\r\n throw new Error(\"UploadDocumentPicker modülü linklenmemiş.\");\r\n }\r\n\r\n try {\r\n // Native sadece saf base64 string'i döner\r\n const rotatedBase64: string = await NativeUploadPicker.rotateImage(base64, angle);\r\n\r\n // Uygulama tarafında doğrudan <Image /> içinde kullanılabilmesi için prefix eklenir\r\n return `data:image/jpeg;base64,${rotatedBase64}`;\r\n } catch (error: any) {\r\n // Hata mesajını daha okunaklı fırlatıyoruz\r\n throw new Error(`RotateImage Hatası: ${error.message}`);\r\n }\r\n};\r\n\r\n// 2. MyUploader Bileşeni\r\nconst MyUploader: React.FC<MyUploaderProps> = ({\r\n onSelect,\r\n onError,\r\n buttonPlaceHolder = \"Dosya Seç\",\r\n ButtonStyle,\r\n ButtonTextStyle,\r\n disabled = false,\r\n multipleFiles = false,\r\n fileTypes = ['*/*'],\r\n maxSize = 0,\r\n maxFiles = 0,\r\n excludedUris = [],\r\n}) => {\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const handlePress = async () => {\r\n if (disabled || isLoading) return;\r\n setIsLoading(true);\r\n\r\n try {\r\n const files = await pickFile({\r\n multipleFiles,\r\n fileTypes,\r\n maxSize,\r\n maxFiles,\r\n excludedUris\r\n });\r\n\r\n onSelect(files);\r\n } catch (error: any) {\r\n if (onError) {\r\n onError(error);\r\n } else {\r\n console.error(\"MyUploader Error:\", error);\r\n }\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n return (\r\n <TouchableOpacity\r\n style={[styles.button, ButtonStyle, (disabled || isLoading) && styles.disabled]}\r\n onPress={handlePress}\r\n disabled={disabled || isLoading}\r\n >\r\n {isLoading ? (\r\n <ActivityIndicator color=\"#FFF\" />\r\n ) : (\r\n <Text style={[styles.text, ButtonTextStyle]}>{buttonPlaceHolder}</Text>\r\n )}\r\n </TouchableOpacity>\r\n );\r\n};\r\n\r\nconst styles = StyleSheet.create({\r\n button: {\r\n backgroundColor: '#6200EE',\r\n padding: 12,\r\n borderRadius: 8,\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n },\r\n text: {\r\n color: '#FFF',\r\n fontWeight: '600',\r\n fontSize: 16\r\n },\r\n disabled: {\r\n backgroundColor: '#B0B0B0'\r\n }\r\n});\r\n\r\nexport default MyUploader;"],"mappings":"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","ignoreList":[]}
|
package/lib/module/index.d.js
CHANGED
|
@@ -5,8 +5,6 @@ export * from './types';
|
|
|
5
5
|
// DownloadFile Component Tanımı (3. Bunu ekledik)
|
|
6
6
|
// export declare const DownloadFile: React.FC<DownloadFileProps>;
|
|
7
7
|
|
|
8
|
-
// pickFile Fonksiyon Tanımı
|
|
9
|
-
|
|
10
8
|
// Varsayılan dışa aktarım (İsteğe bağlı, genellikle ana bileşen verilir)
|
|
11
9
|
export {};
|
|
12
10
|
//# sourceMappingURL=index.d.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["index.d.ts"],"sourcesContent":["import * as React from 'react';\r\nimport type { DocumentPickerOptions, MyUploaderProps, FileInfo, DownloadFileProps ,RotateImageProps } from './types';\r\n// import type { DownloadFileProps } from './types';\r\n\r\nexport * from './types';\r\n\r\n// DownloadFile Component Tanımı (3. Bunu ekledik)\r\n// export declare const DownloadFile: React.FC<DownloadFileProps>;\r\n\r\n
|
|
1
|
+
{"version":3,"names":[],"sources":["index.d.ts"],"sourcesContent":["import * as React from 'react';\r\nimport type { DocumentPickerOptions, MyUploaderProps, FileInfo, DownloadFileProps ,RotateImageProps } from './types';\r\n// import type { DownloadFileProps } from './types';\r\n\r\nexport * from './types';\r\n\r\n// DownloadFile Component Tanımı (3. Bunu ekledik)\r\n// export declare const DownloadFile: React.FC<DownloadFileProps>;\r\n\r\n\r\nexport declare function pickFile(options?: DocumentPickerOptions): Promise<FileInfo[]>;\r\nexport declare function RotateImage(props:RotateImageProps):Promise<string>;\r\nexport declare function getBase64FromUri(cropFileUri: string): Promise<string>;\r\n\r\nexport declare const DownloadFile :React.FC<DownloadFileProps>;\r\nexport declare const MyUploader: React.FC<MyUploaderProps>;\r\n\r\n// Varsayılan dışa aktarım (İsteğe bağlı, genellikle ana bileşen verilir)\r\ndeclare const _default: React.FC<MyUploaderProps>;\r\nexport default _default;"],"mappings":"AAEA;;AAEA,cAAc,SAAS;;AAEvB;AACA;;AAUA;AAAA","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import MyUploader, { pickFile, RotateImage } from "./components/MyUploader";
|
|
1
|
+
import MyUploader, { pickFile, RotateImage, getBase64FromUri } from "./components/MyUploader";
|
|
2
2
|
import { DownloadFile } from "./components/DownloadFile";
|
|
3
3
|
|
|
4
4
|
// Sadece bu paketle ilgili olanları dışa aktar
|
|
5
|
-
export { MyUploader, pickFile, DownloadFile, RotateImage };
|
|
5
|
+
export { MyUploader, pickFile, DownloadFile, RotateImage, getBase64FromUri };
|
|
6
6
|
export * from './types';
|
|
7
7
|
|
|
8
8
|
// Varsayılan dışa aktarım olarak da ana bileşeni verelim
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MyUploader","pickFile","RotateImage","DownloadFile"],"sources":["index.ts"],"sourcesContent":["import MyUploader,{pickFile,RotateImage} from \"./components/MyUploader\";\r\nimport {DownloadFile} from \"./components/DownloadFile\";\r\n\r\n\r\n// Sadece bu paketle ilgili olanları dışa aktar\r\nexport { MyUploader, pickFile ,DownloadFile ,RotateImage };\r\nexport * from './types';\r\n\r\n// Varsayılan dışa aktarım olarak da ana bileşeni verelim\r\nexport default MyUploader;\r\n\r\n\r\n\r\n"],"mappings":"AAAA,OAAOA,UAAU,IAAEC,QAAQ,EAACC,WAAW,QAAO,yBAAyB;
|
|
1
|
+
{"version":3,"names":["MyUploader","pickFile","RotateImage","getBase64FromUri","DownloadFile"],"sources":["index.ts"],"sourcesContent":["import MyUploader,{pickFile,RotateImage,getBase64FromUri} from \"./components/MyUploader\";\r\nimport {DownloadFile} from \"./components/DownloadFile\";\r\n\r\n\r\n// Sadece bu paketle ilgili olanları dışa aktar\r\nexport { MyUploader, pickFile ,DownloadFile ,RotateImage,getBase64FromUri };\r\nexport * from './types';\r\n\r\n// Varsayılan dışa aktarım olarak da ana bileşeni verelim\r\nexport default MyUploader;\r\n\r\n\r\n\r\n"],"mappings":"AAAA,OAAOA,UAAU,IAAEC,QAAQ,EAACC,WAAW,EAACC,gBAAgB,QAAO,yBAAyB;AACxF,SAAQC,YAAY,QAAO,2BAA2B;;AAGtD;AACA,SAASJ,UAAU,EAAEC,QAAQ,EAAEG,YAAY,EAAEF,WAAW,EAACC,gBAAgB;AACzE,cAAc,SAAS;;AAEvB;AACA,eAAeH,UAAU","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -20,19 +20,34 @@ export const pickFile = async (options: DocumentPickerOptions = {}): Promise<Fil
|
|
|
20
20
|
return await NativeUploadPicker.openDocument(nativeOptions);
|
|
21
21
|
};
|
|
22
22
|
|
|
23
|
+
export const getBase64FromUri = async (cropFileUri: string): Promise<string> => {
|
|
24
|
+
if (!NativeUploadPicker) {
|
|
25
|
+
throw new Error("UploadDocumentPicker modülü linklenmemiş.");
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
try {
|
|
29
|
+
return await NativeUploadPicker.getBase64FromUri(cropFileUri);
|
|
30
|
+
} catch (error: any) {
|
|
31
|
+
throw new Error(`getBase64FromUri Hatası: ${error.message}`);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
23
37
|
export const RotateImage = async ({ base64, angle }: RotateImageProps): Promise<string> => {
|
|
24
38
|
if (!NativeUploadPicker) {
|
|
25
|
-
throw new Error("UploadDocumentPicker
|
|
39
|
+
throw new Error("UploadDocumentPicker modülü linklenmemiş.");
|
|
26
40
|
}
|
|
27
41
|
|
|
28
42
|
try {
|
|
29
|
-
|
|
30
|
-
|
|
43
|
+
// Native sadece saf base64 string'i döner
|
|
44
|
+
const rotatedBase64: string = await NativeUploadPicker.rotateImage(base64, angle);
|
|
31
45
|
|
|
32
|
-
//
|
|
46
|
+
// Uygulama tarafında doğrudan <Image /> içinde kullanılabilmesi için prefix eklenir
|
|
33
47
|
return `data:image/jpeg;base64,${rotatedBase64}`;
|
|
34
48
|
} catch (error: any) {
|
|
35
|
-
|
|
49
|
+
// Hata mesajını daha okunaklı fırlatıyoruz
|
|
50
|
+
throw new Error(`RotateImage Hatası: ${error.message}`);
|
|
36
51
|
}
|
|
37
52
|
};
|
|
38
53
|
|
package/src/index.d.ts
CHANGED
|
@@ -7,9 +7,11 @@ export * from './types';
|
|
|
7
7
|
// DownloadFile Component Tanımı (3. Bunu ekledik)
|
|
8
8
|
// export declare const DownloadFile: React.FC<DownloadFileProps>;
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
export declare function pickFile(options?: DocumentPickerOptions): Promise<FileInfo[]>;
|
|
12
12
|
export declare function RotateImage(props:RotateImageProps):Promise<string>;
|
|
13
|
+
export declare function getBase64FromUri(cropFileUri: string): Promise<string>;
|
|
14
|
+
|
|
13
15
|
export declare const DownloadFile :React.FC<DownloadFileProps>;
|
|
14
16
|
export declare const MyUploader: React.FC<MyUploaderProps>;
|
|
15
17
|
|
package/src/index.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import MyUploader,{pickFile,RotateImage} from "./components/MyUploader";
|
|
1
|
+
import MyUploader,{pickFile,RotateImage,getBase64FromUri} from "./components/MyUploader";
|
|
2
2
|
import {DownloadFile} from "./components/DownloadFile";
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
// Sadece bu paketle ilgili olanları dışa aktar
|
|
6
|
-
export { MyUploader, pickFile ,DownloadFile ,RotateImage };
|
|
6
|
+
export { MyUploader, pickFile ,DownloadFile ,RotateImage,getBase64FromUri };
|
|
7
7
|
export * from './types';
|
|
8
8
|
|
|
9
9
|
// Varsayılan dışa aktarım olarak da ana bileşeni verelim
|