Completed
Push — master ( 6ac893...01672b )
by Alejandro
22s queued 10s
created

src/servers/ServersDropdown.js   A

Complexity

Total Complexity 4
Complexity/F 2

Size

Lines of Code 57
Function Count 2

Duplication

Duplicated Lines 0
Ratio 0 %

Test Coverage

Coverage 94.12%

Importance

Changes 0
Metric Value
wmc 4
eloc 47
mnd 2
bc 2
fnc 2
dl 0
loc 57
rs 10
bpm 1
cpm 2
noi 0
c 0
b 0
f 0
ccs 16
cts 17
cp 0.9412

2 Functions

Rating   Name   Duplication   Size   Complexity  
A .render 0 5 1
A .renderServers 0 26 3
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 5
const ServersDropdown = (serversExporter) => class ServersDropdown extends React.Component {
8 5
  static propTypes = {
9
    servers: PropTypes.object,
10
    selectedServer: serverType,
11
    listServers: PropTypes.func,
12
    history: PropTypes.shape({
13
      push: PropTypes.func,
14
    }),
15
  };
16
17 7
  renderServers = () => {
18 7
    const { servers: { list, loading }, selectedServer } = this.props;
19 7
    const servers = values(list);
20 7
    const { push } = this.props.history;
21 7
    const loadServer = (id) => push(`/server/${id}/list-short-urls/1`);
22
23 7
    if (loading) {
24 1
      return <DropdownItem disabled><i>Trying to load servers...</i></DropdownItem>;
25
    }
26
27 6
    if (isEmpty(servers)) {
28 1
      return <DropdownItem disabled><i>Add a server first...</i></DropdownItem>;
29
    }
30
31 5
    return (
32
      <React.Fragment>
33
        {servers.map(({ name, id }) => (
34 15
          <DropdownItem key={id} active={selectedServer && selectedServer.id === id} onClick={() => loadServer(id)}>
35
            {name}
36
          </DropdownItem>
37
        ))}
38
        <DropdownItem divider />
39
        <DropdownItem className="servers-dropdown__export-item" onClick={() => serversExporter.exportServers()}>
40
          Export servers
41
        </DropdownItem>
42
      </React.Fragment>
43
    );
44
  };
45
46 7
  componentDidMount = this.props.listServers;
47
48 7
  render = () => (
49 7
    <UncontrolledDropdown nav inNavbar>
50
      <DropdownToggle nav caret>Servers</DropdownToggle>
51
      <DropdownMenu right>{this.renderServers()}</DropdownMenu>
52
    </UncontrolledDropdown>
53
  );
54
};
55
56
export default ServersDropdown;
57