import React from 'react'; import { FlatList } from 'react-native'; import { StackNavigationOptions, StackNavigationProp } from '@react-navigation/stack'; import { connect } from 'react-redux'; import { Q, Model } from '@nozbe/watermelondb'; import I18n from '../i18n'; import StatusBar from '../containers/StatusBar'; import ServerItem, { ROW_HEIGHT } from '../presentation/ServerItem'; import RocketChat from '../lib/rocketchat'; import database from '../lib/database'; import SafeAreaView from '../containers/SafeAreaView'; import * as List from '../containers/List'; import { ShareInsideStackParamList } from '../definitions/navigationTypes'; const getItemLayout = (data: any, index: number) => ({ length: ROW_HEIGHT, offset: ROW_HEIGHT * index, index }); const keyExtractor = (item: IServer) => item.id; interface IServer extends Model { id: string; iconURL: string; name: string; } interface ISelectServerViewState { servers: IServer[]; } interface ISelectServerViewProps { navigation: StackNavigationProp; server: string; } class SelectServerView extends React.Component { static navigationOptions = (): StackNavigationOptions => ({ title: I18n.t('Select_Server') }); state = { servers: [] as IServer[] }; async componentDidMount() { const serversDB = database.servers; const serversCollection = serversDB.get('servers'); const servers = (await serversCollection.query(Q.where('rooms_updated_at', Q.notEq(null))).fetch()) as IServer[]; this.setState({ servers }); } select = async (server: string) => { const { server: currentServer, navigation } = this.props; navigation.navigate('ShareListView'); if (currentServer !== server) { await RocketChat.shareExtensionInit(server); } }; renderItem = ({ item }: { item: IServer }) => { const { server } = this.props; return this.select(item.id)} item={item} hasCheck={item.id === server} />; }; render() { const { servers } = this.state; return ( ); } } const mapStateToProps = ({ share }: any) => ({ server: share.server.server }); export default connect(mapStateToProps)(SelectServerView);