import React from 'react'; import axios from '../utility/axios'; import ModalBase from './ModalBase'; import { FormButton, FormTextField, FormSelectField, FormSubmit, FormPasswordField } from '../utility/forms'; import ModalHeader from './ModalHeader'; import ModalFooter from './ModalFooter'; import ModalContent from './ModalContent'; import useExtensions from '../utility/useExtensions'; import LoadingInfo from '../widgets/LoadingInfo'; import { FontIcon } from '../icons'; import { FormProvider, useForm } from '../utility/FormProvider'; // import FormikForm from '../utility/FormikForm'; function DriverFields({ extensions }) { const { values, setFieldValue } = useForm(); const { authType, engine } = values; const driver = extensions.drivers.find(x => x.engine == engine); // const { authTypes } = driver || {}; const [authTypes, setAuthTypes] = React.useState(null); const currentAuthType = authTypes && authTypes.find(x => x.name == authType); const loadAuthTypes = async () => { const resp = await axios.post('plugins/auth-types', { engine }); setAuthTypes(resp.data); if (resp.data && !currentAuthType) { setFieldValue('authType', resp.data[0].name); } }; React.useEffect(() => { setAuthTypes(null); loadAuthTypes() }, [values.engine]); if (!driver) return null; const disabledFields = (currentAuthType ? currentAuthType.disabledFields : null) || []; return ( <> {!!authTypes && ( {authTypes.map(auth => ( ))} )} ); } export default function ConnectionModal({ modalState, connection = undefined }) { const [sqlConnectResult, setSqlConnectResult] = React.useState(null); const extensions = useExtensions(); const [isTesting, setIsTesting] = React.useState(false); const testIdRef = React.useRef(0); const handleTest = async values => { setIsTesting(true); testIdRef.current += 1; const testid = testIdRef.current; const resp = await axios.post('connections/test', values); if (testIdRef.current != testid) return; setIsTesting(false); setSqlConnectResult(resp.data); }; const handleCancel = async () => { testIdRef.current += 1; // invalidate current test setIsTesting(false); }; const handleSubmit = async values => { axios.post('connections/save', values); modalState.close(); }; return ( {connection ? 'Edit connection' : 'Add connection'} {extensions.drivers.map(driver => ( ))} {/* */} {!isTesting && sqlConnectResult && sqlConnectResult.msgtype == 'connected' && (
Connected: {sqlConnectResult.version}
)} {!isTesting && sqlConnectResult && sqlConnectResult.msgtype == 'error' && (
Connect failed: {sqlConnectResult.error}
)} {isTesting && }
{isTesting ? ( ) : ( )}
); }