import {createStore} from "redux"
const form = document.querySelector("form")
const input = document.querySelector("input")
const ul = document.querySelector("ul")
const ADD_TODO = "ADD_TODO"
const DELETE_TODO = "DELETE_TODO"
const addToDo = text => {
return {
type: ADD_TODO,
text
};
};
const deleteToDo = id => {
return {
type: DELETE_TODO,
id
};
};
const reducer = (state =[], action) => {
switch (action.type) {
case ADD_TODO:
const newToDoObj = { text: action.text ,id: Date.now()}
return [...state, newToDoObj]
case DELETE_TODO:
const cleaned = state.filter(toDo => toDo.id !== action.id);
return cleaned;
default:
return []
}
}
const store = createStore(reducer)
store.subscribe(() => console.log(store.getState()))
const onSubmit = (e) => {
e.preventDefault()
const toDo = input.value
input.value = ""
dispatchAddToDo(toDo)
}
const dispatchAddToDo = (text) => {
store.dispatch(addToDo(text))
}
const dispatchDeleteToDo = (e) => {
console.log(e.target.parentNode.id)
const id = parseInt(e.target.parentNode.id)
store.dispatch(deleteToDo(id))
}
const paintToDos = () => {
const toDos = store.getState()
console.log(toDos,"+++++++++")
ul.innerHTML = ''
toDos.forEach(toDo => {
const li = document.createElement('li')
const button = document.createElement('button')
button.addEventListener("click", dispatchDeleteToDo)
li.id = toDo.id
li.innerText = toDo.text
ul.appendChild(li)
li.appendChild(button)
button.innerText = "삭제"
})
}
store.subscribe(paintToDos)
form.addEventListener("submit", onSubmit)