66
77import React , { Component } from 'react' ;
88import {
9- AppRegistry ,
10- StyleSheet ,
11- Text ,
12- View ,
13- Button ,
14- Platform , findNodeHandle , ScrollView
9+ AppRegistry ,
10+ StyleSheet ,
11+ Text ,
12+ View ,
13+ Button ,
14+ Platform , findNodeHandle , ScrollView , NativeEventEmitter ,
1515} from 'react-native' ;
16- import MParticle from 'react-native-mparticle' ;
16+ import MParticle , { RoktEventManager } from 'react-native-mparticle' ;
1717
1818const { RoktConfigBuilder, RoktLayoutView } = MParticle ;
1919
20+ const eventManagerEmitter = new NativeEventEmitter ( RoktEventManager ) ;
21+
2022export default class MParticleSample extends Component {
2123 constructor ( props ) {
2224 super ( props ) ;
@@ -123,6 +125,31 @@ export default class MParticleSample extends Component {
123125
124126 componentDidMount ( ) {
125127 MParticle . getSession ( session => this . setState ( { session } ) )
128+ if ( eventManagerEmitter ) {
129+ // Save subscriptions so we can remove them later
130+ this . roktCallbackListener = eventManagerEmitter . addListener (
131+ 'RoktCallback' ,
132+ data => {
133+ console . log ( 'roktCallback received: ' + data . callbackValue ) ;
134+ } ,
135+ ) ;
136+
137+ this . roktEventsListener = eventManagerEmitter . addListener ( 'RoktEvents' , data => {
138+ console . log ( `*** ROKT EVENT *** ${ JSON . stringify ( data ) } ` ) ;
139+ } ) ;
140+ } else {
141+ console . warn ( 'RoktEventManager not available, skipping event listeners' ) ;
142+ }
143+ }
144+
145+ componentWillUnmount ( ) {
146+ // Remove event listeners to avoid duplicate subscriptions
147+ if ( this . roktCallbackListener ) {
148+ this . roktCallbackListener . remove ( ) ;
149+ }
150+ if ( this . roktEventsListener ) {
151+ this . roktEventsListener . remove ( ) ;
152+ }
126153 }
127154
128155 _toggleOptOut ( ) {
@@ -158,7 +185,19 @@ export default class MParticleSample extends Component {
158185 } )
159186 }
160187
161- _roktSelectPlacements ( ) {
188+ _roktSelectOverlayPlacements ( ) {
189+ this . _roktSelectPlacements ( 'MSDKOverlayLayout' )
190+ }
191+
192+ _roktSelectBottomSheetPlacements ( ) {
193+ this . _roktSelectPlacements ( 'MSDKBottomSheetLayout' )
194+ }
195+
196+ _roktSelectEmbeddedPlacements ( ) {
197+ this . _roktSelectPlacements ( 'MSDKEmbeddedLayout' )
198+ }
199+
200+ _roktSelectPlacements ( identifier ) {
162201 // Platform-specific attributes
163202 const iosAttributes = {
164203@@ -183,7 +222,7 @@ export default class MParticleSample extends Component {
183222 const placeholderMap = {
184223 'Location1' : findNodeHandle ( this . placeholder1 . current ) ,
185224 }
186- MParticle . Rokt . selectPlacements ( 'MSDKEmbeddedLayout' , attributes , placeholderMap , config , null ) . then ( ( result ) => {
225+ MParticle . Rokt . selectPlacements ( identifier , attributes , placeholderMap , config , null ) . then ( ( result ) => {
187226 console . debug ( "Rokt selectPlacements result: " + JSON . stringify ( result ) )
188227 } ) . catch ( ( error ) => {
189228 console . debug ( "Rokt selectPlacements error: " + JSON . stringify ( error ) )
@@ -233,7 +272,9 @@ export default class MParticleSample extends Component {
233272 onPress = { ( ) => { this . _incrementAttribute ( ) } }
234273 title = "Increment Attribute" />
235274 < Text style = { styles . instructions } > ROKT</ Text >
236- < Button title = "ROKT Test" onPress = { ( ) => { this . _roktSelectPlacements ( ) } } />
275+ < Button title = "ROKT Embedded" onPress = { ( ) => { this . _roktSelectEmbeddedPlacements ( ) } } />
276+ < Button title = "ROKT Overlay" onPress = { ( ) => { this . _roktSelectOverlayPlacements ( ) } } />
277+ < Button title = "ROKT BottomSheet" onPress = { ( ) => { this . _roktSelectBottomSheetPlacements ( ) } } />
237278 < RoktLayoutView
238279 ref = { this . placeholder1 }
239280 placeholderName = "Location1" />
0 commit comments