import PropTypes from 'prop-types'; import { CssVarsProvider } from '@mui/joy/styles'; import { Modal, Button, FormControl, FormLabel, Input, Stack, DialogTitle, DialogContent, ModalDialog, Select, Option } from '@mui/joy'; import theme from './theme'; const AddHostModal = ({ isHidden, form, setForm, handleAddHost, setIsAddHostHidden }) => { const handleFileChange = (e) => { const file = e.target.files[0]; if (file) { if (file.name.endsWith('.rsa') || file.name.endsWith('.key') || file.name.endsWith('.pem') || file.name.endsWith('.der') || file.name.endsWith('.p8') || file.name.endsWith('.ssh')) { const reader = new FileReader(); reader.onload = (event) => { setForm({ ...form, rsaKey: event.target.result }); }; reader.readAsText(file); } else { alert("Please upload a valid RSA private key file."); } } }; const isFormValid = () => { if (form.authMethod === 'Select Auth') return false; if (!form.ip || !form.user || !form.port) return false; if (form.authMethod === 'rsaKey' && !form.rsaKey) return false; if (form.authMethod === 'password' && !form.password) return false; return true; }; return ( setIsAddHostHidden(true)}> Add Host
{ event.preventDefault(); if (isFormValid()) handleAddHost(); }} > Host Name setForm({ ...form, name: e.target.value })} required={false} sx={{ backgroundColor: theme.palette.general.primary, color: theme.palette.text.primary, }} /> Host IP setForm({ ...form, ip: e.target.value })} required error={!form.ip ? "Please provide an IP address" : ""} sx={{ backgroundColor: theme.palette.general.primary, color: theme.palette.text.primary, }} /> Host User setForm({ ...form, user: e.target.value })} required error={form.user ? "" : "Please provide a username"} sx={{ backgroundColor: theme.palette.general.primary, color: theme.palette.text.primary, }} /> Authentication Method {form.authMethod === 'password' && ( Host Password setForm({ ...form, password: e.target.value })} required error={form.password ? "" : "Please provide a password"} sx={{ backgroundColor: theme.palette.general.primary, color: theme.palette.text.primary, }} /> )} {form.authMethod === 'rsaKey' && ( RSA Key )} Host Port setForm({ ...form, port: e.target.value })} min={1} max={65535} required error={form.port < 1 || form.port > 65535 ? "Port must be between 1 and 65535" : ""} sx={{ backgroundColor: theme.palette.general.primary, color: theme.palette.text.primary, }} />
); }; AddHostModal.propTypes = { isHidden: PropTypes.bool.isRequired, form: PropTypes.shape({ name: PropTypes.string, ip: PropTypes.string.isRequired, user: PropTypes.string.isRequired, password: PropTypes.string, rsaKey: PropTypes.string, port: PropTypes.number.isRequired, authMethod: PropTypes.string.isRequired, }).isRequired, setForm: PropTypes.func.isRequired, handleAddHost: PropTypes.func.isRequired, setIsAddHostHidden: PropTypes.func.isRequired, }; export default AddHostModal;