Skip to content
Snippets Groups Projects
index.tsx 3.94 KiB
Newer Older
import { useEffect, useState } from 'react';
import { getTeams, Team } from 'adapters/team';
import { getPossibleTasks, Task } from 'adapters/task';
import { getCurrentUser, getUserTasks, User } from 'adapters/user';
import TaskComponent from 'components/ui/Task';
import LoadingScreen from 'components/ui/LoadingScreen';

import './tasks.scss';
    const [user, setUser] = useState<User>();
    const [teams, setTeams] = useState<Team[]>();
    const [tasks, setTasks] = useState<Task[]>([]);
    const [possibleTasks, setPossibleTasks] = useState<Task[]>([]);
    sessionStorage.setItem('task-return-location', `/tasks`);

    useEffect(() => {
        getCurrentUser().then(setUser);
        getUserTasks().then(setTasks);
        getTeams().then(setTeams);
        getPossibleTasks().then(setPossibleTasks);
    const acceptableTasks = possibleTasks
        .filter(task =>
            !task.assigned.some(ass => ass.user === user?.id)
            && task.requirements.some(
               req => teams?.some(team => team.role === req.role)
            )
        );

    if (user) {
        return (
            <div className="tasks-page">
                <div className="content-container">
                    <section className="intro-section">
                        <h1 className="underlined">Tasks</h1>
                    </section>
                    <p>Hey {user.realname ?? user.username}, you have <strong>{tasks.length} {tasks.length > 1 ? 'tasks' : 'task'}</strong>.</p>
                    <section className="tasks-container">
                        {
                            tasks.length > 0
                                ? (
                                    <div className="tasks-list">
                                        {
                                            tasks
                                                .map((task) => (
                                                    <TaskComponent
                                                        key={task.id}
                                                        task={task}
                                                        subtitle={
                                                            task.assigned
                                                                .find(assignee => assignee.user === user.id)?.time
                                                            + ' min'
                                                        }
                                                    />
                                                ))
                                        }
                                    </div>
                                )
                                : (<div className="task-error">No open tasks found</div>)
                            acceptableTasks.length > 0
                                ? (
                                    <div className="tasks-list">
                                        {
                                            acceptableTasks.map((task) => (
                                                <TaskComponent
                                                    key={task.id}
                                                    task={task}
                                                    subtitle={'Suggested task - add yourself as assignee to do it.'}
                                                />
                                            ))
                                        }
                                    </div>
                                )
                                : (<div className="task-error">You don't fit the requirements for any other tasks</div>)
    } else {
        return <LoadingScreen />