Made task updating working, fixed task removal (i almost fogot how to use array mutationing methods)

This commit is contained in:
Dmitriy Shishkov 2021-10-17 17:26:16 +03:00
parent 32d388423b
commit 91fb0d873a
No known key found for this signature in database
GPG Key ID: 14358F96FCDD8060
2 changed files with 24 additions and 8 deletions

View File

@ -9,8 +9,8 @@ import TextField from "@mui/material/TextField";
import DeleteOutlined from "@mui/icons-material/DeleteOutlined"; import DeleteOutlined from "@mui/icons-material/DeleteOutlined";
import { TaskItemT } from "../types"; import { TaskItemT } from "../types";
import { useAppDispatch } from "../hooks"; import { useAppDispatch, useInputValue } from "../hooks";
import { markDone, remove } from "../store/slices/todo"; import { updateText, markDone, remove } from "../store/slices/todo";
export type TodoItemProps = { task: TaskItemT; index: number }; export type TodoItemProps = { task: TaskItemT; index: number };
@ -20,6 +20,9 @@ export const TodoItem: React.FC<TodoItemProps> = ({ task, index }) => {
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();
const [editing, setEditing] = useState(false); const [editing, setEditing] = useState(false);
const { value, onChange, submit } = useInputValue(text, (submitValue) =>
dispatch(updateText({ index, text: submitValue }))
);
return ( return (
<ListItem> <ListItem>
@ -31,9 +34,13 @@ export const TodoItem: React.FC<TodoItemProps> = ({ task, index }) => {
<TextField <TextField
fullWidth fullWidth
variant="standard" variant="standard"
value={text} value={value}
autoFocus={true} autoFocus={true}
onBlur={() => setEditing(false)} onChange={onChange}
onBlur={() => {
setEditing(false);
submit();
}}
multiline multiline
/> />
) : ( ) : (

View File

@ -3,16 +3,25 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit";
import { TaskItemT } from "../../types"; import { TaskItemT } from "../../types";
const initialState: { tasks: TaskItemT[] } = { const initialState: { tasks: TaskItemT[] } = {
tasks: [], tasks: [
{ done: true, id: 1, text: "hello" },
{ done: false, id: 2, text: "goodbye" },
],
}; };
export const todoSlice = createSlice({ export const todoSlice = createSlice({
name: "todo", name: "todo",
initialState, initialState: initialState,
reducers: { reducers: {
add: (state, { payload }: PayloadAction<TaskItemT>) => { add: (state, { payload }: PayloadAction<TaskItemT>) => {
state.tasks.push(payload); state.tasks.push(payload);
}, },
updateText: (
state,
{ payload }: PayloadAction<{ index: number; text: string }>
) => {
state.tasks[payload.index].text = payload.text;
},
markDone: ( markDone: (
state, state,
{ payload }: PayloadAction<{ index: number; value: boolean }> { payload }: PayloadAction<{ index: number; value: boolean }>
@ -20,11 +29,11 @@ export const todoSlice = createSlice({
state.tasks[payload.index].done = payload.value; state.tasks[payload.index].done = payload.value;
}, },
remove: (state, { payload }: PayloadAction<number>) => { remove: (state, { payload }: PayloadAction<number>) => {
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; export default todoSlice.reducer;