Skip to content

Commit 8f19379

Browse files
committed
feat: handle dismiss photo picker
1 parent 56260ed commit 8f19379

File tree

3 files changed

+45
-14
lines changed

3 files changed

+45
-14
lines changed

example/src/App.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export default function App() {
4545

4646
const onPicker = async () => {
4747
try {
48-
const singleSelectedMode = false;
48+
const singleSelectedMode = true;
4949

5050
const response = await openPicker({
5151
selectedAssets: images,

ios/CustomPhotoPicker/CustomPhotoPickerViewController.swift

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import Photos
1111
import TLPhotoPicker
1212

1313
class CustomPhotoPickerViewController: TLPhotosPickerViewController, ViewerControllerDataSource {
14+
var dismissPhotoPicker: ((_ withTLPHAssets: [TLPHAsset]) -> Void)?
15+
1416
var viewerController: ViewerController?
1517

1618
func numberOfItemsInViewerController(_: ViewerController) -> Int {
@@ -41,7 +43,9 @@ class CustomPhotoPickerViewController: TLPhotosPickerViewController, ViewerContr
4143

4244
override func viewDidLoad() {
4345
super.viewDidLoad()
44-
NotificationCenter.default.addObserver(self, selector: #selector(self.handleCellLongPress(_:)), name: Cell.longPressNotification, object: nil)
46+
if config.isPreview {
47+
NotificationCenter.default.addObserver(self, selector: #selector(self.handleCellLongPress(_:)), name: Cell.longPressNotification, object: nil)
48+
}
4549
}
4650

4751
deinit {
@@ -116,9 +120,21 @@ extension CustomPhotoPickerViewController: PreviewHeaderViewDelegate, PreviewFoo
116120

117121
func headerView(_: PreviewHeaderView, didPressDoneButton _: UIButton) {
118122
DispatchQueue.main.async {
119-
self.viewerController?.dismiss(animated: false, completion: {
120-
self.dismiss(animated: true)
121-
})
123+
self.viewerController?.dismiss {
124+
if config.singleSelectedMode {
125+
DispatchQueue.main.async {
126+
if let indexPath = self.viewerController?.currentIndexPath {
127+
guard let cell = self.collectionView.cellForItem(at: indexPath) as? TLPhotoCollectionViewCell, let localID = cell.asset?.localIdentifier else { return }
128+
129+
guard let asset = TLPHAsset.asset(with: localID) else { return }
130+
131+
self.dismissPhotoPicker!([asset])
132+
}
133+
}
134+
} else {
135+
self.dismissPhotoPicker!(self.selectedAssets)
136+
}
137+
}
122138
}
123139
}
124140

@@ -209,7 +225,7 @@ extension CustomPhotoPickerViewController: ViewerControllerDelegate {
209225

210226
guard let cell = self.collectionView.cellForItem(at: indexPath) as? TLPhotoCollectionViewCell, let localID = cell.asset?.localIdentifier else { return }
211227

212-
guard var asset = TLPHAsset.asset(with: localID) else { return }
228+
guard let asset = TLPHAsset.asset(with: localID) else { return }
213229

214230
if let index = selectedAssets.firstIndex(where: { $0.phAsset == asset.phAsset }) {
215231
button.selectedAsset = true

ios/MultipleImagePicker.swift

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,22 @@ import Photos
33
import TLPhotoPicker
44
import UIKit
55

6+
var _isCrop = true
7+
var _isPreview = true
8+
69
extension TLPhotosPickerConfigure {
710
var isPreview: Bool {
8-
get { return true }
9-
set {}
11+
get { return _isPreview }
12+
set {
13+
_isPreview = newValue
14+
}
1015
}
1116

1217
var isCrop: Bool {
13-
get { return true }
14-
set {}
18+
get { return _isCrop }
19+
set {
20+
_isCrop = newValue
21+
}
1522
}
1623
}
1724

@@ -40,6 +47,11 @@ class MultipleImagePicker: NSObject, TLPhotosPickerViewControllerDelegate, UINav
4047
func openPicker(options: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
4148
self.setConfiguration(options: options, resolve: resolve, reject: reject)
4249
let viewController = CustomPhotoPickerViewController()
50+
51+
viewController.dismissPhotoPicker = { [weak self] withPHAssets in
52+
self?.dismissPhotoPicker(withTLPHAssets: withPHAssets)
53+
}
54+
4355
viewController.delegate = self
4456

4557
viewController.didExceedMaximumNumberOfSelection = { [weak self] picker in
@@ -99,6 +111,8 @@ class MultipleImagePicker: NSObject, TLPhotosPickerViewControllerDelegate, UINav
99111

100112
config.isPreview = self.options["isPreview"] as? Bool ?? false
101113

114+
config.isCrop = (config.singleSelectedMode && self.options["isCrop"] as! Bool)
115+
102116
let mediaType = self.options["mediaType"] as! String
103117

104118
config.mediaType = mediaType == "video" ? PHAssetMediaType.video : mediaType == "image" ? PHAssetMediaType.image : nil
@@ -167,7 +181,7 @@ class MultipleImagePicker: NSObject, TLPhotosPickerViewControllerDelegate, UINav
167181
}, completionBlock: { filePath, fileType in
168182

169183
let object = MediaResponse(filePath: filePath.absoluteString, mime: fileType, withTLAsset: TLAsset, isExportThumbnail: self.options["isExportThumbnail"] as! Bool)
170-
184+
171185
DispatchQueue.main.async {
172186
completion(object)
173187
}
@@ -187,17 +201,18 @@ class MultipleImagePicker: NSObject, TLPhotosPickerViewControllerDelegate, UINav
187201
let selectedAssetsCount = self.selectedAssets.count
188202

189203
// check logic code for isCrop
190-
let cropCondition = (options["singleSelectedMode"] as! Bool) && (self.options["isCrop"] as! Bool) && withTLPHAssets.first?.type == .photo
204+
205+
let isCrop = config.isCrop && withTLPHAssets.first?.type == .photo
191206

192207
// check difference
193-
if withTLPHAssetsCount == selectedAssetsCount && withTLPHAssets[withTLPHAssetsCount - 1].phAsset?.localIdentifier == self.selectedAssets[selectedAssetsCount - 1].phAsset?.localIdentifier && !cropCondition {
208+
if withTLPHAssetsCount == selectedAssetsCount && withTLPHAssets[withTLPHAssetsCount - 1].phAsset?.localIdentifier == self.selectedAssets[selectedAssetsCount - 1].phAsset?.localIdentifier && !isCrop {
194209
self.dismissComplete()
195210
return
196211
}
197212

198213
self.selectedAssets = withTLPHAssets
199214

200-
if cropCondition {
215+
if isCrop {
201216
let uiImage = withTLPHAssets.first?.fullResolutionImage
202217
if uiImage != nil {
203218
self.presentCropViewController(image: (withTLPHAssets.first?.fullResolutionImage)!)

0 commit comments

Comments
 (0)