From 37a0b05352b0e713bde84eb0dbcfb9a6182b7b4a Mon Sep 17 00:00:00 2001 From: kraken Date: Sat, 3 Aug 2024 22:49:27 +0530 Subject: feat: delete space --- apps/web/app/(dash)/(memories)/content.tsx | 72 +++++++++++++++++++++--------- apps/web/app/actions/doers.ts | 11 +++++ 2 files changed, 61 insertions(+), 22 deletions(-) diff --git a/apps/web/app/(dash)/(memories)/content.tsx b/apps/web/app/(dash)/(memories)/content.tsx index 4514d851..492cb669 100644 --- a/apps/web/app/(dash)/(memories)/content.tsx +++ b/apps/web/app/(dash)/(memories)/content.tsx @@ -12,7 +12,7 @@ import { } from "lucide-react"; import Image from "next/image"; import Link from "next/link"; -import React, { useEffect, useMemo, useState } from "react"; +import React, { useMemo, useState } from "react"; import Masonry from "react-layout-masonry"; import { getRawTweet } from "@repo/shared-types/utils"; import { MyTweet } from "../../../components/twitter/render-tweet"; @@ -20,16 +20,19 @@ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, - DropdownMenuLabel, DropdownMenuPortal, - DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, } from "@repo/ui/shadcn/dropdown-menu"; import { Button } from "@repo/ui/shadcn/button"; -import { addUserToSpace, deleteItem, moveItem } from "@/app/actions/doers"; +import { + addUserToSpace, + deleteItem, + deleteSpace, + moveItem, +} from "@/app/actions/doers"; import { toast } from "sonner"; import { Input } from "@repo/ui/shadcn/input"; import { motion } from "framer-motion"; @@ -59,6 +62,19 @@ export function MemoriesPage({ }, [tab]); const [filter, setFilter] = useState(initialFilter); + const [spaces, setSpaces] = useState(memoriesAndSpaces.spaces); + + // to delete a space + const handleDeleteSpace = async (id: number) => { + const response = await deleteSpace(id); + + if (response?.success) { + setSpaces(spaces.filter((space) => space.id !== id)); + toast.success("Space deleted"); + } else { + toast.error("Failed to delete space"); + } + }; // Sort Both memories and spaces by their savedAt and createdAt dates respectfully. // The output should be just one single list of items @@ -71,7 +87,7 @@ export function MemoriesPage({ date: new Date(memory.savedAt), // Assuming savedAt is a string date data: memory, })), - ...memoriesAndSpaces.spaces.map((space) => ({ + ...spaces.map((space) => ({ item: "space", date: new Date(space.createdAt), // Assuming createdAt is a string date data: space, @@ -103,7 +119,7 @@ export function MemoriesPage({ return false; }) .sort((a, b) => b.date - a.date); - }, [memoriesAndSpaces.memories, memoriesAndSpaces.spaces, filter]); + }, [memoriesAndSpaces.memories, spaces, filter]); return (
); } @@ -231,34 +248,45 @@ function TabComponent({ title, description, id, + handleDeleteSpace, }: { title: string; description: string; id: number; + handleDeleteSpace: (id: number) => void; }) { return ( - +
Spaces icon Space
-
-
-
- {title.slice(0, 2).toUpperCase()} {id} + +
+ +
+
+ {title.slice(0, 2).toUpperCase()} {id} +
-
-
-
{title}
-
{description}
-
-
- Search icon +
+
{title}
+
{description}
+
+
+ Search icon +
+ +
+ handleDeleteSpace(id)} + className="w-4 cursor-pointer" + />
- +
); } diff --git a/apps/web/app/actions/doers.ts b/apps/web/app/actions/doers.ts index 9a831921..28d88ebd 100644 --- a/apps/web/app/actions/doers.ts +++ b/apps/web/app/actions/doers.ts @@ -186,6 +186,17 @@ const getTweetData = async (tweetID: string) => { return data; }; +export const deleteSpace = async (id: number) => { + try { + await db.delete(space).where(eq(space.id, id)); + return { + success: true, + }; + } catch (e) { + console.log(e); + } +} + export const createMemory = async (input: { content: string; spaces?: number[]; -- cgit v1.2.3 From 492f1afcefb02a2bf71ab72ed440fb3023b2e446 Mon Sep 17 00:00:00 2001 From: kraken Date: Sat, 3 Aug 2024 22:50:29 +0530 Subject: lint --- apps/web/app/actions/doers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/app/actions/doers.ts b/apps/web/app/actions/doers.ts index 28d88ebd..9750a705 100644 --- a/apps/web/app/actions/doers.ts +++ b/apps/web/app/actions/doers.ts @@ -195,7 +195,7 @@ export const deleteSpace = async (id: number) => { } catch (e) { console.log(e); } -} +}; export const createMemory = async (input: { content: string; -- cgit v1.2.3