diff --git a/src/components/todoStuff/todoBoard.js b/src/components/todoStuff/todoBoard.js index 36d0abd..ae8a07a 100644 --- a/src/components/todoStuff/todoBoard.js +++ b/src/components/todoStuff/todoBoard.js @@ -1,11 +1,12 @@ -import React from 'react' +import React, { useState } from 'react' import TodoCard from './todoCard.js' import styles from './todoBoard.module.css' export default function TodoBoard(props) { - const { columns, cards, userId, categories, onCardClick } = props + const { columns, cards, userId, categories, onCardClick, namedGroups } = props + const [selectedGroup, setSelectedGroup] = useState(null) const clickableTypes = Object.keys(columns).reduce((acc, key) => { const col = columns[key] @@ -15,8 +16,52 @@ 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] @@ -25,7 +70,9 @@ export default function TodoBoard(props) {
{category.name}
{cards.map((card, i) => { if (card.state === key) { - // TODO: determine if clickable here + if (selectedGroup && card.group !== selectedGroup) { + return null + } return ( { onClick(props.cardData) }} @@ -31,7 +34,7 @@ export default function TodoCard(props) {
-
+
{`Votes: ${votes.length}`}
{points}
diff --git a/src/components/todoStuff/todoCard.module.css b/src/components/todoStuff/todoCard.module.css index 86cb918..c015768 100644 --- a/src/components/todoStuff/todoCard.module.css +++ b/src/components/todoStuff/todoCard.module.css @@ -1,5 +1,4 @@ .card { - border: 2px solid #99f; border-radius: 2px; padding: 5px; margin: 6px 3px; @@ -7,7 +6,7 @@ } .voted { - border: 2px solid #cf9; + color: #cf9; } .card:hover { @@ -26,8 +25,8 @@ } .category { - word-break: break-all; font-size: 10px; + white-space: nowrap; } .numbers { diff --git a/src/components/todoStuff/todoRow.js b/src/components/todoStuff/todoRow.js index cba5bee..13ad19a 100644 --- a/src/components/todoStuff/todoRow.js +++ b/src/components/todoStuff/todoRow.js @@ -4,7 +4,7 @@ import styles from './todoRow.module.css' export default function TodoRow(props) { const { categories, userId, onClick } = props - const { name, category, votes, id } = props.rowData + const { name, category, votes, id, group } = props.rowData const voted = votes.includes(userId) return ( @@ -12,7 +12,10 @@ export default function TodoRow(props) { onClick={() => { onClick(props.rowData) }} - className={`${styles.row} ${voted && styles.voted}`} + className={styles.row} + style={{ + border: `2px solid ${group || '#99f'}`, + }} >
{`#${id}`}
{name}
@@ -30,7 +33,9 @@ export default function TodoRow(props) { {categories[category].name}
-
{`Votes: ${votes.length}`}
+
{`Votes: ${votes.length}`}
) } diff --git a/src/components/todoStuff/todoRow.module.css b/src/components/todoStuff/todoRow.module.css index 90085de..1e8c573 100644 --- a/src/components/todoStuff/todoRow.module.css +++ b/src/components/todoStuff/todoRow.module.css @@ -33,7 +33,7 @@ } .voted { - border: 2px solid #cf9; + color: #cf9; } .catName { @@ -41,6 +41,6 @@ } .category { - word-break: break-all; font-size: 10px; + white-space: nowrap; } diff --git a/src/components/todoStuff/todoSidebar.js b/src/components/todoStuff/todoSidebar.js index c57c6f2..ee6c41e 100644 --- a/src/components/todoStuff/todoSidebar.js +++ b/src/components/todoStuff/todoSidebar.js @@ -20,6 +20,7 @@ export default function Todos({ card, userId, categories, columns, voteOn }) { color: 'white', borderRadius: '2px', padding: '0px 2px', + whiteSpace: 'nowrap', }} > {categories[category].name} diff --git a/src/components/todoStuff/todos.js b/src/components/todoStuff/todos.js index 3388cb1..d2b808c 100644 --- a/src/components/todoStuff/todos.js +++ b/src/components/todoStuff/todos.js @@ -21,6 +21,7 @@ export default function Todos() { const [categories, setCategories] = useState(null) const [userId, setUserId] = useState(null) const [sidebarCard, setSidebarCard] = useState(null) + const [groups, setGroups] = useState(null) useEffect(() => { console.info('Fetching todos') @@ -37,6 +38,7 @@ export default function Todos() { const setTodos = (data) => { setCategories(data.todos.categories) + setGroups(data.todos.groups) setUserId(data.userId) setCards(data.todos.cards) @@ -122,6 +124,7 @@ export default function Todos() { userId={userId} categories={categories} onCardClick={onClick} + namedGroups={groups} />