From 318e113445bfa2358dd4c50e9717f8705bb64f0b Mon Sep 17 00:00:00 2001 From: ppc Date: Tue, 1 Apr 2025 20:21:56 +0100 Subject: [PATCH] ensure cards are switched correctly and records are swapped without error --- amnet-native/app/ServerCardIn.tsx | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/amnet-native/app/ServerCardIn.tsx b/amnet-native/app/ServerCardIn.tsx index c7c89e9..4c12853 100644 --- a/amnet-native/app/ServerCardIn.tsx +++ b/amnet-native/app/ServerCardIn.tsx @@ -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.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 ( - }> + }>