1- import { ScrollView , Text , TouchableOpacity , View } from 'react-native' ;
1+ import { ScrollView , Text , TextInput , TouchableOpacity , View } from 'react-native' ;
22import { useCallback , useState } from 'react' ;
33import {
44 Iterable ,
@@ -10,10 +10,21 @@ import { SafeAreaView } from 'react-native-safe-area-context';
1010import styles from './Embedded.styles' ;
1111
1212export const Embedded = ( ) => {
13+ const [ placementIdsInput , setPlacementIdsInput ] = useState < string > ( '' ) ;
1314 const [ embeddedMessages , setEmbeddedMessages ] = useState <
1415 IterableEmbeddedMessage [ ]
1516 > ( [ ] ) ;
1617
18+ // Parse placement IDs from input
19+ const parsedPlacementIds = placementIdsInput
20+ . split ( ',' )
21+ . map ( ( id ) => id . trim ( ) )
22+ . filter ( ( id ) => id !== '' )
23+ . map ( ( id ) => parseInt ( id , 10 ) )
24+ . filter ( ( id ) => ! isNaN ( id ) ) ;
25+
26+ const idsToFetch = parsedPlacementIds . length > 0 ? parsedPlacementIds : null ;
27+
1728 const syncEmbeddedMessages = useCallback ( ( ) => {
1829 Iterable . embeddedManager . syncMessages ( ) ;
1930 } , [ ] ) ;
@@ -32,12 +43,20 @@ export const Embedded = () => {
3243 Iterable . embeddedManager . endSession ( ) ;
3344 } , [ ] ) ;
3445
35- const getEmbeddedMessages = useCallback ( ( ids : number [ ] | null = null ) => {
36- Iterable . embeddedManager . getMessages ( ids ) . then ( ( messages : IterableEmbeddedMessage [ ] ) => {
46+ const getEmbeddedMessages = useCallback ( ( ) => {
47+ // Don't fetch if no IDs
48+ if ( parsedPlacementIds . length === 0 ) {
49+ console . log ( 'No placement IDs entered, button should be disabled' ) ;
50+ return ;
51+ }
52+
53+ console . log ( 'Fetching messages for placement IDs:' , idsToFetch ) ;
54+
55+ Iterable . embeddedManager . getMessages ( idsToFetch ) . then ( ( messages : IterableEmbeddedMessage [ ] ) => {
3756 setEmbeddedMessages ( messages ) ;
3857 console . log ( messages ) ;
3958 } ) ;
40- } , [ ] ) ;
59+ } , [ idsToFetch , parsedPlacementIds . length ] ) ;
4160
4261 const startEmbeddedImpression = useCallback (
4362 ( message : IterableEmbeddedMessage ) => {
@@ -73,15 +92,18 @@ export const Embedded = () => {
7392
7493 return (
7594 < SafeAreaView style = { styles . container } >
76- < Text style = { styles . text } > EMBEDDED</ Text >
95+ < Text style = { styles . title } > Embedded</ Text >
96+ { ! Iterable . embeddedManager . isEnabled && (
97+ < View style = { styles . warningContainer } >
98+ < Text style = { styles . warningText } >
99+ ⚠️ Embedded messaging is disabled. Please enable it in your Iterable config.
100+ </ Text >
101+ </ View >
102+ ) }
103+ < Text style = { styles . subtitle } >
104+ Enter placement IDs to fetch embedded messages
105+ </ Text >
77106 < View style = { styles . utilitySection } >
78- < Text style = { styles . text } >
79- Does embedded class exist? { Iterable . embeddedManager ? 'Yes' : 'No' }
80- </ Text >
81- < Text style = { styles . text } >
82- Is embedded manager enabled?{ ' ' }
83- { Iterable . embeddedManager . isEnabled ? 'Yes' : 'No' }
84- </ Text >
85107 < TouchableOpacity style = { styles . button } onPress = { syncEmbeddedMessages } >
86108 < Text style = { styles . buttonText } > Sync messages</ Text >
87109 </ TouchableOpacity >
@@ -91,9 +113,34 @@ export const Embedded = () => {
91113 < TouchableOpacity style = { styles . button } onPress = { endEmbeddedSession } >
92114 < Text style = { styles . buttonText } > End session</ Text >
93115 </ TouchableOpacity >
94- < TouchableOpacity style = { styles . button } onPress = { ( ) => getEmbeddedMessages ( ) } >
95- < Text style = { styles . buttonText } > Get messages</ Text >
96- </ TouchableOpacity >
116+ < View style = { styles . inputContainer } >
117+ < Text style = { styles . text } >
118+ Placement IDs (comma-separated):
119+ </ Text >
120+ < TextInput
121+ style = { styles . textInput }
122+ placeholder = "e.g., 1, 2, 3"
123+ placeholderTextColor = "#999"
124+ value = { placementIdsInput }
125+ onChangeText = { setPlacementIdsInput }
126+ keyboardType = "numbers-and-punctuation"
127+ />
128+ < TouchableOpacity
129+ style = { [
130+ styles . button ,
131+ parsedPlacementIds . length === 0 && styles . buttonDisabled
132+ ] }
133+ onPress = { getEmbeddedMessages }
134+ disabled = { parsedPlacementIds . length === 0 }
135+ >
136+ < Text style = { [
137+ styles . buttonText ,
138+ parsedPlacementIds . length === 0 && styles . buttonTextDisabled
139+ ] } >
140+ Get messages for placement ids
141+ </ Text >
142+ </ TouchableOpacity >
143+ </ View >
97144 </ View >
98145 < View style = { styles . hr } />
99146 < ScrollView >
0 commit comments