From cf76d1e8ed1810c9f2bd89c682aeb71b1e7dd5d0 Mon Sep 17 00:00:00 2001 From: Juthatip McDevitt Date: Fri, 29 Mar 2024 11:36:19 -0500 Subject: [PATCH] added change card name functionality --- .../src/components/views/CardModal.tsx | 45 ++++++++++++++++--- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/task_management_app/src/components/views/CardModal.tsx b/task_management_app/src/components/views/CardModal.tsx index 6f8b672..543a7f8 100644 --- a/task_management_app/src/components/views/CardModal.tsx +++ b/task_management_app/src/components/views/CardModal.tsx @@ -1,10 +1,11 @@ "use client" import { useParams, useRouter } from "next/navigation" -import { useContext, useEffect } from "react"; +import { FormEvent, useContext, useEffect, useState } from "react"; import { BoardContext, BoardContextProps } from "../BoardContext"; -import { useStorage } from "@/app/liveblocks.config"; +import { Card, useMutation, useStorage } from "@/app/liveblocks.config"; import { shallow } from "@liveblocks/client"; +import { BsThreeDots } from "react-icons/bs"; @@ -13,7 +14,7 @@ const CardModal = () => { const router = useRouter(); const params = useParams(); const {setOpenCard} = useContext(BoardContext); - + const [editCard, setEditCard] = useState(false); const card = useStorage(root => { return root.cards.find(c => c.id === params.cardId) @@ -25,15 +26,47 @@ const CardModal = () => { } }, [params]) - - function handleBackdrop(){ router.back(); + } + + const updateCard = useMutation(({storage}, cardId, updateData) => { + const cards = storage.get('cards').map(c => c.toObject()); + const index = cards.findIndex(c => c.id === cardId); + const card = storage.get('cards').get(index); + for (let updateKey in updateData){ + card?.set(updateKey as keyof Card, updateData[updateKey]); } + }, []) + + function handleCardNamechange(ev: FormEvent){ + ev.preventDefault(); + const input = (ev.target as HTMLFormElement).querySelector('input'); + if(input){ + const newName = input.value; + updateCard(params.cardId, {name: newName}); + setEditCard(false) + } + } return (
-
ev.stopPropagation()} className='bg-white p-4 mt-8 max-w-xs mx-auto'>{card?.name}
+
ev.stopPropagation()} className='bg-white p-4 mt-8 max-w-xs mx-auto'> + {!editCard && ( +
+

{card?.name}

+ +
+ )} + {editCard && ( +
+
+ + +
+
+ )} +
) }