@@ -26,6 +26,7 @@ export type NotificationConfigItem = { label: string; name: string; id: string }
2626export type MessageListImplementationConfigItem = { label : string ; id : 'flatlist' | 'flashlist' } ;
2727export type MessageListModeConfigItem = { label : string ; mode : 'default' | 'livestream' } ;
2828export type MessageListPruningConfigItem = { label : string ; value : 100 | 500 | 1000 | undefined } ;
29+ export type MessageInputFloatingConfigItem = { label : string ; value : boolean } ;
2930
3031const messageListImplementationConfigItems : MessageListImplementationConfigItem [ ] = [
3132 { label : 'FlatList' , id : 'flatlist' } ,
@@ -44,6 +45,11 @@ const messageListPruningConfigItems: MessageListPruningConfigItem[] = [
4445 { label : '1000 Messages' , value : 1000 } ,
4546] ;
4647
48+ const messageInputFloatingConfigItems : MessageInputFloatingConfigItem [ ] = [
49+ { label : 'Normal' , value : false } ,
50+ { label : 'Floating' , value : true } ,
51+ ] ;
52+
4753export const SlideInView = ( {
4854 visible,
4955 children,
@@ -161,6 +167,23 @@ const SecretMenuMessageListImplementationConfigItem = ({
161167 </ TouchableOpacity >
162168) ;
163169
170+ const SecretMenuMessageInputFloatingConfigItem = ( {
171+ messageInputFloatingConfigItem,
172+ storeMessageInputFloating,
173+ isSelected,
174+ } : {
175+ messageInputFloatingConfigItem : MessageInputFloatingConfigItem ;
176+ storeMessageInputFloating : ( item : MessageInputFloatingConfigItem ) => void ;
177+ isSelected : boolean ;
178+ } ) => (
179+ < TouchableOpacity
180+ style = { [ styles . notificationItemContainer , { borderColor : isSelected ? 'green' : 'gray' } ] }
181+ onPress = { ( ) => storeMessageInputFloating ( messageInputFloatingConfigItem ) }
182+ >
183+ < Text style = { styles . notificationItem } > { messageInputFloatingConfigItem . label } </ Text >
184+ </ TouchableOpacity >
185+ ) ;
186+
164187const SecretMenuMessageListModeConfigItem = ( {
165188 messageListModeConfigItem,
166189 storeMessageListMode,
@@ -218,6 +241,8 @@ export const SecretMenu = ({
218241 const [ selectedMessageListPruning , setSelectedMessageListPruning ] = useState <
219242 MessageListPruningConfigItem [ 'value' ] | null
220243 > ( null ) ;
244+ const [ selectedMessageInputFloating , setSelectedMessageInputFloating ] =
245+ useState < MessageInputFloatingConfigItem [ 'value' ] > ( false ) ;
221246 const {
222247 theme : {
223248 colors : { black, grey } ,
@@ -250,12 +275,19 @@ export const SecretMenu = ({
250275 '@stream-rn-sampleapp-messagelist-pruning' ,
251276 messageListPruningConfigItems [ 0 ] ,
252277 ) ;
278+ const messageInputFloating = await AsyncStore . getItem (
279+ '@stream-rn-sampleapp-messageinput-floating' ,
280+ messageInputFloatingConfigItems [ 0 ] ,
281+ ) ;
253282 setSelectedProvider ( notificationProvider ?. id ?? notificationConfigItems [ 0 ] . id ) ;
254283 setSelectedMessageListImplementation (
255284 messageListImplementation ?. id ?? messageListImplementationConfigItems [ 0 ] . id ,
256285 ) ;
257286 setSelectedMessageListMode ( messageListMode ?. mode ?? messageListModeConfigItems [ 0 ] . mode ) ;
258287 setSelectedMessageListPruning ( messageListPruning ?. value ) ;
288+ setSelectedMessageInputFloating (
289+ messageInputFloating ?. value ?? messageInputFloatingConfigItems [ 0 ] . value ,
290+ ) ;
259291 } ;
260292 getSelectedConfig ( ) ;
261293 } , [ notificationConfigItems ] ) ;
@@ -283,6 +315,11 @@ export const SecretMenu = ({
283315 setSelectedMessageListPruning ( item . value ) ;
284316 } , [ ] ) ;
285317
318+ const storeMessageInputFloating = useCallback ( async ( item : MessageInputFloatingConfigItem ) => {
319+ await AsyncStore . setItem ( '@stream-rn-sampleapp-messageinput-floating' , item ) ;
320+ setSelectedMessageInputFloating ( item . value ) ;
321+ } , [ ] ) ;
322+
286323 const removeAllDevices = useCallback ( async ( ) => {
287324 const { devices } = await chatClient . getDevices ( chatClient . userID ) ;
288325 for ( const device of devices ?? [ ] ) {
@@ -335,6 +372,22 @@ export const SecretMenu = ({
335372 </ View >
336373 </ View >
337374 </ View >
375+ < View style = { [ menuDrawerStyles . menuItem , { alignItems : 'flex-start' } ] } >
376+ < Folder height = { 20 } pathFill = { grey } width = { 20 } />
377+ < View >
378+ < Text style = { [ menuDrawerStyles . menuTitle ] } > Message Input Floating</ Text >
379+ < View style = { { marginLeft : 16 } } >
380+ { messageInputFloatingConfigItems . map ( ( item ) => (
381+ < SecretMenuMessageInputFloatingConfigItem
382+ key = { item . value . toString ( ) }
383+ messageInputFloatingConfigItem = { item }
384+ storeMessageInputFloating = { storeMessageInputFloating }
385+ isSelected = { item . value === selectedMessageInputFloating }
386+ />
387+ ) ) }
388+ </ View >
389+ </ View >
390+ </ View >
338391 < View style = { [ menuDrawerStyles . menuItem , { alignItems : 'flex-start' } ] } >
339392 < Edit height = { 20 } pathFill = { grey } width = { 20 } />
340393 < View >
0 commit comments