@applicaster/quick-brick-native-apple 5.14.2 → 5.15.0-alpha.2

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "QuickBrickApple",
3
- "version": "5.14.2",
3
+ "version": "5.15.0-alpha.2",
4
4
  "platforms": {
5
5
  "ios": "12.0",
6
6
  "tvos": "12.0"
@@ -16,7 +16,7 @@
16
16
  "authors": "Applicaster LTD.",
17
17
  "source": {
18
18
  "git": "https://github.com/applicaster/Zapp-Frameworks.git",
19
- "tag": "@@applicaster/quick-brick-native-apple/5.14.2"
19
+ "tag": "@@applicaster/quick-brick-native-apple/5.15.0-alpha.2"
20
20
  },
21
21
  "requires_arc": true,
22
22
  "source_files": "universal/**/*.{m,swift}",
@@ -13,6 +13,8 @@ import ZappCore
13
13
  class LocalNotificationBridge: NSObject, RCTBridgeModule {
14
14
  let kModuleName = "LocalNotificationBridge"
15
15
  let LocalNotificationRecievedEvent = "localNotificationReceived"
16
+ let kErrorCodeFailedToScheduleLocalNotification = "FAILED_TO_SCHEDULE_LOCAL_NOTIFICATION"
17
+ let kErrorCodeFailedToCancelLocalNotifications = "FAILED_TO_CANCEL_LOCAL_NOTIFICATION"
16
18
 
17
19
  static func moduleName() -> String! {
18
20
  return "LocalNotificationBridge"
@@ -22,54 +24,42 @@ class LocalNotificationBridge: NSObject, RCTBridgeModule {
22
24
  true
23
25
  }
24
26
 
25
- /// prefered thread on which to run this native module
26
- @objc public var methodQueue: DispatchQueue {
27
- return DispatchQueue.main
28
- }
29
-
30
- struct Errors {
31
- static let failedToScheduleLocalNotificationCode = "FAILED_TO_SCHEDULE_LOCAL_NOTIFICATION"
32
- static let failedToCancelLocalNotifications = "FAILED_TO_CANCEL_LOCAL_NOTIFICATION"
33
- }
34
-
35
27
  @objc func cancelLocalNotifications(_ identifiers: [String]?,
36
28
  resolver: @escaping RCTPromiseResolveBlock,
37
29
  rejecter: @escaping RCTPromiseRejectBlock) {
38
- guard let identifiers = identifiers else {
39
- rejecter(Errors.failedToCancelLocalNotifications,
40
- nil,
41
- nil)
42
- return
43
- }
44
-
45
- FacadeConnector.connector?.localNotification?.cancel(for: identifiers, completion: { result in
46
- switch result {
47
- case let .success(value):
48
- resolver(value)
49
- case let .failure(error):
50
- rejecter(Errors.failedToCancelLocalNotifications,
30
+ DispatchQueue.main.async {
31
+ guard let identifiers = identifiers else {
32
+ rejecter(self.kErrorCodeFailedToCancelLocalNotifications,
51
33
  nil,
52
- error)
34
+ nil)
35
+ return
53
36
  }
54
- })
37
+
38
+ FacadeConnector.connector?.localNotification?.cancelLocalNotifications(identifiers,
39
+ completion: { success, error in
40
+ success && error == nil ? resolver(success) :
41
+ rejecter(self.kErrorCodeFailedToCancelLocalNotifications,
42
+ nil,
43
+ error)
44
+ })
45
+ }
55
46
  }
56
47
 
57
48
  @objc public func presentLocalNotification(_ payload: [AnyHashable: Any]?,
58
49
  resolver: @escaping RCTPromiseResolveBlock,
59
50
  rejecter: @escaping RCTPromiseRejectBlock) {
60
- guard let payload = payload as [AnyHashable: Any]? else {
61
- return
62
- }
63
-
64
- FacadeConnector.connector?.localNotification?.present(with: payload, completion: { result in
65
- switch result {
66
- case let .success(value):
67
- resolver(value)
68
- case let .failure(error):
69
- rejecter(Errors.failedToScheduleLocalNotificationCode,
70
- nil,
71
- error)
51
+ DispatchQueue.main.async {
52
+ guard let payload = payload as [AnyHashable: Any]? else {
53
+ return
72
54
  }
73
- })
55
+
56
+ FacadeConnector.connector?.localNotification?.presentLocalNotification(payload,
57
+ completion: { isScheduled, error in
58
+ isScheduled && error == nil ? resolver(isScheduled) :
59
+ rejecter(self.kErrorCodeFailedToScheduleLocalNotification,
60
+ nil,
61
+ error)
62
+ })
63
+ }
74
64
  }
75
65
  }
@@ -19,16 +19,6 @@ class OfflineAssetsBridge: NSObject, RCTBridgeModule {
19
19
  static let url = "url"
20
20
  }
21
21
 
22
- struct Errors {
23
- static let failedToFetchCode = "failed to fetch files"
24
- static let failedToFetchBody = "files arrray is empty"
25
- static let unableToGetDirPathCode = "unable to get directory path"
26
- static let failedToDeleteFileCode = "failed to delete file"
27
- static let filePathNotProvidedBody = "File path was not provided"
28
- static let fileNotExitstAtPathBody = "File not exists at path: "
29
- static let failedToDeleteFileAtPathBody = "Failed to delete file at path: "
30
- }
31
-
32
22
  static func moduleName() -> String! {
33
23
  return "OfflineAssetsBridge"
34
24
  }
@@ -54,8 +44,8 @@ class OfflineAssetsBridge: NSObject, RCTBridgeModule {
54
44
  let dispatchGroup = DispatchGroup()
55
45
 
56
46
  guard let files = filesList, files.count > 0 else {
57
- rejecter(Errors.failedToFetchCode,
58
- Errors.failedToFetchBody,
47
+ rejecter("failed to fetch files",
48
+ "files arrray is empty",
59
49
  nil)
60
50
  return
61
51
  }
@@ -83,7 +73,7 @@ class OfflineAssetsBridge: NSObject, RCTBridgeModule {
83
73
  }
84
74
 
85
75
  dispatchGroup.notify(queue: .main) { [unowned self] in
86
- let responseObj = self.tasks.map { ["\($0.saveTo.absoluteString)": $0.state == .completed ? true : false] }
76
+ let responseObj = self.tasks.map { ["\($0.saveTo.absoluteString)": $0.state == .completed ? true : false ] }
87
77
  resolver(responseObj)
88
78
  }
89
79
  }
@@ -95,7 +85,7 @@ class OfflineAssetsBridge: NSObject, RCTBridgeModule {
95
85
  if let folderUrl = FileManager.default.getContentFolder(appendingFolderName: folderName) {
96
86
  resolver(folderUrl.relativePath)
97
87
  } else {
98
- rejecter(Errors.unableToGetDirPathCode,
88
+ rejecter("unable to get directory path",
99
89
  "",
100
90
  nil)
101
91
  }
@@ -108,16 +98,16 @@ class OfflineAssetsBridge: NSObject, RCTBridgeModule {
108
98
  let fileManager = FileManager.default
109
99
 
110
100
  guard let path = path else {
111
- rejecter(Errors.failedToDeleteFileCode,
112
- Errors.filePathNotProvidedBody,
101
+ rejecter("failed to delete file",
102
+ "File path was not provided",
113
103
  nil)
114
104
  return
115
105
  }
116
106
 
117
107
  let url = URL(fileURLWithPath: path.replacingOccurrences(of: "file://", with: ""))
118
108
  guard fileManager.fileExists(atPath: url.path) == true else {
119
- rejecter(Errors.failedToDeleteFileCode,
120
- Errors.fileNotExitstAtPathBody + String(describing: path),
109
+ rejecter("failed to delete file",
110
+ "File not exists at path: \(String(describing: path))",
121
111
  nil)
122
112
  return
123
113
  }
@@ -132,8 +122,8 @@ class OfflineAssetsBridge: NSObject, RCTBridgeModule {
132
122
  if success {
133
123
  resolver(true)
134
124
  } else {
135
- rejecter(Errors.failedToDeleteFileCode,
136
- Errors.failedToDeleteFileAtPathBody + path,
125
+ rejecter("failed to delete file",
126
+ "Failed to delete file at path: \(path)",
137
127
  nil)
138
128
  }
139
129
  }
@@ -11,6 +11,12 @@ import ZappCore
11
11
 
12
12
  @objc(PluginsManagerBridge)
13
13
  class PluginsManagerBridge: NSObject, RCTBridgeModule {
14
+ let noIdentifierErrorCode = "error_identifier_empty"
15
+ let noIdentifierErrorBody = "Plugin identifier is nil"
16
+
17
+ let noTypeErrorCode = "error_type_empty"
18
+ let noTypeErrorBody = "Plugin types is nil"
19
+
14
20
  static func moduleName() -> String! {
15
21
  return "PluginsManager"
16
22
  }
@@ -23,38 +29,21 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
23
29
  @objc public var methodQueue: DispatchQueue {
24
30
  return DispatchQueue.main
25
31
  }
26
-
27
- struct Errors {
28
- static let noIdentifierCode = "error_identifier_empty"
29
- static let noIdentifierBody = "Plugin identifier is nil"
30
- static let noTypeCode = "error_type_empty"
31
- static let noTypeBody = "Plugin types is nil"
32
- static let disablePluginCode = "disable_plugin"
33
- static let disablePluginBody = "Failed to disable plugin with id: "
34
- static let enablePluginCode = "enable_plugin"
35
- static let enablePluginBody = "Failed to enable plugin with id: "
36
- static let isPluginEnabledCode = "check_enabled_plugin"
37
- static let isPluginEnabledBody = "Failed to check plugin enabled state with id: "
38
- static let disablePluginsCode = "disable_all_plugins"
39
- static let disablePluginsBody = "Failed to disable all plugins with type: "
40
- static let enablePluginsCode = "enable_all_plugins"
41
- static let enablePluginsBody = "Failed to enable all plugins with type: "
42
- }
43
32
 
44
33
  @objc public func isPluginEnabled(_ identifier: String?,
45
34
  resolver: @escaping RCTPromiseResolveBlock,
46
35
  rejecter: @escaping RCTPromiseRejectBlock) {
47
36
  guard let identifier = identifier else {
48
- rejecter(Errors.noIdentifierCode,
49
- Errors.noIdentifierBody,
37
+ rejecter(noIdentifierErrorCode,
38
+ noIdentifierErrorBody,
50
39
  nil)
51
40
  return
52
41
  }
53
42
  if let value = FacadeConnector.connector?.pluginManager?.isPluginEnabled(identifier: identifier) {
54
43
  resolver(value)
55
44
  } else {
56
- rejecter(Errors.isPluginEnabledCode,
57
- Errors.isPluginEnabledBody+identifier,
45
+ rejecter("enable_plugins",
46
+ "Failed to check plugin enabled state with id:\(identifier)",
58
47
  nil)
59
48
  }
60
49
  }
@@ -63,8 +52,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
63
52
  resolver: @escaping RCTPromiseResolveBlock,
64
53
  rejecter: @escaping RCTPromiseRejectBlock) {
65
54
  guard let identifier = identifier else {
66
- rejecter(Errors.noIdentifierCode,
67
- Errors.noIdentifierBody,
55
+ rejecter(noIdentifierErrorCode,
56
+ noIdentifierErrorBody,
68
57
  nil)
69
58
  return
70
59
  }
@@ -72,8 +61,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
72
61
  if success {
73
62
  resolver(true)
74
63
  } else {
75
- rejecter(Errors.disablePluginCode,
76
- Errors.disablePluginBody+identifier,
64
+ rejecter("disable_plugins",
65
+ "Failed to enable plugin with id:\(identifier)",
77
66
  nil)
78
67
  }
79
68
  })
@@ -83,8 +72,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
83
72
  resolver: @escaping RCTPromiseResolveBlock,
84
73
  rejecter: @escaping RCTPromiseRejectBlock) {
85
74
  guard let pluginType = pluginType else {
86
- rejecter(Errors.noTypeCode,
87
- Errors.noTypeBody,
75
+ rejecter(noTypeErrorCode,
76
+ noTypeErrorBody,
88
77
  nil)
89
78
  return
90
79
  }
@@ -92,8 +81,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
92
81
  if success {
93
82
  resolver(true)
94
83
  } else {
95
- rejecter(Errors.disablePluginsCode,
96
- Errors.disablePluginsBody+pluginType,
84
+ rejecter("disable_all_plugins",
85
+ "Failed to disable all plugins with type:\(pluginType)",
97
86
  nil)
98
87
  }
99
88
 
@@ -104,8 +93,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
104
93
  resolver: @escaping RCTPromiseResolveBlock,
105
94
  rejecter: @escaping RCTPromiseRejectBlock) {
106
95
  guard let identifier = identifier else {
107
- rejecter(Errors.noIdentifierCode,
108
- Errors.noIdentifierBody,
96
+ rejecter(noIdentifierErrorCode,
97
+ noIdentifierErrorBody,
109
98
  nil)
110
99
  return
111
100
  }
@@ -114,8 +103,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
114
103
  if success {
115
104
  resolver(true)
116
105
  } else {
117
- rejecter(Errors.enablePluginCode,
118
- Errors.enablePluginBody+identifier,
106
+ rejecter("enable_plugins",
107
+ "Failed to enable plugin with id:\(identifier)",
119
108
  nil)
120
109
  }
121
110
 
@@ -126,8 +115,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
126
115
  resolver: @escaping RCTPromiseResolveBlock,
127
116
  rejecter: @escaping RCTPromiseRejectBlock) {
128
117
  guard let pluginType = pluginType else {
129
- rejecter(Errors.noTypeCode,
130
- Errors.noTypeBody,
118
+ rejecter(noTypeErrorCode,
119
+ noTypeErrorBody,
131
120
  nil)
132
121
  return
133
122
  }
@@ -136,8 +125,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
136
125
  if success {
137
126
  resolver(true)
138
127
  } else {
139
- rejecter(Errors.enablePluginsCode,
140
- Errors.enablePluginsBody+pluginType,
128
+ rejecter("enable_all_plugins",
129
+ "Failed to enable all plugins with type:\(pluginType)",
141
130
  nil)
142
131
  }
143
132
 
@@ -9,6 +9,7 @@
9
9
  import Foundation
10
10
  import os.log
11
11
  import React
12
+ import ZappCore
12
13
 
13
14
  let kQuickBrickCommunicationModule = "QuickBrickCommunicationModule"
14
15
 
@@ -16,6 +17,16 @@ let kQuickBrickCommunicationModule = "QuickBrickCommunicationModule"
16
17
  Events Supported by the QuickBrickManager native module
17
18
  In order to add events, add a case, and add the invoke the appropriate handler in the invokeHandler method
18
19
  */
20
+
21
+ struct ReactNativeCommunicationModuleError {
22
+ public static let errorCode = "ReactNativeCommunicationModuleError"
23
+ public static let languageIsUndefined = "Language value is undefined"
24
+ public static let languageIsEmpty = "Language value is empty"
25
+ public static let localStorageNotAccessible = "Can not access Local Storage"
26
+ public static let unableToSaveToLocalStorage = "Unable to save value to Local Storage"
27
+ public static let unableToUseDelegateManager = "Unable to use delegate manager"
28
+ }
29
+
19
30
  enum Events: String {
20
31
  case quickBrickReady
21
32
  case moveAppToBackground
@@ -45,7 +56,7 @@ enum Events: String {
45
56
  case .forceAppReload:
46
57
  manager.forceAppReload()
47
58
  case .setPrefersHomeIndicatorAutoHidden:
48
- manager.setPrefersHomeIndicatorAutoHidden(payload)
59
+ manager.setPrefersHomeIndicatorAutoHidden(payload)
49
60
  }
50
61
  }
51
62
  }
@@ -123,4 +134,49 @@ class ReactNativeCommunicationModule: NSObject, RCTBridgeModule {
123
134
 
124
135
  event?.invokeHandler(manager: delegateManager, payload: payload ?? [:])
125
136
  }
137
+
138
+ @objc func setAppLanguage(_ language: String?,
139
+ resolver: @escaping RCTPromiseResolveBlock,
140
+ rejecter: @escaping RCTPromiseRejectBlock) {
141
+ let storageKey = "forcedLanguageCode"
142
+
143
+ guard let language = language else {
144
+ rejecter(ReactNativeCommunicationModuleError.errorCode,
145
+ ReactNativeCommunicationModuleError.languageIsUndefined,
146
+ nil)
147
+ return
148
+ }
149
+
150
+ guard !language.isEmpty else {
151
+ rejecter(ReactNativeCommunicationModuleError.errorCode,
152
+ ReactNativeCommunicationModuleError.languageIsEmpty,
153
+ nil)
154
+ return
155
+ }
156
+
157
+ guard let delegateManager = self.delegateManager else {
158
+ rejecter(ReactNativeCommunicationModuleError.errorCode,
159
+ ReactNativeCommunicationModuleError.unableToUseDelegateManager, nil)
160
+ return
161
+ }
162
+
163
+ DispatchQueue.main.async {
164
+ guard let storage = FacadeConnector.connector?.storage else {
165
+ rejecter(ReactNativeCommunicationModuleError.errorCode,
166
+ ReactNativeCommunicationModuleError.localStorageNotAccessible, nil)
167
+ return
168
+ }
169
+
170
+ if storage.localStorageSetValue(for: storageKey,
171
+ value: language,
172
+ namespace: nil) == true {
173
+ resolver(true)
174
+ } else {
175
+ rejecter(ReactNativeCommunicationModuleError.errorCode,
176
+ ReactNativeCommunicationModuleError.unableToSaveToLocalStorage, nil)
177
+ }
178
+
179
+ delegateManager.forceAppReload()
180
+ }
181
+ }
126
182
  }
@@ -187,7 +187,7 @@ extension ReactNativeManager: QuickBrickManagerDelegate {
187
187
  completion = nil
188
188
  }
189
189
 
190
- /// Force application to move to background
190
+ /// Force application to move to bakckground
191
191
  public func moveAppToBackground() {
192
192
  DispatchQueue.main.async {
193
193
  UIApplication.shared.perform(NSSelectorFromString(suspendApp))
@@ -226,4 +226,4 @@ extension ReactNativeManager: QuickBrickManagerDelegate {
226
226
  public func forceAppReload() {
227
227
  EventsBus.post(EventsBus.Event(type: EventsBusType(.forceAppReload)))
228
228
  }
229
- }
229
+ }
@@ -13,6 +13,9 @@
13
13
  RCT_EXTERN_METHOD(quickBrickEvent:(NSString *)eventName
14
14
  payload:(NSDictionary *)payload);
15
15
 
16
+ RCT_EXTERN_METHOD(setAppLanguage:(NSString *)language
17
+ resolver:(RCTPromiseResolveBlock)resolver
18
+ rejecter:(RCTPromiseRejectBlock)rejecter);
16
19
  @end
17
20
 
18
21
  @interface RCT_EXTERN_MODULE (AnalyticsBridge, NSObject)
@@ -123,5 +126,5 @@ RCT_EXTERN_METHOD(delete:(NSString *)path
123
126
  rejecter:(RCTPromiseRejectBlock)reject);
124
127
 
125
128
  RCT_EXTERN_METHOD(getFilesDirectory:(RCTPromiseResolveBlock)resolve
126
- rejecter:(RCTPromiseRejectBlock)reject);
129
+ rejecter:(RCTPromiseRejectBlock)reject);
127
130
  @end
@@ -10,6 +10,13 @@ import Foundation
10
10
  import React
11
11
  import ZappCore
12
12
 
13
+ public struct LocalErrorCallBack {
14
+ public static let errorCode = "LocalStorageError"
15
+ public static let errorMessageSet = "Local values could not be saved"
16
+ public static let errorMessageGet = "Local values could not be retrieved"
17
+ public static let errorMessageRemove = "Local values could not be removed"
18
+ }
19
+
13
20
  @objc(LocalStorage)
14
21
  class LocalStorageBridge: NSObject, RCTBridgeModule {
15
22
  var bridge: RCTBridge!
@@ -22,18 +29,6 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
22
29
  return true
23
30
  }
24
31
 
25
- /// prefered thread on which to run this native module
26
- @objc public var methodQueue: DispatchQueue {
27
- return DispatchQueue.main
28
- }
29
-
30
- struct Errors {
31
- static let errorCode = "LocalErrors"
32
- static let errorMessageSet = "Local storage value could not be saved"
33
- static let errorMessageGet = "Local storage value could not be retrieved"
34
- static let errorMessageRemove = "Local storage value could not be removed"
35
- }
36
-
37
32
  // MARK: RC extern methods
38
33
 
39
34
  /// Store a stringified object in LocalStorage
@@ -47,19 +42,21 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
47
42
  @objc public func setItem(_ key: String?, value: String?, namespace: String?,
48
43
  resolver: @escaping RCTPromiseResolveBlock,
49
44
  rejecter: @escaping RCTPromiseRejectBlock) {
50
- guard let key = key,
51
- let value = value,
52
- let storage = FacadeConnector.connector?.storage else {
53
- rejecter(Errors.errorCode, Errors.errorMessageSet, nil)
54
- return
55
- }
56
-
57
- if storage.localStorageSetValue(for: key,
58
- value: value,
59
- namespace: namespace) == true {
60
- resolver(true)
61
- } else {
62
- rejecter(Errors.errorCode, Errors.errorMessageSet, nil)
45
+ DispatchQueue.main.async {
46
+ guard let key = key,
47
+ let value = value,
48
+ let storage = FacadeConnector.connector?.storage else {
49
+ rejecter(LocalErrorCallBack.errorCode, LocalErrorCallBack.errorMessageSet, nil)
50
+ return
51
+ }
52
+
53
+ if storage.localStorageSetValue(for: key,
54
+ value: value,
55
+ namespace: namespace) == true {
56
+ resolver(true)
57
+ } else {
58
+ rejecter(LocalErrorCallBack.errorCode, LocalErrorCallBack.errorMessageSet, nil)
59
+ }
63
60
  }
64
61
  }
65
62
 
@@ -74,14 +71,16 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
74
71
  namespace: String?,
75
72
  resolver: @escaping RCTPromiseResolveBlock,
76
73
  rejecter: @escaping RCTPromiseRejectBlock) {
77
- guard let key = key,
78
- let storage = FacadeConnector.connector?.storage else {
79
- rejecter(Errors.errorCode, Errors.errorMessageGet, nil)
80
- return
74
+ DispatchQueue.main.async {
75
+ guard let key = key,
76
+ let storage = FacadeConnector.connector?.storage else {
77
+ rejecter(LocalErrorCallBack.errorCode, LocalErrorCallBack.errorMessageGet, nil)
78
+ return
79
+ }
80
+
81
+ let retVal = storage.localStorageValue(for: key, namespace: namespace)
82
+ resolver(retVal)
81
83
  }
82
-
83
- let retVal = storage.localStorageValue(for: key, namespace: namespace)
84
- resolver(retVal)
85
84
  }
86
85
 
87
86
  /// Remove previously saved session value by key
@@ -95,15 +94,17 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
95
94
  namespace: String?,
96
95
  resolver: @escaping RCTPromiseResolveBlock,
97
96
  rejecter: @escaping RCTPromiseRejectBlock) {
98
- guard let key = key,
99
- let storage = FacadeConnector.connector?.storage else {
100
- rejecter(Errors.errorCode, Errors.errorMessageRemove, nil)
101
- return
97
+ DispatchQueue.main.async {
98
+ guard let key = key,
99
+ let storage = FacadeConnector.connector?.storage else {
100
+ rejecter(LocalErrorCallBack.errorCode, LocalErrorCallBack.errorMessageRemove, nil)
101
+ return
102
+ }
103
+
104
+ let retVal = storage.localStorageRemoveValue(for: key,
105
+ namespace: namespace)
106
+ resolver(retVal)
102
107
  }
103
-
104
- let retVal = storage.localStorageRemoveValue(for: key,
105
- namespace: namespace)
106
- resolver(retVal)
107
108
  }
108
109
 
109
110
  /// Get ALL previously saved session values
@@ -115,13 +116,15 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
115
116
  @objc public func getAllItems(_ namespace: String?,
116
117
  resolver: @escaping RCTPromiseResolveBlock,
117
118
  rejecter: @escaping RCTPromiseRejectBlock) {
118
- guard let storage = FacadeConnector.connector?.storage else {
119
- rejecter(Errors.errorCode, Errors.errorMessageGet, nil)
120
- return
119
+ DispatchQueue.main.async {
120
+ guard let storage = FacadeConnector.connector?.storage else {
121
+ rejecter(LocalErrorCallBack.errorCode, LocalErrorCallBack.errorMessageGet, nil)
122
+ return
123
+ }
124
+
125
+ let retVal = storage.localStorageAllValues(namespace: namespace)
126
+ resolver(retVal)
121
127
  }
122
-
123
- let retVal = storage.localStorageAllValues(namespace: namespace)
124
- resolver(retVal)
125
128
  }
126
129
 
127
130
  /// Store a stringified object in Keychain
@@ -137,19 +140,21 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
137
140
  namespace: String?,
138
141
  resolver: @escaping RCTPromiseResolveBlock,
139
142
  rejecter: @escaping RCTPromiseRejectBlock) {
140
- guard let key = key,
141
- let value = value,
142
- let storage = FacadeConnector.connector?.storage else {
143
- rejecter(Errors.errorCode, Errors.errorMessageSet, nil)
144
- return
145
- }
146
-
147
- if storage.keychainStorageSetValue(for: key,
148
- value: value,
149
- namespace: namespace) == true {
150
- resolver(true)
151
- } else {
152
- rejecter(Errors.errorCode, Errors.errorMessageSet, nil)
143
+ DispatchQueue.main.async {
144
+ guard let key = key,
145
+ let value = value,
146
+ let storage = FacadeConnector.connector?.storage else {
147
+ rejecter(LocalErrorCallBack.errorCode, LocalErrorCallBack.errorMessageSet, nil)
148
+ return
149
+ }
150
+
151
+ if storage.keychainStorageSetValue(for: key,
152
+ value: value,
153
+ namespace: namespace) == true {
154
+ resolver(true)
155
+ } else {
156
+ rejecter(LocalErrorCallBack.errorCode, LocalErrorCallBack.errorMessageSet, nil)
157
+ }
153
158
  }
154
159
  }
155
160
 
@@ -164,14 +169,16 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
164
169
  namespace: String?,
165
170
  resolver: @escaping RCTPromiseResolveBlock,
166
171
  rejecter: @escaping RCTPromiseRejectBlock) {
167
- guard let key = key,
168
- let storage = FacadeConnector.connector?.storage else {
169
- rejecter(Errors.errorCode, Errors.errorMessageGet, nil)
170
- return
172
+ DispatchQueue.main.async {
173
+ guard let key = key,
174
+ let storage = FacadeConnector.connector?.storage else {
175
+ rejecter(LocalErrorCallBack.errorCode, LocalErrorCallBack.errorMessageGet, nil)
176
+ return
177
+ }
178
+
179
+ let retVal = storage.keychainStorageValue(for: key, namespace: namespace)
180
+ resolver(retVal)
171
181
  }
172
-
173
- let retVal = storage.keychainStorageValue(for: key, namespace: namespace)
174
- resolver(retVal)
175
182
  }
176
183
 
177
184
  /// Remove previously saved Keychain value by key
@@ -185,14 +192,16 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
185
192
  namespace: String?,
186
193
  resolver: @escaping RCTPromiseResolveBlock,
187
194
  rejecter: @escaping RCTPromiseRejectBlock) {
188
- guard let key = key,
189
- let storage = FacadeConnector.connector?.storage else {
190
- rejecter(Errors.errorCode, Errors.errorMessageRemove, nil)
191
- return
195
+ DispatchQueue.main.async {
196
+ guard let key = key,
197
+ let storage = FacadeConnector.connector?.storage else {
198
+ rejecter(LocalErrorCallBack.errorCode, LocalErrorCallBack.errorMessageRemove, nil)
199
+ return
200
+ }
201
+
202
+ let retVal = storage.keychainStorageRemoveValue(for: key,
203
+ namespace: namespace)
204
+ resolver(retVal)
192
205
  }
193
-
194
- let retVal = storage.keychainStorageRemoveValue(for: key,
195
- namespace: namespace)
196
- resolver(retVal)
197
206
  }
198
207
  }
@@ -10,6 +10,13 @@ import Foundation
10
10
  import React
11
11
  import ZappCore
12
12
 
13
+ public struct StorageErrorCallback {
14
+ public static let errorCode = "SessionStorageError"
15
+ public static let errorMessageSet = "Session values could not be saved"
16
+ public static let errorMessageGet = "Session values could not be retrieved"
17
+ public static let errorMessageRemove = "Session values could not be removed"
18
+ }
19
+
13
20
  @objc(SessionStorage)
14
21
  class SessionStorageBridge: NSObject, RCTBridgeModule {
15
22
  var bridge: RCTBridge!
@@ -22,18 +29,6 @@ class SessionStorageBridge: NSObject, RCTBridgeModule {
22
29
  return true
23
30
  }
24
31
 
25
- /// prefered thread on which to run this native module
26
- @objc public var methodQueue: DispatchQueue {
27
- return DispatchQueue.main
28
- }
29
-
30
- struct Errors {
31
- static let errorCode = "SessionErrors"
32
- static let errorMessageSet = "Session storage value could not be saved"
33
- static let errorMessageGet = "Session storage value could not be retrieved"
34
- static let errorMessageRemove = "Session storage value could not be removed"
35
- }
36
-
37
32
  // MARK: RC extern methods
38
33
 
39
34
  /// Store a stringified object in SessionStorage
@@ -47,19 +42,21 @@ class SessionStorageBridge: NSObject, RCTBridgeModule {
47
42
  @objc public func setItem(_ key: String?, value: String?, namespace: String?,
48
43
  resolver: @escaping RCTPromiseResolveBlock,
49
44
  rejecter: @escaping RCTPromiseRejectBlock) {
50
- guard let key = key,
51
- let value = value,
52
- let storage = FacadeConnector.connector?.storage else {
53
- rejecter(Errors.errorCode, Errors.errorMessageSet, nil)
54
- return
55
- }
45
+ DispatchQueue.main.async {
46
+ guard let key = key,
47
+ let value = value,
48
+ let storage = FacadeConnector.connector?.storage else {
49
+ rejecter(StorageErrorCallback.errorCode, StorageErrorCallback.errorMessageSet, nil)
50
+ return
51
+ }
56
52
 
57
- if storage.sessionStorageSetValue(for: key,
58
- value: value,
59
- namespace: namespace) == true {
60
- resolver(true)
61
- } else {
62
- rejecter(Errors.errorCode, Errors.errorMessageSet, nil)
53
+ if storage.sessionStorageSetValue(for: key,
54
+ value: value,
55
+ namespace: namespace) == true {
56
+ resolver(true)
57
+ } else {
58
+ rejecter(StorageErrorCallback.errorCode, StorageErrorCallback.errorMessageSet, nil)
59
+ }
63
60
  }
64
61
  }
65
62
 
@@ -73,15 +70,16 @@ class SessionStorageBridge: NSObject, RCTBridgeModule {
73
70
  @objc public func getItem(_ key: String?, namespace: String?,
74
71
  resolver: @escaping RCTPromiseResolveBlock,
75
72
  rejecter: @escaping RCTPromiseRejectBlock) {
76
- guard let key = key,
77
- let storage = FacadeConnector.connector?.storage else {
78
- rejecter(Errors.errorCode, Errors.errorMessageGet, nil)
79
- return
80
- }
73
+ DispatchQueue.main.async {
74
+ guard let key = key,
75
+ let storage = FacadeConnector.connector?.storage else {
76
+ rejecter(StorageErrorCallback.errorCode, StorageErrorCallback.errorMessageGet, nil)
77
+ return
78
+ }
81
79
 
82
- let retVal = storage.sessionStorageValue(for: key,
83
- namespace: namespace)
84
- resolver(retVal)
80
+ let retVal = storage.sessionStorageValue(for: key, namespace: namespace)
81
+ resolver(retVal)
82
+ }
85
83
  }
86
84
 
87
85
  /// Remove previously saved session value by key
@@ -95,15 +93,17 @@ class SessionStorageBridge: NSObject, RCTBridgeModule {
95
93
  namespace: String?,
96
94
  resolver: @escaping RCTPromiseResolveBlock,
97
95
  rejecter: @escaping RCTPromiseRejectBlock) {
98
- guard let key = key,
99
- let storage = FacadeConnector.connector?.storage else {
100
- rejecter(Errors.errorCode, Errors.errorMessageRemove, nil)
101
- return
102
- }
96
+ DispatchQueue.main.async {
97
+ guard let key = key,
98
+ let storage = FacadeConnector.connector?.storage else {
99
+ rejecter(LocalErrorCallBack.errorCode, StorageErrorCallback.errorMessageRemove, nil)
100
+ return
101
+ }
103
102
 
104
- let retVal = storage.sessionStorageRemoveValue(for: key,
105
- namespace: namespace)
106
- resolver(retVal)
103
+ let retVal = storage.sessionStorageRemoveValue(for: key,
104
+ namespace: namespace)
105
+ resolver(retVal)
106
+ }
107
107
  }
108
108
 
109
109
  /// Get ALL previously saved session values
@@ -115,11 +115,13 @@ class SessionStorageBridge: NSObject, RCTBridgeModule {
115
115
  @objc public func getAllItems(_ namespace: String?,
116
116
  resolver: @escaping RCTPromiseResolveBlock,
117
117
  rejecter: @escaping RCTPromiseRejectBlock) {
118
- guard let storage = FacadeConnector.connector?.storage else {
119
- rejecter(Errors.errorCode, Errors.errorMessageGet, nil)
120
- return
118
+ DispatchQueue.main.async {
119
+ guard let storage = FacadeConnector.connector?.storage else {
120
+ rejecter(StorageErrorCallback.errorCode, StorageErrorCallback.errorMessageGet, nil)
121
+ return
122
+ }
123
+ let retVal = storage.sessionStorageAllValues(namespace: namespace)
124
+ resolver(retVal)
121
125
  }
122
- let retVal = storage.sessionStorageAllValues(namespace: namespace)
123
- resolver(retVal)
124
126
  }
125
127
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applicaster/quick-brick-native-apple",
3
- "version": "5.14.2",
3
+ "version": "5.15.0-alpha.2",
4
4
  "description": "iOS and tvOS native code for QuickBrick applications. This package is used to provide native logic for QuickBrick",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1"