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

import { getTeams } from 'adapters/team';
import { getProject } from 'adapters/project';
import { getPossibleTasks } from 'adapters/task';
import { getCurrentUser, getUserTasks, User } from 'adapters/user';

import Task, { TaskProps } from 'components/ui/Task';
import LoadingScreen from 'components/ui/LoadingScreen';

import './tasks.scss';
    const [user, setUser] = useState<User>();
    const [tasks, setTasks] = useState<TaskProps[]>([]);
    const [possibleTasks, setPossibleTasks] = useState<TaskProps[]>([]);
    useEffect(() => {
        getCurrentUser().then((user) => {
            getUserTasks().then((tasks) => {
                tasks.forEach(task => {
                    getProject(task.project).then((project) => {
                        setTasks(state => [...state, {
                            task: task,
                            subtitle: task.assigned.find(assignee => assignee.user === user.id)?.time + ' min',
                            color: project.color
                        }]);
                    })
                })
            })
                getTeams().then((teams) => {
                    let roles = teams.map(t => t.role);
                    tasks.filter(task =>  
                        task.requirements.find(r => roles.indexOf(r.role) >= 0)
                    ).forEach(task => {
                        getProject(task.project).then((project) => {
                            setPossibleTasks(state => [...state, {
                                task: task,
                                subtitle: 'Suggested task - add yourself as assignee to do it.',
                                color: project.color
                            }]);
                        })
    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) => (
                                                <Task key={task.task.id} {...task} />
                                            ))
                                        }
                                    </div>
                                )
                                : (<div className="task-error">No open tasks found</div>)
                            possibleTasks.length > 0
                                ? (
                                    <div className="tasks-list">
                                        {
                                            possibleTasks.map((task) => (
                                                <Task key={task.task.id} {...task} />
                                            ))
                                        }
                                    </div>
                                )
                                : (<div className="task-error">You don't fit the requirements for any other tasks</div>)
    } else {
        return <LoadingScreen />