Skip to content

Commit 595560c

Browse files
committed
feat: enhance Embedded component with new styles and message handling
1 parent 7421938 commit 595560c

26 files changed

Lines changed: 319 additions & 31 deletions
Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,12 @@
1-
import { StyleSheet, type TextStyle } from 'react-native';
2-
import { appNameSmall, button, buttonText, container } from '../../constants';
3-
4-
const text: TextStyle = {
5-
textAlign: 'center',
6-
marginBottom: 20,
7-
};
1+
import { StyleSheet } from 'react-native';
2+
import { button, buttonText, container, hr } from '../../constants';
83

94
const styles = StyleSheet.create({
10-
appName: appNameSmall,
115
button,
126
buttonText,
137
container,
14-
text,
8+
hr,
9+
text: { textAlign: 'center' },
1510
});
1611

1712
export default styles;

β€Žexample/src/components/Embedded/Embedded.tsxβ€Ž

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
import { Iterable } from '@iterable/react-native-sdk';
1+
import {
2+
Iterable,
3+
IterableEmbeddedView,
4+
IterableEmbeddedViewType,
5+
IterableEmbeddedMessage,
6+
} from '@iterable/react-native-sdk';
27
import { useIsFocused } from '@react-navigation/native';
38
import { useCallback, useEffect, useState } from 'react';
49
import { Text, TouchableOpacity, View } from 'react-native';
@@ -9,9 +14,9 @@ import styles from './Embedded.styles';
914
export const Embedded = () => {
1015
const { isLoggedIn } = useIterableApp();
1116
const isFocused = useIsFocused();
12-
const [loggedInAs, setLoggedInAs] = useState<string>('');
1317
const [hasSession, setHasSession] = useState<boolean>(false);
1418
const [placementIds, setPlacementIds] = useState<number[]>([]);
19+
const [messages, setMessages] = useState<IterableEmbeddedMessage[]>([]);
1520

1621
useEffect(() => {
1722
if (isFocused) {
@@ -28,22 +33,18 @@ export const Embedded = () => {
2833

2934
useEffect(() => {
3035
if (isLoggedIn) {
31-
Iterable.getEmail().then((email) => setLoggedInAs(email || ''));
3236
Iterable.embeddedManager.getPlacementIds().then((ids: unknown) => {
3337
console.log(`πŸš€ > User > ids:`, ids);
3438
setPlacementIds(ids as number[]);
3539
});
36-
} else {
37-
setLoggedInAs('');
3840
}
3941
}, [isLoggedIn]);
4042

4143
const getEmbeddedMessages = useCallback(() => {
42-
Iterable.embeddedManager
43-
.getMessages(placementIds)
44-
.then((messages: unknown) => {
45-
console.log(messages);
46-
});
44+
Iterable.embeddedManager.getMessages(placementIds).then((messageList) => {
45+
console.log(messageList);
46+
setMessages(messageList as IterableEmbeddedMessage[]);
47+
});
4748
}, [placementIds]);
4849

4950
const getPlacementIds = useCallback(() => {
@@ -58,8 +59,6 @@ export const Embedded = () => {
5859

5960
return (
6061
<View style={styles.container}>
61-
<Text style={styles.appName}>Welcome Iterator</Text>
62-
<Text style={styles.text}>Logged in as {loggedInAs}</Text>
6362
<Text style={styles.text}>Has session: {hasSession.toString()}</Text>
6463
<Text style={styles.text}>
6564
Placement ids: [{placementIds.join(', ')}]
@@ -73,6 +72,16 @@ export const Embedded = () => {
7372
<TouchableOpacity style={styles.button} onPress={sync}>
7473
<Text style={styles.buttonText}>Sync</Text>
7574
</TouchableOpacity>
75+
<View style={styles.hr} />
76+
{messages.map((message) => {
77+
return (
78+
<IterableEmbeddedView
79+
key={message.metadata.messageId}
80+
viewType={IterableEmbeddedViewType.Card}
81+
message={message}
82+
/>
83+
);
84+
})}
7685
</View>
7786
);
7887
};
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export * from './colors';
22
export * from './containers';
33
export * from './formElements';
4+
export * from './miscElements';
45
export * from './shadows';
56
export * from './typography';
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { type ViewStyle } from 'react-native';
2+
import { colors } from './colors';
3+
4+
export const hr: ViewStyle = {
5+
backgroundColor: colors.borderPrimary,
6+
height: 1,
7+
marginVertical: 20,
8+
marginHorizontal: 0,
9+
};

β€Žsrc/core/classes/IterableApi.tsβ€Ž

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -539,7 +539,9 @@ export class IterableApi {
539539
*
540540
* @returns A Promise that resolves to an array of embedded messages.
541541
*/
542-
static getEmbeddedMessages(placementIds: number[] | null) {
542+
static getEmbeddedMessages(
543+
placementIds: number[] | null
544+
): Promise<IterableEmbeddedMessage[]> {
543545
IterableApi.logger.log('getEmbeddedMessages: ', placementIds);
544546
return RNIterableAPI.getEmbeddedMessages(placementIds);
545547
}

β€Žsrc/embedded/classes/IterableEmbeddedView.tsβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
embeddedSecondaryBtnBackgroundColors,
1414
embeddedSecondaryBtnTextColors,
1515
embeddedTitleTextColors,
16-
} from '../constants/embeddedColors';
16+
} from '../constants/embeddedViewDefaults';
1717

1818
export class IterableEmbeddedView {
1919
private viewType: IterableEmbeddedViewType;
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { Text, View } from 'react-native';
2+
3+
import type { IterableEmbeddedComponentProps } from '../IterableEmbeddedViewProps';
4+
5+
export const IterableEmbeddedBanner = (
6+
props: IterableEmbeddedComponentProps
7+
) => {
8+
console.log(`πŸš€ > IterableEmbeddedBanner > props:`, props);
9+
return (
10+
<View>
11+
<Text>IterableEmbeddedBanner</Text>
12+
</View>
13+
);
14+
};
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './IterableEmbeddedBanner';
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { Text, View } from 'react-native';
2+
3+
import type { IterableEmbeddedComponentProps } from '../IterableEmbeddedViewProps';
4+
5+
export const IterableEmbeddedCard = (props: IterableEmbeddedComponentProps) => {
6+
console.log(`πŸš€ > IterableEmbeddedCard > props:`, props);
7+
return (
8+
<View>
9+
<Text>IterableEmbeddedCard</Text>
10+
</View>
11+
);
12+
};
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './IterableEmbeddedCard';

0 commit comments

Comments
Β (0)