import React, { useState } from "react"; import { useDispatch } from "react-redux"; import { createTask, editTask, deleteTask } from "../../storeSlices/boardSlice"; import useAutoHeightTextArea from "../../utils/useAutoHeightTextArea"; import styles from "./TaskCard.module.css"; export function CreateOrEditTaskCard({ mode = "create" /* "create" | "edit" */, listID, cardID, defaultCardText = "", onSubmit: parentOnSubmit = () => {}, onCancel: parentOnCancel = () => {} }) { /* --------- Init here ---------- */ const textAreaRef = useAutoHeightTextArea(); const dispatch = useDispatch(); const isCreateMode = mode === "create"; const [newCardText, setNewCardText] = useState(defaultCardText); const [isFormOpen, setIsFormOpen] = useState(isCreateMode ? false : true); const isTextNonEmpty = newCardText.trim().length > 0; /* --------- Create evt handlers here ---------- */ const onComplete = () => { setNewCardText(defaultCardText); setIsFormOpen(false); }; const onSubmit = e => { e.preventDefault(); if (isTextNonEmpty > 0) { if (isCreateMode) { dispatch(createTask({ text: newCardText, listID })); } else { const payload = { text: newCardText, cardID: cardID, listID }; dispatch(editTask(payload)); } } onComplete(); parentOnSubmit(); }; const onCancel = e => { onComplete(); parentOnCancel(); }; const onDelete = () => { const confirmDelete = window.confirm( "Do you really want to delete the task?" ); if (confirmDelete) { const payload = { cardID: cardID, listID }; dispatch(deleteTask(payload)); } }; /* --------- Render here ---------- */ return (
{!isFormOpen ? ( ) : (
{/* Show delete button onlyin edit mode */} {!isCreateMode ? (
) : null}
)}
); }