Made task updating working, fixed task removal (i almost fogot how to use array mutationing methods)
This commit is contained in:
parent
32d388423b
commit
91fb0d873a
@ -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
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user