11import React from 'react' ;
2- import { LogBox , useColorScheme } from 'react-native' ;
2+ import { LogBox , Platform , useColorScheme } from 'react-native' ;
33import { createDrawerNavigator } from '@react-navigation/drawer' ;
44import {
55 DarkTheme ,
@@ -11,7 +11,12 @@ import {
1111 SafeAreaProvider ,
1212 useSafeAreaInsets ,
1313} from 'react-native-safe-area-context' ;
14- import { Chat , OverlayProvider , ThemeProvider } from 'stream-chat-react-native' ;
14+ import {
15+ Chat ,
16+ OverlayProvider ,
17+ ThemeProvider ,
18+ useOverlayContext ,
19+ } from 'stream-chat-react-native' ;
1520
1621import { AppContext } from './src/context/AppContext' ;
1722import { AppOverlayProvider } from './src/context/AppOverlayProvider' ;
@@ -86,7 +91,7 @@ const App = () => {
8691 { isConnecting ? (
8792 < LoadingScreen />
8893 ) : chatClient ? (
89- < DrawerNavigator chatClient = { chatClient } />
94+ < DrawerNavigatorWrapper chatClient = { chatClient } />
9095 ) : (
9196 < UserSelector />
9297 ) }
@@ -96,7 +101,29 @@ const App = () => {
96101 ) ;
97102} ;
98103
99- const DrawerNavigator : React . FC < {
104+ const DrawerNavigator : React . FC = ( ) => {
105+ const { overlay } = useOverlayContext ( ) ;
106+
107+ return (
108+ < Drawer . Navigator
109+ screenOptions = { {
110+ gestureEnabled : Platform . OS === 'ios' && overlay === 'none' ,
111+ } }
112+ drawerContent = { ( props ) => < MenuDrawer { ...props } /> }
113+ drawerStyle = { {
114+ width : 300 ,
115+ } }
116+ >
117+ < Drawer . Screen
118+ component = { HomeScreen }
119+ name = 'HomeScreen'
120+ options = { { headerShown : false } }
121+ />
122+ </ Drawer . Navigator >
123+ ) ;
124+ } ;
125+
126+ const DrawerNavigatorWrapper : React . FC < {
100127 chatClient : StreamChat <
101128 LocalAttachmentType ,
102129 LocalChannelType ,
@@ -136,18 +163,7 @@ const DrawerNavigator: React.FC<{
136163 >
137164 < AppOverlayProvider >
138165 < UserSearchProvider >
139- < Drawer . Navigator
140- drawerContent = { ( props ) => < MenuDrawer { ...props } /> }
141- drawerStyle = { {
142- width : 300 ,
143- } }
144- >
145- < Drawer . Screen
146- component = { HomeScreen }
147- name = 'HomeScreen'
148- options = { { headerShown : false } }
149- />
150- </ Drawer . Navigator >
166+ < DrawerNavigator />
151167 </ UserSearchProvider >
152168 </ AppOverlayProvider >
153169 </ Chat >
@@ -177,66 +193,76 @@ const UserSelector = () => {
177193} ;
178194
179195// TODO: Split the stack into multiple stacks - ChannelStack, CreateChannelStack etc.
180- const HomeScreen = ( ) => (
181- < Stack . Navigator initialRouteName = 'ChatScreen' >
182- < Stack . Screen
183- component = { ChatScreen }
184- name = 'ChatScreen'
185- options = { { headerShown : false } }
186- />
187- < Stack . Screen
188- component = { ChannelScreen }
189- name = 'ChannelScreen'
190- options = { { headerShown : false } }
191- />
192- < Stack . Screen
193- component = { NewDirectMessagingScreen }
194- name = 'NewDirectMessagingScreen'
195- options = { {
196- headerShown : false ,
197- } }
198- />
199- < Stack . Screen
200- component = { NewGroupChannelAddMemberScreen }
201- name = 'NewGroupChannelAddMemberScreen'
202- options = { { headerShown : false } }
203- />
204- < Stack . Screen
205- component = { NewGroupChannelAssignNameScreen }
206- name = 'NewGroupChannelAssignNameScreen'
207- options = { { headerShown : false } }
208- />
209- < Stack . Screen
210- component = { OneOnOneChannelDetailScreen }
211- name = 'OneOnOneChannelDetailScreen'
212- options = { { headerShown : false } }
213- />
214- < Stack . Screen
215- component = { GroupChannelDetailsScreen }
216- name = 'GroupChannelDetailsScreen'
217- options = { { headerShown : false } }
218- />
219- < Stack . Screen
220- component = { ChannelImagesScreen }
221- name = 'ChannelImagesScreen'
222- options = { { headerShown : false } }
223- />
224- < Stack . Screen
225- component = { ChannelFilesScreen }
226- name = 'ChannelFilesScreen'
227- options = { { headerShown : false } }
228- />
229- < Stack . Screen
230- component = { SharedGroupsScreen }
231- name = 'SharedGroupsScreen'
232- options = { { headerShown : false } }
233- />
234- < Stack . Screen
235- component = { ThreadScreen }
236- name = 'ThreadScreen'
237- options = { { headerShown : false } }
238- />
239- </ Stack . Navigator >
240- ) ;
196+ const HomeScreen = ( ) => {
197+ const { overlay } = useOverlayContext ( ) ;
198+
199+ return (
200+ < Stack . Navigator initialRouteName = 'ChatScreen' >
201+ < Stack . Screen
202+ component = { ChatScreen }
203+ name = 'ChatScreen'
204+ options = { { headerShown : false } }
205+ />
206+ < Stack . Screen
207+ component = { ChannelScreen }
208+ name = 'ChannelScreen'
209+ options = { {
210+ gestureEnabled : Platform . OS === 'ios' && overlay === 'none' ,
211+ headerShown : false ,
212+ } }
213+ />
214+ < Stack . Screen
215+ component = { NewDirectMessagingScreen }
216+ name = 'NewDirectMessagingScreen'
217+ options = { {
218+ headerShown : false ,
219+ } }
220+ />
221+ < Stack . Screen
222+ component = { NewGroupChannelAddMemberScreen }
223+ name = 'NewGroupChannelAddMemberScreen'
224+ options = { { headerShown : false } }
225+ />
226+ < Stack . Screen
227+ component = { NewGroupChannelAssignNameScreen }
228+ name = 'NewGroupChannelAssignNameScreen'
229+ options = { { headerShown : false } }
230+ />
231+ < Stack . Screen
232+ component = { OneOnOneChannelDetailScreen }
233+ name = 'OneOnOneChannelDetailScreen'
234+ options = { { headerShown : false } }
235+ />
236+ < Stack . Screen
237+ component = { GroupChannelDetailsScreen }
238+ name = 'GroupChannelDetailsScreen'
239+ options = { { headerShown : false } }
240+ />
241+ < Stack . Screen
242+ component = { ChannelImagesScreen }
243+ name = 'ChannelImagesScreen'
244+ options = { { headerShown : false } }
245+ />
246+ < Stack . Screen
247+ component = { ChannelFilesScreen }
248+ name = 'ChannelFilesScreen'
249+ options = { { headerShown : false } }
250+ />
251+ < Stack . Screen
252+ component = { SharedGroupsScreen }
253+ name = 'SharedGroupsScreen'
254+ options = { { headerShown : false } }
255+ />
256+ < Stack . Screen
257+ component = { ThreadScreen }
258+ name = 'ThreadScreen'
259+ options = { {
260+ gestureEnabled : Platform . OS === 'ios' && overlay === 'none' ,
261+ headerShown : false ,
262+ } }
263+ />
264+ </ Stack . Navigator >
265+ ) ;
266+ } ;
241267
242268export default App ;
0 commit comments