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()}