diff --git a/amnet-native/app/ServerCardIn.tsx b/amnet-native/app/ServerCardIn.tsx index ede22e0..d7ba3e2 100644 --- a/amnet-native/app/ServerCardIn.tsx +++ b/amnet-native/app/ServerCardIn.tsx @@ -11,7 +11,7 @@ import {AMServer} from "../models/AMServer"; import {AMCard} from "../models/AMCard"; import ObjectId = BSON.ObjectId; -const {useRealm, useQuery} = RealmContext; +const {useRealm, useQuery, useObject} = RealmContext; export default function ServerCardIn({route, navigation}) { const realm = useRealm(); @@ -41,23 +41,22 @@ export default function ServerCardIn({route, navigation}) { }, [cards, selectedCard]); // server state - const [serverInfo, setServerInfo] = useState(null); const [serverRefreshing, setServerRefreshing] = useState(false); const [serverReloadCounter, setServerReloadCounter] = useState(0); const [connectionTestResult, setConnectionTestResult] = useState(null); const {serverId} = route.params; + const server = useObject(AMServer, ObjectId.createFromHexString(serverId)) useLayoutEffect(() => { - if (!serverInfo) { + if (!server) { return; } navigation.setOptions({ - title: serverInfo.serverName, - - }) - }, [navigation, serverInfo]); + title: server.serverName, + }); + }, [navigation, server]); // set selected card (once) useEffect(() => { @@ -66,8 +65,6 @@ export default function ServerCardIn({route, navigation}) { // refresh server info (server change or reload request) useEffect(() => { - const server = realm.objectForPrimaryKey(AMServer, ObjectId.createFromHexString(serverId)); - if (!server) { navigation.goBack(); @@ -75,20 +72,15 @@ export default function ServerCardIn({route, navigation}) { return; } - setServerInfo(server); - const abortController = new AbortController(); server.getInfo(abortController.signal).then(r => { if (r) { setConnectionTestResult(true); realm.write(() => { - Object.apply(server, r); server.lastUsed = new Date(); + Object.keys(r).forEach(x => server[x] = r[x]); }); - - // reset server to reflect changes - setServerInfo(server); } else { setConnectionTestResult(false); } @@ -107,7 +99,7 @@ export default function ServerCardIn({route, navigation}) { setCardInCompleted(false); const abortController = new AbortController(); - serverInfo.submitCard(selectedCard.code, abortController.signal).then(r => { + server.submitCard(selectedCard.code, abortController.signal).then(r => { setCardInCompleted(r); realm.write(() => { selectedCard.lastUsed = new Date(); @@ -121,7 +113,7 @@ export default function ServerCardIn({route, navigation}) { setTimeout(() => abortController.abort(), 5000); return () => abortController.abort(); - }, [serverInfo, selectedCard]); + }, [server, selectedCard]); if (connectionTestResult === null) { return ( @@ -153,7 +145,7 @@ export default function ServerCardIn({route, navigation}) { There was an issue connecting to the AimeNet server at {serverInfo.serverAddress}. + style={{fontFamily: "JetBrainsMono_400Regular"}}>{server.serverAddress}. Check connections and game status and try again.