Skip to content

Commit e243459

Browse files
authored
Merge pull request #1494 from wordpress-mobile/issue/fix_request_import_on_bridge
Fix requestImport call to send the correct arguments.
2 parents f190247 + a4bab40 commit e243459

File tree

4 files changed

+55
-24
lines changed

4 files changed

+55
-24
lines changed

RELEASE-NOTES.txt

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
1.15.2
22
------
3+
* Fix issue when copy/paste photos from other apps, was not inserting an image on the post.
34
* Fix issue where the block inserter layout wasn't correct after device rotation.
45

56
1.15.0

ios/gutenberg/GutenbergViewController.swift

+10-8
Original file line numberDiff line numberDiff line change
@@ -74,15 +74,17 @@ extension GutenbergViewController: GutenbergBridgeDelegate {
7474
switch currentFilter {
7575
case .image:
7676
if(allowMultipleSelection) {
77-
callback([(1, "https://cldup.com/cXyG__fTLN.jpg", "image"), (3, "https://cldup.com/cXyG__fTLN.jpg", "image")])
77+
callback([MediaInfo(id: 1, url: "https://cldup.com/cXyG__fTLN.jpg", type: "image"),
78+
MediaInfo(id: 3, url: "https://cldup.com/cXyG__fTLN.jpg", type: "image")])
7879
} else {
79-
callback([(1, "https://cldup.com/cXyG__fTLN.jpg", "image")])
80+
callback([MediaInfo(id: 1, url: "https://cldup.com/cXyG__fTLN.jpg", type: "image")])
8081
}
8182
case .video:
8283
if(allowMultipleSelection) {
83-
callback([(2, "https://i.cloudup.com/YtZFJbuQCE.mov", "video"), (4, "https://i.cloudup.com/YtZFJbuQCE.mov", "video")])
84+
callback([MediaInfo(id: 2, url: "https://i.cloudup.com/YtZFJbuQCE.mov", type: "video"),
85+
MediaInfo(id: 4, url: "https://i.cloudup.com/YtZFJbuQCE.mov", type: "video")])
8486
} else {
85-
callback([(2, "https://i.cloudup.com/YtZFJbuQCE.mov", "video")])
87+
callback([MediaInfo(id: 2, url: "https://i.cloudup.com/YtZFJbuQCE.mov", type: "video")])
8688
}
8789
default:
8890
break
@@ -96,18 +98,18 @@ extension GutenbergViewController: GutenbergBridgeDelegate {
9698
}
9799
}
98100

99-
func gutenbergDidRequestImport(from url: URL, with callback: @escaping MediaPickerDidPickMediaCallback) {
101+
func gutenbergDidRequestImport(from url: URL, with callback: @escaping MediaImportCallback) {
100102
let id = mediaUploadCoordinator.upload(url: url)
101-
callback([(id, url.absoluteString, "image")])
103+
callback(MediaInfo(id: id, url: url.absoluteString, type: "image"))
102104
}
103105

104106
func pickAndUpload(from source: UIImagePickerController.SourceType, filter: MediaFilter, callback: @escaping MediaPickerDidPickMediaCallback) {
105107
mediaPickCoordinator = MediaPickCoordinator(presenter: self, filter: filter, callback: { (url) in
106108
guard let url = url, let mediaID = self.mediaUploadCoordinator.upload(url: url) else {
107-
callback([(nil, nil, nil)])
109+
callback([MediaInfo(id: nil, url: nil, type: nil)])
108110
return
109111
}
110-
callback([(mediaID, url.absoluteString, "image")])
112+
callback([MediaInfo(id: mediaID, url: url.absoluteString, type: "image")])
111113
self.mediaPickCoordinator = nil
112114
} )
113115
mediaPickCoordinator?.pick(from: source)

react-native-gutenberg-bridge/ios/GutenbergBridgeDelegate.swift

+16-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,18 @@
1-
public typealias MediaPickerDidPickMediaCallback = (_ media: [(Int32?,String?,String?)]?) -> Void
1+
public struct MediaInfo {
2+
public let id: Int32?
3+
public let url: String?
4+
public let type: String?
5+
6+
public init(id: Int32?, url: String?, type: String?) {
7+
self.id = id
8+
self.url = url
9+
self.type = type
10+
}
11+
}
12+
13+
public typealias MediaPickerDidPickMediaCallback = (_ media: [MediaInfo]?) -> Void
14+
15+
public typealias MediaImportCallback = (_ media: MediaInfo?) -> Void
216

317
public enum MediaPickerSource: String {
418
case mediaLibrary = "SITE_MEDIA_LIBRARY"
@@ -71,7 +85,7 @@ public protocol GutenbergBridgeDelegate: class {
7185
/// - url: the url to import
7286
/// - callback: A callback block to be called with an array of upload mediaIdentifiers and a placeholder images file url, use nil on both parameters to signal that the action has failed.
7387
//
74-
func gutenbergDidRequestImport(from url: URL, with callback: @escaping MediaPickerDidPickMediaCallback)
88+
func gutenbergDidRequestImport(from url: URL, with callback: @escaping MediaImportCallback)
7589

7690
/// Tells the delegate that an image block requested to reconnect with media uploads coordinator.
7791
///

react-native-gutenberg-bridge/ios/RNReactNativeGutenbergBridge.swift

+28-14
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,20 @@ public class RNReactNativeGutenbergBridge: RCTEventEmitter {
2727
callback(nil)
2828
return
2929
}
30-
if (allowMultipleSelection) {
31-
let formattedMedia = media.map { (id, url, type) in
32-
return [mediaDictKeys.IDKey: id, mediaDictKeys.URLKey: url, mediaDictKeys.TypeKey: type]
33-
}
34-
callback([formattedMedia])
30+
let mediaToReturn: [MediaInfo]
31+
if allowMultipleSelection {
32+
mediaToReturn = media
3533
} else {
36-
guard let (mediaID, mediaURL, mediaType) = media.first else {
37-
callback(nil)
38-
return
39-
}
40-
callback([[mediaDictKeys.IDKey: mediaID, mediaDictKeys.URLKey: mediaURL, mediaDictKeys.TypeKey: mediaType]])
34+
mediaToReturn = Array(media.prefix(1))
35+
}
36+
37+
let jsFormattedMedia = mediaToReturn.map { mediaInfo in
38+
return mediaInfo.encodeForJS()
39+
}
40+
if allowMultipleSelection {
41+
callback([jsFormattedMedia])
42+
} else {
43+
callback(jsFormattedMedia)
4144
}
4245
})
4346
}
@@ -50,12 +53,12 @@ public class RNReactNativeGutenbergBridge: RCTEventEmitter {
5053
return
5154
}
5255
DispatchQueue.main.async {
53-
self.delegate?.gutenbergDidRequestImport(from: url, with: { mediaList in
54-
guard let mediaList = mediaList else {
56+
self.delegate?.gutenbergDidRequestImport(from: url, with: { mediaInfo in
57+
guard let mediaInfo = mediaInfo else {
5558
callback(nil)
5659
return
57-
}
58-
callback(mediaList)
60+
}
61+
callback([mediaInfo.id as Any, mediaInfo.url as Any])
5962
})
6063
}
6164
}
@@ -197,3 +200,14 @@ extension RNReactNativeGutenbergBridge {
197200
static let TypeKey = "type"
198201
}
199202
}
203+
204+
extension MediaInfo {
205+
206+
func encodeForJS() -> [String: Any] {
207+
return [
208+
RNReactNativeGutenbergBridge.mediaDictKeys.IDKey: id as Any,
209+
RNReactNativeGutenbergBridge.mediaDictKeys.URLKey: url as Any,
210+
RNReactNativeGutenbergBridge.mediaDictKeys.TypeKey: type as Any
211+
]
212+
}
213+
}

0 commit comments

Comments
 (0)