From a1c514caa493347d770b4630e7e749df6dcff118 Mon Sep 17 00:00:00 2001 From: ppc Date: Tue, 13 Aug 2024 18:59:03 +0100 Subject: [PATCH] add server search support --- amnet-native/app/ServerManager.tsx | 44 ++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/amnet-native/app/ServerManager.tsx b/amnet-native/app/ServerManager.tsx index b294e56..a82ebeb 100644 --- a/amnet-native/app/ServerManager.tsx +++ b/amnet-native/app/ServerManager.tsx @@ -1,6 +1,6 @@ import {Paragraph} from "react-native-paper"; -import React, {useCallback, useMemo} from "react"; -import {FlatList, Text, View} from "react-native"; +import React, {ReactEventHandler, useCallback, useEffect, useMemo, useState} from "react"; +import {FlatList, NativeSyntheticEvent, NativeUIEvent, Text, View} from "react-native"; import {Globe, History, ServerOff} from "lucide-react-native"; import {EmptyStatePlaceholder} from "../components/EmptyStatePlaceholder"; import {AMUICard, AMUICardDetail} from "../components/AMUICard"; @@ -8,7 +8,7 @@ import TimeAgo from "../components/TimeAgo"; import RealmContext from "../models/RealmContext"; import {AMServer} from "../models/AMServer"; -import ContextMenu from "react-native-context-menu-view"; +import ContextMenu, {ContextMenuOnPressNativeEvent} from "react-native-context-menu-view"; const {useRealm, useQuery} = RealmContext; @@ -20,12 +20,12 @@ function ServerCard(props: { server: AMServer, navigation: any }) { }); }, [props.navigation, props.server]); - const pageContextMenuCallback = useCallback((action) => { + const pageContextMenuCallback = useCallback((action: NativeSyntheticEvent) => { switch (action.nativeEvent.index) { case 0: pageCallback(); break; - + case 1: realm.write(() => { realm.delete(props.server); @@ -33,7 +33,7 @@ function ServerCard(props: { server: AMServer, navigation: any }) { break; } }, [realm, props.server]); - + return ( query.sorted("lastUsed"), [query]); + 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"); + }, [query, searchQuery]); + + // use effect to allow using the search bar + useEffect(() => { + navigation.setOptions({ + headerSearchBarOptions: { + value: searchQuery, + onChangeText: e => setSearchQuery(e.nativeEvent.text) + }, + }) + }, [navigation, setSearchQuery]); + if (!servers.length) { return ( - - }/> + + }/> ); } - - + return ( i._id.toString()} + style={{padding: 16, paddingTop: 24}} contentContainerStyle={{paddingBottom: 40}} ItemSeparatorComponent={() => } renderItem={i => }/>