teads-react-native 6.0.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.
Files changed (175) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +93 -0
  3. package/android/bin/build/generated/source/buildConfig/debug/com/outbrainreactnative/BuildConfig.class +0 -0
  4. package/android/bin/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml +7 -0
  5. package/android/bin/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output-metadata.json +18 -0
  6. package/android/bin/build/intermediates/aar_metadata/debug/aar-metadata.properties +6 -0
  7. package/android/bin/build/intermediates/annotation_processor_list/debug/annotationProcessors.json +1 -0
  8. package/android/bin/build/intermediates/compile_library_classes_jar/debug/classes.jar +0 -0
  9. package/android/bin/build/intermediates/compile_r_class_jar/debug/R.jar +0 -0
  10. package/android/bin/build/intermediates/compile_symbol_list/debug/R.txt +0 -0
  11. package/android/bin/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +1 -0
  12. package/android/bin/build/intermediates/incremental/debug/packageDebugResources/merger.xml +2 -0
  13. package/android/bin/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +2 -0
  14. package/android/bin/build/intermediates/incremental/mergeDebugShaders/merger.xml +2 -0
  15. package/android/bin/build/intermediates/incremental/packageDebugAssets/merger.xml +2 -0
  16. package/android/bin/build/intermediates/local_only_symbol_list/debug/R-def.txt +2 -0
  17. package/android/bin/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt +7 -0
  18. package/android/bin/build/intermediates/merged_manifest/debug/AndroidManifest.xml +7 -0
  19. package/android/bin/build/intermediates/navigation_json/debug/navigation.json +1 -0
  20. package/android/bin/build/intermediates/runtime_library_classes_jar/debug/classes.jar +0 -0
  21. package/android/bin/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt +1 -0
  22. package/android/bin/build/outputs/logs/manifest-merger-debug-report.txt +16 -0
  23. package/android/bin/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  24. package/android/bin/build.gradle +101 -0
  25. package/android/bin/gradle/wrapper/gradle-wrapper.jar +0 -0
  26. package/android/bin/gradle/wrapper/gradle-wrapper.properties +7 -0
  27. package/android/bin/gradle.properties +5 -0
  28. package/android/bin/gradlew +249 -0
  29. package/android/bin/gradlew.bat +92 -0
  30. package/android/bin/src/main/AndroidManifest.xml +3 -0
  31. package/android/bin/src/main/AndroidManifestNew.xml +2 -0
  32. package/android/bin/src/main/java/com/outbrainreactnative/OutbrainNativePackage.class +0 -0
  33. package/android/bin/src/main/java/com/outbrainreactnative/SFWebViewWidgetManager.class +0 -0
  34. package/android/bin/src/main/java/com/outbrainreactnative/SFWebViewWidgetWrapper.class +0 -0
  35. package/android/bin/src/main/java/com/outbrainreactnative/Utils.class +0 -0
  36. package/android/build.gradle +129 -0
  37. package/android/generated/java/com/facebook/react/viewmanagers/TeadsAdPlacementFeedManagerDelegate.java +62 -0
  38. package/android/generated/java/com/facebook/react/viewmanagers/TeadsAdPlacementFeedManagerInterface.java +28 -0
  39. package/android/generated/java/com/facebook/react/viewmanagers/TeadsAdPlacementMediaManagerDelegate.java +44 -0
  40. package/android/generated/java/com/facebook/react/viewmanagers/TeadsAdPlacementMediaManagerInterface.java +22 -0
  41. package/android/generated/jni/CMakeLists.txt +36 -0
  42. package/android/generated/jni/RNTeadsReactNativeViewSpec-generated.cpp +22 -0
  43. package/android/generated/jni/RNTeadsReactNativeViewSpec.h +24 -0
  44. package/android/generated/jni/react/renderer/components/RNTeadsReactNativeViewSpec/ComponentDescriptors.cpp +23 -0
  45. package/android/generated/jni/react/renderer/components/RNTeadsReactNativeViewSpec/ComponentDescriptors.h +25 -0
  46. package/android/generated/jni/react/renderer/components/RNTeadsReactNativeViewSpec/EventEmitters.cpp +17 -0
  47. package/android/generated/jni/react/renderer/components/RNTeadsReactNativeViewSpec/EventEmitters.h +30 -0
  48. package/android/generated/jni/react/renderer/components/RNTeadsReactNativeViewSpec/Props.cpp +46 -0
  49. package/android/generated/jni/react/renderer/components/RNTeadsReactNativeViewSpec/Props.h +51 -0
  50. package/android/generated/jni/react/renderer/components/RNTeadsReactNativeViewSpec/RNTeadsReactNativeViewSpecJSI-generated.cpp +17 -0
  51. package/android/generated/jni/react/renderer/components/RNTeadsReactNativeViewSpec/RNTeadsReactNativeViewSpecJSI.h +19 -0
  52. package/android/generated/jni/react/renderer/components/RNTeadsReactNativeViewSpec/ShadowNodes.cpp +18 -0
  53. package/android/generated/jni/react/renderer/components/RNTeadsReactNativeViewSpec/ShadowNodes.h +43 -0
  54. package/android/generated/jni/react/renderer/components/RNTeadsReactNativeViewSpec/States.cpp +16 -0
  55. package/android/generated/jni/react/renderer/components/RNTeadsReactNativeViewSpec/States.h +41 -0
  56. package/android/gradle.properties +5 -0
  57. package/android/src/main/AndroidManifest.xml +3 -0
  58. package/android/src/main/AndroidManifestNew.xml +2 -0
  59. package/android/src/main/java/tv/teads/reactnative/SFWidgetContainer.java +19 -0
  60. package/android/src/main/java/tv/teads/reactnative/TeadsAdPlacementFeedManager.java +109 -0
  61. package/android/src/main/java/tv/teads/reactnative/TeadsFeedPackage.java +53 -0
  62. package/android/src/main/java/tv/teads/reactnative/TeadsMediaPlacementManager.java +76 -0
  63. package/android/src/main/java/tv/teads/reactnative/TeadsPlacementContainer.java +327 -0
  64. package/android/src/main/java/tv/teads/reactnative/Utils.java +65 -0
  65. package/ios/RCTTeadsAdPlacementFeed.h +22 -0
  66. package/ios/RCTTeadsAdPlacementFeed.mm +114 -0
  67. package/ios/RCTTeadsAdPlacementMedia.h +23 -0
  68. package/ios/RCTTeadsAdPlacementMedia.mm +91 -0
  69. package/ios/TeadsAdContainer.swift +212 -0
  70. package/ios/TeadsEventModule.h +16 -0
  71. package/ios/TeadsEventModule.mm +52 -0
  72. package/ios/TeadsReactNative.h +8 -0
  73. package/ios/generated/RNTeadsReactNativeViewSpec/ComponentDescriptors.cpp +23 -0
  74. package/ios/generated/RNTeadsReactNativeViewSpec/ComponentDescriptors.h +25 -0
  75. package/ios/generated/RNTeadsReactNativeViewSpec/EventEmitters.cpp +17 -0
  76. package/ios/generated/RNTeadsReactNativeViewSpec/EventEmitters.h +30 -0
  77. package/ios/generated/RNTeadsReactNativeViewSpec/Props.cpp +46 -0
  78. package/ios/generated/RNTeadsReactNativeViewSpec/Props.h +51 -0
  79. package/ios/generated/RNTeadsReactNativeViewSpec/RCTComponentViewHelpers.h +24 -0
  80. package/ios/generated/RNTeadsReactNativeViewSpec/RNTeadsReactNativeViewSpec-generated.mm +16 -0
  81. package/ios/generated/RNTeadsReactNativeViewSpec/RNTeadsReactNativeViewSpec.h +38 -0
  82. package/ios/generated/RNTeadsReactNativeViewSpec/ShadowNodes.cpp +18 -0
  83. package/ios/generated/RNTeadsReactNativeViewSpec/ShadowNodes.h +43 -0
  84. package/ios/generated/RNTeadsReactNativeViewSpec/States.cpp +16 -0
  85. package/ios/generated/RNTeadsReactNativeViewSpec/States.h +41 -0
  86. package/ios/generated/RNTeadsReactNativeViewSpecJSI-generated.cpp +17 -0
  87. package/ios/generated/RNTeadsReactNativeViewSpecJSI.h +19 -0
  88. package/lib/commonjs/DefaultTeadsWidgetHandler.js +21 -0
  89. package/lib/commonjs/DefaultTeadsWidgetHandler.js.map +1 -0
  90. package/lib/commonjs/TeadsAdPlacementFeed.js +131 -0
  91. package/lib/commonjs/TeadsAdPlacementFeed.js.map +1 -0
  92. package/lib/commonjs/TeadsAdPlacementMedia.js +115 -0
  93. package/lib/commonjs/TeadsAdPlacementMedia.js.map +1 -0
  94. package/lib/commonjs/TeadsInAppBrowser.js +48 -0
  95. package/lib/commonjs/TeadsInAppBrowser.js.map +1 -0
  96. package/lib/commonjs/TeadsMediaNativeComponent.ts +15 -0
  97. package/lib/commonjs/WebViewNativeComponent.ts +21 -0
  98. package/lib/commonjs/constants.js +9 -0
  99. package/lib/commonjs/constants.js.map +1 -0
  100. package/lib/commonjs/index.js +20 -0
  101. package/lib/commonjs/index.js.map +1 -0
  102. package/lib/commonjs/package.json +1 -0
  103. package/lib/commonjs/types.d.js +2 -0
  104. package/lib/commonjs/types.d.js.map +1 -0
  105. package/lib/commonjs/version.js +8 -0
  106. package/lib/commonjs/version.js.map +1 -0
  107. package/lib/module/DefaultTeadsWidgetHandler.js +17 -0
  108. package/lib/module/DefaultTeadsWidgetHandler.js.map +1 -0
  109. package/lib/module/TeadsAdPlacementFeed.js +126 -0
  110. package/lib/module/TeadsAdPlacementFeed.js.map +1 -0
  111. package/lib/module/TeadsAdPlacementMedia.js +110 -0
  112. package/lib/module/TeadsAdPlacementMedia.js.map +1 -0
  113. package/lib/module/TeadsInAppBrowser.js +44 -0
  114. package/lib/module/TeadsInAppBrowser.js.map +1 -0
  115. package/lib/module/TeadsMediaNativeComponent.ts +15 -0
  116. package/lib/module/WebViewNativeComponent.ts +21 -0
  117. package/lib/module/constants.js +5 -0
  118. package/lib/module/constants.js.map +1 -0
  119. package/lib/module/index.js +5 -0
  120. package/lib/module/index.js.map +1 -0
  121. package/lib/module/package.json +1 -0
  122. package/lib/module/types.d.js +2 -0
  123. package/lib/module/types.d.js.map +1 -0
  124. package/lib/module/version.js +4 -0
  125. package/lib/module/version.js.map +1 -0
  126. package/lib/typescript/commonjs/package.json +1 -0
  127. package/lib/typescript/commonjs/src/DefaultTeadsWidgetHandler.d.ts +4 -0
  128. package/lib/typescript/commonjs/src/DefaultTeadsWidgetHandler.d.ts.map +1 -0
  129. package/lib/typescript/commonjs/src/TeadsAdPlacementFeed.d.ts +3 -0
  130. package/lib/typescript/commonjs/src/TeadsAdPlacementFeed.d.ts.map +1 -0
  131. package/lib/typescript/commonjs/src/TeadsAdPlacementMedia.d.ts +3 -0
  132. package/lib/typescript/commonjs/src/TeadsAdPlacementMedia.d.ts.map +1 -0
  133. package/lib/typescript/commonjs/src/TeadsInAppBrowser.d.ts +4 -0
  134. package/lib/typescript/commonjs/src/TeadsInAppBrowser.d.ts.map +1 -0
  135. package/lib/typescript/commonjs/src/TeadsMediaNativeComponent.d.ts +12 -0
  136. package/lib/typescript/commonjs/src/TeadsMediaNativeComponent.d.ts.map +1 -0
  137. package/lib/typescript/commonjs/src/WebViewNativeComponent.d.ts +18 -0
  138. package/lib/typescript/commonjs/src/WebViewNativeComponent.d.ts.map +1 -0
  139. package/lib/typescript/commonjs/src/constants.d.ts +3 -0
  140. package/lib/typescript/commonjs/src/constants.d.ts.map +1 -0
  141. package/lib/typescript/commonjs/src/index.d.ts +4 -0
  142. package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
  143. package/lib/typescript/commonjs/src/version.d.ts +2 -0
  144. package/lib/typescript/commonjs/src/version.d.ts.map +1 -0
  145. package/lib/typescript/module/package.json +1 -0
  146. package/lib/typescript/module/src/DefaultTeadsWidgetHandler.d.ts +4 -0
  147. package/lib/typescript/module/src/DefaultTeadsWidgetHandler.d.ts.map +1 -0
  148. package/lib/typescript/module/src/TeadsAdPlacementFeed.d.ts +3 -0
  149. package/lib/typescript/module/src/TeadsAdPlacementFeed.d.ts.map +1 -0
  150. package/lib/typescript/module/src/TeadsAdPlacementMedia.d.ts +3 -0
  151. package/lib/typescript/module/src/TeadsAdPlacementMedia.d.ts.map +1 -0
  152. package/lib/typescript/module/src/TeadsInAppBrowser.d.ts +4 -0
  153. package/lib/typescript/module/src/TeadsInAppBrowser.d.ts.map +1 -0
  154. package/lib/typescript/module/src/TeadsMediaNativeComponent.d.ts +12 -0
  155. package/lib/typescript/module/src/TeadsMediaNativeComponent.d.ts.map +1 -0
  156. package/lib/typescript/module/src/WebViewNativeComponent.d.ts +18 -0
  157. package/lib/typescript/module/src/WebViewNativeComponent.d.ts.map +1 -0
  158. package/lib/typescript/module/src/constants.d.ts +3 -0
  159. package/lib/typescript/module/src/constants.d.ts.map +1 -0
  160. package/lib/typescript/module/src/index.d.ts +4 -0
  161. package/lib/typescript/module/src/index.d.ts.map +1 -0
  162. package/lib/typescript/module/src/version.d.ts +2 -0
  163. package/lib/typescript/module/src/version.d.ts.map +1 -0
  164. package/package.json +227 -0
  165. package/src/DefaultTeadsWidgetHandler.ts +17 -0
  166. package/src/TeadsAdPlacementFeed.tsx +142 -0
  167. package/src/TeadsAdPlacementMedia.tsx +127 -0
  168. package/src/TeadsInAppBrowser.ts +42 -0
  169. package/src/TeadsMediaNativeComponent.ts +15 -0
  170. package/src/WebViewNativeComponent.ts +21 -0
  171. package/src/constants.ts +11 -0
  172. package/src/index.tsx +9 -0
  173. package/src/types.d.ts +32 -0
  174. package/src/version.ts +1 -0
  175. package/teads-react-native.podspec +42 -0
@@ -0,0 +1,212 @@
1
+ //
2
+ // TeadsAdContainer.swift
3
+ // TeadsReactNative
4
+ //
5
+ // Created by Ofek Cohen on 03/04/2025.
6
+ //
7
+
8
+ import UIKit
9
+ import TeadsSDK
10
+ import React
11
+
12
+ @objcMembers
13
+ @objc(TeadsAdContainer)
14
+ public class TeadsAdContainer: UIView {
15
+
16
+ private var adView: UIView?
17
+ private var teadsFeedPlacement: TeadsAdPlacementFeed?
18
+ private var teadsMediaPlacement: TeadsAdPlacementMedia?
19
+ let TeadsEventModuleInstance = TeadsEventModule()
20
+ var widgetRandomId: Int = -1
21
+ private var initialPropsSet: Bool = false
22
+ private var isBeingDeallocated: Bool = false
23
+
24
+
25
+ public override init(frame: CGRect) {
26
+ super.init(frame: frame)
27
+ }
28
+
29
+ deinit {
30
+ // Mark as being deallocated to prevent delegate callbacks from accessing deallocated memory
31
+ isBeingDeallocated = true
32
+ // Clean up TeadsSDK placements
33
+ teadsFeedPlacement = nil
34
+ teadsMediaPlacement = nil
35
+ adView?.removeFromSuperview()
36
+ adView = nil
37
+ }
38
+
39
+ public func configureWith(
40
+ pid: String,
41
+ widgetRandomId: Int,
42
+ url: String,
43
+ installationKey: String,
44
+ packageVersion: String) {
45
+
46
+ guard !initialPropsSet, !isBeingDeallocated else {
47
+ return // prevent reconfiguring or configuring during deallocation
48
+ }
49
+
50
+ self.widgetRandomId = widgetRandomId
51
+ initialPropsSet = true
52
+ guard let pidInt = Int(pid) else {
53
+ print("TeadsAdContainer: Invalid PID: \(pid)")
54
+ return
55
+ }
56
+
57
+ self.teadsMediaPlacement = Teads.createPlacement(with: .init(pid: pidInt, articleUrl: URL(string:"http://t.teads.tv/")) , delegate: self)
58
+
59
+ do {
60
+ guard let placement = self.teadsMediaPlacement else {
61
+ print("TeadsAdContainer: Failed to create media placement")
62
+ return
63
+ }
64
+ adView = try placement.loadAd()
65
+ } catch {
66
+ print("TeadsAdContainer: Failed to load ad: \(error)")
67
+ return
68
+ }
69
+
70
+ guard let adView else {
71
+ print("TeadsAdContainer: adView is nil after loadAd")
72
+ return
73
+ }
74
+
75
+ adView.translatesAutoresizingMaskIntoConstraints = false
76
+ addSubview(adView)
77
+ NSLayoutConstraint.activate([
78
+ adView.topAnchor.constraint(equalTo: topAnchor),
79
+ adView.leadingAnchor.constraint(equalTo: leadingAnchor),
80
+ adView.trailingAnchor.constraint(equalTo: trailingAnchor),
81
+ adView.bottomAnchor.constraint(equalTo: bottomAnchor)
82
+ ])
83
+ }
84
+
85
+ public func configureWith(
86
+ widgetId: String,
87
+ widgetRandomId: Int,
88
+ widgetIndex: Int,
89
+ url: String,
90
+ installationKey: String,
91
+ packageVersion: String,
92
+ extId: String?,
93
+ extSecondaryId: String?,
94
+ userId: String?,
95
+ pubImpId: String?,
96
+ darkMode: Bool) {
97
+
98
+ guard !initialPropsSet, !isBeingDeallocated else {
99
+ return // prevent reconfiguring or configuring during deallocation
100
+ }
101
+
102
+ Teads.configure(with: installationKey)
103
+
104
+ self.widgetRandomId = widgetRandomId
105
+ initialPropsSet = true
106
+
107
+ guard let articleUrl = URL(string: url) else {
108
+ print("TeadsAdContainer: Invalid URL: \(url)")
109
+ return
110
+ }
111
+
112
+ self.teadsFeedPlacement = Teads.createPlacement(
113
+ with: .init(articleUrl: articleUrl, widgetId: widgetId, installationKey: installationKey, widgetIndex: widgetIndex, darkMode: darkMode, extId: extId, extSecondaryId: extSecondaryId, obPubImp: pubImpId),
114
+ delegate: self
115
+ )
116
+
117
+ do {
118
+ guard let placement = self.teadsFeedPlacement else {
119
+ print("TeadsAdContainer: Failed to create feed placement")
120
+ return
121
+ }
122
+ adView = try placement.loadAd()
123
+ print("TeadsAdContainer: adView created: \(String(describing: adView))")
124
+ } catch {
125
+ print("TeadsAdContainer: Failed to load ad: \(error)")
126
+ return
127
+ }
128
+
129
+ guard let adView else {
130
+ print("TeadsAdContainer: adView is nil after loadAd")
131
+ return
132
+ }
133
+
134
+ adView.translatesAutoresizingMaskIntoConstraints = false
135
+ addSubview(adView)
136
+ NSLayoutConstraint.activate([
137
+ adView.topAnchor.constraint(equalTo: topAnchor),
138
+ adView.leadingAnchor.constraint(equalTo: leadingAnchor),
139
+ adView.trailingAnchor.constraint(equalTo: trailingAnchor),
140
+ adView.bottomAnchor.constraint(equalTo: bottomAnchor)
141
+ ])
142
+ }
143
+
144
+ // This initializer is required, but we can make it unavailable
145
+ @available(*, unavailable)
146
+ required init?(coder: NSCoder) {
147
+ fatalError("init(coder:) has not been implemented")
148
+ }
149
+
150
+ @objc public func toggleDarkMode(_ dark: Bool) {
151
+ self.teadsFeedPlacement?.toggleDarkMode(dark)
152
+ }
153
+
154
+ /// Called when the view is being recycled by React Native Fabric
155
+ @objc public func cleanup() {
156
+ isBeingDeallocated = true
157
+ teadsFeedPlacement = nil
158
+ teadsMediaPlacement = nil
159
+ adView?.removeFromSuperview()
160
+ adView = nil
161
+ initialPropsSet = false
162
+ isBeingDeallocated = false
163
+ widgetRandomId = -1
164
+ }
165
+ }
166
+
167
+
168
+ extension TeadsAdContainer: TeadsAdPlacementEventsDelegate {
169
+
170
+ public func adPlacement(
171
+ _ placement: TeadsAdPlacementIdentifiable?, didEmitEvent event: TeadsAdPlacementEventName,
172
+ data: [String: Any]?
173
+ ) {
174
+ // Guard against callbacks during or after deallocation
175
+ guard !isBeingDeallocated else {
176
+ return
177
+ }
178
+
179
+ if event == .clickedOrganic {
180
+ guard let urlString = data?.recClickUrl, let url = URL(string: urlString) else {
181
+ return
182
+ }
183
+ let args: [String: Any] = [
184
+ "widgetRandomId": widgetRandomId,
185
+ "url": url.absoluteString
186
+ ]
187
+ self.TeadsEventModuleInstance.sendWidgetEvent("onOrganicClick", withArgs: args )
188
+
189
+ } else if event == .clicked {
190
+ guard let urlString = data?.recClickUrl, let url = URL(string: urlString) else {
191
+ return
192
+ }
193
+ let args: [String: Any] = [
194
+ "widgetRandomId": widgetRandomId,
195
+ "url": url.absoluteString
196
+ ]
197
+
198
+ self.TeadsEventModuleInstance.sendWidgetEvent("onRecClick", withArgs: args)
199
+ } else if event == .heightUpdated {
200
+ guard let heightData = data, let height = heightData["height"] else {
201
+ print("TeadsAdContainer: heightUpdated event missing height data")
202
+ return
203
+ }
204
+ let args: [String: Any] = [
205
+ "widgetRandomId": widgetRandomId,
206
+ "height": height
207
+ ]
208
+ print("TeadsAdContainer .heightUpdated: \(args)")
209
+ self.TeadsEventModuleInstance.sendWidgetEvent("didChangeHeight", withArgs: args )
210
+ }
211
+ }
212
+ }
@@ -0,0 +1,16 @@
1
+ //
2
+ // TeadsEventModule.h
3
+ // TeadsReactNative
4
+ //
5
+ // Created by Ofek Cohen on 08/04/2025.
6
+ //
7
+
8
+ #import <React/RCTBridgeModule.h>
9
+ #import <React/RCTEventEmitter.h>
10
+
11
+ @interface TeadsEventModule : RCTEventEmitter <RCTBridgeModule>
12
+
13
+ - (void)sendWidgetEvent:(NSString *)name withArgs:(NSDictionary *)args;
14
+
15
+ @end
16
+
@@ -0,0 +1,52 @@
1
+ //
2
+ // TeadsEventModule.m
3
+ // TeadsReactNative
4
+ //
5
+ // Created by Ofek Cohen on 08/04/2025.
6
+ //
7
+
8
+ #import "TeadsEventModule.h"
9
+
10
+ @implementation TeadsEventModule
11
+ {
12
+ bool hasListeners;
13
+ }
14
+
15
+ RCT_EXPORT_MODULE();
16
+
17
+ // Make TeadsEventModule a singleton
18
+ + (id)allocWithZone:(NSZone *)zone {
19
+ static TeadsEventModule *sharedInstance = nil;
20
+ static dispatch_once_t onceToken;
21
+ dispatch_once(&onceToken, ^{
22
+ sharedInstance = [super allocWithZone:zone];
23
+ });
24
+ return sharedInstance;
25
+ }
26
+
27
+ - (NSArray<NSString *> *)supportedEvents
28
+ {
29
+ return @[@"didChangeHeight", @"onRecClick", @"onOrganicClick", @"onWidgetEvent"]; // Add all event names you want to support
30
+ }
31
+
32
+ // Will be called when this module's first listener is added.
33
+ -(void)startObserving {
34
+ hasListeners = YES;
35
+ // Set up any upstream listeners or background tasks as necessary
36
+ }
37
+
38
+ // Will be called when this module's last listener is removed, or on dealloc.
39
+ -(void)stopObserving {
40
+ hasListeners = NO;
41
+ // Remove upstream listeners, stop unnecessary background tasks
42
+ }
43
+
44
+ - (void)sendWidgetEvent:(NSString *)name withArgs:(NSDictionary *)args
45
+ {
46
+ if (hasListeners) {// Only send events if anyone is listening
47
+ [self sendEventWithName:name body:args];
48
+ }
49
+ }
50
+
51
+
52
+ @end
@@ -0,0 +1,8 @@
1
+ //
2
+ // This file's purpose is to import the target's public headers that are needed for Swift.
3
+ //
4
+
5
+
6
+ #import "TeadsSDK/TeadsSDK-Swift.h"
7
+ #import <teads-react-native/TeadsEventModule.h>
8
+
@@ -0,0 +1,23 @@
1
+
2
+ /**
3
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
6
+ * once the code is regenerated.
7
+ *
8
+ * @generated by codegen project: GenerateComponentDescriptorCpp.js
9
+ */
10
+
11
+ #include "ComponentDescriptors.h"
12
+ #include <react/renderer/core/ConcreteComponentDescriptor.h>
13
+ #include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>
14
+
15
+ namespace facebook::react {
16
+
17
+ void RNTeadsReactNativeViewSpec_registerComponentDescriptorsFromCodegen(
18
+ std::shared_ptr<const ComponentDescriptorProviderRegistry> registry) {
19
+ registry->add(concreteComponentDescriptorProvider<TeadsAdPlacementMediaComponentDescriptor>());
20
+ registry->add(concreteComponentDescriptorProvider<TeadsAdPlacementFeedComponentDescriptor>());
21
+ }
22
+
23
+ } // namespace facebook::react
@@ -0,0 +1,25 @@
1
+
2
+ /**
3
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
6
+ * once the code is regenerated.
7
+ *
8
+ * @generated by codegen project: GenerateComponentDescriptorH.js
9
+ */
10
+
11
+ #pragma once
12
+
13
+ #include "ShadowNodes.h"
14
+ #include <react/renderer/core/ConcreteComponentDescriptor.h>
15
+ #include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>
16
+
17
+ namespace facebook::react {
18
+
19
+ using TeadsAdPlacementMediaComponentDescriptor = ConcreteComponentDescriptor<TeadsAdPlacementMediaShadowNode>;
20
+ using TeadsAdPlacementFeedComponentDescriptor = ConcreteComponentDescriptor<TeadsAdPlacementFeedShadowNode>;
21
+
22
+ void RNTeadsReactNativeViewSpec_registerComponentDescriptorsFromCodegen(
23
+ std::shared_ptr<const ComponentDescriptorProviderRegistry> registry);
24
+
25
+ } // namespace facebook::react
@@ -0,0 +1,17 @@
1
+
2
+ /**
3
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
6
+ * once the code is regenerated.
7
+ *
8
+ * @generated by codegen project: GenerateEventEmitterCpp.js
9
+ */
10
+
11
+ #include "EventEmitters.h"
12
+
13
+
14
+ namespace facebook::react {
15
+
16
+
17
+ } // namespace facebook::react
@@ -0,0 +1,30 @@
1
+
2
+ /**
3
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
6
+ * once the code is regenerated.
7
+ *
8
+ * @generated by codegen project: GenerateEventEmitterH.js
9
+ */
10
+ #pragma once
11
+
12
+ #include <react/renderer/components/view/ViewEventEmitter.h>
13
+
14
+
15
+ namespace facebook::react {
16
+ class TeadsAdPlacementMediaEventEmitter : public ViewEventEmitter {
17
+ public:
18
+ using ViewEventEmitter::ViewEventEmitter;
19
+
20
+
21
+
22
+ };
23
+ class TeadsAdPlacementFeedEventEmitter : public ViewEventEmitter {
24
+ public:
25
+ using ViewEventEmitter::ViewEventEmitter;
26
+
27
+
28
+
29
+ };
30
+ } // namespace facebook::react
@@ -0,0 +1,46 @@
1
+
2
+ /**
3
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
6
+ * once the code is regenerated.
7
+ *
8
+ * @generated by codegen project: GeneratePropsCpp.js
9
+ */
10
+
11
+ #include "Props.h"
12
+ #include <react/renderer/core/PropsParserContext.h>
13
+ #include <react/renderer/core/propsConversions.h>
14
+
15
+ namespace facebook::react {
16
+
17
+ TeadsAdPlacementMediaProps::TeadsAdPlacementMediaProps(
18
+ const PropsParserContext &context,
19
+ const TeadsAdPlacementMediaProps &sourceProps,
20
+ const RawProps &rawProps): ViewProps(context, sourceProps, rawProps),
21
+
22
+ pid(convertRawProp(context, rawProps, "pid", sourceProps.pid, {})),
23
+ widgetRandomId(convertRawProp(context, rawProps, "widgetRandomId", sourceProps.widgetRandomId, {0})),
24
+ url(convertRawProp(context, rawProps, "url", sourceProps.url, {})),
25
+ packageVersion(convertRawProp(context, rawProps, "packageVersion", sourceProps.packageVersion, {})),
26
+ installationKey(convertRawProp(context, rawProps, "installationKey", sourceProps.installationKey, {}))
27
+ {}
28
+ TeadsAdPlacementFeedProps::TeadsAdPlacementFeedProps(
29
+ const PropsParserContext &context,
30
+ const TeadsAdPlacementFeedProps &sourceProps,
31
+ const RawProps &rawProps): ViewProps(context, sourceProps, rawProps),
32
+
33
+ widgetId(convertRawProp(context, rawProps, "widgetId", sourceProps.widgetId, {})),
34
+ widgetRandomId(convertRawProp(context, rawProps, "widgetRandomId", sourceProps.widgetRandomId, {0})),
35
+ widgetIndex(convertRawProp(context, rawProps, "widgetIndex", sourceProps.widgetIndex, {0})),
36
+ url(convertRawProp(context, rawProps, "url", sourceProps.url, {})),
37
+ installationKey(convertRawProp(context, rawProps, "installationKey", sourceProps.installationKey, {})),
38
+ packageVersion(convertRawProp(context, rawProps, "packageVersion", sourceProps.packageVersion, {})),
39
+ extId(convertRawProp(context, rawProps, "extId", sourceProps.extId, {})),
40
+ extSecondaryId(convertRawProp(context, rawProps, "extSecondaryId", sourceProps.extSecondaryId, {})),
41
+ userId(convertRawProp(context, rawProps, "userId", sourceProps.userId, {})),
42
+ pubImpId(convertRawProp(context, rawProps, "pubImpId", sourceProps.pubImpId, {})),
43
+ darkMode(convertRawProp(context, rawProps, "darkMode", sourceProps.darkMode, {false}))
44
+ {}
45
+
46
+ } // namespace facebook::react
@@ -0,0 +1,51 @@
1
+
2
+ /**
3
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
6
+ * once the code is regenerated.
7
+ *
8
+ * @generated by codegen project: GeneratePropsH.js
9
+ */
10
+ #pragma once
11
+
12
+ #include <react/renderer/components/view/ViewProps.h>
13
+ #include <react/renderer/core/PropsParserContext.h>
14
+
15
+ namespace facebook::react {
16
+
17
+ class TeadsAdPlacementMediaProps final : public ViewProps {
18
+ public:
19
+ TeadsAdPlacementMediaProps() = default;
20
+ TeadsAdPlacementMediaProps(const PropsParserContext& context, const TeadsAdPlacementMediaProps &sourceProps, const RawProps &rawProps);
21
+
22
+ #pragma mark - Props
23
+
24
+ std::string pid{};
25
+ int widgetRandomId{0};
26
+ std::string url{};
27
+ std::string packageVersion{};
28
+ std::string installationKey{};
29
+ };
30
+
31
+ class TeadsAdPlacementFeedProps final : public ViewProps {
32
+ public:
33
+ TeadsAdPlacementFeedProps() = default;
34
+ TeadsAdPlacementFeedProps(const PropsParserContext& context, const TeadsAdPlacementFeedProps &sourceProps, const RawProps &rawProps);
35
+
36
+ #pragma mark - Props
37
+
38
+ std::string widgetId{};
39
+ int widgetRandomId{0};
40
+ int widgetIndex{0};
41
+ std::string url{};
42
+ std::string installationKey{};
43
+ std::string packageVersion{};
44
+ std::string extId{};
45
+ std::string extSecondaryId{};
46
+ std::string userId{};
47
+ std::string pubImpId{};
48
+ bool darkMode{false};
49
+ };
50
+
51
+ } // namespace facebook::react
@@ -0,0 +1,24 @@
1
+ /**
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GenerateComponentHObjCpp.js
8
+ */
9
+
10
+ #import <Foundation/Foundation.h>
11
+ #import <React/RCTDefines.h>
12
+ #import <React/RCTLog.h>
13
+
14
+ NS_ASSUME_NONNULL_BEGIN
15
+
16
+ @protocol RCTTeadsAdPlacementMediaViewProtocol <NSObject>
17
+
18
+ @end
19
+
20
+ @protocol RCTTeadsAdPlacementFeedViewProtocol <NSObject>
21
+
22
+ @end
23
+
24
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,16 @@
1
+ /**
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GenerateModuleObjCpp
8
+ *
9
+ * We create an umbrella header (and corresponding implementation) here since
10
+ * Cxx compilation in BUCK has a limitation: source-code producing genrule()s
11
+ * must have a single output. More files => more genrule()s => slower builds.
12
+ */
13
+
14
+ #import "RNTeadsReactNativeViewSpec.h"
15
+
16
+
@@ -0,0 +1,38 @@
1
+ /**
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GenerateModuleObjCpp
8
+ *
9
+ * We create an umbrella header (and corresponding implementation) here since
10
+ * Cxx compilation in BUCK has a limitation: source-code producing genrule()s
11
+ * must have a single output. More files => more genrule()s => slower builds.
12
+ */
13
+
14
+ #ifndef __cplusplus
15
+ #error This file must be compiled as Obj-C++. If you are importing it, you must change your file extension to .mm.
16
+ #endif
17
+
18
+ // Avoid multiple includes of RNTeadsReactNativeViewSpec symbols
19
+ #ifndef RNTeadsReactNativeViewSpec_H
20
+ #define RNTeadsReactNativeViewSpec_H
21
+
22
+ #import <Foundation/Foundation.h>
23
+ #import <RCTRequired/RCTRequired.h>
24
+ #import <RCTTypeSafety/RCTConvertHelpers.h>
25
+ #import <RCTTypeSafety/RCTTypedModuleConstants.h>
26
+ #import <React/RCTBridgeModule.h>
27
+ #import <React/RCTCxxConvert.h>
28
+ #import <React/RCTManagedPointer.h>
29
+ #import <ReactCommon/RCTTurboModule.h>
30
+ #import <optional>
31
+ #import <vector>
32
+
33
+
34
+ NS_ASSUME_NONNULL_BEGIN
35
+
36
+
37
+ NS_ASSUME_NONNULL_END
38
+ #endif // RNTeadsReactNativeViewSpec_H
@@ -0,0 +1,18 @@
1
+
2
+ /**
3
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
6
+ * once the code is regenerated.
7
+ *
8
+ * @generated by codegen project: GenerateShadowNodeCpp.js
9
+ */
10
+
11
+ #include "ShadowNodes.h"
12
+
13
+ namespace facebook::react {
14
+
15
+ extern const char TeadsAdPlacementMediaComponentName[] = "TeadsAdPlacementMedia";
16
+ extern const char TeadsAdPlacementFeedComponentName[] = "TeadsAdPlacementFeed";
17
+
18
+ } // namespace facebook::react
@@ -0,0 +1,43 @@
1
+
2
+ /**
3
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
6
+ * once the code is regenerated.
7
+ *
8
+ * @generated by codegen project: GenerateShadowNodeH.js
9
+ */
10
+
11
+ #pragma once
12
+
13
+ #include "EventEmitters.h"
14
+ #include "Props.h"
15
+ #include "States.h"
16
+ #include <react/renderer/components/view/ConcreteViewShadowNode.h>
17
+ #include <jsi/jsi.h>
18
+
19
+ namespace facebook::react {
20
+
21
+ JSI_EXPORT extern const char TeadsAdPlacementMediaComponentName[];
22
+
23
+ /*
24
+ * `ShadowNode` for <TeadsAdPlacementMedia> component.
25
+ */
26
+ using TeadsAdPlacementMediaShadowNode = ConcreteViewShadowNode<
27
+ TeadsAdPlacementMediaComponentName,
28
+ TeadsAdPlacementMediaProps,
29
+ TeadsAdPlacementMediaEventEmitter,
30
+ TeadsAdPlacementMediaState>;
31
+
32
+ JSI_EXPORT extern const char TeadsAdPlacementFeedComponentName[];
33
+
34
+ /*
35
+ * `ShadowNode` for <TeadsAdPlacementFeed> component.
36
+ */
37
+ using TeadsAdPlacementFeedShadowNode = ConcreteViewShadowNode<
38
+ TeadsAdPlacementFeedComponentName,
39
+ TeadsAdPlacementFeedProps,
40
+ TeadsAdPlacementFeedEventEmitter,
41
+ TeadsAdPlacementFeedState>;
42
+
43
+ } // namespace facebook::react
@@ -0,0 +1,16 @@
1
+
2
+ /**
3
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
6
+ * once the code is regenerated.
7
+ *
8
+ * @generated by codegen project: GenerateStateCpp.js
9
+ */
10
+ #include "States.h"
11
+
12
+ namespace facebook::react {
13
+
14
+
15
+
16
+ } // namespace facebook::react