Skip to content

Commit 75be77f

Browse files
committed
add delete for trees
1 parent 994b007 commit 75be77f

File tree

3 files changed

+80
-62
lines changed

3 files changed

+80
-62
lines changed

src/app/messages/page.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import { CenterStyle } from "@/styles/AllStyle";
2929
import { BsThreeDotsVertical } from "react-icons/bs";
3030
import { BrowserView, MobileView } from "react-device-detect";
3131
import MessagePopUp from "@/components/MessagePopUp";
32-
import DeleteMessagePopUp from "@/components/DeleteMessagePopUp";
32+
import DeletePopUp from "@/components/DeletePopUp";
3333

3434
interface UserData {
3535
name: string;
@@ -346,12 +346,12 @@ function Messages() {
346346
alignItems={"center"}
347347
position="absolute"
348348
>
349-
<DeleteMessagePopUp
349+
<DeletePopUp
350350
closePopup={() => {
351351
setOpenDeletePopUp(false);
352352
setBlurAmount("0px");
353353
}}
354-
deleteMessage={() => {
354+
deleteFunction={() => {
355355
deleteMessageFromTable();
356356
setOpenDeletePopUp(false);
357357
setBlurAmount("0px");
@@ -370,6 +370,7 @@ function Messages() {
370370
),
371371
});
372372
}}
373+
bodyText="Do you really want to delete this message? This process can not be undone."
373374
/>
374375
</Flex>
375376
)}

src/app/treeTable/page.tsx

Lines changed: 76 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,25 @@ import {
2424
GridItem,
2525
Tag,
2626
Select,
27+
AlertDialog,
28+
AlertDialogBody,
29+
AlertDialogFooter,
30+
AlertDialogHeader,
31+
AlertDialogContent,
32+
AlertDialogOverlay,
33+
useDisclosure,
2734
} from "@chakra-ui/react";
2835
import * as XLSX from "xlsx";
2936
import { CenterStyle } from "@/styles/AllStyle";
3037
import "./treetable.css";
31-
import { useState, useEffect } from "react";
38+
import { useState, useEffect, useRef } from "react";
3239
import { ITree } from "@/database/treeSchema";
33-
import { FileDown, Menu, SearchIcon, ChevronLeft, ChevronRight, TreePine, Edit } from "lucide-react";
40+
import { FileDown, Menu, SearchIcon, ChevronLeft, ChevronRight, TreePine, Edit, Trash2 } from "lucide-react";
3441
import { useSearchParams } from "next/navigation";
3542
import { BrowserView, MobileView, isMobile } from "react-device-detect";
3643
import { useUser } from "@clerk/nextjs";
3744
import Link from "next/link";
45+
import DeletePopUp from "@/components/DeletePopUp";
3846

3947
export default function TreeTable() {
4048
const [loading, setLoading] = useState(true);
@@ -221,6 +229,36 @@ export default function TreeTable() {
221229
};
222230

223231
const [selectedTree, setSelectedTree] = useState<ITree | null>(null);
232+
const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);
233+
const [treeToDelete, setTreeToDelete] = useState<ITree | null>(null);
234+
const cancelRef = useRef<HTMLButtonElement>(null);
235+
236+
const openDeleteDialog = (tree: ITree) => {
237+
setTreeToDelete(tree);
238+
setDeleteDialogOpen(true);
239+
};
240+
241+
const closeDeleteDialog = () => {
242+
setDeleteDialogOpen(false);
243+
setTreeToDelete(null);
244+
};
245+
246+
const handleDeleteTree = async () => {
247+
if (!treeToDelete) return;
248+
try {
249+
const res = await fetch(`/api/tree/${treeToDelete._id}`, { method: "DELETE" });
250+
if (res.ok) {
251+
setTrees((prev) => prev.filter((t) => t._id !== treeToDelete._id));
252+
setFilteredTrees((prev) => prev.filter((t) => t._id !== treeToDelete._id));
253+
closeDeleteDialog();
254+
setSelectedTree(null);
255+
} else {
256+
closeDeleteDialog();
257+
}
258+
} catch (err) {
259+
closeDeleteDialog();
260+
}
261+
};
224262

225263
const handleArrowClick = (treeData: ITree) => {
226264
setSelectedTree(treeData);
@@ -458,9 +496,15 @@ export default function TreeTable() {
458496
</Tag>
459497
</Td>
460498
<Td>
461-
<Button bg="" _hover={{ bg: "gray.100" }} onClick={() => handleArrowClick(tree)}>
462-
<ChevronRight />
463-
</Button>
499+
<HStack>
500+
<Button
501+
bg=""
502+
_hover={{ bg: "gray.100" }}
503+
onClick={() => handleArrowClick(tree)}
504+
>
505+
<ChevronRight />
506+
</Button>
507+
</HStack>
464508
</Td>
465509
</Tr>
466510
))
@@ -541,15 +585,21 @@ export default function TreeTable() {
541585
transition="all 0.3s ease-in-out"
542586
overflowX={"auto"}
543587
height="100%"
588+
position="relative"
589+
zIndex={2}
544590
>
545591
<Box bg="#596334" color="white" p={5} borderTopLeftRadius={20} borderTopRightRadius={20}>
546592
<VStack gap={3} align="stretch">
547593
{/* Top row */}
548-
<Flex justifyContent="flex-end">
549-
{/* Notes icon on the right */}
594+
<Flex justifyContent="flex-end" alignItems="center" gap={2}>
550595
<Link href={`/editTreeForm/${selectedTree._id}`}>
551596
<Edit size={20} cursor="pointer" />
552597
</Link>
598+
<Trash2
599+
size={20}
600+
style={{ cursor: "pointer", marginLeft: 4, color: "white" }}
601+
onClick={() => openDeleteDialog(selectedTree)}
602+
/>
553603
</Flex>
554604
<Flex justifyContent="space-between" alignItems="center">
555605
<Flex alignItems="center" gap={3}>
@@ -788,6 +838,25 @@ export default function TreeTable() {
788838
) : (
789839
<div></div>
790840
)}
841+
{deleteDialogOpen && (
842+
<Flex
843+
zIndex="1000"
844+
w={"100vw"}
845+
h={"100vh"}
846+
left={0}
847+
top={0}
848+
justifyContent={"center"}
849+
alignItems={"center"}
850+
position="fixed"
851+
style={{ backdropFilter: "blur(3px)" }}
852+
>
853+
<DeletePopUp
854+
closePopup={closeDeleteDialog}
855+
deleteFunction={handleDeleteTree}
856+
bodyText="Do you really want to delete this tree? This process can not be undone."
857+
/>
858+
</Flex>
859+
)}
791860
</div>
792861
);
793862
}

src/components/DeleteMessagePopUp.tsx

Lines changed: 0 additions & 52 deletions
This file was deleted.

0 commit comments

Comments
 (0)