@ionic/portals-react-native 0.1.0 → 0.2.0

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.
Files changed (40) hide show
  1. package/README.md +11 -159
  2. package/ReactNativePortals.podspec +2 -1
  3. package/android/build.gradle +1 -1
  4. package/android/src/main/java/io/ionic/portals/reactnative/PortalView.kt +132 -0
  5. package/android/src/main/java/io/ionic/portals/reactnative/ReactNativeLiveUpdatesModule.kt +10 -28
  6. package/android/src/main/java/io/ionic/portals/reactnative/ReactNativePortalManager.kt +149 -0
  7. package/android/src/main/java/io/ionic/portals/reactnative/ReactNativePortalsModule.kt +73 -232
  8. package/android/src/main/java/io/ionic/portals/reactnative/ReactNativePortalsPackage.kt +0 -1
  9. package/android/src/main/java/io/ionic/portals/reactnative/ReactNativePortalsPubSub.kt +45 -0
  10. package/ios/LiveUpdate+Dict.swift +30 -0
  11. package/ios/LiveUpdateManager+Async.swift +69 -0
  12. package/ios/LiveUpdateManagerError+Dict.swift +19 -0
  13. package/ios/Podfile +2 -1
  14. package/ios/Podfile.lock +8 -7
  15. package/ios/Portal+Dict.swift +35 -0
  16. package/ios/PortalManager.m +10 -4
  17. package/ios/PortalView.m +1 -1
  18. package/ios/PortalView.swift +67 -0
  19. package/ios/PortalsConfig.swift +92 -0
  20. package/ios/PortalsPubSub.m +3 -3
  21. package/ios/PortalsPubSub.swift +47 -0
  22. package/ios/PortalsReactNative.swift +104 -0
  23. package/ios/ReactNativePortals.xcodeproj/project.pbxproj +32 -8
  24. package/lib/commonjs/PortalView.android.js +2 -10
  25. package/lib/commonjs/PortalView.android.js.map +1 -1
  26. package/lib/commonjs/PortalView.js +0 -6
  27. package/lib/commonjs/PortalView.js.map +1 -1
  28. package/lib/commonjs/index.js +54 -38
  29. package/lib/commonjs/index.js.map +1 -1
  30. package/lib/module/PortalView.android.js +2 -5
  31. package/lib/module/PortalView.android.js.map +1 -1
  32. package/lib/module/PortalView.js +0 -2
  33. package/lib/module/PortalView.js.map +1 -1
  34. package/lib/module/index.js +52 -19
  35. package/lib/module/index.js.map +1 -1
  36. package/lib/typescript/index.d.ts +27 -2
  37. package/package.json +3 -1
  38. package/src/index.ts +47 -12
  39. package/ios/LiveUpdatesManager.m +0 -16
  40. package/ios/ReactNativePortals.swift +0 -262
@@ -0,0 +1,67 @@
1
+ //
2
+ // PortalView.swift
3
+ // ReactNativePortals
4
+ //
5
+ // Created by Steven Sherry on 10/5/22.
6
+ // Copyright © 2022 Ionic. All rights reserved.
7
+ //
8
+
9
+ import UIKit
10
+ import Capacitor
11
+ import IonicPortals
12
+ import React
13
+
14
+ @objc(IONPortalViewManager)
15
+ class PortalViewManager: RCTViewManager {
16
+ override class func requiresMainQueueSetup() -> Bool { true }
17
+ override func view() -> UIView! { PortalView() }
18
+ }
19
+
20
+ class PortalView: UIView {
21
+ private var webView: PortalUIView?
22
+
23
+ @objc var portal: [String: Any]? {
24
+ get {
25
+ guard let _portal = _portal else { return nil }
26
+ return [
27
+ "name": _portal.name,
28
+ "initialContext": _portal.initialContext
29
+ ]
30
+ }
31
+
32
+ set {
33
+ guard let portalDict = newValue,
34
+ let name = portalDict["name"] as? String
35
+ else { return }
36
+
37
+ var portal = PortalsReactNative.getPortal(named: name)
38
+
39
+ if let initialContext = portalDict["initialContext"] as? [String: Any] {
40
+ portal?.initialContext = JSTypes.coerceDictionaryToJSObject(initialContext) ?? [:]
41
+ }
42
+
43
+ _portal = portal
44
+ }
45
+ }
46
+
47
+ private var _portal: Portal? {
48
+ didSet {
49
+ guard let portal = _portal else { return }
50
+
51
+ DispatchQueue.main.async { [weak self] in
52
+ guard let self = self else { return }
53
+ self.webView?.removeFromSuperview()
54
+ let webView = PortalUIView(portal: portal)
55
+ webView.translatesAutoresizingMaskIntoConstraints = false
56
+ self.addSubview(webView)
57
+ NSLayoutConstraint.activate([
58
+ webView.topAnchor.constraint(equalTo: self.topAnchor),
59
+ webView.bottomAnchor.constraint(equalTo: self.bottomAnchor),
60
+ webView.leadingAnchor.constraint(equalTo: self.leadingAnchor),
61
+ webView.trailingAnchor.constraint(equalTo: self.trailingAnchor)
62
+ ])
63
+ self.webView = webView
64
+ }
65
+ }
66
+ }
67
+ }
@@ -0,0 +1,92 @@
1
+ //
2
+ // PortalsConfig.swift
3
+ // ReactNativePortals
4
+ //
5
+ // Created by Steven Sherry on 10/5/22.
6
+ // Copyright © 2022 Ionic. All rights reserved.
7
+ //
8
+
9
+ import Capacitor
10
+ import IonicLiveUpdates
11
+ import IonicPortals
12
+
13
+ struct PortalsConfig {
14
+ var portals: [Portal]
15
+ var registrationKey: String?
16
+ var secureLiveUpdatesPublicKey: String?
17
+
18
+ struct Portal {
19
+ var name: String
20
+ var startDir: String?
21
+ var index: String?
22
+ var initialContext: JSObject?
23
+ var liveUpdate: LiveUpdate?
24
+
25
+ func portal(with liveUpdateManager: LiveUpdateManager) -> IonicPortals.Portal {
26
+ return .init(
27
+ name: name,
28
+ startDir: startDir,
29
+ index: index ?? "index.html",
30
+ initialContext: initialContext ?? [:],
31
+ liveUpdateManager: liveUpdateManager,
32
+ liveUpdateConfig: liveUpdate.map { .init(appId: $0.appId, channel: $0.channel, syncOnAdd: $0.syncOnAdd) }
33
+ )
34
+ }
35
+
36
+ struct LiveUpdate {
37
+ var channel: String
38
+ var appId: String
39
+ var syncOnAdd: Bool
40
+ }
41
+ }
42
+ }
43
+
44
+ extension PortalsConfig {
45
+ init?(_ dict: [String: Any]) {
46
+ guard let rawPortals = dict["portals"] as? [[String: Any]] else {
47
+ print("Portals configuration must contain a 'portals' property.")
48
+ return nil
49
+ }
50
+
51
+ let portals = rawPortals.compactMap(Portal.init)
52
+ guard portals.count == rawPortals.count else {
53
+ print("Invalid portals configuration.")
54
+ return nil
55
+ }
56
+
57
+ self.portals = portals
58
+ registrationKey = dict["registrationKey"] as? String
59
+ secureLiveUpdatesPublicKey = dict["liveUpdatesKey"] as? String
60
+ }
61
+ }
62
+
63
+ extension PortalsConfig.Portal {
64
+ init?(_ dict: [String: Any]) {
65
+ guard let name = dict["name"] as? String else {
66
+ print("Portal confifguration must contain a 'name' property.")
67
+ return nil
68
+ }
69
+
70
+ self.name = name
71
+ startDir = dict["startDir"] as? String
72
+ index = dict["index"] as? String
73
+ initialContext = (dict["initialContext"] as? [String: Any])
74
+ .flatMap { JSTypes.coerceDictionaryToJSObject($0) }
75
+ liveUpdate = (dict["liveUpdate"] as? [String: Any])
76
+ .flatMap(LiveUpdate.init)
77
+ }
78
+ }
79
+
80
+ extension PortalsConfig.Portal.LiveUpdate {
81
+ init?(_ dict: [String: Any]) {
82
+ guard let appId = dict["appId"] as? String else {
83
+ print("LiveUpdate configuration must contain an 'appId' property.")
84
+ return nil
85
+ }
86
+
87
+ self.appId = appId
88
+ channel = dict["channel"] as? String ?? "production"
89
+ syncOnAdd = dict["syncOnAdd"] as? Bool ?? true
90
+ }
91
+ }
92
+
@@ -3,7 +3,7 @@
3
3
  // ReactNativePortals
4
4
  //
5
5
  // Created by Steven Sherry on 4/1/22.
6
- // Copyright © 2022 Facebook. All rights reserved.
6
+ // Copyright © 2022 Ionic. All rights reserved.
7
7
  //
8
8
 
9
9
  #import <React/RCTBridgeModule.h>
@@ -11,6 +11,6 @@
11
11
 
12
12
  @interface RCT_EXTERN_MODULE(IONPortalPubSub, RCTEventEmitter)
13
13
  RCT_EXTERN_METHOD(subscribe: (NSString *) topic resolver: (RCTPromiseResolveBlock) resolver rejector: (RCTPromiseRejectBlock) rejector)
14
- RCT_EXTERN_METHOD(unsubscribe: (NSString *) topic subscriptionRef: (NSNumber _Nonnull) subscriptionRef)
15
- RCT_EXTERN_METHOD(publish: (NSString *) topic data: (id) data)
14
+ RCT_EXTERN_METHOD(unsubscribe: (NSString *) topic subscriptionRef: (NSNumber _Nonnull) subscriptionRef resolver: (RCTPromiseResolveBlock) resolver rejector: (RCTPromiseRejectBlock) rejector)
15
+ RCT_EXTERN_METHOD(publish: (NSString *) topic data: (id) data resolver: (RCTPromiseResolveBlock) resolver rejector: (RCTPromiseRejectBlock) rejector)
16
16
  @end
@@ -0,0 +1,47 @@
1
+ //
2
+ // PortalsPubSub.swift
3
+ // ReactNativePortals
4
+ //
5
+ // Created by Steven Sherry on 10/5/22.
6
+ // Copyright © 2022 Ionic. All rights reserved.
7
+ //
8
+
9
+ import IonicPortals
10
+ import React
11
+
12
+ @objc(IONPortalPubSub)
13
+ class PortalsPubSub: RCTEventEmitter {
14
+ private let eventName = "PortalsSubscription"
15
+
16
+ override func supportedEvents() -> [String]! {
17
+ [eventName]
18
+ }
19
+
20
+ @objc func subscribe(_ topic: String, resolver: RCTPromiseResolveBlock, rejector: RCTPromiseRejectBlock) {
21
+ let subRef = IonicPortals.PortalsPubSub.subscribe(topic) { [weak self] result in
22
+ guard let self = self else { return }
23
+ self.sendEvent(
24
+ withName: self.eventName,
25
+ body: [
26
+ "subscriptionRef": result.subscriptionRef,
27
+ "topic": result.topic,
28
+ "data": result.data
29
+ ]
30
+ )
31
+ }
32
+
33
+ resolver(subRef)
34
+ }
35
+
36
+ @objc func unsubscribe(_ topic: String, subscriptionRef: NSNumber, resolver: RCTPromiseResolveBlock, rejector: RCTPromiseRejectBlock) {
37
+ IonicPortals.PortalsPubSub.unsubscribe(from: topic, subscriptionRef: subscriptionRef.intValue)
38
+ resolver(())
39
+ }
40
+
41
+ @objc func publish(_ topic: String, data: Any, resolver: RCTPromiseResolveBlock, rejector: RCTPromiseRejectBlock) {
42
+ IONPortalsPubSub.publish(message: data, topic: topic)
43
+ resolver(())
44
+ }
45
+
46
+ override class func requiresMainQueueSetup() -> Bool { true }
47
+ }
@@ -0,0 +1,104 @@
1
+ import Foundation
2
+ import IonicPortals
3
+ import IonicLiveUpdates
4
+ import React
5
+
6
+ @objc(IONPortalsReactNative)
7
+ public class PortalsReactNative: NSObject {
8
+ private var lum: LiveUpdateManager
9
+ private static var portals: [String: Portal] = [:]
10
+
11
+ public override init() {
12
+ guard let configUrl = Bundle.main.url(forResource: "portals.config.json", withExtension: nil) else {
13
+ lum = .shared
14
+ return
15
+ }
16
+
17
+ guard let configData = try? Data(contentsOf: configUrl),
18
+ let jsonData = try? JSONSerialization.jsonObject(with: configData) as? [String: Any],
19
+ let portalsConfig = PortalsConfig(jsonData)
20
+ else { fatalError("Portals config data is malformed. Aborting.") }
21
+
22
+ if let registrationKey = portalsConfig.registrationKey {
23
+ PortalsRegistrationManager.shared.register(key: registrationKey)
24
+ }
25
+
26
+ let liveUpdateManager: LiveUpdateManager
27
+ if let publicKeyPath = portalsConfig.secureLiveUpdatesPublicKey {
28
+ guard let publicKeyUrl = Bundle.main.url(forResource: publicKeyPath, withExtension: nil) else { fatalError("Public key not found at \(publicKeyPath)") }
29
+ liveUpdateManager = SecureLiveUpdateManager(named: "secure-updates", publicKeyUrl: publicKeyUrl)
30
+ } else {
31
+ liveUpdateManager = .shared
32
+ }
33
+
34
+ lum = liveUpdateManager
35
+
36
+ let portals = portalsConfig.portals.map { $0.portal(with: liveUpdateManager) }
37
+
38
+ for portal in portals {
39
+ Self.portals[portal.name] = portal
40
+ }
41
+ }
42
+
43
+ @objc func register(_ key: String, resolver: RCTPromiseResolveBlock, rejector: RCTPromiseRejectBlock) {
44
+ PortalsRegistrationManager.shared.register(key: key)
45
+ resolver(())
46
+ }
47
+
48
+ @objc func enableSecureLiveUpdates(_ publicKeyPath: String, resolver: RCTPromiseResolveBlock, rejector: RCTPromiseRejectBlock) {
49
+ guard let publicKeyUrl = Bundle.main.url(forResource: publicKeyPath, withExtension: nil) else { fatalError("Public key not found at \(publicKeyPath)") }
50
+ lum = SecureLiveUpdateManager(named: "secure-updates", publicKeyUrl: publicKeyUrl)
51
+ resolver(())
52
+ }
53
+
54
+ @objc func addPortal(_ portalDict: [String: Any], resolver: RCTPromiseResolveBlock, rejector: RCTPromiseRejectBlock) {
55
+ guard let portal = Portal(portalDict, lum) else { return rejector(nil, "Invalid Portal configuration", nil) }
56
+ Self.portals[portal.name] = portal
57
+ resolver(portal.dict)
58
+ }
59
+
60
+ @objc func addPortals(_ portalsArray: [[String: Any]], resolver: RCTPromiseResolveBlock, rejector: RCTPromiseRejectBlock) {
61
+ let portals = portalsArray.compactMap { Portal($0, lum) }
62
+
63
+ for portal in portals {
64
+ Self.portals[portal.name] = portal
65
+ }
66
+
67
+ resolver(portals.map(\.dict))
68
+ }
69
+
70
+ static func getPortal(named name: String) -> Portal? { portals[name] }
71
+
72
+ @objc func getPortal(_ name: String, resolver: RCTPromiseResolveBlock, rejector: RCTPromiseRejectBlock) {
73
+ guard let portal = Self.getPortal(named: name) else { return rejector(nil, "Portal named \(name) not registered", nil) }
74
+ resolver(portal.dict)
75
+ }
76
+
77
+ @objc func syncOne(_ appId: String, resolver: @escaping RCTPromiseResolveBlock, rejector: @escaping RCTPromiseRejectBlock) {
78
+ lum.sync(appId: appId, isParallel: true) { result in
79
+ switch result {
80
+ case .success(let update):
81
+ resolver(update.dict)
82
+ case .failure(let error):
83
+ rejector(nil, nil, error)
84
+ }
85
+ }
86
+ }
87
+
88
+ @objc func syncSome(_ appIds: [String], resolver: @escaping RCTPromiseResolveBlock, rejector: RCTPromiseRejectBlock) {
89
+ Task {
90
+ let syncResult = await lum.syncSome(appIds)
91
+ resolver(syncResult.dict)
92
+ }
93
+ }
94
+
95
+ @objc func syncAll(_ resolver: @escaping RCTPromiseResolveBlock, rejector: RCTPromiseRejectBlock) {
96
+ Task {
97
+ let syncResult = await lum.syncAll()
98
+ resolver(syncResult.dict)
99
+ }
100
+ }
101
+
102
+
103
+ @objc static func requiresMainQueueSetup() -> Bool { true }
104
+ }
@@ -8,12 +8,18 @@
8
8
 
9
9
  /* Begin PBXBuildFile section */
10
10
  24F0245B69703967E2679F6A /* Pods_ReactNativePortals.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0529BADF230AAE24E9A25425 /* Pods_ReactNativePortals.framework */; };
11
- A7128A0627F7A16200DADDF3 /* ReactNativePortals.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4FF95D6245B92E800C19C63 /* ReactNativePortals.swift */; };
11
+ A7128A0627F7A16200DADDF3 /* PortalsReactNative.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4FF95D6245B92E800C19C63 /* PortalsReactNative.swift */; };
12
12
  A7128A0727F7A16200DADDF3 /* PortalManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A71289F927F79EB200DADDF3 /* PortalManager.m */; };
13
13
  A7128A0827F7A16200DADDF3 /* ReactNativePortals-Bridging-Header.h in Headers */ = {isa = PBXBuildFile; fileRef = F4FF95D5245B92E700C19C63 /* ReactNativePortals-Bridging-Header.h */; };
14
14
  A7128A0927F7A16200DADDF3 /* PortalsPubSub.m in Sources */ = {isa = PBXBuildFile; fileRef = A71289F827F79D4000DADDF3 /* PortalsPubSub.m */; };
15
15
  A7128A0A27F7A16200DADDF3 /* PortalView.m in Sources */ = {isa = PBXBuildFile; fileRef = A71289F727F79CDC00DADDF3 /* PortalView.m */; };
16
- A748ABFC28626EC300F26852 /* LiveUpdatesManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A748ABFB28626EC300F26852 /* LiveUpdatesManager.m */; };
16
+ A795AE1928EDEB6D0092B4B1 /* PortalsConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = A795AE1828EDEB6D0092B4B1 /* PortalsConfig.swift */; };
17
+ A795AE1B28EDEBF20092B4B1 /* PortalsPubSub.swift in Sources */ = {isa = PBXBuildFile; fileRef = A795AE1A28EDEBF20092B4B1 /* PortalsPubSub.swift */; };
18
+ A795AE1D28EDEC7A0092B4B1 /* PortalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A795AE1C28EDEC7A0092B4B1 /* PortalView.swift */; };
19
+ A795AE1F28EDED0F0092B4B1 /* Portal+Dict.swift in Sources */ = {isa = PBXBuildFile; fileRef = A795AE1E28EDED0F0092B4B1 /* Portal+Dict.swift */; };
20
+ A795AE2128EDED710092B4B1 /* LiveUpdate+Dict.swift in Sources */ = {isa = PBXBuildFile; fileRef = A795AE2028EDED710092B4B1 /* LiveUpdate+Dict.swift */; };
21
+ A795AE2328EDEDCC0092B4B1 /* LiveUpdateManagerError+Dict.swift in Sources */ = {isa = PBXBuildFile; fileRef = A795AE2228EDEDCC0092B4B1 /* LiveUpdateManagerError+Dict.swift */; };
22
+ A795AE2528EDEE4E0092B4B1 /* LiveUpdateManager+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = A795AE2428EDEE4E0092B4B1 /* LiveUpdateManager+Async.swift */; };
17
23
  /* End PBXBuildFile section */
18
24
 
19
25
  /* Begin PBXFileReference section */
@@ -22,10 +28,16 @@
22
28
  A71289F827F79D4000DADDF3 /* PortalsPubSub.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PortalsPubSub.m; sourceTree = "<group>"; };
23
29
  A71289F927F79EB200DADDF3 /* PortalManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PortalManager.m; sourceTree = "<group>"; };
24
30
  A71289FF27F7A14900DADDF3 /* ReactNativePortals.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ReactNativePortals.framework; sourceTree = BUILT_PRODUCTS_DIR; };
25
- A748ABFB28626EC300F26852 /* LiveUpdatesManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LiveUpdatesManager.m; sourceTree = "<group>"; };
31
+ A795AE1828EDEB6D0092B4B1 /* PortalsConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PortalsConfig.swift; sourceTree = "<group>"; };
32
+ A795AE1A28EDEBF20092B4B1 /* PortalsPubSub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PortalsPubSub.swift; sourceTree = "<group>"; };
33
+ A795AE1C28EDEC7A0092B4B1 /* PortalView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PortalView.swift; sourceTree = "<group>"; };
34
+ A795AE1E28EDED0F0092B4B1 /* Portal+Dict.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Portal+Dict.swift"; sourceTree = "<group>"; };
35
+ A795AE2028EDED710092B4B1 /* LiveUpdate+Dict.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "LiveUpdate+Dict.swift"; sourceTree = "<group>"; };
36
+ A795AE2228EDEDCC0092B4B1 /* LiveUpdateManagerError+Dict.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "LiveUpdateManagerError+Dict.swift"; sourceTree = "<group>"; };
37
+ A795AE2428EDEE4E0092B4B1 /* LiveUpdateManager+Async.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "LiveUpdateManager+Async.swift"; sourceTree = "<group>"; };
26
38
  CB9439A9444D2E97DA3B8149 /* Pods-ReactNativePortals.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativePortals.debug.xcconfig"; path = "Target Support Files/Pods-ReactNativePortals/Pods-ReactNativePortals.debug.xcconfig"; sourceTree = "<group>"; };
27
39
  F4FF95D5245B92E700C19C63 /* ReactNativePortals-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ReactNativePortals-Bridging-Header.h"; sourceTree = "<group>"; };
28
- F4FF95D6245B92E800C19C63 /* ReactNativePortals.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReactNativePortals.swift; sourceTree = "<group>"; };
40
+ F4FF95D6245B92E800C19C63 /* PortalsReactNative.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PortalsReactNative.swift; sourceTree = "<group>"; };
29
41
  F8836E0DEEAAB66F82FCC5C9 /* Pods-ReactNativePortals.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativePortals.release.xcconfig"; path = "Target Support Files/Pods-ReactNativePortals/Pods-ReactNativePortals.release.xcconfig"; sourceTree = "<group>"; };
30
42
  /* End PBXFileReference section */
31
43
 
@@ -59,8 +71,14 @@
59
71
  58B511D21A9E6C8500147676 = {
60
72
  isa = PBXGroup;
61
73
  children = (
62
- A748ABFB28626EC300F26852 /* LiveUpdatesManager.m */,
63
- F4FF95D6245B92E800C19C63 /* ReactNativePortals.swift */,
74
+ F4FF95D6245B92E800C19C63 /* PortalsReactNative.swift */,
75
+ A795AE2428EDEE4E0092B4B1 /* LiveUpdateManager+Async.swift */,
76
+ A795AE2228EDEDCC0092B4B1 /* LiveUpdateManagerError+Dict.swift */,
77
+ A795AE2028EDED710092B4B1 /* LiveUpdate+Dict.swift */,
78
+ A795AE1E28EDED0F0092B4B1 /* Portal+Dict.swift */,
79
+ A795AE1C28EDEC7A0092B4B1 /* PortalView.swift */,
80
+ A795AE1A28EDEBF20092B4B1 /* PortalsPubSub.swift */,
81
+ A795AE1828EDEB6D0092B4B1 /* PortalsConfig.swift */,
64
82
  A71289F727F79CDC00DADDF3 /* PortalView.m */,
65
83
  A71289F927F79EB200DADDF3 /* PortalManager.m */,
66
84
  A71289F827F79D4000DADDF3 /* PortalsPubSub.m */,
@@ -186,11 +204,17 @@
186
204
  isa = PBXSourcesBuildPhase;
187
205
  buildActionMask = 2147483647;
188
206
  files = (
189
- A748ABFC28626EC300F26852 /* LiveUpdatesManager.m in Sources */,
190
207
  A7128A0A27F7A16200DADDF3 /* PortalView.m in Sources */,
191
208
  A7128A0927F7A16200DADDF3 /* PortalsPubSub.m in Sources */,
192
- A7128A0627F7A16200DADDF3 /* ReactNativePortals.swift in Sources */,
209
+ A795AE1D28EDEC7A0092B4B1 /* PortalView.swift in Sources */,
210
+ A795AE2128EDED710092B4B1 /* LiveUpdate+Dict.swift in Sources */,
211
+ A795AE1B28EDEBF20092B4B1 /* PortalsPubSub.swift in Sources */,
212
+ A7128A0627F7A16200DADDF3 /* PortalsReactNative.swift in Sources */,
213
+ A795AE1F28EDED0F0092B4B1 /* Portal+Dict.swift in Sources */,
214
+ A795AE2328EDEDCC0092B4B1 /* LiveUpdateManagerError+Dict.swift in Sources */,
193
215
  A7128A0727F7A16200DADDF3 /* PortalManager.m in Sources */,
216
+ A795AE1928EDEB6D0092B4B1 /* PortalsConfig.swift in Sources */,
217
+ A795AE2528EDEE4E0092B4B1 /* LiveUpdateManager+Async.swift in Sources */,
194
218
  );
195
219
  runOnlyForDeploymentPostprocessing = 0;
196
220
  };
@@ -4,23 +4,16 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _react = _interopRequireWildcard(require("react"));
9
-
10
8
  var _reactNative = require("react-native");
11
-
12
9
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
13
-
14
10
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
15
-
16
11
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
17
-
18
12
  const PortalViewManager = (0, _reactNative.requireNativeComponent)('AndroidPortalView');
19
-
20
- const createFragment = viewId => _reactNative.UIManager.dispatchViewManagerCommand(viewId, // we are calling the 'create' command
13
+ const createFragment = viewId => _reactNative.UIManager.dispatchViewManagerCommand(viewId,
14
+ // we are calling the 'create' command
21
15
  // @ts-expect-error
22
16
  _reactNative.UIManager.AndroidPortalView.Commands.create.toString(), [viewId]);
23
-
24
17
  const PortalView = props => {
25
18
  const ref = (0, _react.useRef)(null);
26
19
  (0, _react.useEffect)(() => {
@@ -31,7 +24,6 @@ const PortalView = props => {
31
24
  ref: ref
32
25
  }));
33
26
  };
34
-
35
27
  var _default = PortalView;
36
28
  exports.default = _default;
37
29
  //# sourceMappingURL=PortalView.android.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["PortalViewManager","requireNativeComponent","createFragment","viewId","UIManager","dispatchViewManagerCommand","AndroidPortalView","Commands","create","toString","PortalView","props","ref","useRef","useEffect","findNodeHandle","current"],"sources":["PortalView.android.tsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport {\n findNodeHandle,\n requireNativeComponent,\n UIManager,\n} from 'react-native';\nimport type { PortalProps } from '.';\n\nconst PortalViewManager = requireNativeComponent('AndroidPortalView');\n\nconst createFragment = (viewId: number | null) =>\n UIManager.dispatchViewManagerCommand(\n viewId,\n // we are calling the 'create' command\n // @ts-expect-error\n UIManager.AndroidPortalView.Commands.create.toString(),\n [viewId]\n );\n\nconst PortalView = (props: PortalProps) => {\n const ref = useRef(null);\n\n useEffect(() => {\n const viewId = findNodeHandle(ref.current);\n createFragment(viewId);\n }, []);\n\n return <PortalViewManager {...props} ref={ref} />;\n};\n\nexport default PortalView;\n"],"mappings":";;;;;;;AAAA;;AACA;;;;;;;;AAOA,MAAMA,iBAAiB,GAAG,IAAAC,mCAAA,EAAuB,mBAAvB,CAA1B;;AAEA,MAAMC,cAAc,GAAIC,MAAD,IACrBC,sBAAA,CAAUC,0BAAV,CACEF,MADF,EAEE;AACA;AACAC,sBAAA,CAAUE,iBAAV,CAA4BC,QAA5B,CAAqCC,MAArC,CAA4CC,QAA5C,EAJF,EAKE,CAACN,MAAD,CALF,CADF;;AASA,MAAMO,UAAU,GAAIC,KAAD,IAAwB;EACzC,MAAMC,GAAG,GAAG,IAAAC,aAAA,EAAO,IAAP,CAAZ;EAEA,IAAAC,gBAAA,EAAU,MAAM;IACd,MAAMX,MAAM,GAAG,IAAAY,2BAAA,EAAeH,GAAG,CAACI,OAAnB,CAAf;IACAd,cAAc,CAACC,MAAD,CAAd;EACD,CAHD,EAGG,EAHH;EAKA,oBAAO,6BAAC,iBAAD,eAAuBQ,KAAvB;IAA8B,GAAG,EAAEC;EAAnC,GAAP;AACD,CATD;;eAWeF,U"}
1
+ {"version":3,"names":["PortalViewManager","requireNativeComponent","createFragment","viewId","UIManager","dispatchViewManagerCommand","AndroidPortalView","Commands","create","toString","PortalView","props","ref","useRef","useEffect","findNodeHandle","current"],"sources":["PortalView.android.tsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport {\n findNodeHandle,\n requireNativeComponent,\n UIManager,\n} from 'react-native';\nimport type { PortalProps } from '.';\n\nconst PortalViewManager = requireNativeComponent('AndroidPortalView');\n\nconst createFragment = (viewId: number | null) =>\n UIManager.dispatchViewManagerCommand(\n viewId,\n // we are calling the 'create' command\n // @ts-expect-error\n UIManager.AndroidPortalView.Commands.create.toString(),\n [viewId]\n );\n\nconst PortalView = (props: PortalProps) => {\n const ref = useRef(null);\n\n useEffect(() => {\n const viewId = findNodeHandle(ref.current);\n createFragment(viewId);\n }, []);\n\n return <PortalViewManager {...props} ref={ref} />;\n};\n\nexport default PortalView;\n"],"mappings":";;;;;;AAAA;AACA;AAIsB;AAAA;AAAA;AAGtB,MAAMA,iBAAiB,GAAG,IAAAC,mCAAsB,EAAC,mBAAmB,CAAC;AAErE,MAAMC,cAAc,GAAIC,MAAqB,IAC3CC,sBAAS,CAACC,0BAA0B,CAClCF,MAAM;AACN;AACA;AACAC,sBAAS,CAACE,iBAAiB,CAACC,QAAQ,CAACC,MAAM,CAACC,QAAQ,EAAE,EACtD,CAACN,MAAM,CAAC,CACT;AAEH,MAAMO,UAAU,GAAIC,KAAkB,IAAK;EACzC,MAAMC,GAAG,GAAG,IAAAC,aAAM,EAAC,IAAI,CAAC;EAExB,IAAAC,gBAAS,EAAC,MAAM;IACd,MAAMX,MAAM,GAAG,IAAAY,2BAAc,EAACH,GAAG,CAACI,OAAO,CAAC;IAC1Cd,cAAc,CAACC,MAAM,CAAC;EACxB,CAAC,EAAE,EAAE,CAAC;EAEN,oBAAO,6BAAC,iBAAiB,eAAKQ,KAAK;IAAE,GAAG,EAAEC;EAAI,GAAG;AACnD,CAAC;AAAC,eAEaF,UAAU;AAAA"}
@@ -4,19 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _react = _interopRequireDefault(require("react"));
9
-
10
8
  var _reactNative = require("react-native");
11
-
12
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
10
  const HostComponentPortal = (0, _reactNative.requireNativeComponent)('IONPortalView');
15
-
16
11
  const PortalView = props => {
17
12
  return /*#__PURE__*/_react.default.createElement(HostComponentPortal, props);
18
13
  };
19
-
20
14
  var _default = PortalView;
21
15
  exports.default = _default;
22
16
  //# sourceMappingURL=PortalView.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["HostComponentPortal","requireNativeComponent","PortalView","props"],"sources":["PortalView.tsx"],"sourcesContent":["import React from 'react';\nimport { requireNativeComponent } from 'react-native';\nimport type { PortalProps } from '.';\n\nconst HostComponentPortal = requireNativeComponent('IONPortalView');\n\nconst PortalView = (props: PortalProps) => {\n return <HostComponentPortal {...props} />;\n};\n\nexport default PortalView;\n"],"mappings":";;;;;;;AAAA;;AACA;;;;AAGA,MAAMA,mBAAmB,GAAG,IAAAC,mCAAA,EAAuB,eAAvB,CAA5B;;AAEA,MAAMC,UAAU,GAAIC,KAAD,IAAwB;EACzC,oBAAO,6BAAC,mBAAD,EAAyBA,KAAzB,CAAP;AACD,CAFD;;eAIeD,U"}
1
+ {"version":3,"names":["HostComponentPortal","requireNativeComponent","PortalView","props"],"sources":["PortalView.tsx"],"sourcesContent":["import React from 'react';\nimport { requireNativeComponent } from 'react-native';\nimport type { PortalProps } from '.';\n\nconst HostComponentPortal = requireNativeComponent('IONPortalView');\n\nconst PortalView = (props: PortalProps) => {\n return <HostComponentPortal {...props} />;\n};\n\nexport default PortalView;\n"],"mappings":";;;;;;AAAA;AACA;AAAsD;AAGtD,MAAMA,mBAAmB,GAAG,IAAAC,mCAAsB,EAAC,eAAe,CAAC;AAEnE,MAAMC,UAAU,GAAIC,KAAkB,IAAK;EACzC,oBAAO,6BAAC,mBAAmB,EAAKA,KAAK,CAAI;AAC3C,CAAC;AAAC,eAEaD,UAAU;AAAA"}