react-native-picture-selector 1.0.21 → 1.0.22
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/ios/HybridPictureSelector.swift +37 -12
- package/package.json +1 -1
|
@@ -48,12 +48,19 @@ final class HybridPictureSelector: HybridHybridPictureSelectorSpec_base, HybridH
|
|
|
48
48
|
|
|
49
49
|
func openPicker(options: PictureSelectorOptions) -> Promise<[MediaAsset]> {
|
|
50
50
|
return Promise { [weak self] resolver in
|
|
51
|
-
guard let self
|
|
52
|
-
resolver.reject(PictureSelectorError.unknown("
|
|
51
|
+
guard let self else {
|
|
52
|
+
resolver.reject(PictureSelectorError.unknown("openPicker: native module was deallocated"))
|
|
53
53
|
return
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
DispatchQueue.main.async {
|
|
57
|
+
if self.session != nil {
|
|
58
|
+
resolver.reject(PictureSelectorError.unknown(
|
|
59
|
+
"A picker or camera session is already active. Dismiss it before opening a new one."
|
|
60
|
+
))
|
|
61
|
+
return
|
|
62
|
+
}
|
|
63
|
+
|
|
57
64
|
guard let topVC = self.topViewController() else {
|
|
58
65
|
resolver.reject(PictureSelectorError.unknown(
|
|
59
66
|
"No active UIViewController. Ensure the picker is called from a mounted component."
|
|
@@ -85,22 +92,26 @@ final class HybridPictureSelector: HybridHybridPictureSelectorSpec_base, HybridH
|
|
|
85
92
|
|
|
86
93
|
func openCamera(options: PictureSelectorOptions) -> Promise<[MediaAsset]> {
|
|
87
94
|
return Promise { [weak self] resolver in
|
|
88
|
-
guard let self
|
|
89
|
-
resolver.reject(PictureSelectorError.unknown("
|
|
95
|
+
guard let self else {
|
|
96
|
+
resolver.reject(PictureSelectorError.unknown("openCamera: native module was deallocated"))
|
|
90
97
|
return
|
|
91
98
|
}
|
|
92
99
|
|
|
93
100
|
DispatchQueue.main.async {
|
|
101
|
+
if self.session != nil {
|
|
102
|
+
resolver.reject(PictureSelectorError.unknown(
|
|
103
|
+
"A picker or camera session is already active. Dismiss it before opening a new one."
|
|
104
|
+
))
|
|
105
|
+
return
|
|
106
|
+
}
|
|
107
|
+
|
|
94
108
|
guard let topVC = self.topViewController() else {
|
|
95
109
|
resolver.reject(PictureSelectorError.unknown("No active UIViewController."))
|
|
96
110
|
return
|
|
97
111
|
}
|
|
98
112
|
|
|
99
113
|
var cameraConfig = CameraConfiguration()
|
|
100
|
-
|
|
101
|
-
case "video": cameraConfig.mediaType = .video
|
|
102
|
-
default: cameraConfig.mediaType = .photo
|
|
103
|
-
}
|
|
114
|
+
cameraConfig.mediaType = (options.mediaType == .video) ? .video : .photo
|
|
104
115
|
if let maxDur = options.maxVideoDuration {
|
|
105
116
|
cameraConfig.videoMaximumDuration = maxDur
|
|
106
117
|
}
|
|
@@ -115,7 +126,10 @@ final class HybridPictureSelector: HybridHybridPictureSelectorSpec_base, HybridH
|
|
|
115
126
|
cameraConfig,
|
|
116
127
|
fromViewController: topVC
|
|
117
128
|
) { [weak self] result, _ in
|
|
118
|
-
guard let self
|
|
129
|
+
guard let self else {
|
|
130
|
+
resolver.reject(PictureSelectorError.unknown("openCamera: native module was deallocated"))
|
|
131
|
+
return
|
|
132
|
+
}
|
|
119
133
|
guard let photoAsset = result?.photoAsset else {
|
|
120
134
|
resolver.reject(PictureSelectorError.cancelled)
|
|
121
135
|
return
|
|
@@ -146,9 +160,9 @@ final class HybridPictureSelector: HybridHybridPictureSelectorSpec_base, HybridH
|
|
|
146
160
|
|
|
147
161
|
// Media type
|
|
148
162
|
switch options.mediaType {
|
|
149
|
-
case
|
|
163
|
+
case .video:
|
|
150
164
|
config.selectOptions = [.video]
|
|
151
|
-
case
|
|
165
|
+
case .all:
|
|
152
166
|
config.selectOptions = [.photo, .video]
|
|
153
167
|
default:
|
|
154
168
|
config.selectOptions = [.photo]
|
|
@@ -196,6 +210,13 @@ final class HybridPictureSelector: HybridHybridPictureSelectorSpec_base, HybridH
|
|
|
196
210
|
config.themeColor = color
|
|
197
211
|
}
|
|
198
212
|
|
|
213
|
+
// selectedAssets: pre-selecting assets by file:// URI requires resolving each URI
|
|
214
|
+
// back to a PHAsset via PHPhotoLibrary and wrapping it in a PhotoAsset object.
|
|
215
|
+
// This is not yet implemented. Callers should not rely on this option on iOS.
|
|
216
|
+
// TODO: implement pre-selection using PHAsset.fetchAssets(withALAssetURLs:options:)
|
|
217
|
+
// or localIdentifier lookup, then set config.preSelectedAssets (verify field name
|
|
218
|
+
// in HXPhotoPicker v5.0.5 before enabling).
|
|
219
|
+
|
|
199
220
|
return config
|
|
200
221
|
}
|
|
201
222
|
|
|
@@ -330,7 +351,11 @@ extension HybridPictureSelector: PhotoPickerControllerDelegate {
|
|
|
330
351
|
activePicker = nil
|
|
331
352
|
|
|
332
353
|
pickerController.dismiss(animated: true) { [weak self] in
|
|
333
|
-
guard let
|
|
354
|
+
guard let s = captured else { return }
|
|
355
|
+
guard let self else {
|
|
356
|
+
s.resolver(.failure(PictureSelectorError.unknown("pickerController: native module was deallocated")))
|
|
357
|
+
return
|
|
358
|
+
}
|
|
334
359
|
Task {
|
|
335
360
|
do {
|
|
336
361
|
let assets = try await self.mapResults(result, compress: s.options.compress)
|
package/package.json
CHANGED