diff --git a/src/components/todoStuff/todoBoard.js b/src/components/todoStuff/todoBoard.js index ae8a07a..9e95298 100644 --- a/src/components/todoStuff/todoBoard.js +++ b/src/components/todoStuff/todoBoard.js @@ -1,12 +1,18 @@ -import React, { useState } from 'react' +import React from 'react' import TodoCard from './todoCard.js' import styles from './todoBoard.module.css' export default function TodoBoard(props) { - const { columns, cards, userId, categories, onCardClick, namedGroups } = props - const [selectedGroup, setSelectedGroup] = useState(null) + const { + columns, + cards, + userId, + categories, + onCardClick, + selectedGroup, + } = props const clickableTypes = Object.keys(columns).reduce((acc, key) => { const col = columns[key] @@ -16,52 +22,8 @@ export default function TodoBoard(props) { return acc }, []) - const groups = cards.reduce((acc, card) => { - if (!acc.includes(card.group) && card.group) { - acc.push(card.group) - } - return acc - }, []) - - const renderGrouper = () => { - const sg = namedGroups[selectedGroup] - return ( - <> -
- {groups.map((group) => { - const namedGroup = namedGroups[group] - return ( -
{ - setSelectedGroup(group) - }} - > - {namedGroup ? namedGroup.name : group} -
- ) - })} -
{ - setSelectedGroup(null) - }} - > - {'Összes'} -
-
- {sg && sg.description ? ( -
{sg.description}
- ) : null} - - ) - } - return (
- {renderGrouper()}
{Object.keys(columns).map((key) => { const category = columns[key] @@ -69,23 +31,27 @@ export default function TodoBoard(props) {
{category.name}
{cards.map((card, i) => { - if (card.state === key) { - if (selectedGroup && card.group !== selectedGroup) { - return null - } - return ( - - ) - } else { + const shouldHide = + card.state !== key || + (selectedGroup !== null && + selectedGroup !== 'uncat' && + card.group !== selectedGroup) || + (selectedGroup === 'uncat' && card.group !== undefined) + + if (shouldHide) { return null } + + return ( + + ) })}
) diff --git a/src/components/todoStuff/todoBoard.module.css b/src/components/todoStuff/todoBoard.module.css index eb8af1a..7e603fa 100644 --- a/src/components/todoStuff/todoBoard.module.css +++ b/src/components/todoStuff/todoBoard.module.css @@ -21,25 +21,3 @@ .tableCol { flex: 1; } - -.groupDescription { - font-size: 16px; - padding: 4px; -} - -.groupContainer { - display: flex; -} - -.group { - padding: 8px 16px; - cursor: pointer; -} - -.group:hover { - background-color: #333; -} - -.selectedGroup { - background-color: #444; -} diff --git a/src/components/todoStuff/todoTable.js b/src/components/todoStuff/todoTable.js index 01e7ae9..dcff74e 100644 --- a/src/components/todoStuff/todoTable.js +++ b/src/components/todoStuff/todoTable.js @@ -5,7 +5,7 @@ import TodoRow from './todoRow.js' import styles from './todoTable.module.css' export default function TodoBoard(props) { - const { tables, cards, userId, categories, onClick } = props + const { tables, cards, userId, categories, onClick, selectedGroup } = props return (
@@ -21,6 +21,17 @@ export default function TodoBoard(props) {
{table.name}
{tableCards.map((card, i) => { + const shouldHide = + card.state !== key || + (selectedGroup !== null && + selectedGroup !== 'uncat' && + card.group !== selectedGroup) || + (selectedGroup === 'uncat' && card.group !== undefined) + + if (shouldHide) { + return null + } + return ( { console.info('Fetching todos') @@ -83,6 +85,58 @@ export default function Todos() { } }) + const groups = cards.reduce((acc, card) => { + if (!acc.includes(card.group) && card.group) { + acc.push(card.group) + } + return acc + }, []) + + const renderGrouper = () => { + const sg = namedGroups[selectedGroup] + return ( + <> +
+ {groups.map((group) => { + const namedGroup = namedGroups[group] + return ( +
{ + setSelectedGroup(group) + }} + > + {namedGroup ? namedGroup.name : group} +
+ ) + })} +
{ + setSelectedGroup('uncat') + }} + > + {'Kategorizálatlan'} +
+
{ + setSelectedGroup(null) + }} + > + {'Összes'} +
+
+ {sg && sg.description ? ( +
{sg.description}
+ ) : null} + + ) + } + return (
{sidebarCard && ( @@ -112,6 +166,7 @@ export default function Todos() { /> )} + {renderGrouper()}