From 56331a7b550241d1a5b27cbc8d9bb01edcbc9359 Mon Sep 17 00:00:00 2001 From: Prateek Shourya Date: Mon, 15 Jul 2024 16:55:26 +0530 Subject: [PATCH] [WEB-1949] chore: delete workspace components restructuring. (#5123) * [WEB-1949] chore: delete workspace components restructuring. * chore: update delete workspace section. --- packages/ui/src/collapsible/collapsible.tsx | 5 +- packages/ui/src/modals/alert-modal.tsx | 2 +- .../workspace/delete-workspace-section.tsx | 58 +++++++++++++++++++ web/ce/components/workspace/index.ts | 1 + .../workspace/settings/workspace-details.tsx | 52 ++--------------- .../workspace/delete-workspace-section.tsx | 1 + web/ee/components/workspace/index.ts | 1 + 7 files changed, 69 insertions(+), 51 deletions(-) create mode 100644 web/ce/components/workspace/delete-workspace-section.tsx create mode 100644 web/ee/components/workspace/delete-workspace-section.tsx diff --git a/packages/ui/src/collapsible/collapsible.tsx b/packages/ui/src/collapsible/collapsible.tsx index 6c08563f0..a069be3ed 100644 --- a/packages/ui/src/collapsible/collapsible.tsx +++ b/packages/ui/src/collapsible/collapsible.tsx @@ -4,6 +4,7 @@ import { Disclosure, Transition } from "@headlessui/react"; export type TCollapsibleProps = { title: string | React.ReactNode; children: React.ReactNode; + className?: string; buttonClassName?: string; isOpen?: boolean; onToggle?: () => void; @@ -11,7 +12,7 @@ export type TCollapsibleProps = { }; export const Collapsible: FC = (props) => { - const { title, children, buttonClassName, isOpen, onToggle, defaultOpen } = props; + const { title, children, className, buttonClassName, isOpen, onToggle, defaultOpen } = props; // state const [localIsOpen, setLocalIsOpen] = useState(isOpen || defaultOpen ? true : false); @@ -31,7 +32,7 @@ export const Collapsible: FC = (props) => { }, [isOpen, onToggle]); return ( - + {title} diff --git a/packages/ui/src/modals/alert-modal.tsx b/packages/ui/src/modals/alert-modal.tsx index eb32d57ea..eeef2861f 100644 --- a/packages/ui/src/modals/alert-modal.tsx +++ b/packages/ui/src/modals/alert-modal.tsx @@ -13,7 +13,7 @@ export type TModalVariant = "danger" | "primary"; type Props = { content: React.ReactNode | string; handleClose: () => void; - handleSubmit: () => Promise; + handleSubmit: () => void; hideIcon?: boolean; isSubmitting: boolean; isOpen: boolean; diff --git a/web/ce/components/workspace/delete-workspace-section.tsx b/web/ce/components/workspace/delete-workspace-section.tsx new file mode 100644 index 000000000..bf212bb59 --- /dev/null +++ b/web/ce/components/workspace/delete-workspace-section.tsx @@ -0,0 +1,58 @@ +import { FC, useState } from "react"; +import { observer } from "mobx-react"; +import { ChevronDown, ChevronUp } from "lucide-react"; +// types +import { IWorkspace } from "@plane/types"; +// ui +import { Button, Collapsible } from "@plane/ui"; +// components +import { DeleteWorkspaceModal } from "@/components/workspace"; + +type TDeleteWorkspace = { + workspace: IWorkspace | null; +}; + +export const DeleteWorkspaceSection: FC = observer((props) => { + const { workspace } = props; + // states + const [isOpen, setIsOpen] = useState(false); + const [deleteWorkspaceModal, setDeleteWorkspaceModal] = useState(false); + + return ( + <> + setDeleteWorkspaceModal(false)} + /> +
+
+ setIsOpen(!isOpen)} + className="w-full" + buttonClassName="flex w-full items-center justify-between py-4" + title={ + <> + Delete Workspace + {isOpen ? : } + + } + > +
+ + When deleting a workspace, all of the data and resources within that workspace will be permanently + removed and cannot be recovered. + +
+ +
+
+
+
+
+ + ); +}); diff --git a/web/ce/components/workspace/index.ts b/web/ce/components/workspace/index.ts index 6ac6285f4..94a166947 100644 --- a/web/ce/components/workspace/index.ts +++ b/web/ce/components/workspace/index.ts @@ -1,3 +1,4 @@ export * from "./edition-badge"; export * from "./upgrade-badge"; export * from "./billing"; +export * from "./delete-workspace-section"; diff --git a/web/core/components/workspace/settings/workspace-details.tsx b/web/core/components/workspace/settings/workspace-details.tsx index ca28c6816..e758f7857 100644 --- a/web/core/components/workspace/settings/workspace-details.tsx +++ b/web/core/components/workspace/settings/workspace-details.tsx @@ -3,15 +3,13 @@ import { useEffect, useState, FC } from "react"; import { observer } from "mobx-react"; import { Controller, useForm } from "react-hook-form"; -import { ChevronDown, ChevronUp, Pencil } from "lucide-react"; -import { Disclosure, Transition } from "@headlessui/react"; +import { Pencil } from "lucide-react"; import { IWorkspace } from "@plane/types"; // ui import { Button, CustomSelect, Input, TOAST_TYPE, setToast } from "@plane/ui"; // components import { LogoSpinner } from "@/components/common"; import { WorkspaceImageUploadModal } from "@/components/core"; -import { DeleteWorkspaceModal } from "@/components/workspace"; // constants import { WORKSPACE_UPDATED } from "@/constants/event-tracker"; import { EUserWorkspaceRoles, ORGANIZATION_SIZE } from "@/constants/workspace"; @@ -19,9 +17,10 @@ import { EUserWorkspaceRoles, ORGANIZATION_SIZE } from "@/constants/workspace"; import { copyUrlToClipboard } from "@/helpers/string.helper"; // hooks import { useEventTracker, useUser, useWorkspace } from "@/hooks/store"; +// plane web components +import { DeleteWorkspaceSection } from "@/plane-web/components/workspace"; // services import { FileService } from "@/services/file.service"; -// types const defaultValues: Partial = { name: "", @@ -36,7 +35,6 @@ const fileService = new FileService(); export const WorkspaceDetails: FC = observer(() => { // states const [isLoading, setIsLoading] = useState(false); - const [deleteWorkspaceModal, setDeleteWorkspaceModal] = useState(false); const [isImageRemoving, setIsImageRemoving] = useState(false); const [isImageUploadModalOpen, setIsImageUploadModalOpen] = useState(false); // store hooks @@ -154,11 +152,6 @@ export const WorkspaceDetails: FC = observer(() => { return ( <> - setDeleteWorkspaceModal(false)} - /> { )} - {isAdmin && ( - - {({ open }) => ( -
- - Delete Workspace - {/* */} - {open ? : } - - - - -
- - The danger zone of the workspace delete page is a critical area that requires careful - consideration and attention. When deleting a workspace, all of the data and resources within - that workspace will be permanently removed and cannot be recovered. - -
- -
-
-
-
-
- )} -
- )} + {isAdmin && } ); diff --git a/web/ee/components/workspace/delete-workspace-section.tsx b/web/ee/components/workspace/delete-workspace-section.tsx new file mode 100644 index 000000000..9b2628048 --- /dev/null +++ b/web/ee/components/workspace/delete-workspace-section.tsx @@ -0,0 +1 @@ +export * from "ce/components/workspace/delete-workspace-section"; diff --git a/web/ee/components/workspace/index.ts b/web/ee/components/workspace/index.ts index 6ac6285f4..94a166947 100644 --- a/web/ee/components/workspace/index.ts +++ b/web/ee/components/workspace/index.ts @@ -1,3 +1,4 @@ export * from "./edition-badge"; export * from "./upgrade-badge"; export * from "./billing"; +export * from "./delete-workspace-section";