import { Box, Flex } from "reflexbox/styled-components"; import React, { useState, useEffect } from "react"; import formatDate from "date-fns/format"; import { NextPage } from "next"; import Link from "next/link"; import axios from "axios"; import { getAxiosConfig, removeProtocol } from "../utils"; import { Button, NavButton } from "../components/Button"; import { Col, RowCenterV } from "../components/Layout"; import { Area, Bar, Pie } from "../components/Charts"; import PageLoading from "../components/PageLoading"; import AppWrapper from "../components/AppWrapper"; import Text, { H1, H2, H4, Span } from "../components/Text"; import Divider from "../components/Divider"; import { useStoreState } from "../store"; import ALink from "../components/ALink"; import { API, Colors } from "../consts"; interface Props { domain?: string; id?: string; } const StatsPage: NextPage = ({ domain, id }) => { const { isAuthenticated } = useStoreState(s => s.auth); const [loading, setLoading] = useState(true); const [error, setError] = useState(false); const [data, setData] = useState(); const [period, setPeriod] = useState("lastDay"); const stats = data && data[period]; useEffect(() => { if (!id) return; axios .get(`${API.STATS}?id=${id}&domain=${domain}`, getAxiosConfig()) .then(({ data }) => { setLoading(false); setError(!data); setData(data); }) .catch(() => { setLoading(false); setError(true); }); }, []); let errorMessage; if (!isAuthenticated) { // TODO: use icons errorMessage =

You need to login to view stats.

; } if (!id || error) { // TODO: use icons errorMessage =

Couldn't get stats.

; } const loader = loading && ; const total = stats && stats.views.reduce((sum, view) => sum + view, 0); const periodText = period.includes("last") ? `the last ${period.replace("last", "").toLocaleLowerCase()}` : "all time"; return ( {errorMessage || loader || (data && (

Stats for:{" "} {removeProtocol(data.shortLink)}

{data.target.length > 80 ? `${data.target .split("") .slice(0, 80) .join("")}...` : data.target}

Total clicks: {data.total}

{[ ["allTime", "All Time"], ["lastMonth", "Month"], ["lastWeek", "Week"], ["lastDay", "Day"] ].map(([p, n]) => ( setPeriod(p as any)} key={p} > {n} ))}

{total} {" "} tracked clicks in {periodText}.

Last update in{" "} {formatDate(new Date(data.updatedAt), "hh:mm aa")} {total > 0 && ( <>

Referrals.

Browsers.

Country.

OS.

)} ))}
); }; StatsPage.getInitialProps = ({ query }) => { return Promise.resolve(query); }; StatsPage.defaultProps = { domain: "", id: "" }; export default StatsPage;