mirror of
https://gitea.tendokyu.moe/ppc/amnet.git
synced 2026-09-22 22:28:22 +03:00
ensure cards are switched correctly and records are swapped without error
This commit is contained in:
@@ -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}>
|
||||
|
||||
Reference in New Issue
Block a user