Completed
Pull Request — master (#238)
by Alejandro
09:25
created

src/short-urls/helpers/ShortUrlsRowMenu.js   A

Complexity

Total Complexity 1
Complexity/F 0

Size

Lines of Code 96
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 1
eloc 91
mnd 1
bc 1
fnc 0
dl 0
loc 96
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
ccs 14
cts 14
cp 1
rs 10
1
import { faImage as pictureIcon } from '@fortawesome/free-regular-svg-icons';
2
import {
3
  faTags as tagsIcon,
4
  faChartPie as pieChartIcon,
5
  faEllipsisV as menuIcon,
6
  faQrcode as qrIcon,
7
  faMinusCircle as deleteIcon,
8
  faEdit as editIcon,
9
  faLink as linkIcon,
10
} from '@fortawesome/free-solid-svg-icons';
11
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
12
import React from 'react';
13
import { ButtonDropdown, DropdownItem, DropdownMenu, DropdownToggle } from 'reactstrap';
14
import { serverType } from '../../servers/prop-types';
15
import { shortUrlType } from '../reducers/shortUrlsList';
16
import { useToggle } from '../../utils/helpers/hooks';
17
import PreviewModal from './PreviewModal';
18
import QrCodeModal from './QrCodeModal';
19
import VisitStatsLink from './VisitStatsLink';
20
import './ShortUrlsRowMenu.scss';
21
22 1
const propTypes = {
23
  selectedServer: serverType,
24
  shortUrl: shortUrlType,
25
};
26
27 1
const ShortUrlsRowMenu = (DeleteShortUrlModal, EditTagsModal, EditMetaModal, EditShortUrlModal, ForServerVersion) => {
28 8
  const ShortUrlsRowMenuComp = ({ shortUrl, selectedServer }) => {
29 14
    const [ isOpen, toggle ] = useToggle(false);
30 14
    const [ isQrModalOpen, toggleQrCode ] = useToggle(false);
31 14
    const [ isPreviewModalOpen, togglePreview ] = useToggle(false);
32 14
    const [ isTagsModalOpen, toggleTags ] = useToggle(false);
33 14
    const [ isMetaModalOpen, toggleMeta ] = useToggle(false);
34 14
    const [ isDeleteModalOpen, toggleDelete ] = useToggle(false);
35 14
    const [ isEditModalOpen, toggleEdit ] = useToggle(false);
36 14
    const completeShortUrl = shortUrl && shortUrl.shortUrl ? shortUrl.shortUrl : '';
37
38 14
    return (
39
      <ButtonDropdown toggle={toggle} isOpen={isOpen}>
40
        <DropdownToggle size="sm" caret outline className="short-urls-row-menu__dropdown-toggle">
41
          &nbsp;<FontAwesomeIcon icon={menuIcon} />&nbsp;
42
        </DropdownToggle>
43
        <DropdownMenu right>
44
          <DropdownItem tag={VisitStatsLink} selectedServer={selectedServer} shortUrl={shortUrl}>
45
            <FontAwesomeIcon icon={pieChartIcon} fixedWidth /> Visit stats
46
          </DropdownItem>
47
48
          <DropdownItem onClick={toggleTags}>
49
            <FontAwesomeIcon icon={tagsIcon} fixedWidth /> Edit tags
50
          </DropdownItem>
51
          <EditTagsModal shortUrl={shortUrl} isOpen={isTagsModalOpen} toggle={toggleTags} />
52
53
          <ForServerVersion minVersion="1.18.0">
54
            <DropdownItem onClick={toggleMeta}>
55
              <FontAwesomeIcon icon={editIcon} fixedWidth /> Edit metadata
56
            </DropdownItem>
57
            <EditMetaModal shortUrl={shortUrl} isOpen={isMetaModalOpen} toggle={toggleMeta} />
58
          </ForServerVersion>
59
60
          <ForServerVersion minVersion="2.1.0">
61
            <DropdownItem onClick={toggleEdit}>
62
              <FontAwesomeIcon icon={linkIcon} fixedWidth /> Edit long URL
63
            </DropdownItem>
64
            <EditShortUrlModal shortUrl={shortUrl} isOpen={isEditModalOpen} toggle={toggleEdit} />
65
          </ForServerVersion>
66
67
          <DropdownItem onClick={toggleQrCode}>
68
            <FontAwesomeIcon icon={qrIcon} fixedWidth /> QR code
69
          </DropdownItem>
70
          <QrCodeModal url={completeShortUrl} isOpen={isQrModalOpen} toggle={toggleQrCode} />
71
72
          <ForServerVersion maxVersion="1.x">
73
            <DropdownItem onClick={togglePreview}>
74
              <FontAwesomeIcon icon={pictureIcon} fixedWidth /> Preview
75
            </DropdownItem>
76
            <PreviewModal url={completeShortUrl} isOpen={isPreviewModalOpen} toggle={togglePreview} />
77
          </ForServerVersion>
78
79
          <DropdownItem divider />
80
81
          <DropdownItem className="short-urls-row-menu__dropdown-item--danger" onClick={toggleDelete}>
82
            <FontAwesomeIcon icon={deleteIcon} fixedWidth /> Delete short URL
83
          </DropdownItem>
84
          <DeleteShortUrlModal shortUrl={shortUrl} isOpen={isDeleteModalOpen} toggle={toggleDelete} />
85
        </DropdownMenu>
86
      </ButtonDropdown>
87
    );
88
  };
89
90 8
  ShortUrlsRowMenuComp.propTypes = propTypes;
91
92 8
  return ShortUrlsRowMenuComp;
93
};
94
95
export default ShortUrlsRowMenu;
96