import React, { useState, useRef, useEffect } from 'react'; import gettext from 'sources/gettext'; import { Box } from '@material-ui/core'; import { DefaultButton, PrimaryButton } from '../../../static/js/components/Buttons'; import CloseIcon from '@material-ui/icons/CloseRounded'; import CheckRoundedIcon from '@material-ui/icons/CheckRounded'; import PropTypes from 'prop-types'; import { useModalStyles } from '../../../static/js/helpers/ModalProvider'; import { FormFooterMessage, InputCheckbox, InputText, MESSAGE_TYPE } from '../../../static/js/components/FormComponents'; export default function ConnectServerContent({closeModal, data, onOK, setHeight}) { const classes = useModalStyles(); const containerRef = useRef(); const firstEleRef = useRef(); const okBtnRef = useRef(); const [formData, setFormData] = useState({ tunnel_password: '', save_tunnel_password: false, password: '', save_password: false, }); const onTextChange = (e, id) => { let val = e; if(e && e.target) { val = e.target.value; } setFormData((prev)=>({...prev, [id]: val})); }; const onKeyDown = (e) => { // If enter key is pressed then click on OK button if (e.key === 'Enter') { okBtnRef.current?.click(); } }; useEffect(()=>{ setTimeout(()=>{ firstEleRef.current && firstEleRef.current.focus(); }, 275); }, []); useEffect(()=>{ setHeight?.(containerRef.current?.offsetHeight); }, [containerRef.current]); if(!data) { return <>No data; } return ( {data.prompt_tunnel_password && <> {data.tunnel_identity_file ? gettext('Please enter the SSH Tunnel password for the identity file \'%s\' to connect the server "%s"', data.tunnel_identity_file, data.tunnel_host) : gettext('Please enter the SSH Tunnel password for the user \'%s\' to connect the server "%s"', data.tunnel_username, data.tunnel_host) } onTextChange(e, 'tunnel_password')} onKeyDown={(e)=>onKeyDown(e)} /> onTextChange(e.target.checked, 'save_tunnel_password')} disabled={!data.allow_save_tunnel_password} /> } {data.prompt_password && <> {data.username ? gettext('Please enter the password for the user \'%s\' to connect the server - "%s"', data.username, data.server_label) : gettext('Please enter the password for the user to connect the server - "%s"', data.server_label) } { if(!data.prompt_tunnel_password) { /* Set only if no tunnel password asked */ firstEleRef.current = ele; } }} type="password" value={formData['password']} controlProps={{maxLength:null}} onChange={(e)=>onTextChange(e, 'password')} onKeyDown={(e)=>onKeyDown(e)}/> onTextChange(e.target.checked, 'save_password')} disabled={!data.allow_save_password} /> } } onClick={()=>{ closeModal(); }} >{gettext('Cancel')} } onClick={()=>{ let postFormData = new FormData(); if(data.prompt_tunnel_password) { postFormData.append('tunnel_password', formData.tunnel_password); formData.save_tunnel_password && postFormData.append('save_tunnel_password', formData.save_tunnel_password); } if(data.prompt_password) { postFormData.append('password', formData.password); formData.save_password && postFormData.append('save_password', formData.save_password); } onOK?.(postFormData); closeModal(); }} >{gettext('OK')} ); } ConnectServerContent.propTypes = { closeModal: PropTypes.func, data: PropTypes.object, onOK: PropTypes.func, setHeight: PropTypes.func };