@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # 基于react-native0.82版本的图片选择器(TurboModule)
2
2
 
3
- This is a fork of [react-native-syan-image-picker]([GitHub - syanbo/react-native-syan-image-picker: React-Native 多图片选择 支持裁剪 压缩](https://github.com/syanbo/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 '@ht/react-native-image-picker/src';
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
@@ -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;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":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["NativeImagePicker","defaultOptions","HTNativeImagePicker","asyncShowImagePicker","options","_options"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,OAAOA,iBAAiB,IAAIC,cAAc,QAAgC,wBAAqB;AAE/F,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":[]}
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;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,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;CAChF;;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"}
@@ -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<import("./NativeImagePicker").SelectedPhoto[]>;
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;AAEhG,QAAA,MAAM,mBAAmB;oCAEW,iBAAiB;CAKjD,CAAA;AAEJ,eAAe,mBAAmB,CAAA"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hotta/react-native-imagepicker",
3
- "version": "0.1.3",
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
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