@shortkitsdk/react-native 0.2.11 → 0.2.12
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.
- package/android/build.gradle.kts +13 -1
- package/android/src/main/java/com/shortkit/reactnative/ReactCarouselOverlayHost.kt +115 -55
- package/android/src/main/java/com/shortkit/reactnative/ReactOverlayHost.kt +67 -56
- package/android/src/main/java/com/shortkit/reactnative/ShortKitBridge.kt +71 -26
- package/android/src/main/java/com/shortkit/reactnative/ShortKitFeedView.kt +160 -35
- package/android/src/main/java/com/shortkit/reactnative/ShortKitFeedViewManager.kt +5 -0
- package/android/src/main/java/com/shortkit/reactnative/ShortKitModule.kt +43 -10
- package/android/src/main/java/com/shortkit/reactnative/ShortKitPlayerNativeView.kt +9 -0
- package/ios/ReactOverlayHost.swift +13 -27
- package/ios/ShortKitBridge.swift +36 -2
- package/ios/ShortKitFeedView.swift +24 -3
- package/ios/ShortKitModule.mm +4 -1
- package/ios/ShortKitSDK.xcframework/ios-arm64/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.abi.json +720 -144
- package/ios/ShortKitSDK.xcframework/ios-arm64/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.private.swiftinterface +19 -5
- package/ios/ShortKitSDK.xcframework/ios-arm64/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
- package/ios/ShortKitSDK.xcframework/ios-arm64/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.swiftinterface +19 -5
- package/ios/ShortKitSDK.xcframework/ios-arm64/ShortKitSDK.framework/ShortKitSDK +0 -0
- package/ios/ShortKitSDK.xcframework/ios-arm64-simulator/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios-simulator.abi.json +720 -144
- package/ios/ShortKitSDK.xcframework/ios-arm64-simulator/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +19 -5
- package/ios/ShortKitSDK.xcframework/ios-arm64-simulator/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
- package/ios/ShortKitSDK.xcframework/ios-arm64-simulator/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios-simulator.swiftinterface +19 -5
- package/ios/ShortKitSDK.xcframework/ios-arm64-simulator/ShortKitSDK.framework/ShortKitSDK +0 -0
- package/package.json +1 -1
- package/src/ShortKitContext.ts +2 -1
- package/src/ShortKitFeed.tsx +14 -0
- package/src/ShortKitOverlaySurface.tsx +153 -45
- package/src/ShortKitPlayer.tsx +25 -3
- package/src/ShortKitProvider.tsx +4 -2
- package/src/index.ts +4 -0
- package/src/serialization.ts +1 -0
- package/src/specs/NativeShortKitModule.ts +18 -1
- package/src/types.ts +6 -0
package/ios/ShortKitBridge.swift
CHANGED
|
@@ -30,6 +30,9 @@ import ShortKitSDK
|
|
|
30
30
|
/// Preload handles keyed by UUID, consumed by feed views via preloadId prop.
|
|
31
31
|
public var preloadHandles: [String: FeedPreload] = [:]
|
|
32
32
|
|
|
33
|
+
/// Tracks the most recently created preload or registered feed ID for feedReady routing.
|
|
34
|
+
private var activeFeedId: String = ""
|
|
35
|
+
|
|
33
36
|
// MARK: - Feed Instance Registry
|
|
34
37
|
|
|
35
38
|
private struct WeakFeedRef {
|
|
@@ -41,6 +44,7 @@ import ShortKitSDK
|
|
|
41
44
|
|
|
42
45
|
public func registerFeed(id: String, viewController vc: ShortKitFeedViewController) {
|
|
43
46
|
feedRegistry[id] = WeakFeedRef(vc: vc)
|
|
47
|
+
activeFeedId = id
|
|
44
48
|
|
|
45
49
|
// Wire per-feed remaining content count callback
|
|
46
50
|
vc.onRemainingContentCountChange = { [weak self] count in
|
|
@@ -50,6 +54,11 @@ import ShortKitSDK
|
|
|
50
54
|
])
|
|
51
55
|
}
|
|
52
56
|
|
|
57
|
+
// Wire per-feed ready callback
|
|
58
|
+
vc.onFeedReady = { [weak self] in
|
|
59
|
+
self?.emitOnMain("onFeedReady", body: ["feedId": id])
|
|
60
|
+
}
|
|
61
|
+
|
|
53
62
|
// Replay buffered operations on the next run-loop tick so the VC's
|
|
54
63
|
// view hierarchy is fully set up after didMoveToWindow returns.
|
|
55
64
|
if let ops = pendingOps.removeValue(forKey: id) {
|
|
@@ -315,14 +324,35 @@ import ShortKitSDK
|
|
|
315
324
|
}
|
|
316
325
|
}
|
|
317
326
|
|
|
318
|
-
@objc public func preloadFeed(_ configJSON: String, completion: @escaping (String) -> Void) {
|
|
327
|
+
@objc public func preloadFeed(_ configJSON: String, itemsJSON: String?, completion: @escaping (String) -> Void) {
|
|
319
328
|
let config = Self.parseFeedConfig(configJSON)
|
|
320
|
-
|
|
329
|
+
let preload: FeedPreload?
|
|
330
|
+
|
|
331
|
+
NSLog("[ShortKit Bridge] preloadFeed called — feedSource: %@, hasItemsJSON: %@",
|
|
332
|
+
config.feedSource == .custom ? "custom" : "algorithmic",
|
|
333
|
+
itemsJSON != nil ? "yes (\(itemsJSON!.prefix(100))...)" : "no")
|
|
334
|
+
|
|
335
|
+
if config.feedSource == .custom {
|
|
336
|
+
guard let json = itemsJSON, let items = Self.parseFeedInputs(json) else {
|
|
337
|
+
NSLog("[ShortKit Bridge] ❌ preloadFeed: feedSource=custom but no valid items — returning empty")
|
|
338
|
+
completion("")
|
|
339
|
+
return
|
|
340
|
+
}
|
|
341
|
+
NSLog("[ShortKit Bridge] preloadFeed: creating custom preload with %d items", items.count)
|
|
342
|
+
preload = shortKit?.preloadFeed(items: items)
|
|
343
|
+
} else {
|
|
344
|
+
preload = shortKit?.preloadFeed(filter: config.filter)
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
guard let preload else {
|
|
348
|
+
NSLog("[ShortKit Bridge] ❌ preloadFeed: shortKit?.preloadFeed returned nil")
|
|
321
349
|
completion("")
|
|
322
350
|
return
|
|
323
351
|
}
|
|
324
352
|
let uuid = UUID().uuidString
|
|
353
|
+
NSLog("[ShortKit Bridge] ✅ preloadFeed: created handle %@", uuid)
|
|
325
354
|
preloadHandles[uuid] = preload
|
|
355
|
+
activeFeedId = uuid
|
|
326
356
|
completion(uuid)
|
|
327
357
|
}
|
|
328
358
|
|
|
@@ -624,8 +654,12 @@ import ShortKitSDK
|
|
|
624
654
|
|
|
625
655
|
let filter = parseFeedFilter(obj["filter"] as? String)
|
|
626
656
|
|
|
657
|
+
let scrollAxisStr = obj["scrollAxis"] as? String ?? "vertical"
|
|
658
|
+
let scrollAxis: ScrollAxis = scrollAxisStr == "horizontal" ? .horizontal : .vertical
|
|
659
|
+
|
|
627
660
|
return FeedConfig(
|
|
628
661
|
feedHeight: feedHeight,
|
|
662
|
+
scrollAxis: scrollAxis,
|
|
629
663
|
videoOverlay: videoOverlay,
|
|
630
664
|
carouselOverlay: carouselOverlay,
|
|
631
665
|
surveyOverlay: .none,
|
|
@@ -66,6 +66,7 @@ import ShortKitSDK
|
|
|
66
66
|
feedVC.view.frame = bounds
|
|
67
67
|
addSubview(feedVC.view)
|
|
68
68
|
feedVC.didMove(toParent: parentVC)
|
|
69
|
+
feedVC.activate()
|
|
69
70
|
if let feedId = self.feedId {
|
|
70
71
|
ShortKitBridge.shared?.registerFeed(id: feedId, viewController: feedVC)
|
|
71
72
|
}
|
|
@@ -80,12 +81,30 @@ import ShortKitSDK
|
|
|
80
81
|
var feedConfig = ShortKitBridge.parseFeedConfig(self.config ?? "{}")
|
|
81
82
|
|
|
82
83
|
// Consume preload handle if available
|
|
83
|
-
if let preloadId = self.preloadId
|
|
84
|
-
|
|
85
|
-
|
|
84
|
+
if let preloadId = self.preloadId {
|
|
85
|
+
NSLog("[ShortKit FeedView] preloadId prop: %@", preloadId)
|
|
86
|
+
if let preload = ShortKitBridge.shared?.consumePreload(id: preloadId) {
|
|
87
|
+
feedConfig.preload = preload
|
|
88
|
+
NSLog("[ShortKit FeedView] ✅ Preload handle consumed for feedId: %@", preloadId)
|
|
89
|
+
} else {
|
|
90
|
+
NSLog("[ShortKit FeedView] ❌ No preload handle found for feedId: %@", preloadId)
|
|
91
|
+
NSLog("[ShortKit FeedView] Available preload handles: %@", ShortKitBridge.shared?.preloadHandles.keys.joined(separator: ", ") ?? "none")
|
|
92
|
+
}
|
|
93
|
+
} else {
|
|
94
|
+
NSLog("[ShortKit FeedView] No preloadId prop set")
|
|
86
95
|
}
|
|
87
96
|
|
|
97
|
+
NSLog("[ShortKit FeedView] feedConfig.preload is %@", feedConfig.preload != nil ? "SET" : "NIL")
|
|
98
|
+
NSLog("[ShortKit FeedView] feedConfig.feedSource: %@", feedConfig.feedSource == .custom ? "custom" : "algorithmic")
|
|
99
|
+
|
|
100
|
+
NSLog("[ShortKit FeedView] Creating ShortKitFeedViewController with config.preload=%@, config.feedSource=%@",
|
|
101
|
+
feedConfig.preload != nil ? "SET" : "NIL",
|
|
102
|
+
feedConfig.feedSource == .custom ? "custom" : "algorithmic")
|
|
103
|
+
|
|
88
104
|
let feedVC = ShortKitFeedViewController(shortKit: sdk, config: feedConfig, startAtItemId: startAtItemId)
|
|
105
|
+
feedVC.setBridgeManaged()
|
|
106
|
+
|
|
107
|
+
NSLog("[ShortKit FeedView] VC created successfully (bridge-managed)")
|
|
89
108
|
|
|
90
109
|
feedVC.onDismiss = {
|
|
91
110
|
ShortKitBridge.shared?.emitDismiss()
|
|
@@ -113,6 +132,7 @@ import ShortKitSDK
|
|
|
113
132
|
}
|
|
114
133
|
guard let feedVC = feedViewController else { return }
|
|
115
134
|
|
|
135
|
+
feedVC.deactivate()
|
|
116
136
|
feedVC.willMove(toParent: nil)
|
|
117
137
|
feedVC.view.removeFromSuperview()
|
|
118
138
|
feedVC.removeFromParent()
|
|
@@ -126,6 +146,7 @@ import ShortKitSDK
|
|
|
126
146
|
}
|
|
127
147
|
guard let feedVC = feedViewController else { return }
|
|
128
148
|
|
|
149
|
+
feedVC.deactivate()
|
|
129
150
|
feedVC.willMove(toParent: nil)
|
|
130
151
|
feedVC.view.removeFromSuperview()
|
|
131
152
|
feedVC.removeFromParent()
|
package/ios/ShortKitModule.mm
CHANGED
|
@@ -71,6 +71,7 @@ RCT_EXPORT_MODULE(ShortKitModule)
|
|
|
71
71
|
@"onSurveyResponse",
|
|
72
72
|
@"onContentTapped",
|
|
73
73
|
@"onDismiss",
|
|
74
|
+
@"onFeedReady",
|
|
74
75
|
@"onRefreshRequested",
|
|
75
76
|
@"onDidFetchContentItems",
|
|
76
77
|
@"onOverlayActiveChanged",
|
|
@@ -81,6 +82,7 @@ RCT_EXPORT_MODULE(ShortKitModule)
|
|
|
81
82
|
@"onOverlayActiveCueChanged",
|
|
82
83
|
@"onOverlayFeedScrollPhaseChanged",
|
|
83
84
|
@"onOverlayTimeUpdate",
|
|
85
|
+
@"onOverlayFullState",
|
|
84
86
|
];
|
|
85
87
|
}
|
|
86
88
|
|
|
@@ -258,9 +260,10 @@ RCT_EXPORT_METHOD(applyFilter:(NSString *)feedId filterJSON:(NSString *)filterJS
|
|
|
258
260
|
}
|
|
259
261
|
|
|
260
262
|
RCT_EXPORT_METHOD(preloadFeed:(NSString *)configJSON
|
|
263
|
+
itemsJSON:(NSString *)itemsJSON
|
|
261
264
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
262
265
|
reject:(RCTPromiseRejectBlock)reject) {
|
|
263
|
-
[_shortKitBridge preloadFeed:configJSON completion:^(NSString *uuid) {
|
|
266
|
+
[_shortKitBridge preloadFeed:configJSON itemsJSON:itemsJSON completion:^(NSString *uuid) {
|
|
264
267
|
resolve(uuid);
|
|
265
268
|
}];
|
|
266
269
|
}
|