From 6ed71eb8f86989da8ad6ee7e25e4b948dc87671a Mon Sep 17 00:00:00 2001 From: kjuulh Date: Mon, 15 Nov 2021 19:26:48 +0100 Subject: [PATCH] Add sections --- src/client/src/components/todos/addTodo.tsx | 3 +- .../todos/collapsed/addTodoForm.tsx | 5 +- src/client/src/components/todos/todoList.tsx | 8 ++- src/client/src/pages/index.tsx | 50 +++++++++++++++++-- 4 files changed, 58 insertions(+), 8 deletions(-) diff --git a/src/client/src/components/todos/addTodo.tsx b/src/client/src/components/todos/addTodo.tsx index 5020210..41e6250 100644 --- a/src/client/src/components/todos/addTodo.tsx +++ b/src/client/src/components/todos/addTodo.tsx @@ -4,7 +4,7 @@ import { AddTodoForm } from "@src/components/todos/collapsed/addTodoForm"; import { CollapsedState } from "@src/components/todos/collapsed/collapsedState"; import { useCreateTodo } from "@src/presentation/hooks/socketHooks"; -export function AddTodo(props: {}) { +export function AddTodo(props: { project: string }) { const { createTodo } = useCreateTodo(); const [collapsed, setCollapsed] = useState( @@ -21,6 +21,7 @@ export function AddTodo(props: {}) { return ( { createTodo(todoName, project); }} diff --git a/src/client/src/components/todos/collapsed/addTodoForm.tsx b/src/client/src/components/todos/collapsed/addTodoForm.tsx index 132a371..9a347e0 100644 --- a/src/client/src/components/todos/collapsed/addTodoForm.tsx +++ b/src/client/src/components/todos/collapsed/addTodoForm.tsx @@ -3,9 +3,10 @@ import { FC, useState } from "react"; export const AddTodoForm: FC<{ onAdd: (todoName: string, project: string) => void; onClose: () => void; -}> = ({ onAdd, onClose }) => { + project: string; +}> = ({ onAdd, onClose, ...props }) => { const [todoName, setTodoName] = useState(""); - const [project, setProject] = useState(""); + const [project, setProject] = useState(props.project); return (
{ +export const TodoList = (props: { + todos: Todo[]; + hideDone: boolean; + project: string; +}) => { const { updateTodoState } = useUpdateTodoState(); return ( @@ -23,7 +27,7 @@ export const TodoList = (props: { todos: Todo[]; hideDone: boolean }) => { ))} - + ); }; diff --git a/src/client/src/pages/index.tsx b/src/client/src/pages/index.tsx index ca4971d..07b209d 100644 --- a/src/client/src/pages/index.tsx +++ b/src/client/src/pages/index.tsx @@ -1,15 +1,59 @@ import { PageHeading } from "@src/components/common/headings/pageHeading"; import { TodoList } from "@src/components/todos"; import { useSelectInboxTodos } from "@src/presentation/hooks/socketHooks"; +import { ProjectsHeading } from "@src/components/common/headings/projectsHeading"; +import { AddTodo } from "@src/components/todos/addTodo"; + +const groupByProjects = (arr) => { + if (!arr) { + return {}; + } + const criteria = "project"; + + return arr.reduce(function (acc, currentValue) { + const currentValueElement = currentValue[criteria] || "inbox"; + + if (!acc[currentValueElement]) { + acc[currentValueElement] = []; + } + acc[currentValueElement].push(currentValue); + return acc; + }, {}); +}; const HomePage = () => { const { todos, loading } = useSelectInboxTodos(); + const groupedTodos = groupByProjects(todos); + const sections = Object.keys(groupedTodos) + .filter((s) => s !== "inbox") + .sort(); return (
-
- - +
+ {groupedTodos["inbox"] && ( +
+ + +
+ )} + {sections && + sections.map((section) => ( +
+ + +
+ ))} + {!loading && todos && todos.length === 0 && ( +
+ + +
+ )}
);