import { useState } from 'react';
import './App.css';
import { InputTodo } from './components/InputTodo';
import { InCompleteTodos } from './components/IncompleteTodo';
import { CompleteTodos } from './components/CompleteTodos';
export const Todo = () => {
const [incompleteTodos, setIncompleteTodos] = useState([]);
const [completeTodos, setcompleteTodos] = useState([]);
const [todoText, setTodoText] = useState('');
const onChangeTodoText = (event) => setTodoText(event.target.value);
const onClickAdd = () => {
if (todoText === '') return;
const newTodos = [...incompleteTodos, todoText];
setIncompleteTodos(newTodos);
setTodoText('');
};
const onClickDelete = (index) => {
const newTodos = [...incompleteTodos];
newTodos.splice(index, 1);
setIncompleteTodos(newTodos);
};
const onClickComplete = (index) => {
const newInCompleteTodos = [...incompleteTodos];
newInCompleteTodos.splice(index, 1);
const newCompleteTodos = [...completeTodos, incompleteTodos[index]];
setIncompleteTodos(newInCompleteTodos);
setcompleteTodos(newCompleteTodos);
};
const onClickBack = (index) => {
const newCompleteTodos = [...completeTodos];
newCompleteTodos.splice(index, 1);
const newInCompleteTodos = [...incompleteTodos, completeTodos[index]];
setcompleteTodos(newCompleteTodos);
setIncompleteTodos(newInCompleteTodos);
};
const isMaxLimitCompleteTodos = incompleteTodos.length >= 5;
return (
<>
<InputTodo
todoText={todoText}
onChange={onChangeTodoText}
onClick={onClickAdd}
disabled={isMaxLimitCompleteTodos}
/>
{isMaxLimitCompleteTodos && (
<p style=>登録できるTODOの上限は5個です。</p>
)}
<InCompleteTodos
todos={incompleteTodos}
onClickComplete={onClickComplete}
onClickDelete={onClickDelete}
/>
<CompleteTodos todos={completeTodos} onClickBack={onClickBack} />
</>
);
};
export const InCompleteTodos = (props) => {
const { todos, onClickComplete, onClickDelete } = props;
return (
<div className="incomplete-area">
<p className="title">未完了のTODO</p>
<ul>
{todos.map((todo, index) => (
<li key={todo}>
<div class="list-row">
<p class="list-item">{todo}</p>
<button onClick={() => onClickComplete(index)}>完了</button>
<button onClick={() => onClickDelete(index)}>削除</button>
</div>
</li>
))}
</ul>
</div>
);
};
export const CompleteTodos = (props) => {
const { todos, onClickBack } = props;
return (
<div className="complete-area">
<p className="title">完了のTODO</p>
<ul>
{todos.map((todo, index) => (
<li key={todo}>
<div class="list-row">
<p class="list-item">{todo}</p>
<button onClick={() => onClickBack(index)}>戻す</button>
</div>
</li>
))}
</ul>
</div>
);
};
const style = {
backgroundColor: '#c6e5d9',
width: '400px',
height: '30px',
padding: '8px',
margin: '8px',
borderRadius: '8px',
};
export const InputTodo = (props) => {
const { todoText, onChange, onClick, disabled } = props;
return (
<div style={style}>
<input
disabled={disabled}
placeholder="TODOを入力"
value={todoText}
onChange={onChange}
/>
<button disabled={disabled} onClick={onClick}>
追加
</button>
</div>
);
};