diff --git a/src/components/TodoItem.tsx b/src/components/TodoItem.tsx index 19eda7b..d25a3de 100644 --- a/src/components/TodoItem.tsx +++ b/src/components/TodoItem.tsx @@ -9,8 +9,8 @@ import TextField from "@mui/material/TextField"; import DeleteOutlined from "@mui/icons-material/DeleteOutlined"; import { TaskItemT } from "../types"; -import { useAppDispatch } from "../hooks"; -import { markDone, remove } from "../store/slices/todo"; +import { useAppDispatch, useInputValue } from "../hooks"; +import { updateText, markDone, remove } from "../store/slices/todo"; export type TodoItemProps = { task: TaskItemT; index: number }; @@ -20,6 +20,9 @@ export const TodoItem: React.FC = ({ task, index }) => { const dispatch = useAppDispatch(); const [editing, setEditing] = useState(false); + const { value, onChange, submit } = useInputValue(text, (submitValue) => + dispatch(updateText({ index, text: submitValue })) + ); return ( @@ -31,9 +34,13 @@ export const TodoItem: React.FC = ({ task, index }) => { setEditing(false)} + onChange={onChange} + onBlur={() => { + setEditing(false); + submit(); + }} multiline /> ) : ( diff --git a/src/store/slices/todo.ts b/src/store/slices/todo.ts index 359ccb8..3c459ce 100644 --- a/src/store/slices/todo.ts +++ b/src/store/slices/todo.ts @@ -3,16 +3,25 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; import { TaskItemT } from "../../types"; const initialState: { tasks: TaskItemT[] } = { - tasks: [], + tasks: [ + { done: true, id: 1, text: "hello" }, + { done: false, id: 2, text: "goodbye" }, + ], }; export const todoSlice = createSlice({ name: "todo", - initialState, + initialState: initialState, reducers: { add: (state, { payload }: PayloadAction) => { state.tasks.push(payload); }, + updateText: ( + state, + { payload }: PayloadAction<{ index: number; text: string }> + ) => { + state.tasks[payload.index].text = payload.text; + }, markDone: ( state, { payload }: PayloadAction<{ index: number; value: boolean }> @@ -20,11 +29,11 @@ export const todoSlice = createSlice({ state.tasks[payload.index].done = payload.value; }, remove: (state, { payload }: PayloadAction) => { - state.tasks.splice(payload); + state.tasks.splice(payload, 1); }, }, }); -export const { add, markDone, remove } = todoSlice.actions; +export const { add, updateText, markDone, remove } = todoSlice.actions; export default todoSlice.reducer;