@hotta/react-native-imagepicker 0.1.4 → 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 CHANGED
@@ -11,13 +11,13 @@ This is a fork of [react-native-syan-image-picker](https://github.com/syanbo/re
11
11
  ### 安装
12
12
 
13
13
  ```
14
- yarn add @hotta/react-native-imagepicker@0.1.3
14
+ yarn add @hotta/react-native-imagepicker
15
15
  ```
16
16
 
17
17
  ### 使用方法
18
18
 
19
19
  ```
20
- import HTImagePicker from '@ht/react-native-image-picker/src';
20
+ import HTImagePicker from '@hotta/react-native-imagepicker';
21
21
  const options: any = {
22
22
  mediaType: 'photo',
23
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
@@ -7,8 +7,6 @@
7
7
  @interface NativeImagePicker ()
8
8
 
9
9
  @property (nonatomic, strong) UIImagePickerController *imagePickerVc;
10
- @property (nonatomic, strong) NSDictionary *pickOptions;
11
-
12
10
  /**
13
11
  保存Promise的resolve block
14
12
  */
@@ -27,7 +25,9 @@
27
25
  @property (nonatomic, strong) NSMutableArray *selectedAssets;
28
26
  @end
29
27
  @implementation NativeImagePicker
30
-
28
+ {
29
+ std::optional<JS::NativeImagePicker::ImagePickerOption> _cameraOptions;
30
+ }
31
31
 
32
32
  - (instancetype)init {
33
33
  self = [super init];
@@ -52,31 +52,88 @@
52
52
  _selectedAssets = nil;
53
53
  }
54
54
 
55
- - (void)asyncShowImagePicker:(NSDictionary *)options resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
56
- self.pickOptions = options;
55
+ - (void)asyncShowImagePicker:(JS::NativeImagePicker::ImagePickerOption &)options resolve:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject {
56
+ _cameraOptions = options;
57
57
  self.resolveBlock = resolve;
58
58
  self.rejectBlock = reject;
59
59
  self.callback = nil;
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
- NSInteger imageCount = [self.pickOptions sy_integerForKey:@"imageCount"];
122
+ NSInteger imageCount = _cameraOptions->imageCount();
66
123
  // 显示内部拍照按钮
67
- BOOL isCamera = [self.pickOptions sy_boolForKey:@"isCamera"];
68
- BOOL isCrop = [self.pickOptions sy_boolForKey:@"isCrop"];
69
- BOOL isGif = [self.pickOptions sy_boolForKey:@"isGif"];
70
- BOOL showCropCircle = [self.pickOptions sy_boolForKey:@"showCropCircle"];
71
- BOOL isRecordSelected = [self.pickOptions sy_boolForKey:@"isRecordSelected"];
72
- BOOL allowPickingOriginalPhoto = [self.pickOptions sy_boolForKey:@"allowPickingOriginalPhoto"];
73
- BOOL allowPickingMultipleVideo = [self.pickOptions sy_boolForKey:@"allowPickingMultipleVideo"];
74
- BOOL sortAscendingByModificationDate = [self.pickOptions sy_boolForKey:@"sortAscendingByModificationDate"];
75
- BOOL showSelectedIndex = [self.pickOptions sy_boolForKey:@"showSelectedIndex"];
76
- NSInteger CropW = [self.pickOptions sy_integerForKey:@"CropW"];
77
- NSInteger CropH = [self.pickOptions sy_integerForKey:@"CropH"];
78
- NSInteger circleCropRadius = [self.pickOptions sy_integerForKey:@"circleCropRadius"];
79
- NSInteger quality = [self.pickOptions sy_integerForKey:@"quality"];
124
+ BOOL isCamera = _cameraOptions->isCamera();
125
+ BOOL isCrop = _cameraOptions->isCrop();
126
+ BOOL isGif = _cameraOptions->isGif();
127
+ BOOL showCropCircle = _cameraOptions->showCropCircle();
128
+ BOOL isRecordSelected = _cameraOptions->isRecordSelected();
129
+ BOOL allowPickingOriginalPhoto = _cameraOptions->allowPickingOriginalPhoto();
130
+ BOOL allowPickingMultipleVideo = _cameraOptions->allowPickingMultipleVideo();
131
+ BOOL sortAscendingByModificationDate = _cameraOptions->sortAscendingByModificationDate();
132
+ BOOL showSelectedIndex = _cameraOptions->showSelectedIndex();
133
+ NSInteger CropW = _cameraOptions->CropW();
134
+ NSInteger CropH = _cameraOptions->CropH();
135
+ NSInteger circleCropRadius = _cameraOptions->circleCropRadius();
136
+ NSInteger quality = _cameraOptions->quality();
80
137
 
81
138
  TZImagePickerController *imagePickerVc = [[TZImagePickerController alloc] initWithMaxImagesCount:imageCount delegate:self];
82
139
  imagePickerVc.iconThemeColor = [UIColor colorWithRed:255.0/255.0 green:177.0/255.0 blue:82.0/255.0 alpha:1.0];
@@ -208,12 +265,12 @@
208
265
  [tzImagePickerVc hideProgressHUD];
209
266
 
210
267
  TZAssetModel *assetModel = [[TZImageManager manager] createModelWithAsset:asset];
211
- BOOL isCrop = [self.pickOptions sy_boolForKey:@"isCrop"];
212
- BOOL showCropCircle = [self.pickOptions sy_boolForKey:@"showCropCircle"];
213
- NSInteger CropW = [self.pickOptions sy_integerForKey:@"CropW"];
214
- NSInteger CropH = [self.pickOptions sy_integerForKey:@"CropH"];
215
- NSInteger circleCropRadius = [self.pickOptions sy_integerForKey:@"circleCropRadius"];
216
- NSInteger quality = [self.pickOptions sy_integerForKey:@"quality"];
268
+ BOOL isCrop = self->_cameraOptions->isCrop();
269
+ BOOL showCropCircle = self->_cameraOptions->showCropCircle();
270
+ NSInteger CropW = self->_cameraOptions->CropW();
271
+ NSInteger CropH = self->_cameraOptions->CropH();
272
+ NSInteger circleCropRadius = self->_cameraOptions->circleCropRadius();
273
+ NSInteger quality = self->_cameraOptions->quality();
217
274
 
218
275
  if (isCrop) {
219
276
  TZImagePickerController *imagePicker = [[TZImagePickerController alloc] initCropTypeWithAsset:assetModel.asset photo:image completion:^(UIImage *cropImage, id asset) {
@@ -253,7 +310,7 @@
253
310
  }
254
311
 
255
312
  - (BOOL)isAssetCanSelect:(PHAsset *)asset {
256
- BOOL allowPickingGif = [self.pickOptions sy_boolForKey:@"isGif"];
313
+ BOOL allowPickingGif = _cameraOptions->isGif();
257
314
  BOOL isGIF = [[TZImageManager manager] getAssetType:asset] == TZAssetModelMediaTypePhotoGif;
258
315
  if (!allowPickingGif && isGIF) {
259
316
  return NO;
@@ -311,7 +368,7 @@
311
368
  NSString *fileExtension = [filename pathExtension];
312
369
  NSMutableString *filePath = [NSMutableString string];
313
370
  BOOL isPNG = [fileExtension hasSuffix:@"PNG"] || [fileExtension hasSuffix:@"png"];
314
- BOOL compressFocusAlpha = [self.pickOptions sy_boolForKey:@"compressFocusAlpha"];
371
+ BOOL compressFocusAlpha = _cameraOptions->compressFocusAlpha();
315
372
 
316
373
  if (isPNG) {
317
374
  [filePath appendString:[NSString stringWithFormat:@"%@SyanImageCaches/%@", NSTemporaryDirectory(), filename]];
@@ -328,7 +385,7 @@
328
385
  NSInteger size = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil].fileSize;
329
386
  photo[@"size"] = @(size);
330
387
  photo[@"mediaType"] = @(phAsset.mediaType);
331
- if ([self.pickOptions sy_boolForKey:@"enableBase64"]) {
388
+ if (_cameraOptions->enableBase64()) {
332
389
  if(isPNG){
333
390
  photo[@"base64"] = [NSString stringWithFormat:@"data:image/png;base64,%@", [writeData base64EncodedStringWithOptions:0]];
334
391
  }else{
@@ -350,7 +407,7 @@
350
407
  NSData *writeData = nil;
351
408
  NSMutableString *filePath = [NSMutableString string];
352
409
  BOOL isPNG = [fileExtension hasSuffix:@"PNG"] || [fileExtension hasSuffix:@"png"];
353
- BOOL compressFocusAlpha = [self.pickOptions sy_boolForKey:@"compressFocusAlpha"];
410
+ BOOL compressFocusAlpha = _cameraOptions->compressFocusAlpha();
354
411
 
355
412
  if (isGIF) {
356
413
  image = [UIImage sd_tz_animatedGIFWithData:data];
@@ -374,7 +431,7 @@
374
431
  NSInteger size = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil].fileSize;
375
432
  photo[@"size"] = @(size);
376
433
  photo[@"mediaType"] = @(phAsset.mediaType);
377
- if ([self.pickOptions sy_boolForKey:@"enableBase64"] && !isGIF) {
434
+ if (_cameraOptions->enableBase64() && !isGIF) {
378
435
  if(isPNG){
379
436
  photo[@"base64"] = [NSString stringWithFormat:@"data:image/png;base64,%@", [writeData base64EncodedStringWithOptions:0]];
380
437
  }else{
@@ -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;AAKD,eAAe7B,mBAAmB,CAAC8B,YAAY,CAAO,mBAAmB,CAAC","ignoreList":[]}
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":[]}
@@ -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
- asyncShowImagePicker(options: Object): Promise<Array<SelectedPhoto>>;
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;AAED,MAAM,WAAW,aAAa;IAC5B,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,WAAW,IAAK,SAAQ,WAAW;IACvC,oBAAoB,CAAC,OAAO,EAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;CACrE;;AAED,wBAA2E"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hotta/react-native-imagepicker",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "@hotta/react-native-imagepicker",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -31,7 +31,7 @@ export type ImagePickerOption = {
31
31
  showSelectedIndex: boolean, // 是否显示序号, 默认不显示
32
32
  }
33
33
 
34
- export interface SelectedPhoto {
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
- asyncShowImagePicker(options:Object): Promise<Array<SelectedPhoto>>;
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.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