auto-select card last used with specific game

This commit is contained in:
ppc
2024-09-20 11:57:06 +01:00
parent 6628071f5b
commit c30abfe482
3 changed files with 18 additions and 9 deletions
+14 -7
View File
@@ -29,11 +29,12 @@ const {useRealm, useQuery, useObject} = RealmContext;
export default function ServerCardIn({route, navigation}) {
const realm = useRealm();
const theme = useTheme();
const safeArea = useSafeAreaInsets();
// card listing state
const query = useQuery(AMCard);
const cards = useMemo(() => query.sorted("lastUsed", true), [query]);
const cards = useQuery({
type: AMCard,
query: q => q.sorted("lastUsed", true)
});
const [selectedCard, setSelectedCard] = useState<AMCard>(null);
const [cardInCompleted, setCardInCompleted] = useState<boolean>(null);
@@ -82,7 +83,6 @@ export default function ServerCardIn({route, navigation}) {
if (server?.isValid() !== true) {
navigation.goBack();
// don't show error on invalid server, just means it was deleted
if (!server) {
Alert.alert("Server not found", "The server you are looking for does not exist.");
}
@@ -90,7 +90,9 @@ export default function ServerCardIn({route, navigation}) {
return;
}
if (selectedCard?.isValid() !== true) {
// select a card if there's none selected
let setCard = selectedCard?.isValid() !== true;
if (setCard) {
setSelectedCard(cards.length ? cards[0] : null);
}
@@ -102,6 +104,11 @@ export default function ServerCardIn({route, navigation}) {
server.lastUsed = new Date();
Object.keys(r).forEach(x => server[x] = r[x]);
});
if (setCard) {
// only reselect card if it was set by us previously
setSelectedCard(cards.find(x => x.lastUsedGameId === server.gameId) || cards[0]);
}
} else {
setConnectionTestResult(false);
}
@@ -122,13 +129,13 @@ export default function ServerCardIn({route, navigation}) {
const abortController = new AbortController();
performCardIn(server, {cardId: selectedCard.code}, abortController.signal).then(async r => {
const now = new Date();
setCardInCompleted(r);
realm.write(() => {
server.lastUsed = now;
selectedCard.lastUsed = now;
selectedCard.lastUsedGameId = server.gameId;
});
setCardInCompleted(r);
setSelectedCard(selectedCard);
}).catch(() => {
setCardInCompleted(false);
+3 -1
View File
@@ -16,6 +16,7 @@ export class AMCard extends Realm.Object<AMCard> implements AMCardData {
added: Date;
lastUsed?: Date;
lastUsedGameId?: string | null;
static generate(code: string, name: string) {
return {
@@ -35,7 +36,8 @@ export class AMCard extends Realm.Object<AMCard> implements AMCardData {
code: "string",
name: {type: "string", default: "New Card"},
added: {type: "date", default: new Date()},
lastUsed: {type: "date", optional: true}
lastUsed: {type: "date", optional: true},
lastUsedGameId: {type: "string", optional: true}
}
};
}
+1 -1
View File
@@ -4,7 +4,7 @@ import {AMServer} from "./AMServer";
// @ts-ignore
export default createRealmContext({
schemaVersion: 2,
schemaVersion: 3,
schema: [AMCard, AMServer],
deleteRealmIfMigrationNeeded: false
});