mirror of
https://gitea.tendokyu.moe/ppc/amnet.git
synced 2026-09-22 22:28:22 +03:00
auto-select card last used with specific game
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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}
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -4,7 +4,7 @@ import {AMServer} from "./AMServer";
|
||||
|
||||
// @ts-ignore
|
||||
export default createRealmContext({
|
||||
schemaVersion: 2,
|
||||
schemaVersion: 3,
|
||||
schema: [AMCard, AMServer],
|
||||
deleteRealmIfMigrationNeeded: false
|
||||
});
|
||||
Reference in New Issue
Block a user