1- import React , { useCallback , useState } from 'react' ;
1+ import React , { useCallback } from 'react' ;
22
3- import type { RouteProp } from '@react-navigation/native' ;
3+ import { useNavigation , type RouteProp } from '@react-navigation/native' ;
44import type { NativeStackNavigationProp } from '@react-navigation/native-stack' ;
55
66import {
77 ChannelDetails ,
8+ ChannelDetailsActionsSection ,
9+ ChannelDetailsNavigationSection ,
810 GetChannelDetailsNavigationItems ,
911 GetChannelMemberActionItems ,
10- ChannelAddMembersModal ,
11- ChannelAllMembersModal ,
1212 ChannelDetailsContextProvider ,
1313 ChannelDetailsNavigationSectionType ,
14+ ChannelMemberActionsSheet ,
15+ WithComponents ,
16+ ChannelDetailsActionsSectionProps ,
17+ useChannelDetailsContext ,
1418} from 'stream-chat-react-native' ;
1519
1620import { SendDirectMessage } from '../icons/SendDirectMessage' ;
@@ -40,12 +44,10 @@ const navigationItems: {
4044 files : 'ChannelFilesScreen' ,
4145} ;
4246
43- export const ChannelDetailsScreen : React . FC < Props > = ( {
44- navigation,
45- route : {
46- params : { channel } ,
47- } ,
48- } ) => {
47+ const ChannelDetailsScreenInner = ( ) => {
48+ const navigation = useNavigation < ChannelDetailsScreenNavigationProp > ( ) ;
49+ const { channel, closeModals } = useChannelDetailsContext ( ) ;
50+
4951 const onBack = useCallback ( ( ) => navigation . goBack ( ) , [ navigation ] ) ;
5052 const getNavigationItems = useCallback < GetChannelDetailsNavigationItems > (
5153 ( { defaultItems } ) =>
@@ -65,15 +67,13 @@ export const ChannelDetailsScreen: React.FC<Props> = ({
6567 } ) ,
6668 [ navigation ] ,
6769 ) ;
68- const [ isAddMembersVisible , setAddMembersVisible ] = useState ( false ) ;
69- const handleAddMembersClose = useCallback ( ( ) => setAddMembersVisible ( false ) , [ ] ) ;
70- const handleAddMembersPress = useCallback ( ( ) => {
71- setAllMembersVisible ( false ) ;
72- setAddMembersVisible ( true ) ;
73- } , [ ] ) ;
74- const [ isAllMembersVisible , setAllMembersVisible ] = useState ( false ) ;
75- const handleAllMembersClose = useCallback ( ( ) => setAllMembersVisible ( false ) , [ ] ) ;
76- const handleAllMembersPress = useCallback ( ( ) => setAllMembersVisible ( true ) , [ ] ) ;
70+
71+ const ActionsSection = useCallback (
72+ ( props : ChannelDetailsActionsSectionProps ) => (
73+ < ChannelDetailsActionsSection { ...props } onChannelDismiss = { popToRoot } />
74+ ) ,
75+ [ popToRoot ] ,
76+ ) ;
7777
7878 const getChannelMemberActionItems = useCallback < GetChannelMemberActionItems > (
7979 ( { context, defaultItems } ) => {
@@ -85,7 +85,7 @@ export const ChannelDetailsScreen: React.FC<Props> = ({
8585 return [
8686 {
8787 action : ( ) => {
88- setAllMembersVisible ( false ) ;
88+ closeModals ( ) ;
8989 navigation . navigate ( 'NewDirectMessagingScreen' , { initialUser : user } ) ;
9090 return Promise . resolve ( ) ;
9191 } ,
@@ -97,28 +97,47 @@ export const ChannelDetailsScreen: React.FC<Props> = ({
9797 ...defaultItems ,
9898 ] ;
9999 } ,
100- [ navigation ] ,
100+ [ navigation , closeModals ] ,
101101 ) ;
102102
103- return (
104- < >
105- < ChannelDetails
106- channel = { channel }
103+ const NavigationSection = useCallback (
104+ ( props : Parameters < typeof ChannelDetailsNavigationSection > [ 0 ] ) => (
105+ < ChannelDetailsNavigationSection { ...props } getNavigationItems = { getNavigationItems } />
106+ ) ,
107+ [ getNavigationItems ] ,
108+ ) ;
109+
110+ const MemberActionsSheet = useCallback (
111+ ( props : Parameters < typeof ChannelMemberActionsSheet > [ 0 ] ) => (
112+ < ChannelMemberActionsSheet
113+ { ...props }
107114 getChannelMemberActionItems = { getChannelMemberActionItems }
108- getNavigationItems = { getNavigationItems }
109- onBack = { onBack }
110- onChannelDismiss = { popToRoot }
111- // Handler view all members modal so we can close it after navigation is triggered by our custom action
112- onViewAllMembersPress = { handleAllMembersPress }
113115 />
114- < ChannelDetailsContextProvider value = { { channel, getChannelMemberActionItems } } >
115- < ChannelAllMembersModal
116- onClose = { handleAllMembersClose }
117- visible = { isAllMembersVisible }
118- onAddMembersPress = { handleAddMembersPress }
119- />
120- < ChannelAddMembersModal onClose = { handleAddMembersClose } visible = { isAddMembersVisible } />
121- </ ChannelDetailsContextProvider >
122- </ >
116+ ) ,
117+ [ getChannelMemberActionItems ] ,
118+ ) ;
119+
120+ return (
121+ < WithComponents
122+ overrides = { {
123+ ChannelDetailsActionsSection : ActionsSection ,
124+ ChannelDetailsNavigationSection : NavigationSection ,
125+ ChannelMemberActionsSheet : MemberActionsSheet ,
126+ } }
127+ >
128+ < ChannelDetails onBack = { onBack } />
129+ </ WithComponents >
130+ ) ;
131+ } ;
132+
133+ export const ChannelDetailsScreen : React . FC < Props > = ( {
134+ route : {
135+ params : { channel } ,
136+ } ,
137+ } ) => {
138+ return (
139+ < ChannelDetailsContextProvider channel = { channel } >
140+ < ChannelDetailsScreenInner />
141+ </ ChannelDetailsContextProvider >
123142 ) ;
124143} ;
0 commit comments