src/short-urls/helpers/CreateShortUrlResult.js   A
last analyzed

Complexity

Total Complexity 2
Complexity/F 0

Size

Lines of Code 68
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Test Coverage

Coverage 92.86%

Importance

Changes 0
Metric Value
wmc 2
eloc 59
mnd 2
bc 2
fnc 0
dl 0
loc 68
ccs 13
cts 14
cp 0.9286
rs 10
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
1
import { faCopy as copyIcon } from '@fortawesome/free-regular-svg-icons';
2
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3
import { isNil } from 'ramda';
4
import React, { useEffect } from 'react';
5
import { CopyToClipboard } from 'react-copy-to-clipboard';
6
import { Card, CardBody, Tooltip } from 'reactstrap';
7
import PropTypes from 'prop-types';
8
import { createShortUrlResultType } from '../reducers/shortUrlCreation';
9
import './CreateShortUrlResult.scss';
10
11 1
const propTypes = {
12
  resetCreateShortUrl: PropTypes.func,
13
  error: PropTypes.bool,
14
  result: createShortUrlResultType,
15
};
16
17 1
const CreateShortUrlResult = (useStateFlagTimeout) => {
18 1
  const CreateShortUrlResultComp = ({ error, result, resetCreateShortUrl }) => {
19 4
    const [ showCopyTooltip, setShowCopyTooltip ] = useStateFlagTimeout();
20
21 4
    useEffect(() => {
22
      resetCreateShortUrl();
23
    }, []);
24
25 4
    if (error) {
26 1
      return (
27
        <Card body color="danger" inverse className="bg-danger mt-3">
28
          An error occurred while creating the URL :(
29
        </Card>
30
      );
31
    }
32
33 3
    if (isNil(result)) {
34 1
      return null;
35
    }
36
37 2
    const { shortUrl } = result;
38
39 2
    return (
40
      <Card inverse className="bg-main mt-3">
41
        <CardBody>
42
          <b>Great!</b> The short URL is <b>{shortUrl}</b>
43
44
          <CopyToClipboard text={shortUrl} onCopy={setShowCopyTooltip}>
45
            <button
46
              className="btn btn-light btn-sm create-short-url-result__copy-btn"
47
              id="copyBtn"
48
              type="button"
49
            >
50
              <FontAwesomeIcon icon={copyIcon} /> Copy
51
            </button>
52
          </CopyToClipboard>
53
54
          <Tooltip placement="left" isOpen={showCopyTooltip} target="copyBtn">
55
            Copied!
56
          </Tooltip>
57
        </CardBody>
58
      </Card>
59
    );
60
  };
61
62 1
  CreateShortUrlResultComp.propTypes = propTypes;
63
64 1
  return CreateShortUrlResultComp;
65
};
66
67
export default CreateShortUrlResult;
68