diff --git a/src/servers/CreateServer.js b/src/servers/CreateServer.js index 8ce3fd02..81375eaa 100644 --- a/src/servers/CreateServer.js +++ b/src/servers/CreateServer.js @@ -1,6 +1,7 @@ import React, { useState, useEffect } from 'react'; import { v4 as uuid } from 'uuid'; import PropTypes from 'prop-types'; +import { HorizontalFormGroup } from '../utils/HorizontalFormGroup'; import './CreateServer.scss'; const SHOW_IMPORT_MSG_TIME = 4000; @@ -13,12 +14,11 @@ const propTypes = { }; const CreateServer = (ImportServersBtn, useStateFlagTimeout) => { - const CreateServerComp = ({ createServer, history, resetSelectedServer }) => { + const CreateServerComp = ({ createServer, history: { push }, resetSelectedServer }) => { const [ name, setName ] = useState(''); const [ url, setUrl ] = useState(''); const [ apiKey, setApiKey ] = useState(''); const [ serversImported, setServersImported ] = useStateFlagTimeout(false, SHOW_IMPORT_MSG_TIME); - const { push } = history; const handleSubmit = (e) => { e.preventDefault(); @@ -28,35 +28,17 @@ const CreateServer = (ImportServersBtn, useStateFlagTimeout) => { createServer(server); push(`/server/${id}/list-short-urls/1`); }; - const renderInputGroup = (id, placeholder, value, setState, type = 'text') => ( -
- -
- setState(e.target.value)} - /> -
-
- ); useEffect(() => { - resetSelectedServer(); // FIXME Only when no serverId exists + resetSelectedServer(); }, []); return (
- {renderInputGroup('name', 'Name', name, setName)} - {renderInputGroup('url', 'URL', url, setUrl, 'url')} - {renderInputGroup('apiKey', 'API key', apiKey, setApiKey)} + Name + URL + API key
diff --git a/src/utils/HorizontalFormGroup.js b/src/utils/HorizontalFormGroup.js new file mode 100644 index 00000000..2586c9c3 --- /dev/null +++ b/src/utils/HorizontalFormGroup.js @@ -0,0 +1,32 @@ +import React from 'react'; +import { v4 as uuid } from 'uuid'; +import PropTypes from 'prop-types'; + +const propTypes = { + children: PropTypes.node.isRequired, + value: PropTypes.string.isRequired, + onChange: PropTypes.func.isRequired, + id: PropTypes.string, + type: PropTypes.string, + required: PropTypes.bool, +}; + +export const HorizontalFormGroup = ({ children, value, onChange, id = uuid(), type = 'text', required = true }) => ( +
+ +
+ onChange(e.target.value)} + /> +
+
+); + +HorizontalFormGroup.propTypes = propTypes; diff --git a/test/servers/CreateServer.test.js b/test/servers/CreateServer.test.js index 8523b200..b3e5bc1c 100644 --- a/test/servers/CreateServer.test.js +++ b/test/servers/CreateServer.test.js @@ -2,6 +2,7 @@ import React from 'react'; import { shallow } from 'enzyme'; import { identity } from 'ramda'; import createServerConstruct from '../../src/servers/CreateServer'; +import { HorizontalFormGroup } from '../../src/utils/HorizontalFormGroup'; describe('', () => { let wrapper; @@ -28,9 +29,7 @@ describe('', () => { it('renders components', () => { const wrapper = createWrapper(); - expect(wrapper.find('#name')).toHaveLength(1); - expect(wrapper.find('#url')).toHaveLength(1); - expect(wrapper.find('#apiKey')).toHaveLength(1); + expect(wrapper.find(HorizontalFormGroup)).toHaveLength(3); expect(wrapper.find(ImportServersBtn)).toHaveLength(1); expect(wrapper.find('.create-server__import-success-msg')).toHaveLength(0); });