diff --git a/src/components/common/modal/MenuButton.tsx b/src/components/common/modal/MenuButton.tsx index 8908684..9c0103a 100644 --- a/src/components/common/modal/MenuButton.tsx +++ b/src/components/common/modal/MenuButton.tsx @@ -1,17 +1,33 @@ import { useState } from "react"; +import { deleteCard } from "@/lib/apis/cardsApi"; +import { TOKEN_1 } from "@/lib/constants/tokens"; import { useModalStore } from "@/lib/store/useModalStore"; import Image from "next/image"; import MenuButtonIcon from "../../../../public/icon/menu_icon.svg"; +import { useTaskStore } from "@/lib/store/useTaskStore"; export default function MenuButton() { const [isOpen, setIsOpen] = useState(false); const { openModal, closeModal } = useModalStore(); + const { selectedTaskId } = useTaskStore(); const openModifyModal = () => { closeModal(); openModal("editTask"); }; + const handleDelete = async () => { + if (!selectedTaskId) return; + + await deleteCard({ + token: TOKEN_1, + cardId: selectedTaskId, + }); + + closeModal(); + window.location.reload(); + }; + return (
setIsOpen((prev) => !prev)} @@ -30,7 +46,10 @@ export default function MenuButton() { > 수정하기 -
diff --git a/src/components/common/modal/Modal.tsx b/src/components/common/modal/Modal.tsx index 65898eb..51c0435 100644 --- a/src/components/common/modal/Modal.tsx +++ b/src/components/common/modal/Modal.tsx @@ -45,7 +45,7 @@ export default function Modal({
{ containerClassName: string; labelClassName: string; textareaClassName: string; - spanClassName: string; + spanClassName?: string; } const Textarea = ({ diff --git a/src/components/modal/add-column/AddColumnModal.tsx b/src/components/modal/add-column/AddColumnModal.tsx index ce60d77..9fac3b6 100644 --- a/src/components/modal/add-column/AddColumnModal.tsx +++ b/src/components/modal/add-column/AddColumnModal.tsx @@ -52,7 +52,7 @@ export default function CreateDashboardModal() { const buttonClick = async () => { if (!dashboardId) return; - postColumn({ + await postColumn({ token: TOKEN_1, title: inputValue, dashboardId: Number(dashboardId), diff --git a/src/components/modal/editColumn/EditColumnModal.tsx b/src/components/modal/editColumn/EditColumnModal.tsx index abe051f..44f0496 100644 --- a/src/components/modal/editColumn/EditColumnModal.tsx +++ b/src/components/modal/editColumn/EditColumnModal.tsx @@ -56,7 +56,7 @@ export default function CreateDashboardModal() { const handleEditClick = async () => { if (!selectedColumnId) return; - putColumn({ + await putColumn({ token: TOKEN_1, title: inputValue, columnId: Number(selectedColumnId), diff --git a/src/components/modal/task-detail/CommentCard.tsx b/src/components/modal/task-detail/CommentCard.tsx new file mode 100644 index 0000000..d7c79ed --- /dev/null +++ b/src/components/modal/task-detail/CommentCard.tsx @@ -0,0 +1,124 @@ +import { useEffect, useState } from "react"; +import { Comment } from "@/lib/types"; +import { putComment, deleteComment } from "@/lib/apis/commentsApi"; +import { TOKEN_1 } from "@/lib/constants/tokens"; +import { useIsMobile } from "@/lib/hooks/useCheckViewport"; +import { formatDate } from "@/lib/utils/dateUtils"; +import UserIcon from "@/components/common/user-icon/UserIcon"; +import Button from "@/components/common/button/Button"; +import Textarea from "@/components/common/textarea/Textarea"; + +type CommentCardProps = Comment & { + onChange: () => void; +}; + +export default function CommentCard({ + id, + content, + author, + createdAt, + onChange, +}: CommentCardProps) { + const [isEditMode, setIsEditMode] = useState(false); + const [inputValue, setInputValue] = useState(content); + const [isFormValid, setIsFormValid] = useState(false); + const isMobile = useIsMobile(); + const date = formatDate(createdAt, true); + + useEffect(() => { + const trimmedValue = inputValue.trim(); + setIsFormValid(trimmedValue !== ""); + }, [inputValue]); + + const handleChange = (e: React.ChangeEvent) => { + setInputValue(e.target.value); + }; + + const handleEditMode = () => { + setIsEditMode(!isEditMode); + }; + + const handleEditComment = async () => { + await putComment({ + token: TOKEN_1, + content: inputValue.trim(), + commentId: id, + }); + + setInputValue(""); + onChange(); + }; + + const handleDeleteComment = () => { + deleteComment({ + token: TOKEN_1, + commentId: id, + }); + + onChange(); + }; + + return ( +
+
+ +
+
+
+
+
+ {author.nickname} +
+
+ {date} +
+
+ {isEditMode ? ( +
+