ensure cards are switched correctly and records are swapped without error

This commit is contained in:
ppc
2025-04-01 20:21:56 +01:00
parent c6f9251cf2
commit 318e113445
+12 -10
View File
@@ -43,9 +43,9 @@ const {useRealm, useQuery, useObject} = RealmContext;
export default function ServerCardIn({route, navigation}) {
const realm = useRealm();
const theme = useTheme();
const theme = useTheme()
let {serverId} = route.params;
const {serverId} = route.params;
const server = useObject(AMServer, ObjectId.createFromHexString(serverId));
const cards = useQuery({
type: AMCard,
@@ -72,8 +72,13 @@ export default function ServerCardIn({route, navigation}) {
const disableCardIn = useMemo(() => cardInCompleted !== null || !serverConnectionSuccess, [cardInCompleted, serverConnectionSuccess]);
const serverDefaultCardQuery = useObject(AMCardRecentUse, server.gameId);
const serverDefaultCard = serverDefaultCardQuery?.card ?? null;
const serverDefaultCard = useMemo(() => {
if (server?.isValid() !== true || !server.gameId) {
return null;
}
return realm.objects<AMCardRecentUse>(AMCardRecentUse.schema.name).find(x => x.gameId === server.gameId)?.card;
}, [realm, cards, server?.gameId]);
const selectedCard = useMemo(() => [userSelectedCard, serverDefaultCard, cards.at(0)].find(x => x?.isValid() == true) ?? null, [userSelectedCard, serverDefaultCard, cards]);
const unselectedCards = useMemo(() => cards.filter(x => x.isValid() === true && x._id.toHexString() !== selectedCard?._id.toHexString()), [cards, selectedCard]);
@@ -165,10 +170,8 @@ export default function ServerCardIn({route, navigation}) {
// replace the "most recent card" record
if (server.gameId) {
if (serverDefaultCardQuery) {
realm.delete(serverDefaultCardQuery);
}
// replace the "most recent card" record for the current game
realm.delete(realm.objects(AMCardRecentUse.schema.name).filtered("gameId = $0", server.gameId));
realm.create(AMCardRecentUse.schema.name, AMCardRecentUse.generate(server.gameId, card));
}
});
@@ -235,8 +238,7 @@ export default function ServerCardIn({route, navigation}) {
}
return (
<ScrollView contentInsetAdjustmentBehavior="automatic"
refreshControl={<RefreshControl refreshing={serverRefreshing} onRefresh={performRefresh}/>}>
<ScrollView contentInsetAdjustmentBehavior="automatic" refreshControl={<RefreshControl refreshing={serverRefreshing} onRefresh={performRefresh}/>}>
<View style={styles.container}>
<StatusAlert server={server} connectionEstablished={serverConnectionSuccess}/>
<View style={styles.section}>