diff --git a/packages/insea-connect-ui/app/(dashboard)/(routes)/drive/_components/drive-item.tsx b/packages/insea-connect-ui/app/(dashboard)/(routes)/drive/_components/drive-item.tsx index 3530486..682af9e 100644 --- a/packages/insea-connect-ui/app/(dashboard)/(routes)/drive/_components/drive-item.tsx +++ b/packages/insea-connect-ui/app/(dashboard)/(routes)/drive/_components/drive-item.tsx @@ -25,6 +25,7 @@ import { } from "@/components/ui/dropdown-menu"; import { useRouter } from "next/navigation"; import { BACKEND_BASE_URL } from "@/lib/constants"; +import { useModal } from "@/hooks/use-modal-store"; type fileType = | "image/png" @@ -51,6 +52,7 @@ const DriveItem = ({ folderId, fileUrl, }: DriveItemProps) => { + const { onOpen } = useModal(); const router = useRouter(); const getIcon = (type: fileType) => { if (type === "folder") { @@ -130,7 +132,13 @@ const DriveItem = ({ Details - + { + event.stopPropagation(); + onOpen("delete-drive-item", { itemId: folderId }); + }} + > Delete diff --git a/packages/insea-connect-ui/components/modal/delete-drive-item-modal.tsx b/packages/insea-connect-ui/components/modal/delete-drive-item-modal.tsx new file mode 100644 index 0000000..abe963c --- /dev/null +++ b/packages/insea-connect-ui/components/modal/delete-drive-item-modal.tsx @@ -0,0 +1,79 @@ +import { useQueryClient } from "@tanstack/react-query"; +import { useSession } from "next-auth/react"; +import { useToast } from "../ui/use-toast"; +import { useModal } from "@/hooks/use-modal-store"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, +} from "../ui/dialog"; +import { Button } from "../ui/button"; +import axios from "axios"; +import { DELETE_DRIVE_ITEM_ENDPOINT } from "@/lib/constants"; + +const DeleteDriveItemModal = () => { + const { data: session } = useSession(); + const queryClient = useQueryClient(); + const { toast } = useToast(); + const { isOpen, onClose, type, data } = useModal(); + + const isModalOpen = isOpen && type === "delete-drive-item"; + const itemId = data?.itemId; + const access_token = session?.tokens.access_token; + + const handleClose = () => { + onClose(); + }; + + const handleDelete = async () => { + try { + await axios.delete(`${DELETE_DRIVE_ITEM_ENDPOINT(itemId)}`, { + headers: { + Authorization: `Bearer ${access_token}`, + }, + }); + + toast({ + title: "Item deleted", + description: "The item has been deleted successfully", + }); + queryClient.invalidateQueries({ + queryKey: ["drive-items"], + }); + onClose(); + } catch (error) { + toast({ + title: "Error", + description: "An error occurred while deleting the item", + variant: "destructive", + }); + } + }; + + return ( + + + + Delete item + + Are you sure you want to delete this item? + + + + + + + + + + ); +}; + +export default DeleteDriveItemModal; diff --git a/packages/insea-connect-ui/components/provider/modal-provider.tsx b/packages/insea-connect-ui/components/provider/modal-provider.tsx index 206393f..85e3d49 100644 --- a/packages/insea-connect-ui/components/provider/modal-provider.tsx +++ b/packages/insea-connect-ui/components/provider/modal-provider.tsx @@ -7,6 +7,7 @@ import NewConversationModal from "../modal/new-conversation-modal"; import GroupSettingsModal from "../modal/group-settings-modal"; import NewMemberModal from "../modal/new-member-modal"; import NewFileModal from "../modal/new-file-modal"; +import DeleteDriveItemModal from "../modal/delete-drive-item-modal"; export const ModalProvider = () => { const [isMounted, setIsMounted] = useState(false); @@ -22,6 +23,7 @@ export const ModalProvider = () => { + diff --git a/packages/insea-connect-ui/components/provider/query-provider.tsx b/packages/insea-connect-ui/components/provider/query-provider.tsx index 3a31c05..21b6ac4 100644 --- a/packages/insea-connect-ui/components/provider/query-provider.tsx +++ b/packages/insea-connect-ui/components/provider/query-provider.tsx @@ -4,7 +4,16 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { useState } from "react"; const QueryProvider = ({ children }: { children: React.ReactNode }) => { - const [queryClient] = useState(() => new QueryClient()); + const [queryClient] = useState( + () => + new QueryClient({ + defaultOptions: { + queries: { + refetchOnWindowFocus: false, + }, + }, + }) + ); return ( {children} ); diff --git a/packages/insea-connect-ui/hooks/use-modal-store.ts b/packages/insea-connect-ui/hooks/use-modal-store.ts index 57d5858..a2104b3 100644 --- a/packages/insea-connect-ui/hooks/use-modal-store.ts +++ b/packages/insea-connect-ui/hooks/use-modal-store.ts @@ -3,6 +3,7 @@ import { create } from "zustand"; export type ModalType = | "new-file" | "new-folder" + | "delete-drive-item" | "new-group" | "new-member" | "group-settings" diff --git a/packages/insea-connect-ui/lib/constants.ts b/packages/insea-connect-ui/lib/constants.ts index c66488f..77da7b6 100644 --- a/packages/insea-connect-ui/lib/constants.ts +++ b/packages/insea-connect-ui/lib/constants.ts @@ -48,3 +48,6 @@ export const UPLOAD_FILE_ENDPOINT = ( parentId: string = "0" ) => `${BACKEND_BASE_URL}/${BACKEND_API_VERSION}/drive/${degreePathId}/folders/${parentId}/upload`; + +export const DELETE_DRIVE_ITEM_ENDPOINT = (itemId: string) => + `${BACKEND_BASE_URL}/${BACKEND_API_VERSION}/drive/items/${itemId}`;