mirror of
https://gitea.tendokyu.moe/ppc/amnet.git
synced 2026-09-22 22:28:22 +03:00
add live updating for realm objects, fix object.assign not working
This commit is contained in:
@@ -11,7 +11,7 @@ import {AMServer} from "../models/AMServer";
|
||||
import {AMCard} from "../models/AMCard";
|
||||
import ObjectId = BSON.ObjectId;
|
||||
|
||||
const {useRealm, useQuery} = RealmContext;
|
||||
const {useRealm, useQuery, useObject} = RealmContext;
|
||||
|
||||
export default function ServerCardIn({route, navigation}) {
|
||||
const realm = useRealm();
|
||||
@@ -41,23 +41,22 @@ export default function ServerCardIn({route, navigation}) {
|
||||
}, [cards, selectedCard]);
|
||||
|
||||
// server state
|
||||
const [serverInfo, setServerInfo] = useState<AMServer>(null);
|
||||
const [serverRefreshing, setServerRefreshing] = useState<boolean>(false);
|
||||
const [serverReloadCounter, setServerReloadCounter] = useState<number>(0);
|
||||
const [connectionTestResult, setConnectionTestResult] = useState<boolean | null>(null);
|
||||
|
||||
const {serverId} = route.params;
|
||||
const server = useObject(AMServer, ObjectId.createFromHexString(serverId))
|
||||
|
||||
useLayoutEffect(() => {
|
||||
if (!serverInfo) {
|
||||
if (!server) {
|
||||
return;
|
||||
}
|
||||
|
||||
navigation.setOptions({
|
||||
title: serverInfo.serverName,
|
||||
|
||||
})
|
||||
}, [navigation, serverInfo]);
|
||||
title: server.serverName,
|
||||
});
|
||||
}, [navigation, server]);
|
||||
|
||||
// set selected card (once)
|
||||
useEffect(() => {
|
||||
@@ -66,8 +65,6 @@ export default function ServerCardIn({route, navigation}) {
|
||||
|
||||
// refresh server info (server change or reload request)
|
||||
useEffect(() => {
|
||||
const server = realm.objectForPrimaryKey<AMServer>(AMServer, ObjectId.createFromHexString(serverId));
|
||||
|
||||
if (!server) {
|
||||
navigation.goBack();
|
||||
|
||||
@@ -75,20 +72,15 @@ export default function ServerCardIn({route, navigation}) {
|
||||
return;
|
||||
}
|
||||
|
||||
setServerInfo(server);
|
||||
|
||||
const abortController = new AbortController();
|
||||
server.getInfo(abortController.signal).then(r => {
|
||||
if (r) {
|
||||
setConnectionTestResult(true);
|
||||
|
||||
realm.write(() => {
|
||||
Object.apply(server, r);
|
||||
server.lastUsed = new Date();
|
||||
Object.keys(r).forEach(x => server[x] = r[x]);
|
||||
});
|
||||
|
||||
// reset server to reflect changes
|
||||
setServerInfo(server);
|
||||
} else {
|
||||
setConnectionTestResult(false);
|
||||
}
|
||||
@@ -107,7 +99,7 @@ export default function ServerCardIn({route, navigation}) {
|
||||
setCardInCompleted(false);
|
||||
|
||||
const abortController = new AbortController();
|
||||
serverInfo.submitCard(selectedCard.code, abortController.signal).then(r => {
|
||||
server.submitCard(selectedCard.code, abortController.signal).then(r => {
|
||||
setCardInCompleted(r);
|
||||
realm.write(() => {
|
||||
selectedCard.lastUsed = new Date();
|
||||
@@ -121,7 +113,7 @@ export default function ServerCardIn({route, navigation}) {
|
||||
|
||||
setTimeout(() => abortController.abort(), 5000);
|
||||
return () => abortController.abort();
|
||||
}, [serverInfo, selectedCard]);
|
||||
}, [server, selectedCard]);
|
||||
|
||||
if (connectionTestResult === null) {
|
||||
return (
|
||||
@@ -153,7 +145,7 @@ export default function ServerCardIn({route, navigation}) {
|
||||
</View>
|
||||
<Paragraph>
|
||||
There was an issue connecting to the AimeNet server at <Paragraph
|
||||
style={{fontFamily: "JetBrainsMono_400Regular"}}>{serverInfo.serverAddress}</Paragraph>.
|
||||
style={{fontFamily: "JetBrainsMono_400Regular"}}>{server.serverAddress}</Paragraph>.
|
||||
Check connections and game status and try again.
|
||||
</Paragraph>
|
||||
</Card.Content>
|
||||
|
||||
Reference in New Issue
Block a user