import {useCallback, useEffect, useLayoutEffect, useState} from "react"; import {Card, Paragraph, useTheme} from "react-native-paper"; import {TextInput, TouchableOpacity, View} from "react-native"; 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(() => { setServerAddress(route.params?.address || ''); }, [route.params]); 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 ) }