Compare commits

...

2 Commits

Author SHA1 Message Date
Reinaldo Neto 7d28758fe7 flex for the flatlist 2023-03-06 19:10:06 -03:00
Reinaldo Neto 5c75be6ac5 [FIX] Scroll the pages Directory, New Message, Search for Rooms, Messages and Threads 2023-03-06 16:48:33 -03:00
7 changed files with 92 additions and 76 deletions

View File

@ -6,7 +6,7 @@ import scrollPersistTaps from '../lib/methods/helpers/scrollPersistTaps';
interface IKeyboardViewProps extends KeyboardAwareScrollViewProps { interface IKeyboardViewProps extends KeyboardAwareScrollViewProps {
keyboardVerticalOffset?: number; keyboardVerticalOffset?: number;
scrollEnabled?: boolean; scrollEnabled?: boolean;
children: React.ReactElement[] | React.ReactElement; children: React.ReactElement[] | React.ReactElement | null | (React.ReactElement | null)[];
} }
const KeyboardView = ({ style, contentContainerStyle, scrollEnabled, keyboardVerticalOffset, children }: IKeyboardViewProps) => ( const KeyboardView = ({ style, contentContainerStyle, scrollEnabled, keyboardVerticalOffset, children }: IKeyboardViewProps) => (

View File

@ -27,6 +27,7 @@ import { IApplicationState, IServerRoom, IUser, SubscriptionType } from '../../d
import styles from './styles'; import styles from './styles';
import Options from './Options'; import Options from './Options';
import { Services } from '../../lib/services'; import { Services } from '../../lib/services';
import KeyboardView from '../../containers/KeyboardView';
interface IDirectoryViewProps { interface IDirectoryViewProps {
navigation: CompositeNavigationProp< navigation: CompositeNavigationProp<
@ -290,31 +291,33 @@ class DirectoryView extends React.Component<IDirectoryViewProps, IDirectoryViewS
const { isFederationEnabled, theme } = this.props; const { isFederationEnabled, theme } = this.props;
return ( return (
<SafeAreaView style={{ backgroundColor: themes[theme].backgroundColor }} testID='directory-view'> <SafeAreaView style={{ backgroundColor: themes[theme].backgroundColor }} testID='directory-view'>
<StatusBar /> <KeyboardView>
<FlatList <StatusBar />
data={data} <FlatList
style={styles.list} data={data}
contentContainerStyle={styles.listContainer} style={styles.list}
extraData={this.state} contentContainerStyle={styles.listContainer}
keyExtractor={item => item._id} extraData={this.state}
ListHeaderComponent={this.renderHeader} keyExtractor={item => item._id}
renderItem={this.renderItem} ListHeaderComponent={this.renderHeader}
ItemSeparatorComponent={List.Separator} renderItem={this.renderItem}
keyboardShouldPersistTaps='always' ItemSeparatorComponent={List.Separator}
ListFooterComponent={loading ? <ActivityIndicator /> : null} keyboardShouldPersistTaps='always'
onEndReached={() => this.load({})} ListFooterComponent={loading ? <ActivityIndicator /> : null}
/> onEndReached={() => this.load({})}
{showOptionsDropdown ? (
<Options
theme={theme}
type={type}
globalUsers={globalUsers}
close={this.toggleDropdown}
changeType={this.changeType}
toggleWorkspace={this.toggleWorkspace}
isFederationEnabled={isFederationEnabled}
/> />
) : null} {showOptionsDropdown ? (
<Options
theme={theme}
type={type}
globalUsers={globalUsers}
close={this.toggleDropdown}
changeType={this.changeType}
toggleWorkspace={this.toggleWorkspace}
isFederationEnabled={isFederationEnabled}
/>
) : null}
</KeyboardView>
</SafeAreaView> </SafeAreaView>
); );
}; };

View File

@ -5,6 +5,7 @@ import { FlatList } from 'react-native';
import { shallowEqual } from 'react-redux'; import { shallowEqual } from 'react-redux';
import { useNavigation } from '@react-navigation/native'; import { useNavigation } from '@react-navigation/native';
import KeyboardView from '../../containers/KeyboardView';
import * as HeaderButton from '../../containers/HeaderButton'; import * as HeaderButton from '../../containers/HeaderButton';
import * as List from '../../containers/List'; import * as List from '../../containers/List';
import SafeAreaView from '../../containers/SafeAreaView'; import SafeAreaView from '../../containers/SafeAreaView';
@ -82,29 +83,31 @@ const NewMessageView = () => {
return ( return (
<SafeAreaView testID='new-message-view'> <SafeAreaView testID='new-message-view'>
<StatusBar /> <KeyboardView>
<FlatList <StatusBar />
data={search.length > 0 ? search : chats} <FlatList
keyExtractor={item => item._id || item.rid} data={search.length > 0 ? search : chats}
ListHeaderComponent={<HeaderNewMessage maxUsers={maxUsers} onChangeText={handleSearch} />} keyExtractor={item => item._id || item.rid}
renderItem={({ item }) => { ListHeaderComponent={<HeaderNewMessage maxUsers={maxUsers} onChangeText={handleSearch} />}
const itemSearch = item as ISearch; renderItem={({ item }) => {
const itemModel = item as TSubscriptionModel; const itemSearch = item as ISearch;
const itemModel = item as TSubscriptionModel;
return ( return (
<UserItem <UserItem
name={useRealName && itemSearch.fname ? itemSearch.fname : itemModel.name} name={useRealName && itemSearch.fname ? itemSearch.fname : itemModel.name}
username={itemSearch.search ? itemSearch.username : itemModel.name} username={itemSearch.search ? itemSearch.username : itemModel.name}
onPress={() => goRoom(itemModel)} onPress={() => goRoom(itemModel)}
testID={`new-message-view-item-${item.name}`} testID={`new-message-view-item-${item.name}`}
/> />
); );
}} }}
ItemSeparatorComponent={List.Separator} ItemSeparatorComponent={List.Separator}
ListFooterComponent={List.Separator} ListFooterComponent={List.Separator}
contentContainerStyle={{ backgroundColor: colors.backgroundColor }} contentContainerStyle={{ backgroundColor: colors.backgroundColor }}
keyboardShouldPersistTaps='always' keyboardShouldPersistTaps='always'
/> />
</KeyboardView>
</SafeAreaView> </SafeAreaView>
); );
}; };

View File

@ -11,6 +11,7 @@ import { Header } from '@react-navigation/elements';
import { CompositeNavigationProp, RouteProp } from '@react-navigation/native'; import { CompositeNavigationProp, RouteProp } from '@react-navigation/native';
import { Dispatch } from 'redux'; import { Dispatch } from 'redux';
import KeyboardView from '../../containers/KeyboardView';
import database from '../../lib/database'; import database from '../../lib/database';
import RoomItem, { ROW_HEIGHT, ROW_HEIGHT_CONDENSED } from '../../containers/RoomItem'; import RoomItem, { ROW_HEIGHT, ROW_HEIGHT_CONDENSED } from '../../containers/RoomItem';
import log, { logEvent, events } from '../../lib/methods/helpers/log'; import log, { logEvent, events } from '../../lib/methods/helpers/log';
@ -1025,12 +1026,14 @@ class RoomsListView extends React.Component<IRoomsListViewProps, IRoomsListViewS
return ( return (
<SafeAreaView testID='rooms-list-view' style={{ backgroundColor: themes[theme].backgroundColor }}> <SafeAreaView testID='rooms-list-view' style={{ backgroundColor: themes[theme].backgroundColor }}>
<StatusBar /> <KeyboardView>
{this.renderHeader()} <StatusBar />
{this.renderScroll()} {this.renderHeader()}
{/* TODO - this ts-ignore is here because the route props, on IBaseScreen*/} {this.renderScroll()}
{/* @ts-ignore*/} {/* TODO - this ts-ignore is here because the route props, on IBaseScreen*/}
{showServerDropdown ? <ServerDropdown navigation={navigation} theme={theme} /> : null} {/* @ts-ignore*/}
{showServerDropdown ? <ServerDropdown navigation={navigation} theme={theme} /> : null}
</KeyboardView>
</SafeAreaView> </SafeAreaView>
); );
}; };

View File

@ -7,7 +7,8 @@ export default StyleSheet.create({
flex: 1 flex: 1
}, },
list: { list: {
width: '100%' width: '100%',
flex: 1
}, },
dropdownContainerHeader: { dropdownContainerHeader: {
height: 41, height: 41,

View File

@ -39,6 +39,7 @@ import {
ICustomEmoji ICustomEmoji
} from '../../definitions'; } from '../../definitions';
import { Services } from '../../lib/services'; import { Services } from '../../lib/services';
import KeyboardView from '../../containers/KeyboardView';
const QUERY_SIZE = 50; const QUERY_SIZE = 50;
@ -327,18 +328,20 @@ class SearchMessagesView extends React.Component<ISearchMessagesViewProps, ISear
return ( return (
<SafeAreaView style={{ backgroundColor: themes[theme].backgroundColor }} testID='search-messages-view'> <SafeAreaView style={{ backgroundColor: themes[theme].backgroundColor }} testID='search-messages-view'>
<StatusBar /> <StatusBar />
<View style={styles.searchContainer}> <KeyboardView>
<FormTextInput <View style={styles.searchContainer}>
autoFocus <FormTextInput
label={I18n.t('Search')} autoFocus
onChangeText={this.search} label={I18n.t('Search')}
placeholder={I18n.t('Search_Messages')} onChangeText={this.search}
testID='search-message-view-input' placeholder={I18n.t('Search_Messages')}
/> testID='search-message-view-input'
<Markdown msg={I18n.t('You_can_search_using_RegExp_eg')} theme={theme} /> />
<View style={[styles.divider, { backgroundColor: themes[theme].separatorColor }]} /> <Markdown msg={I18n.t('You_can_search_using_RegExp_eg')} theme={theme} />
</View> <View style={[styles.divider, { backgroundColor: themes[theme].separatorColor }]} />
{this.renderList()} </View>
{this.renderList()}
</KeyboardView>
</SafeAreaView> </SafeAreaView>
); );
} }

View File

@ -35,6 +35,7 @@ import styles from './styles';
import { IApplicationState, IBaseScreen, IMessage, SubscriptionType, TSubscriptionModel, TThreadModel } from '../../definitions'; import { IApplicationState, IBaseScreen, IMessage, SubscriptionType, TSubscriptionModel, TThreadModel } from '../../definitions';
import { getUidDirectMessage, debounce, isIOS } from '../../lib/methods/helpers'; import { getUidDirectMessage, debounce, isIOS } from '../../lib/methods/helpers';
import { Services } from '../../lib/services'; import { Services } from '../../lib/services';
import KeyboardView from '../../containers/KeyboardView';
const API_FETCH_COUNT = 50; const API_FETCH_COUNT = 50;
@ -516,16 +517,18 @@ class ThreadMessagesView extends React.Component<IThreadMessagesViewProps, IThre
return ( return (
<SafeAreaView testID='thread-messages-view'> <SafeAreaView testID='thread-messages-view'>
<StatusBar /> <KeyboardView>
{this.renderContent()} <StatusBar />
{showFilterDropdown ? ( {this.renderContent()}
<Dropdown {showFilterDropdown ? (
currentFilter={currentFilter} <Dropdown
onFilterSelected={this.onFilterSelected} currentFilter={currentFilter}
onClose={this.closeFilterDropdown} onFilterSelected={this.onFilterSelected}
theme={theme} onClose={this.closeFilterDropdown}
/> theme={theme}
) : null} />
) : null}
</KeyboardView>
</SafeAreaView> </SafeAreaView>
); );
} }