import React, { useState, useEffect } from 'react'
import LoadingIndicator from '../LoadingIndicator.js'
import TodoBoard from './todoBoard.js'
import TodoTable from './todoTable.js'
import constants from '../../constants.json'
const byVotes = (a, b) => {
return b.votes.length - a.votes.length
}
export default function Todos() {
const [loaded, setLoaded] = useState(false)
const [columns, setColumns] = useState(null)
const [boardCards, setBoardCards] = useState(null)
const [tables, setTables] = useState(null)
const [tableCards, setTableCards] = useState(null)
const [categories, setCategories] = useState(null)
const [userId, setUserId] = useState(null)
useEffect(() => {
console.info('Fetching todos')
fetch(`${constants.apiUrl}todos`, {
credentials: 'include',
})
.then((resp) => {
return resp.json()
})
.then((data) => {
setTodos(data)
})
}, [])
const setTodos = (data) => {
setCategories(data.todos.categories)
setUserId(data.userId)
let bCards = []
let tCards = []
data.todos.cards.forEach((card) => {
if (data.todos.columns[card.state].type === 'table') {
tCards.push(card)
} else {
bCards.push(card)
}
})
setTableCards(tCards.sort(byVotes))
setBoardCards(bCards.sort(byVotes))
let cols = {}
let tables = {}
Object.keys(data.todos.columns).forEach((key) => {
const col = data.todos.columns[key]
if (col.type !== 'table') {
cols = {
...cols,
[key]: col,
}
} else {
tables = {
...tables,
[key]: col,
}
}
})
setColumns(cols)
setTables(tables)
setLoaded(true)
}
const onCardClick = (id) => {
fetch(`${constants.apiUrl}todos?id=${id}`, {
credentials: 'include',
})
.then((resp) => {
return resp.json()
})
.then((data) => {
setTodos(data)
})
}
if (!loaded) {
return