diff --git a/src/components/todoStuff/todo.module.css b/src/components/todoStuff/todo.module.css new file mode 100644 index 0000000..79f61a5 --- /dev/null +++ b/src/components/todoStuff/todo.module.css @@ -0,0 +1,22 @@ +.groupDescription { + font-size: 16px; + padding: 4px; +} + +.groupContainer { + display: flex; +} + +.group { + padding: 8px 16px; + cursor: pointer; + user-select: none; +} + +.group:hover { + background-color: #333; +} + +.selectedGroup { + background-color: #444; +} diff --git a/src/components/todoStuff/todoBoard.js b/src/components/todoStuff/todoBoard.js index 36d0abd..9e95298 100644 --- a/src/components/todoStuff/todoBoard.js +++ b/src/components/todoStuff/todoBoard.js @@ -5,7 +5,14 @@ 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, + selectedGroup, + } = props const clickableTypes = Object.keys(columns).reduce((acc, key) => { const col = columns[key] @@ -24,21 +31,27 @@ export default function TodoBoard(props) {
{category.name}
{cards.map((card, i) => { - if (card.state === key) { - // TODO: determine if clickable here - 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/todoCard.js b/src/components/todoStuff/todoCard.js index 051832a..7dd8313 100644 --- a/src/components/todoStuff/todoCard.js +++ b/src/components/todoStuff/todoCard.js @@ -4,12 +4,15 @@ import styles from './todoCard.module.css' export default function TodoCard(props) { const { categories, onClick, userId } = props - const { name, category, points, votes, id } = props.cardData + const { name, category, points, votes, id, group } = props.cardData const voted = votes.includes(userId) 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/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') @@ -37,6 +40,7 @@ export default function Todos() { const setTodos = (data) => { setCategories(data.todos.categories) + setGroups(data.todos.groups) setUserId(data.userId) setCards(data.todos.cards) @@ -81,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 && ( @@ -110,6 +166,7 @@ export default function Todos() { /> )} + {renderGrouper()}