Completed
Pull Request — master (#263)
by Alejandro
05:21
created

src/servers/ServersDropdown.js   A

Complexity

Total Complexity 1
Complexity/F 0

Size

Lines of Code 56
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Test Coverage

Coverage 92.31%

Importance

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