diff --git a/client/src/components/navigation/Sidebar/index.tsx b/client/src/components/navigation/Sidebar/index.tsx index dc36c1d45904c4cfe080fb77820d50e55dc3016b..a0ec8d50e4666532974e62505987e03ea25c3632 100644 --- a/client/src/components/navigation/Sidebar/index.tsx +++ b/client/src/components/navigation/Sidebar/index.tsx @@ -1,13 +1,11 @@ import Navigation from 'components/navigation/Navigation'; import Avatar from 'components/ui/Avatar'; -import LineGraph from 'components/graphs/LineGraph'; import { NavLink, useHistory } from 'react-router-dom'; import { clearToken, isLoggedIn } from 'adapters/auth'; import './sidebar.scss'; import { useEffect, useState } from 'react'; -import { getCurrentUser, getUser, getUserActivity, User } from 'adapters/user'; +import { getCurrentUser, getUserActivity, User } from 'adapters/user'; import BarChart, { ChartItem } from 'components/graphs/BarChart'; -import { Activity } from 'adapters/util'; import LoadingScreen from 'components/ui/LoadingScreen'; interface Props { diff --git a/client/src/pages/Tasks/TaskStart/index.tsx b/client/src/pages/Tasks/TaskStart/index.tsx index 1b851c07fe344feea19b8c632d00bb354f2ffd64..9489f19fa75d983e065f88f0dc63c9f27e4ce4b3 100644 --- a/client/src/pages/Tasks/TaskStart/index.tsx +++ b/client/src/pages/Tasks/TaskStart/index.tsx @@ -1,3 +1,63 @@ -export default function TaskStart() { - return (<></>); +import './task-start.scss'; +import Tag from 'components/ui/Tag'; +import DetailGrid from 'components/layout/DetailGrid'; +import ButtonLink from 'components/navigation/ButtonLink'; +import { useHistory, useParams } from 'react-router'; +import { useEffect, useState } from 'react'; +import { getTask, StatusColors, Task } from 'adapters/task'; +import { getProject, Project } from 'adapters/project'; +import { getTeam } from 'adapters/team'; +import LoadingScreen from 'components/ui/LoadingScreen'; + +export interface Params { + taskId: string; +} + +export default function TaskDetail() { + const { taskId } = useParams<Params>(); + const history = useHistory(); + const [task, setTask] = useState<Task>(); + const [project, setProject] = useState<Project>(); + const [teamNames, setTeamNames] = useState<string[]>([]); + + useEffect(() => { + getTask(taskId).then((task) => { + + setTask(task); + getProject(task.project).then((project) => { + setProject(project); + project.teams.forEach((teamId) => + getTeam(teamId).then((team) => { + setTeamNames(state => [...state, team.name]) + } + )); + }); + }).catch(() => history.goBack()); + }, [taskId, history]); + + if (task) { + return ( + <div className={'tasks-detail-page theme-' + StatusColors.get(task.status)}> + <div className="content-container"> + <Tag label={task.status} color={StatusColors.get(task.status)} /> + <h1>{task.name}</h1> + + <div className="description-container"> + <h2> + Description + </h2> + <p> + {task.text} + </p> + </div> + + <DetailGrid details={[ + { icon: 'folder', title: 'Project', label: project?.name ?? 'Loading...' }, + { icon: 'group', title: 'Teams', label: teamNames.join(', ') }]} /> + </div> + </div> + ); + + } + return <LoadingScreen />; } \ No newline at end of file diff --git a/client/src/pages/Tasks/TaskStart/task-start.scss b/client/src/pages/Tasks/TaskStart/task-start.scss new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391