@hotta/react-native-imagepicker 0.1.3 → 0.1.6
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/README.md +8 -2
- package/android/src/main/java/com/htreactnative/imagepicker/NativeImagePickerModule.kt +47 -0
- package/ios/NativeImagePicker.mm +78 -1
- package/lib/module/NativeImagePicker.js +9 -0
- package/lib/module/NativeImagePicker.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/NativeImagePicker.d.ts +28 -0
- package/lib/typescript/src/NativeImagePicker.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +3 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/NativeImagePicker.ts +32 -1
- package/src/index.ts +2 -2
- package/src/index.tsx +10 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 基于react-native0.82版本的图片选择器(TurboModule)
|
|
2
2
|
|
|
3
|
-
This is a fork of [react-native-syan-image-picker](
|
|
3
|
+
This is a fork of [react-native-syan-image-picker](https://github.com/syanbo/react-native-syan-image-picker)
|
|
4
4
|
|
|
5
5
|
### 原生框架依赖
|
|
6
6
|
|
|
@@ -8,10 +8,16 @@ This is a fork of [react-native-syan-image-picker]([GitHub - syanbo/react-nativ
|
|
|
8
8
|
|
|
9
9
|
- iOS:[TZImagePickerController](https://github.com/banchichen/TZImagePickerController) - by [banchichen](https://github.com/banchichen)
|
|
10
10
|
|
|
11
|
+
### 安装
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
yarn add @hotta/react-native-imagepicker
|
|
15
|
+
```
|
|
16
|
+
|
|
11
17
|
### 使用方法
|
|
12
18
|
|
|
13
19
|
```
|
|
14
|
-
import HTImagePicker from '@
|
|
20
|
+
import HTImagePicker from '@hotta/react-native-imagepicker';
|
|
15
21
|
const options: any = {
|
|
16
22
|
mediaType: 'photo',
|
|
17
23
|
sortOrder: 'asc',
|
|
@@ -50,6 +50,53 @@ class NativeImagePickerModule(reactContext: ReactApplicationContext) :
|
|
|
50
50
|
})
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
+
override fun asyncShowVideoPicker(
|
|
54
|
+
options: ReadableMap?,
|
|
55
|
+
promise: Promise?
|
|
56
|
+
) {
|
|
57
|
+
pickerOptions = options;
|
|
58
|
+
val videoCount = options?.getInt("videoCount") ?: 1
|
|
59
|
+
PictureSelector.create(reactApplicationContext.currentActivity)
|
|
60
|
+
.openGallery(SelectMimeType.ofVideo())
|
|
61
|
+
.setMaxSelectNum(videoCount)
|
|
62
|
+
.setImageEngine(imageEngine)
|
|
63
|
+
.forResult(object : OnResultCallbackListener<LocalMedia> {
|
|
64
|
+
override fun onResult(localMediaList: ArrayList<LocalMedia?>?) {
|
|
65
|
+
var data = WritableNativeArray()
|
|
66
|
+
localMediaList?.forEach { media -> media?.let {
|
|
67
|
+
data.pushMap(getVideoResult(media))
|
|
68
|
+
} }
|
|
69
|
+
promise?.resolve(data)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
override fun onCancel() {
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
})
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
private fun getVideoResult(media: LocalMedia): WritableMap {
|
|
80
|
+
val videoMap: WritableMap = WritableNativeMap()
|
|
81
|
+
var path: String = media.path
|
|
82
|
+
val isAndroidQ = SdkVersionUtils.isQ()
|
|
83
|
+
val isAndroidR = SdkVersionUtils.isR()
|
|
84
|
+
if (isAndroidQ) {
|
|
85
|
+
path = media.availablePath
|
|
86
|
+
}
|
|
87
|
+
if (isAndroidR) {
|
|
88
|
+
path = media.realPath;
|
|
89
|
+
}
|
|
90
|
+
videoMap.putString("path", "file://$path")
|
|
91
|
+
videoMap.putString("mime", media.mimeType ?: "video/mp4")
|
|
92
|
+
videoMap.putDouble("width", media.width.toDouble())
|
|
93
|
+
videoMap.putDouble("height", media.height.toDouble())
|
|
94
|
+
videoMap.putDouble("duration", media.duration * 1000.0)
|
|
95
|
+
videoMap.putInt("size", media.size)
|
|
96
|
+
videoMap.putString("filename", media.fileName)
|
|
97
|
+
return videoMap
|
|
98
|
+
}
|
|
99
|
+
|
|
53
100
|
private fun getImageResult(media: LocalMedia): WritableMap {
|
|
54
101
|
val imageMap: WritableMap = WritableNativeMap()
|
|
55
102
|
var path: String = media.path
|
package/ios/NativeImagePicker.mm
CHANGED
|
@@ -60,6 +60,63 @@
|
|
|
60
60
|
[self openImagePicker];
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
- (void)asyncShowVideoPicker:(JS::NativeImagePicker::VideoPickerOption &)options resolve:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject {
|
|
64
|
+
self.resolveBlock = resolve;
|
|
65
|
+
self.rejectBlock = reject;
|
|
66
|
+
self.callback = nil;
|
|
67
|
+
[self openVideoPickerWithOptions:options];
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
- (void)openVideoPickerWithOptions:(JS::NativeImagePicker::VideoPickerOption &)options {
|
|
71
|
+
NSInteger videoCount = options.videoCount();
|
|
72
|
+
BOOL isCamera = options.isCamera();
|
|
73
|
+
BOOL sortAscendingByModificationDate = options.sortAscendingByModificationDate();
|
|
74
|
+
BOOL showSelectedIndex = options.showSelectedIndex();
|
|
75
|
+
|
|
76
|
+
TZImagePickerController *imagePickerVc = [[TZImagePickerController alloc] initWithMaxImagesCount:videoCount delegate:self];
|
|
77
|
+
imagePickerVc.iconThemeColor = [UIColor colorWithRed:255.0/255.0 green:177.0/255.0 blue:82.0/255.0 alpha:1.0];
|
|
78
|
+
imagePickerVc.maxImagesCount = videoCount;
|
|
79
|
+
imagePickerVc.allowPickingImage = NO;
|
|
80
|
+
imagePickerVc.allowPickingVideo = YES;
|
|
81
|
+
imagePickerVc.allowTakeVideo = isCamera;
|
|
82
|
+
imagePickerVc.allowTakePicture = NO;
|
|
83
|
+
imagePickerVc.allowPickingGif = NO;
|
|
84
|
+
imagePickerVc.allowCrop = NO;
|
|
85
|
+
imagePickerVc.showSelectedIndex = showSelectedIndex;
|
|
86
|
+
imagePickerVc.sortAscendingByModificationDate = sortAscendingByModificationDate;
|
|
87
|
+
imagePickerVc.modalPresentationStyle = UIModalPresentationFullScreen;
|
|
88
|
+
|
|
89
|
+
if (videoCount == 1) {
|
|
90
|
+
imagePickerVc.showSelectBtn = NO;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
__weak TZImagePickerController *weakPickerVc = imagePickerVc;
|
|
94
|
+
[imagePickerVc setDidFinishPickingPhotosWithInfosHandle:^(NSArray<UIImage *> *photos, NSArray *assets, BOOL isSelectOriginalPhoto, NSArray<NSDictionary *> *infos) {
|
|
95
|
+
[weakPickerVc showProgressHUD];
|
|
96
|
+
NSMutableArray *videoResults = [NSMutableArray array];
|
|
97
|
+
[assets enumerateObjectsUsingBlock:^(PHAsset * _Nonnull asset, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
98
|
+
if (asset.mediaType == PHAssetMediaTypeVideo) {
|
|
99
|
+
[[TZImageManager manager] getVideoOutputPathWithAsset:asset presetName:AVAssetExportPresetHighestQuality success:^(NSString *outputPath) {
|
|
100
|
+
[videoResults addObject:[self handleVideoPickerData:outputPath asset:asset]];
|
|
101
|
+
if ([videoResults count] == [assets count]) {
|
|
102
|
+
[self invokeSuccessWithResult:videoResults];
|
|
103
|
+
}
|
|
104
|
+
} failure:^(NSString *errorMessage, NSError *error) {
|
|
105
|
+
[self invokeError];
|
|
106
|
+
}];
|
|
107
|
+
}
|
|
108
|
+
}];
|
|
109
|
+
[weakPickerVc hideProgressHUD];
|
|
110
|
+
}];
|
|
111
|
+
|
|
112
|
+
[imagePickerVc setImagePickerControllerDidCancelHandle:^{
|
|
113
|
+
[self invokeError];
|
|
114
|
+
[weakPickerVc hideProgressHUD];
|
|
115
|
+
}];
|
|
116
|
+
|
|
117
|
+
[[self topViewController] presentViewController:imagePickerVc animated:YES completion:nil];
|
|
118
|
+
}
|
|
119
|
+
|
|
63
120
|
- (void)openImagePicker {
|
|
64
121
|
// 照片最大可选张数
|
|
65
122
|
NSInteger imageCount = _cameraOptions->imageCount();
|
|
@@ -385,7 +442,7 @@
|
|
|
385
442
|
return photo;
|
|
386
443
|
}
|
|
387
444
|
|
|
388
|
-
/// 处理视频数据
|
|
445
|
+
/// 处理视频数据 (混合选择模式)
|
|
389
446
|
- (NSDictionary *)handleVideoData:(NSString *)outputPath asset:(PHAsset *)asset coverImage:(UIImage *)coverImage quality:(CGFloat)quality {
|
|
390
447
|
NSMutableDictionary *video = [NSMutableDictionary dictionary];
|
|
391
448
|
video[@"uri"] = outputPath;
|
|
@@ -405,6 +462,26 @@
|
|
|
405
462
|
return video;
|
|
406
463
|
}
|
|
407
464
|
|
|
465
|
+
/// 处理视频数据 (纯视频选择模式,返回格式兼容 react-native-image-crop-picker)
|
|
466
|
+
- (NSDictionary *)handleVideoPickerData:(NSString *)outputPath asset:(PHAsset *)asset {
|
|
467
|
+
NSMutableDictionary *video = [NSMutableDictionary dictionary];
|
|
468
|
+
video[@"path"] = [NSString stringWithFormat:@"file://%@", outputPath];
|
|
469
|
+
video[@"size"] = @([[[NSFileManager defaultManager] attributesOfItemAtPath:outputPath error:nil] fileSize]);
|
|
470
|
+
video[@"width"] = @(asset.pixelWidth);
|
|
471
|
+
video[@"height"] = @(asset.pixelHeight);
|
|
472
|
+
video[@"duration"] = @((long long)(asset.duration * 1000));
|
|
473
|
+
video[@"mime"] = @"video/mp4";
|
|
474
|
+
video[@"filename"] = [asset valueForKey:@"filename"];
|
|
475
|
+
video[@"localIdentifier"] = asset.localIdentifier;
|
|
476
|
+
video[@"sourceURL"] = [NSString stringWithFormat:@"assets-library://asset/asset.mov?id=%@&ext=mov", asset.localIdentifier];
|
|
477
|
+
// modificationDate
|
|
478
|
+
if (asset.modificationDate) {
|
|
479
|
+
video[@"modificationDate"] = [NSString stringWithFormat:@"%.0f", [asset.modificationDate timeIntervalSince1970]];
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
return video;
|
|
483
|
+
}
|
|
484
|
+
|
|
408
485
|
/// 创建SyanImageCaches缓存目录
|
|
409
486
|
- (BOOL)createDir {
|
|
410
487
|
NSString * path = [NSString stringWithFormat:@"%@SyanImageCaches", NSTemporaryDirectory()];;
|
|
@@ -58,5 +58,14 @@ export const defaultOptions = {
|
|
|
58
58
|
// 对照片排序,按修改时间升序,默认是YES。如果设置为NO,最新的照片会显示在最前面,内部的拍照按钮会排在第一个
|
|
59
59
|
showSelectedIndex: false // 是否显示序号, 默认不显示
|
|
60
60
|
};
|
|
61
|
+
export const defaultVideoOptions = {
|
|
62
|
+
videoCount: 1,
|
|
63
|
+
isCamera: true,
|
|
64
|
+
MaxSecond: 180,
|
|
65
|
+
MinSecond: 1,
|
|
66
|
+
videoMaximumDuration: 600,
|
|
67
|
+
sortAscendingByModificationDate: true,
|
|
68
|
+
showSelectedIndex: false
|
|
69
|
+
};
|
|
61
70
|
export default TurboModuleRegistry.getEnforcing('NativeImagePicker');
|
|
62
71
|
//# sourceMappingURL=NativeImagePicker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TurboModuleRegistry","Dimensions","width","get","defaultOptions","imageCount","isRecordSelected","isCamera","isCrop","CropW","CropH","isGif","showCropCircle","circleCropRadius","showCropFrame","showCropGrid","freeStyleCropEnabled","rotateEnabled","scaleEnabled","compress","compressFocusAlpha","minimumCompressSize","quality","enableBase64","allowPickingOriginalPhoto","allowPickingMultipleVideo","videoMaximumDuration","isWeChatStyle","sortAscendingByModificationDate","showSelectedIndex","getEnforcing"],"sourceRoot":"../../src","sources":["NativeImagePicker.ts"],"mappings":";;AAAA,SAASA,mBAAmB,QAA0B,cAAc;AACpE,SAASC,UAAU,QAAQ,cAAc;AAyCzC,MAAM;EAAEC;AAAM,CAAC,GAAGD,UAAU,CAACE,GAAG,CAAC,QAAQ,CAAC;;AAE1C;AACA;AACA;AACA,OAAO,MAAMC,cAAc,GAAG;EAC1BC,UAAU,EAAE,CAAC;EAAc;EAC3BC,gBAAgB,EAAE,KAAK;EAAI;EAC3BC,QAAQ,EAAE,IAAI;EAAa;EAC3BC,MAAM,EAAE,KAAK;EAAc;EAC3BC,KAAK,EAAE,CAAC,EAAEP,KAAK,GAAG,GAAG,CAAC;EAAK;EAC3BQ,KAAK,EAAE,CAAC,EAAER,KAAK,GAAG,GAAG,CAAC;EAAK;EAC3BS,KAAK,EAAE,KAAK;EAAe;EAC3BC,cAAc,EAAE,KAAK;EAAM;EAC3BC,gBAAgB,EAAE,CAAC,EAAEX,KAAK,GAAG,CAAC,CAAC;EAAE;EACjCY,aAAa,EAAE,IAAI;EAAQ;EAC3BC,YAAY,EAAE,KAAK;EAAQ;EAC3BC,oBAAoB,EAAE,KAAK;EAAE;EAC7BC,aAAa,EAAE,IAAI;EAAQ;EAC3BC,YAAY,EAAE,IAAI;EAAS;EAC3BC,QAAQ,EAAE,IAAI;EACdC,kBAAkB,EAAC,KAAK;EAAI;EAC5BC,mBAAmB,EAAE,GAAG;EAAG;EAC3BC,OAAO,EAAE,EAAE;EAAgB;EAC3BC,YAAY,EAAE,KAAK;EAAQ;EAC3BC,yBAAyB,EAAE,KAAK;EAChCC,yBAAyB,EAAE,KAAK;EAAE;EAClCC,oBAAoB,EAAE,EAAE,GAAG,EAAE;EAAE;EAC/BC,aAAa,EAAE,KAAK;EAAO;EAC3BC,+BAA+B,EAAE,IAAI;EAAE;EACvCC,iBAAiB,EAAE,KAAK,CAAE;AAC9B,CAAC;
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","Dimensions","width","get","defaultOptions","imageCount","isRecordSelected","isCamera","isCrop","CropW","CropH","isGif","showCropCircle","circleCropRadius","showCropFrame","showCropGrid","freeStyleCropEnabled","rotateEnabled","scaleEnabled","compress","compressFocusAlpha","minimumCompressSize","quality","enableBase64","allowPickingOriginalPhoto","allowPickingMultipleVideo","videoMaximumDuration","isWeChatStyle","sortAscendingByModificationDate","showSelectedIndex","defaultVideoOptions","videoCount","MaxSecond","MinSecond","getEnforcing"],"sourceRoot":"../../src","sources":["NativeImagePicker.ts"],"mappings":";;AAAA,SAASA,mBAAmB,QAA0B,cAAc;AACpE,SAASC,UAAU,QAAQ,cAAc;AAyCzC,MAAM;EAAEC;AAAM,CAAC,GAAGD,UAAU,CAACE,GAAG,CAAC,QAAQ,CAAC;;AAE1C;AACA;AACA;AACA,OAAO,MAAMC,cAAc,GAAG;EAC1BC,UAAU,EAAE,CAAC;EAAc;EAC3BC,gBAAgB,EAAE,KAAK;EAAI;EAC3BC,QAAQ,EAAE,IAAI;EAAa;EAC3BC,MAAM,EAAE,KAAK;EAAc;EAC3BC,KAAK,EAAE,CAAC,EAAEP,KAAK,GAAG,GAAG,CAAC;EAAK;EAC3BQ,KAAK,EAAE,CAAC,EAAER,KAAK,GAAG,GAAG,CAAC;EAAK;EAC3BS,KAAK,EAAE,KAAK;EAAe;EAC3BC,cAAc,EAAE,KAAK;EAAM;EAC3BC,gBAAgB,EAAE,CAAC,EAAEX,KAAK,GAAG,CAAC,CAAC;EAAE;EACjCY,aAAa,EAAE,IAAI;EAAQ;EAC3BC,YAAY,EAAE,KAAK;EAAQ;EAC3BC,oBAAoB,EAAE,KAAK;EAAE;EAC7BC,aAAa,EAAE,IAAI;EAAQ;EAC3BC,YAAY,EAAE,IAAI;EAAS;EAC3BC,QAAQ,EAAE,IAAI;EACdC,kBAAkB,EAAC,KAAK;EAAI;EAC5BC,mBAAmB,EAAE,GAAG;EAAG;EAC3BC,OAAO,EAAE,EAAE;EAAgB;EAC3BC,YAAY,EAAE,KAAK;EAAQ;EAC3BC,yBAAyB,EAAE,KAAK;EAChCC,yBAAyB,EAAE,KAAK;EAAE;EAClCC,oBAAoB,EAAE,EAAE,GAAG,EAAE;EAAE;EAC/BC,aAAa,EAAE,KAAK;EAAO;EAC3BC,+BAA+B,EAAE,IAAI;EAAE;EACvCC,iBAAiB,EAAE,KAAK,CAAE;AAC9B,CAAC;AAqBD,OAAO,MAAMC,mBAAmB,GAAG;EAC/BC,UAAU,EAAE,CAAC;EACbxB,QAAQ,EAAE,IAAI;EACdyB,SAAS,EAAE,GAAG;EACdC,SAAS,EAAE,CAAC;EACZP,oBAAoB,EAAE,GAAG;EACzBE,+BAA+B,EAAE,IAAI;EACrCC,iBAAiB,EAAE;AACvB,CAAC;AAOD,eAAe7B,mBAAmB,CAACkC,YAAY,CAAO,mBAAmB,CAAC","ignoreList":[]}
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeImagePicker","defaultOptions","HTNativeImagePicker","asyncShowImagePicker","options","_options"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,OAAOA,iBAAiB,IAAIC,cAAc,
|
|
1
|
+
{"version":3,"names":["NativeImagePicker","defaultOptions","HTNativeImagePicker","asyncShowImagePicker","options","_options"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,OAAOA,iBAAiB,IAAIC,cAAc,QAAoD,wBAAqB;AAEnH,MAAMC,mBAAmB,GAAG,CAAC,MAAM;EACjC,OAAO;IACLC,oBAAoB,EAAGC,OAA0B,IAAM;MACrD,MAAMC,QAAQ,GAAG;QAAE,GAAGJ,cAAc;QAAE,GAAGG;MAAQ,CAAC;MAClD,OAAOJ,iBAAiB,CAACG,oBAAoB,CAACE,QAAQ,CAAC;IACzD;EACF,CAAC;AACH,CAAC,EAAE,CAAC;AAEJ,eAAeH,mBAAmB","ignoreList":[]}
|
|
@@ -68,8 +68,36 @@ export declare const defaultOptions: {
|
|
|
68
68
|
sortAscendingByModificationDate: boolean;
|
|
69
69
|
showSelectedIndex: boolean;
|
|
70
70
|
};
|
|
71
|
+
export type VideoPickerOption = {
|
|
72
|
+
videoCount: number;
|
|
73
|
+
isCamera: boolean;
|
|
74
|
+
MaxSecond: number;
|
|
75
|
+
MinSecond: number;
|
|
76
|
+
videoMaximumDuration: number;
|
|
77
|
+
sortAscendingByModificationDate: boolean;
|
|
78
|
+
showSelectedIndex: boolean;
|
|
79
|
+
};
|
|
80
|
+
interface SelectedVideo {
|
|
81
|
+
path: string;
|
|
82
|
+
size: number;
|
|
83
|
+
width: number;
|
|
84
|
+
height: number;
|
|
85
|
+
duration: number | null;
|
|
86
|
+
mime: string;
|
|
87
|
+
filename?: string;
|
|
88
|
+
}
|
|
89
|
+
export declare const defaultVideoOptions: {
|
|
90
|
+
videoCount: number;
|
|
91
|
+
isCamera: boolean;
|
|
92
|
+
MaxSecond: number;
|
|
93
|
+
MinSecond: number;
|
|
94
|
+
videoMaximumDuration: number;
|
|
95
|
+
sortAscendingByModificationDate: boolean;
|
|
96
|
+
showSelectedIndex: boolean;
|
|
97
|
+
};
|
|
71
98
|
export interface Spec extends TurboModule {
|
|
72
99
|
asyncShowImagePicker(options: ImagePickerOption): Promise<Array<SelectedPhoto>>;
|
|
100
|
+
asyncShowVideoPicker(options: VideoPickerOption): Promise<Array<SelectedVideo>>;
|
|
73
101
|
}
|
|
74
102
|
declare const _default: Spec;
|
|
75
103
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeImagePicker.d.ts","sourceRoot":"","sources":["../../../src/NativeImagePicker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAErE,MAAM,MAAM,iBAAiB,GAAG;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB,EAAC,OAAO,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,yBAAyB,EAAE,OAAO,CAAC;IACnC,yBAAyB,EAAE,OAAO,CAAC;IACnC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,OAAO,CAAC;IACvB,+BAA+B,EAAE,OAAO,CAAA;IACxC,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,iBAAiB,EAAE,OAAO,CAAC;CAC5B,CAAA;
|
|
1
|
+
{"version":3,"file":"NativeImagePicker.d.ts","sourceRoot":"","sources":["../../../src/NativeImagePicker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAErE,MAAM,MAAM,iBAAiB,GAAG;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB,EAAC,OAAO,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,yBAAyB,EAAE,OAAO,CAAC;IACnC,yBAAyB,EAAE,OAAO,CAAC;IACnC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,OAAO,CAAC;IACvB,+BAA+B,EAAE,OAAO,CAAA;IACxC,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,iBAAiB,EAAE,OAAO,CAAC;CAC5B,CAAA;AAEH,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAC,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAC,MAAM,CAAC;IACZ,MAAM,EAAC,MAAM,CAAA;CACd;AAGH;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;CA0B1B,CAAC;AACF,MAAM,MAAM,iBAAiB,GAAG;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,+BAA+B,EAAE,OAAO,CAAC;IACzC,iBAAiB,EAAE,OAAO,CAAC;CAC9B,CAAA;AAED,UAAU,aAAa;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,mBAAmB;;;;;;;;CAQ/B,CAAA;AAED,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,oBAAoB,CAAC,OAAO,EAAC,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;IAC/E,oBAAoB,CAAC,OAAO,EAAC,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;CAChF;;AAED,wBAA2E"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { type ImagePickerOption } from './NativeImagePicker';
|
|
1
|
+
import { type ImagePickerOption, type SelectedPhoto } from './NativeImagePicker';
|
|
2
|
+
export type { SelectedPhoto, ImagePickerOption };
|
|
2
3
|
declare const HTNativeImagePicker: {
|
|
3
|
-
asyncShowImagePicker: (options: ImagePickerOption) => Promise<
|
|
4
|
+
asyncShowImagePicker: (options: ImagePickerOption) => Promise<SelectedPhoto[]>;
|
|
4
5
|
};
|
|
5
6
|
export default HTNativeImagePicker;
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAA0B,EAAkB,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAA0B,EAAkB,KAAK,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpH,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAC;AACjD,QAAA,MAAM,mBAAmB;oCAEW,iBAAiB;CAKjD,CAAA;AAEJ,eAAe,mBAAmB,CAAA"}
|
package/package.json
CHANGED
package/src/NativeImagePicker.ts
CHANGED
|
@@ -31,7 +31,7 @@ export type ImagePickerOption = {
|
|
|
31
31
|
showSelectedIndex: boolean, // 是否显示序号, 默认不显示
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
export interface SelectedPhoto {
|
|
35
35
|
width: number, //图片宽度
|
|
36
36
|
height: number, //图片高度
|
|
37
37
|
uri: string, //图片路径
|
|
@@ -72,8 +72,39 @@ export const defaultOptions = {
|
|
|
72
72
|
sortAscendingByModificationDate: true, // 对照片排序,按修改时间升序,默认是YES。如果设置为NO,最新的照片会显示在最前面,内部的拍照按钮会排在第一个
|
|
73
73
|
showSelectedIndex: false, // 是否显示序号, 默认不显示
|
|
74
74
|
};
|
|
75
|
+
export type VideoPickerOption = {
|
|
76
|
+
videoCount: number, // 最大选择视频数目,默认1
|
|
77
|
+
isCamera: boolean, // 是否允许录制视频,默认true
|
|
78
|
+
MaxSecond: number, // 选择视频最大时长,默认是180秒
|
|
79
|
+
MinSecond: number, // 选择视频最小时长,默认是1秒
|
|
80
|
+
videoMaximumDuration: number, // 视频最大录制时长,默认是600秒
|
|
81
|
+
sortAscendingByModificationDate: boolean, // 按修改时间升序,默认是YES
|
|
82
|
+
showSelectedIndex: boolean, // 是否显示序号,默认不显示
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
interface SelectedVideo {
|
|
86
|
+
path: string, // 视频路径
|
|
87
|
+
size: number, // 文件大小,单位为字节
|
|
88
|
+
width: number, // 视频宽度
|
|
89
|
+
height: number, // 视频高度
|
|
90
|
+
duration: number | null, // 视频时长,单位毫秒
|
|
91
|
+
mime: string, // 视频mime类型,如 "video/mp4"
|
|
92
|
+
filename?: string, // 视频文件名
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export const defaultVideoOptions = {
|
|
96
|
+
videoCount: 1,
|
|
97
|
+
isCamera: true,
|
|
98
|
+
MaxSecond: 180,
|
|
99
|
+
MinSecond: 1,
|
|
100
|
+
videoMaximumDuration: 600,
|
|
101
|
+
sortAscendingByModificationDate: true,
|
|
102
|
+
showSelectedIndex: false,
|
|
103
|
+
}
|
|
104
|
+
|
|
75
105
|
export interface Spec extends TurboModule {
|
|
76
106
|
asyncShowImagePicker(options:ImagePickerOption): Promise<Array<SelectedPhoto>>;
|
|
107
|
+
asyncShowVideoPicker(options:VideoPickerOption): Promise<Array<SelectedVideo>>;
|
|
77
108
|
}
|
|
78
109
|
|
|
79
110
|
export default TurboModuleRegistry.getEnforcing<Spec>('NativeImagePicker');
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import NativeImagePicker, { defaultOptions, type ImagePickerOption } from './NativeImagePicker';
|
|
2
|
-
|
|
1
|
+
import NativeImagePicker, { defaultOptions, type ImagePickerOption, type SelectedPhoto } from './NativeImagePicker';
|
|
2
|
+
export type { SelectedPhoto, ImagePickerOption };
|
|
3
3
|
const HTNativeImagePicker = (() => {
|
|
4
4
|
return {
|
|
5
5
|
asyncShowImagePicker: (options: ImagePickerOption ) => {
|
package/src/index.tsx
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import NativeImagePicker from './NativeImagePicker';
|
|
2
|
+
|
|
3
|
+
const HTNativeImagePicker = (() => {
|
|
4
|
+
return {
|
|
5
|
+
asyncShowImagePicker: NativeImagePicker.asyncShowImagePicker,
|
|
6
|
+
asyncShowVideoPicker: NativeImagePicker.asyncShowVideoPicker,
|
|
7
|
+
};
|
|
8
|
+
})()
|
|
9
|
+
|
|
10
|
+
export default HTNativeImagePicker
|