Skip to content
Snippets Groups Projects
index.tsx 1.57 KiB
Newer Older
import { useEffect, useState } from 'react';

import { subtractTime } from 'timely';
import { getUserActivity, getUserCompletion } from 'adapters/user';

import LoadingScreen from 'components/ui/LoadingScreen';
import CompletionGrid from 'components/layout/CompletionGrid';
import { CompletionProps, parseCompletion } from 'components/ui/Completion';
import BarChart, { ChartItem, parseActivity } from 'components/graphs/BarChart';

import './stats.scss';

export default function Tasks() {
    const [completions, setCompletions] = useState<CompletionProps[]>();
    const [activity, setActivity] = useState<ChartItem[]>();

    useEffect(() => {
        getUserCompletion().then((completion) => setCompletions(parseCompletion(completion)));
        getUserActivity(subtractTime(new Date(), 1, 'week'), new Date()).then((a) => setActivity(parseActivity(a)))
    return (
        (completions && activity)
            ? (
                <div className="stats-page">
                    <div className="content-container">
                        <h1 className="underlined">Stats</h1>
                        <div className="description-container">
                            Here are some of your recent statistics.
                        </div>
                        <h2>Activity</h2>
                        <BarChart unit="h" multiplier={1 / 60 / 60 / 1000} data={activity} />
                        <h2>Completion</h2>
                        <CompletionGrid items={completions} />
            )
            : <LoadingScreen />
    );