import {getGameName} from "amnet-shared"; import {FlatList, Platform, View} from "react-native"; import {Button, Text, useTheme} from "react-native-paper"; import React, {useCallback, useLayoutEffect, useMemo, useState} from "react"; import {Globe, History, Joystick, Plus, ServerOff} from "lucide-react-native"; import TimeAgo from "../components/TimeAgo"; import {AMUICard, AMUICardDetail} from "../components/AMUICard"; import {EmptyStatePlaceholder} from "../components/EmptyStatePlaceholder"; import {AMServer} from "../models/AMServer"; import RealmContext from "../models/RealmContext"; const {useQuery} = RealmContext; function ServerCard(props: { server: AMServer, navigation: any }) { const gameName = useMemo(() => getGameName(props.server.gameId ?? ''), [props.server.gameId]); const pageCallback = useCallback(() => { props.navigation.navigate('server', { serverId: props.server._id.toHexString() }); }, [props.navigation, props.server]); return ( {props.server.serverAddress} {gameName && ( {gameName} )} {props.server.lastUsed ? () : (never)} ) } export default function ServerManager({navigation}) { const theme = useTheme(); const [searchQuery, setSearchQuery] = useState(''); const query = useQuery(AMServer); const servers = useMemo(() => { let q = query; if (searchQuery !== '') { q = q.filtered("serverName CONTAINS[c] $0 OR serverAddress CONTAINS[c] $0", searchQuery); } return q.sorted("lastUsed", true); }, [query, searchQuery]); // enable searchbar useLayoutEffect(() => { navigation.setOptions({ headerSearchBarOptions: { type: "text", value: searchQuery, autoCorrect: "none", autoCapitalize: "none", textColor: theme.colors.onSurface, headerIconColor: theme.colors.primary, onChangeText: e => setSearchQuery(e.nativeEvent.text) }, }) }, [navigation, setSearchQuery]); if (!servers.length) { return ( }/> {(!searchQuery || !query.length) && ( )} ); } return ( i._id.toString()} style={{padding: 16, paddingTop: 24}} contentContainerStyle={{paddingBottom: 80}} renderItem={i => } ItemSeparatorComponent={() => } ListFooterComponent={() => Platform.OS === "ios" ? null : ( )}/> ) }