@applicaster/quick-brick-native-apple 6.17.0 → 6.18.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.
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "QuickBrickApple",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.18.0",
|
|
4
4
|
"platforms": {
|
|
5
5
|
"ios": "16.0",
|
|
6
6
|
"tvos": "16.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/6.
|
|
19
|
+
"tag": "@@applicaster/quick-brick-native-apple/6.18.0"
|
|
20
20
|
},
|
|
21
21
|
"requires_arc": true,
|
|
22
22
|
"source_files": "universal/**/*.{m,swift}",
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
//
|
|
2
|
+
// ContextResolverBridge.swift
|
|
3
|
+
// QuickBrickApple
|
|
4
|
+
//
|
|
5
|
+
// Created by Alex Zchut on 15/01/2026.
|
|
6
|
+
// Copyright © 2026 Applicaster LTD. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import Foundation
|
|
10
|
+
import React
|
|
11
|
+
import ZappCore
|
|
12
|
+
|
|
13
|
+
@objc(ContextResolverBridge)
|
|
14
|
+
class ContextResolverBridge: NSObject, RCTBridgeModule {
|
|
15
|
+
static func moduleName() -> String! {
|
|
16
|
+
"ContextResolverBridge"
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
class func requiresMainQueueSetup() -> Bool {
|
|
20
|
+
true
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/// prefered thread on which to run this native module
|
|
24
|
+
@objc var methodQueue: DispatchQueue {
|
|
25
|
+
DispatchQueue.main
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@objc func resolveContextKeys(_ keys: [String: Any],
|
|
29
|
+
resolver: @escaping RCTPromiseResolveBlock,
|
|
30
|
+
rejecter _: @escaping RCTPromiseRejectBlock) {
|
|
31
|
+
var result: [String: Any] = [:]
|
|
32
|
+
|
|
33
|
+
for (key, value) in keys {
|
|
34
|
+
let isRequired = extractBoolValue(from: value)
|
|
35
|
+
let resolved = resolveStorage(key: key, required: isRequired)
|
|
36
|
+
result[key] = resolved ?? NSNull()
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
resolver(result)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
private func extractBoolValue(from value: Any) -> Bool {
|
|
43
|
+
if let number = value as? NSNumber {
|
|
44
|
+
number.boolValue
|
|
45
|
+
} else if let boolValue = value as? Bool {
|
|
46
|
+
boolValue
|
|
47
|
+
} else {
|
|
48
|
+
false
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
private func resolveStorage(key: String, required _: Bool) -> String? {
|
|
53
|
+
let data = key.split(separator: ".", maxSplits: 1)
|
|
54
|
+
let (namespace, storageKey): (String?, String) = {
|
|
55
|
+
switch data.count {
|
|
56
|
+
case 2:
|
|
57
|
+
let namespace = String(data.first ?? "")
|
|
58
|
+
let storageKey = String(data.last ?? "")
|
|
59
|
+
return (namespace.isEmpty ? nil : namespace, storageKey)
|
|
60
|
+
default:
|
|
61
|
+
return (nil, key)
|
|
62
|
+
}
|
|
63
|
+
}()
|
|
64
|
+
|
|
65
|
+
if let value = FacadeConnector.connector?.storage?.sessionStorageValue(for: storageKey,
|
|
66
|
+
namespace: namespace) {
|
|
67
|
+
return value
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if let value = FacadeConnector.connector?.storage?.localStorageValue(for: storageKey,
|
|
71
|
+
namespace: namespace) {
|
|
72
|
+
return value
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return nil
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -30,7 +30,7 @@ RCT_EXTERN_METHOD(setAppLanguage:(NSString *)language
|
|
|
30
30
|
|
|
31
31
|
@interface RCT_EXTERN_MODULE (AnalyticsBridge, NSObject)
|
|
32
32
|
RCT_EXTERN_METHOD(postEvent:(NSString *)event
|
|
33
|
-
|
|
33
|
+
payload:(NSDictionary *)payload);
|
|
34
34
|
RCT_EXTERN_METHOD(postTimedEvent:(NSString *)event
|
|
35
35
|
payload:(NSDictionary *)payload);
|
|
36
36
|
RCT_EXTERN_METHOD(endTimedEvent:(NSString *)event
|
|
@@ -151,18 +151,24 @@ RCT_EXTERN_METHOD(switchLayout:(NSString *)layoutId
|
|
|
151
151
|
rejecter:(RCTPromiseRejectBlock)reject);
|
|
152
152
|
|
|
153
153
|
RCT_EXTERN_METHOD(getCurrentLayoutId:(RCTPromiseResolveBlock)resolve
|
|
154
|
-
|
|
154
|
+
rejecter:(RCTPromiseRejectBlock)reject);
|
|
155
155
|
|
|
156
156
|
RCT_EXTERN_METHOD(getDefaultLayoutId:(RCTPromiseResolveBlock)resolve
|
|
157
|
-
|
|
157
|
+
rejecter:(RCTPromiseRejectBlock)reject);
|
|
158
158
|
@end
|
|
159
159
|
|
|
160
|
-
@interface RCT_EXTERN_MODULE(AirPlayButtonModule, RCTViewManager)
|
|
160
|
+
@interface RCT_EXTERN_MODULE (AirPlayButtonModule, RCTViewManager)
|
|
161
161
|
RCT_EXPORT_VIEW_PROPERTY(tintColor, UIColor);
|
|
162
162
|
RCT_EXPORT_VIEW_PROPERTY(activeTintColor, UIColor);
|
|
163
|
-
|
|
163
|
+
|
|
164
164
|
@end
|
|
165
165
|
|
|
166
166
|
@interface RCT_EXTERN_MODULE (ReactNativeEventBusBridge, NSObject)
|
|
167
167
|
RCT_EXTERN_METHOD(postEvent:(NSDictionary *)event);
|
|
168
168
|
@end
|
|
169
|
+
|
|
170
|
+
@interface RCT_EXTERN_MODULE (ContextResolverBridge, NSObject)
|
|
171
|
+
RCT_EXTERN_METHOD(resolveContextKeys:(NSDictionary *)keys
|
|
172
|
+
resolver:(RCTPromiseResolveBlock)resolver
|
|
173
|
+
rejecter:(RCTPromiseRejectBlock)rejecter);
|
|
174
|
+
@end
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applicaster/quick-brick-native-apple",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.18.0",
|
|
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"
|