Completed
Push — master ( 3953e9...fad0bf )
by Alejandro
15s queued 11s
created

src/servers/ServersDropdown.js   A

Complexity

Total Complexity 1
Complexity/F 0

Size

Lines of Code 54
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Test Coverage

Coverage 92.86%

Importance

Changes 0
Metric Value
wmc 1
eloc 44
mnd 1
bc 1
fnc 0
dl 0
loc 54
rs 10
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
ccs 13
cts 14
cp 0.9286
1
import { isEmpty, values } from 'ramda';
2
import React from 'react';
3
import { DropdownItem, DropdownMenu, DropdownToggle, UncontrolledDropdown } from 'reactstrap';
4
import PropTypes from 'prop-types';
5
import { serverType } from './prop-types';
6
7 1
const propTypes = {
8
  servers: PropTypes.object,
9
  selectedServer: serverType,
10
  history: PropTypes.shape({
11
    push: PropTypes.func,
12
  }),
13
};
14
15 1
const ServersDropdown = (serversExporter) => {
16 4
  const ServersDropdownComp = ({ servers, selectedServer, history }) => {
17 5
    const serversList = values(servers);
18 5
    const loadServer = (id) => history.push(`/server/${id}/list-short-urls/1`);
19
20 5
    const renderServers = () => {
21 5
      if (isEmpty(serversList)) {
22 1
        return <DropdownItem disabled><i>Add a server first...</i></DropdownItem>;
23
      }
24
25 4
      return (
26
        <React.Fragment>
27
          {serversList.map(({ name, id }) => (
28 12
            <DropdownItem key={id} active={selectedServer && selectedServer.id === id} onClick={() => loadServer(id)}>
29
              {name}
30
            </DropdownItem>
31
          ))}
32
          <DropdownItem divider />
33
          <DropdownItem className="servers-dropdown__export-item" onClick={() => serversExporter.exportServers()}>
34
            Export servers
35
          </DropdownItem>
36
        </React.Fragment>
37
      );
38
    };
39
40 5
    return (
41
      <UncontrolledDropdown nav inNavbar>
42
        <DropdownToggle nav caret>Servers</DropdownToggle>
43
        <DropdownMenu right>{renderServers()}</DropdownMenu>
44
      </UncontrolledDropdown>
45
    );
46
  };
47
48 4
  ServersDropdownComp.propTypes = propTypes;
49
50 4
  return ServersDropdownComp;
51
};
52
53
export default ServersDropdown;
54