import {Card, Paragraph, useTheme} from "react-native-paper";
import {TextInput, TouchableOpacity, View} from "react-native";
import {useCallback, useEffect, useLayoutEffect, useState} from "react";
import {useModalStyles} from "../utils/ModalStyles";
import RealmContext from "../models/RealmContext";
import {AMServer} from "../models/AMServer";
const {useRealm} = RealmContext;
export default function ServerAddModal({route, navigation}) {
const realm = useRealm();
const theme = useTheme();
const modalStyles = useModalStyles();
const [serverAddress, setServerAddress] = useState('');
// add option to add server address when loading a share link
useEffect(() => {
handleDeepLink(realm, navigation, route, setServerAddress);
}, [route]);
useLayoutEffect(() => {
navigation.setOptions({
headerLeft: () => navigation.goBack()}>
Cancel
,
});
}, [navigation, modalStyles]);
useLayoutEffect(() => {
let urlValid = false;
try {
new URL(serverAddress);
urlValid = true;
} catch {
// do nothing
}
const themeOptions = urlValid ? modalStyles.headerText : {color: theme.colors.outline};
navigation.setOptions({
headerRight: () => saveServer()}>
Save
})
}, [navigation, modalStyles, serverAddress]);
const saveServer = useCallback(() => {
let serverObject = realm.objects("server").find(x => x.serverAddress == serverAddress);
if (!serverObject) {
realm.write(() => {
serverObject = realm.create("server", AMServer.generate(serverAddress));
});
}
navigation.goBack();
setTimeout(() => navigation.navigate('server', {
serverId: serverObject._id.toHexString()
}), 500);
}, [serverAddress, realm]);
return (
Address
If you're using HTTPS, ensure a trusted certificate has been configured via HTTP.SYS
)
}
function handleDeepLink(realm, navigation, route, setAddress: (address: string) => void) {
if (!route.params?.address) {
return;
}
const serverUrl = decodeURIComponent(route.params.address);
const item = realm.objects(AMServer).filtered("serverAddress = $0", serverUrl);
if (item.length) {
navigation.goBack();
navigation.navigate('server', {
serverId: item._id.toHexString()
});
} else {
setAddress(serverUrl);
}
// clear param from route
navigation.setParams({serverAddress: null});
}