improve card selection when changing games

This commit is contained in:
ppc
2024-11-06 16:02:59 +00:00
parent 85b900ea30
commit 33cd321325
+20 -18
View File
@@ -59,6 +59,7 @@ export default function ServerCardIn({route, navigation}) {
// server state
const [serverRefreshing, setServerRefreshing] = useState<boolean>(false);
const [serverReloadCounter, setServerReloadCounter] = useState<number>(0);
const [serverPreviousGameId, setServerPreviousGameId] = useState<string | null>(null);
const [connectionTestResult, setConnectionTestResult] = useState<boolean | null>(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);