import React, { useContext, useState } from 'react'; import { Button, Grid, List, ListItem, Paper, TextField, Typography } from '@mui/material'; import SettingsForm from '../../components/SettingsForm'; import { AppContext, type UseAppStoreType } from '../../contexts/AppContext'; import FederationTable from '../../components/FederationTable'; import { t } from 'i18next'; import { FederationContext, UseFederationStoreType } from '../../contexts/FederationContext'; const SettingsPage = (): JSX.Element => { const { windowSize, navbarHeight } = useContext(AppContext); const { federation, addNewCoordinator } = useContext(FederationContext); const maxHeight = (windowSize.height - navbarHeight) * 0.85 - 3; const [newAlias, setNewAlias] = useState(''); const [newUrl, setNewUrl] = useState(''); const [error, setError] = useState(); // Regular expression to match a valid .onion URL const onionUrlPattern = /^(http:\/\/|https:\/\/)?[a-zA-Z2-7]{16,56}\.onion$/; const addCoordinator = () => { if (federation.coordinators[newAlias]) { setError(t('Alias already exists')); } else { if (onionUrlPattern.test(newUrl)) { addNewCoordinator(newAlias, newUrl); setNewAlias(''); setNewUrl(''); } else { setError(t('Invalid Onion URL')); } } }; return ( {error} setNewAlias(e.target.value)} /> setNewUrl(e.target.value)} /> ); }; export default SettingsPage;