Passed
Pull Request — main (#343)
by Alejandro
03:59
created

src/servers/Overview.tsx   A

Complexity

Total Complexity 7
Complexity/F 0

Size

Lines of Code 95
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Test Coverage

Coverage 66.67%

Importance

Changes 0
Metric Value
wmc 7
eloc 84
mnd 7
bc 7
fnc 0
dl 0
loc 95
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
ccs 8
cts 12
cp 0.6667
rs 10
1
import { FC, useEffect } from 'react';
2
import { Card, CardBody, CardHeader, CardText, CardTitle } from 'reactstrap';
3
import { Link } from 'react-router-dom';
4
import { ShortUrlsListParams } from '../short-urls/reducers/shortUrlsListParams';
5
import { ShortUrlsList as ShortUrlsListState } from '../short-urls/reducers/shortUrlsList';
6
import { prettify } from '../utils/helpers/numbers';
7
import { TagsList } from '../tags/reducers/tagsList';
8
import { ShortUrlsTableProps } from '../short-urls/ShortUrlsTable';
9
import { boundToMercureHub } from '../mercure/helpers/boundToMercureHub';
10
import { CreateShortUrlProps } from '../short-urls/CreateShortUrl';
11
import { VisitsOverview } from '../visits/reducers/visitsOverview';
12
import { isServerWithId, SelectedServer } from './data';
13
import './Overview.scss';
14
15
interface OverviewConnectProps {
16
  shortUrlsList: ShortUrlsListState;
17
  listShortUrls: (params: ShortUrlsListParams) => void;
18
  listTags: Function;
19
  tagsList: TagsList;
20
  selectedServer: SelectedServer;
21
  visitsOverview: VisitsOverview;
22
  loadVisitsOverview: Function;
23
}
24
25 1
export const Overview = (
26
  ShortUrlsTable: FC<ShortUrlsTableProps>,
27
  CreateShortUrl: FC<CreateShortUrlProps>,
28 1
) => boundToMercureHub(({
29
  shortUrlsList,
30
  listShortUrls,
31
  listTags,
32
  tagsList,
33
  selectedServer,
34
  loadVisitsOverview,
35
  visitsOverview,
36
}: OverviewConnectProps) => {
37 4
  const { loading, shortUrls } = shortUrlsList;
38 4
  const { loading: loadingTags } = tagsList;
39 4
  const { loading: loadingVisits, visitsCount } = visitsOverview;
40 4
  const serverId = isServerWithId(selectedServer) ? selectedServer.id : '';
41
42 4
  useEffect(() => {
43
    listShortUrls({ itemsPerPage: 5, orderBy: { dateCreated: 'DESC' } });
44
    listTags();
45
    loadVisitsOverview();
46
  }, []);
47
48 4
  return (
49
    <>
50
      <div className="row mb-3">
51
        <div className="col-sm-4">
52
          <Card className="overview__card mb-2" body color="light">
53
            <CardTitle tag="h5" className="overview__card-title">Visits</CardTitle>
54
            <CardText tag="h2">{loadingVisits ? 'Loading...' : prettify(visitsCount)}</CardText>
55
          </Card>
56
        </div>
57
        <div className="col-sm-4">
58
          <Card className="overview__card mb-2" body color="light">
59
            <CardTitle tag="h5" className="overview__card-title">Short URLs</CardTitle>
60
            <CardText tag="h2">
61
              {loading ? 'Loading...' : prettify(shortUrls?.pagination.totalItems ?? 0)}
62
            </CardText>
63
          </Card>
64
        </div>
65
        <div className="col-sm-4">
66
          <Card className="overview__card mb-2" body color="light">
67
            <CardTitle tag="h5" className="overview__card-title">Tags</CardTitle>
68
            <CardText tag="h2">{loadingTags ? 'Loading...' : prettify(tagsList.tags.length)}</CardText>
69
          </Card>
70
        </div>
71
      </div>
72
      <Card className="mb-4">
73
        <CardHeader>
74
          <span className="d-sm-none">Create a short URL</span>
75
          <h5 className="d-none d-sm-inline">Create a short URL</h5>
76
          <Link className="float-right" to={`/server/${serverId}/create-short-url`}>Advanced options &raquo;</Link>
77
        </CardHeader>
78
        <CardBody>
79
          <CreateShortUrl basicMode />
80
        </CardBody>
81
      </Card>
82
      <Card>
83
        <CardHeader>
84
          <span className="d-sm-none">Recently created URLs</span>
85
          <h5 className="d-none d-sm-inline">Recently created URLs</h5>
86
          <Link className="float-right" to={`/server/${serverId}/list-short-urls/1`}>See all &raquo;</Link>
87
        </CardHeader>
88
        <CardBody>
89
          <ShortUrlsTable shortUrlsList={shortUrlsList} selectedServer={selectedServer} className="mb-0" />
90
        </CardBody>
91
      </Card>
92
    </>
93
  );
94
}, () => 'https://shlink.io/new-visit');
95