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?.serverAddress) { return; } const serverUrl = decodeURIComponent(route.params.serverAddress); 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}); }