Skip to content

Commit ef52dd3

Browse files
committed
fix(demo): fix TesterIntegrated
1 parent c64fbd4 commit ef52dd3

4 files changed

Lines changed: 132 additions & 12 deletions

File tree

apps/TesterIntegrated/App.tsx

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
1-
import './BrownfieldStore.brownie';
2-
3-
import { useStore } from '@callstack/brownie';
4-
import { useEffect } from 'react';
51
import { StyleSheet, Text, View, Button, TextInput } from 'react-native';
2+
import PostMessageScreen from './PostMessageScreen';
63

74
import {
85
createNativeStackNavigator,
96
type NativeStackScreenProps,
107
} from '@react-navigation/native-stack';
118
import ReactNativeBrownfield from '@callstack/react-native-brownfield';
129
import { NavigationContainer } from '@react-navigation/native';
10+
import { useStore } from '@callstack/brownie';
11+
import { useEffect } from 'react';
1312

1413
const getRandomValue = () => Math.round(Math.random() * 255);
1514
const getRandomTheme = () => {
@@ -28,6 +27,7 @@ const getRandomTheme = () => {
2827

2928
type RootStackParamList = {
3029
Home: { theme: { primary: string; secondary: string } };
30+
PostMessage: undefined;
3131
};
3232

3333
type HomeScreenProps = NativeStackScreenProps<RootStackParamList, 'Home'>;
@@ -82,6 +82,14 @@ function HomeScreen({ navigation, route }: HomeScreenProps) {
8282
title="Push next screen"
8383
/>
8484

85+
<Button
86+
onPress={() => {
87+
navigation.push('PostMessage');
88+
}}
89+
color={colors.secondary}
90+
title="Go to PostMessage Screen"
91+
/>
92+
8593
<Button
8694
onPress={() => {
8795
if (navigation.canGoBack()) {
@@ -104,6 +112,7 @@ export default function App() {
104112
<NavigationContainer>
105113
<Stack.Navigator>
106114
<Stack.Screen name="Home" component={HomeScreen} />
115+
<Stack.Screen name="PostMessage" component={PostMessageScreen} />
107116
</Stack.Navigator>
108117
</NavigationContainer>
109118
);
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
import {
2+
StyleSheet,
3+
FlatList,
4+
TouchableOpacity,
5+
Text,
6+
View,
7+
} from 'react-native';
8+
9+
import { useCallback, useEffect, useRef, useState } from 'react';
10+
import ReactNativeBrownfield from '@callstack/react-native-brownfield';
11+
import type { MessageEvent } from '@callstack/react-native-brownfield';
12+
13+
type Message = {
14+
id: string;
15+
text: string;
16+
from: 'native' | 'rn';
17+
timestamp: number;
18+
};
19+
20+
export default function PostMessageScreen() {
21+
const [messages, setMessages] = useState<Message[]>([]);
22+
const flatListRef = useRef<FlatList<Message>>(null);
23+
24+
const messageCounterRef = useRef(0);
25+
26+
useEffect(() => {
27+
const sub = ReactNativeBrownfield.onMessage((event: MessageEvent) => {
28+
const data = event.data as { text?: string };
29+
setMessages((prev) => [
30+
...prev,
31+
{
32+
id: String(++messageCounterRef.current),
33+
text: data?.text ?? JSON.stringify(event.data),
34+
from: 'native',
35+
timestamp: Date.now(),
36+
},
37+
]);
38+
});
39+
return () => sub.remove();
40+
}, []);
41+
42+
const sendMessage = useCallback(() => {
43+
const msg = {
44+
text: `Hello from TesterIntegrated! (#${++messageCounterRef.current})`,
45+
timestamp: Date.now(),
46+
};
47+
ReactNativeBrownfield.postMessage(msg);
48+
setMessages((prev) => [
49+
...prev,
50+
{
51+
id: String(messageCounterRef.current),
52+
text: msg.text,
53+
from: 'rn',
54+
timestamp: msg.timestamp,
55+
},
56+
]);
57+
}, []);
58+
59+
return (
60+
<View style={styles.messageSection}>
61+
<TouchableOpacity
62+
style={styles.sendButton}
63+
onPress={sendMessage}
64+
activeOpacity={0.8}
65+
>
66+
<Text style={styles.sendButtonText}>Send message to Native</Text>
67+
</TouchableOpacity>
68+
69+
<FlatList
70+
data={messages}
71+
keyExtractor={(item) => `message-${item.id}`}
72+
renderItem={({ item }) => <Text>{item.text}</Text>}
73+
style={styles.messageList}
74+
contentContainerStyle={styles.messageListContent}
75+
inverted={true} // ensure newest messages are at the top
76+
onContentSizeChange={() => {
77+
flatListRef.current?.scrollToEnd({ animated: true });
78+
}}
79+
ref={flatListRef}
80+
/>
81+
</View>
82+
);
83+
}
84+
85+
const styles = StyleSheet.create({
86+
messageSection: {
87+
flex: 1,
88+
width: '100%',
89+
padding: 12,
90+
paddingHorizontal: 20,
91+
},
92+
sendButton: {
93+
paddingVertical: 12,
94+
paddingHorizontal: 20,
95+
borderRadius: 10,
96+
alignItems: 'center',
97+
marginBottom: 10,
98+
backgroundColor: '#4F8EF7',
99+
},
100+
sendButtonText: {
101+
fontWeight: '700',
102+
fontSize: 15,
103+
color: '#fff',
104+
},
105+
messageList: {
106+
flex: 1,
107+
},
108+
messageListContent: {
109+
paddingBottom: 8,
110+
},
111+
});

apps/TesterIntegrated/swift/Podfile.lock

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
PODS:
22
- boost (1.84.0)
3-
- Brownie (0.0.1):
3+
- Brownie (3.0.0-rc.2):
44
- boost
55
- DoubleConversion
66
- fast_float
@@ -2350,7 +2350,7 @@ PODS:
23502350
- SocketRocket
23512351
- ReactAppDependencyProvider (0.82.1):
23522352
- ReactCodegen
2353-
- ReactBrownfield (2.0.1):
2353+
- ReactBrownfield (3.0.0-rc.2):
23542354
- boost
23552355
- DoubleConversion
23562356
- fast_float
@@ -2772,7 +2772,7 @@ EXTERNAL SOURCES:
27722772

27732773
SPEC CHECKSUMS:
27742774
boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90
2775-
Brownie: 1ea85496ea17d9c5dda3a858af605d8524e78293
2775+
Brownie: 45f5c3689d98179147d7b72678552f0cc54b6f90
27762776
DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb
27772777
fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6
27782778
FBLazyVector: 0aa6183b9afe3c31fc65b5d1eeef1f3c19b63bfa
@@ -2843,13 +2843,13 @@ SPEC CHECKSUMS:
28432843
React-utils: abf37b162f560cd0e3e5d037af30bb796512246d
28442844
React-webperformancenativemodule: 50a57c713a90d27ae3ab947a6c9c8859bcb49709
28452845
ReactAppDependencyProvider: a45ef34bb22dc1c9b2ac1f74167d9a28af961176
2846-
ReactBrownfield: 10f9f7370cd8bd6ef30eb9c736d774f9d17565f7
2846+
ReactBrownfield: a7706e2b5bf21861c73ef20b54674e672ea6aa96
28472847
ReactCodegen: 878add6c7d8ff8cea87697c44d29c03b79b6f2d9
28482848
ReactCommon: 804dc80944fa90b86800b43c871742ec005ca424
28492849
RNScreens: ffbb0296608eb3560de641a711bbdb663ed1f6b4
28502850
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
2851-
Yoga: 689c8e04277f3ad631e60fe2a08e41d411daf8eb
2851+
Yoga: 8e01cef9947ca77f0477a098f0b32848a8e448c6
28522852

28532853
PODFILE CHECKSUM: cc9179225629f8397761aa16248efe751042af40
28542854

2855-
COCOAPODS: 1.15.2
2855+
COCOAPODS: 1.16.2

apps/TesterIntegrated/swift/SwiftExample.xcodeproj/project.pbxproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@
432432
CODE_SIGN_STYLE = Automatic;
433433
DEVELOPMENT_TEAM = PJL7DA2X5F;
434434
INFOPLIST_FILE = Info.plist;
435-
IPHONEOS_DEPLOYMENT_TARGET = 15.6;
435+
IPHONEOS_DEPLOYMENT_TARGET = 17.6;
436436
LD_RUNPATH_SEARCH_PATHS = (
437437
"$(inherited)",
438438
"@executable_path/Frameworks",
@@ -452,7 +452,7 @@
452452
CODE_SIGN_STYLE = Automatic;
453453
DEVELOPMENT_TEAM = PJL7DA2X5F;
454454
INFOPLIST_FILE = Info.plist;
455-
IPHONEOS_DEPLOYMENT_TARGET = 15.6;
455+
IPHONEOS_DEPLOYMENT_TARGET = 17.6;
456456
LD_RUNPATH_SEARCH_PATHS = (
457457
"$(inherited)",
458458
"@executable_path/Frameworks",

0 commit comments

Comments
 (0)