mirror of
https://github.com/bendtherules/demo-trello-app.git
synced 2026-08-18 13:42:40 +00:00
Add newTaskcardPrompt to create new task
This commit is contained in:
@@ -0,0 +1,29 @@
|
|||||||
|
import React, { useState } from "react";
|
||||||
|
import { useDispatch } from "react-redux";
|
||||||
|
import { createTask } from "../../storeSlices/boardSlice";
|
||||||
|
|
||||||
|
import styles from "./TaskCard.module.css";
|
||||||
|
|
||||||
|
export function NewTaskCardPrompt({ listID }) {
|
||||||
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
|
const [newCardText, setNewCardText] = useState("");
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={styles.listContainer}>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
placeholder="Create task"
|
||||||
|
value={newCardText}
|
||||||
|
onChange={e => setNewCardText(e.target.value)}
|
||||||
|
onKeyPress={e => {
|
||||||
|
if (newCardText.trim().length > 0 && e.key === "Enter") {
|
||||||
|
dispatch(createTask({ text: newCardText, listID }));
|
||||||
|
|
||||||
|
setNewCardText("");
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
></input>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ import { useSelector, useDispatch } from "react-redux";
|
|||||||
import { createList } from "../../storeSlices/boardSlice";
|
import { createList } from "../../storeSlices/boardSlice";
|
||||||
|
|
||||||
import { TaskCard } from "../TaskCard/TaskCard";
|
import { TaskCard } from "../TaskCard/TaskCard";
|
||||||
|
import { NewTaskCardPrompt } from "../TaskCard/NewTaskCardPrompt";
|
||||||
|
|
||||||
import styles from "./TaskList.module.css";
|
import styles from "./TaskList.module.css";
|
||||||
|
|
||||||
@@ -14,10 +15,10 @@ export function TaskList({ listData }) {
|
|||||||
<div className={styles.listContainer}>
|
<div className={styles.listContainer}>
|
||||||
<div className={styles.listName}>{listData.name}</div>
|
<div className={styles.listName}>{listData.name}</div>
|
||||||
<div className={styles.cardsContainer}>
|
<div className={styles.cardsContainer}>
|
||||||
{/* Refactor to card component */}
|
|
||||||
{listData.cards.map(cardData => (
|
{listData.cards.map(cardData => (
|
||||||
<TaskCard key={cardData.id} cardData={cardData} />
|
<TaskCard key={cardData.id} cardData={cardData} />
|
||||||
))}
|
))}
|
||||||
|
<NewTaskCardPrompt listID={listData.id} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -48,10 +48,20 @@ export const slice = createSlice({
|
|||||||
name,
|
name,
|
||||||
cards: []
|
cards: []
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
createTask: (state, action) => {
|
||||||
|
const { text: cardText, listID: parentListID } = action.payload;
|
||||||
|
|
||||||
|
const parentList = state.lists.find(({ id }) => id === parentListID);
|
||||||
|
parentList.cards.push({
|
||||||
|
id: `Card #${generateID()}`,
|
||||||
|
text: cardText
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
export const { createList } = slice.actions;
|
export const { createList, createTask } = slice.actions;
|
||||||
|
|
||||||
export default slice.reducer;
|
export default slice.reducer;
|
||||||
|
|||||||
Reference in New Issue
Block a user