From 33cd321325b29fd4a4d57219064651ccbfb7272b Mon Sep 17 00:00:00 2001 From: ppc Date: Wed, 6 Nov 2024 16:02:59 +0000 Subject: [PATCH] improve card selection when changing games --- amnet-native/app/ServerCardIn.tsx | 38 ++++++++++++++++--------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/amnet-native/app/ServerCardIn.tsx b/amnet-native/app/ServerCardIn.tsx index 97c9d2b..46ca4da 100644 --- a/amnet-native/app/ServerCardIn.tsx +++ b/amnet-native/app/ServerCardIn.tsx @@ -59,6 +59,7 @@ export default function ServerCardIn({route, navigation}) { // server state const [serverRefreshing, setServerRefreshing] = useState(false); const [serverReloadCounter, setServerReloadCounter] = useState(0); + const [serverPreviousGameId, setServerPreviousGameId] = useState(null); const [connectionTestResult, setConnectionTestResult] = useState(null); let {serverId} = route.params; @@ -96,30 +97,31 @@ export default function ServerCardIn({route, navigation}) { } // select a card if there's none selected - let setCard = selectedCard?.isValid() !== true; - if (setCard) { + if (selectedCard?.isValid() !== true) { setSelectedCard(cards.length ? cards[0] : null); } const abortController = new AbortController(); fetchServerInfo(server.serverAddress, abortController.signal).then(r => { - if (r) { - setConnectionTestResult(true); - realm.write(() => { - server.lastUsed = new Date(); - Object.keys(r).forEach(x => server[x] = r[x]); - }); - - if (setCard && cards.length) { - const matchingGameCard = cards.find(x => x.lastUsedGameId === server.gameId); - setSelectedCard(matchingGameCard || cards[0]); - - if (matchingGameCard) { - setDefaultCard(matchingGameCard); - } - } - } else { + if (!r) { setConnectionTestResult(false); + return; + } + + setConnectionTestResult(true); + realm.write(() => { + server.lastUsed = new Date(); + Object.keys(r).forEach(x => server[x] = r[x]); + }); + + const matchingGameCard = cards.find(x => x.lastUsedGameId === server.gameId); + if (matchingGameCard) { + setDefaultCard(matchingGameCard); + } + + if (server.gameId !== serverPreviousGameId) { + setServerPreviousGameId(server.gameId); + setSelectedCard(matchingGameCard || cards[0]); } }).catch(() => { setConnectionTestResult(false);