diff --git a/amnet-native/app/ServerCardIn.tsx b/amnet-native/app/ServerCardIn.tsx index b2465cb..55246de 100644 --- a/amnet-native/app/ServerCardIn.tsx +++ b/amnet-native/app/ServerCardIn.tsx @@ -1,10 +1,10 @@ -import {Alert, RefreshControl, ScrollView, StyleSheet, Text, View} from "react-native"; +import {BSON} from "realm"; +import {Alert, RefreshControl, ScrollView, StyleSheet, View} from "react-native"; import React, {useCallback, useEffect, useLayoutEffect, useMemo, useState} from "react"; import {ActivityIndicator, Button, Card, Paragraph, Title, useTheme} from "react-native-paper"; import {CircleCheck, CircleDot, CreditCard, Nfc, Plus, SmartphoneNfcIcon, WifiOff} from "lucide-react-native"; import {EmptyStatePlaceholder} from "../components/EmptyStatePlaceholder"; import {AimeCard} from "../components/AimeCard"; -import {BSON} from "realm"; import RealmContext from "../models/RealmContext"; import {AMServer} from "../models/AMServer"; @@ -60,6 +60,10 @@ export default function ServerCardIn({route, navigation}) { // set selected card (once) useEffect(() => { + if (selectedCard?.isValid() === true) { + return; + } + setSelectedCard(cards.length ? cards[0] : null); }, [realm]); @@ -80,9 +84,7 @@ export default function ServerCardIn({route, navigation}) { server.getInfo(abortController.signal).then(r => { if (r) { setConnectionTestResult(true); - realm.write(() => { - server.lastUsed = new Date(); Object.keys(r).forEach(x => server[x] = r[x]); }); } else { @@ -103,12 +105,16 @@ export default function ServerCardIn({route, navigation}) { setCardInCompleted(false); const abortController = new AbortController(); - server.submitCard(selectedCard.code, abortController.signal).then(r => { + server.submitCard(selectedCard.code, abortController.signal).then(async r => { + const now = new Date(); + setCardInCompleted(r); realm.write(() => { - selectedCard.lastUsed = new Date(); - setSelectedCard(selectedCard); + server.lastUsed = now; + selectedCard.lastUsed = now; }); + + setSelectedCard(selectedCard); }).catch(() => { setCardInCompleted(false); }).finally(() => { @@ -119,6 +125,8 @@ export default function ServerCardIn({route, navigation}) { return () => abortController.abort(); }, [server, selectedCard]); + const disableCardIn = useMemo(() => cardInCompleted !== null || !connectionTestResult, [cardInCompleted, connectionTestResult]); + if (connectionTestResult === null) { return ( @@ -128,9 +136,6 @@ export default function ServerCardIn({route, navigation}) { ) } - // cached vars - const disableCardIn = cardInCompleted !== null || !connectionTestResult; - return ( Connection Failed - There was an issue connecting to the AMNet server at {server.serverAddress}. - Check connections and game status and try again. + Check the network connection and try again.