-
-
+
@@ -233,7 +235,11 @@ const ModuleDetailSidebar: React.FC
= ({
-
+
@@ -302,5 +308,3 @@ const ModuleDetailSidebar: React.FC
= ({
>
);
};
-
-export default ModuleDetailSidebar;
diff --git a/apps/app/components/project/modules/single-module-card.tsx b/apps/app/components/modules/single-module-card.tsx
similarity index 97%
rename from apps/app/components/project/modules/single-module-card.tsx
rename to apps/app/components/modules/single-module-card.tsx
index acd6d4d98..f67cd7193 100644
--- a/apps/app/components/project/modules/single-module-card.tsx
+++ b/apps/app/components/modules/single-module-card.tsx
@@ -1,10 +1,13 @@
import React, { useState } from "react";
+
import Link from "next/link";
import Image from "next/image";
import { useRouter } from "next/router";
-import { CalendarDaysIcon, TrashIcon } from "@heroicons/react/24/outline";
-import ConfirmModuleDeletion from "./confirm-module-deletion";
+
+// components
+import { DeleteModuleModal } from "components/modules";
// icons
+import { CalendarDaysIcon, TrashIcon } from "@heroicons/react/24/outline";
import User from "public/user.png";
// helpers
import { renderShortNumericDateFormat } from "helpers/date-time.helper";
@@ -17,7 +20,7 @@ type Props = {
module: IModule;
};
-const SingleModuleCard: React.FC = ({ module }) => {
+export const SingleModuleCard: React.FC = ({ module }) => {
const router = useRouter();
const { workspaceSlug } = router.query;
const [moduleDeleteModal, setModuleDeleteModal] = useState(false);
@@ -40,7 +43,7 @@ const SingleModuleCard: React.FC = ({ module }) => {
-
= ({ module }) => {
);
};
-
-export default SingleModuleCard;
diff --git a/apps/app/components/project/modules/create-update-module-modal/index.tsx b/apps/app/components/project/modules/create-update-module-modal/index.tsx
deleted file mode 100644
index d4482ab9e..000000000
--- a/apps/app/components/project/modules/create-update-module-modal/index.tsx
+++ /dev/null
@@ -1,273 +0,0 @@
-import React, { useEffect } from "react";
-
-import { useRouter } from "next/router";
-
-import { mutate } from "swr";
-
-// react-hook-form
-import { Controller, useForm } from "react-hook-form";
-// headless ui
-import { Dialog, Transition } from "@headlessui/react";
-// components
-import SelectLead from "components/project/modules/create-update-module-modal/select-lead";
-import SelectMembers from "components/project/modules/create-update-module-modal/select-members";
-import SelectStatus from "components/project/modules/create-update-module-modal/select-status";
-// ui
-import { Button, CustomDatePicker, Input, TextArea } from "components/ui";
-// services
-import modulesService from "services/modules.service";
-// hooks
-import useToast from "hooks/use-toast";
-// helpers
-import { renderDateFormat } from "helpers/date-time.helper";
-// types
-import type { IModule } from "types";
-// fetch-keys
-import { MODULE_LIST } from "constants/fetch-keys";
-
-type Props = {
- isOpen: boolean;
- setIsOpen: React.Dispatch
>;
- projectId: string;
- data?: IModule;
-};
-
-const defaultValues: Partial = {
- name: "",
- description: "",
- status: null,
- lead: null,
- members_list: [],
-};
-
-const CreateUpdateModuleModal: React.FC = ({ isOpen, setIsOpen, data, projectId }) => {
- const router = useRouter();
- const { workspaceSlug } = router.query;
-
- const { setToastAlert } = useToast();
-
- const {
- register,
- formState: { errors, isSubmitting },
- handleSubmit,
- control,
- reset,
- setError,
- } = useForm({
- defaultValues,
- });
-
- const onSubmit = async (formData: IModule) => {
- if (!workspaceSlug) return;
- const payload = {
- ...formData,
- start_date: formData.start_date ? renderDateFormat(formData.start_date) : null,
- target_date: formData.target_date ? renderDateFormat(formData.target_date) : null,
- };
- if (!data) {
- await modulesService
- .createModule(workspaceSlug as string, projectId, payload)
- .then(() => {
- mutate(MODULE_LIST(projectId));
- handleClose();
-
- setToastAlert({
- title: "Success",
- type: "success",
- message: "Module created successfully",
- });
- })
- .catch((err) => {
- Object.keys(err).map((key) => {
- setError(key as keyof typeof defaultValues, {
- message: err[key].join(", "),
- });
- });
- });
- } else {
- await modulesService
- .updateModule(workspaceSlug as string, projectId, data.id, payload)
- .then((res) => {
- mutate(
- MODULE_LIST(projectId),
- (prevData) => {
- const newData = prevData?.map((item) => {
- if (item.id === res.id) {
- return res;
- }
- return item;
- });
- return newData;
- },
- false
- );
- handleClose();
-
- setToastAlert({
- title: "Success",
- type: "success",
- message: "Module updated successfully",
- });
- })
- .catch((err) => {
- Object.keys(err).map((key) => {
- setError(key as keyof typeof defaultValues, {
- message: err[key].join(", "),
- });
- });
- });
- }
- };
-
- const handleClose = () => {
- setIsOpen(false);
- reset(defaultValues);
- };
-
- useEffect(() => {
- if (data) {
- setIsOpen(true);
- reset(data);
- } else {
- reset(defaultValues);
- }
- }, [data, setIsOpen, reset]);
-
- return (
-
-
-
- );
-};
-
-export default CreateUpdateModuleModal;
diff --git a/apps/app/pages/[workspaceSlug]/projects/[projectId]/modules/[moduleId].tsx b/apps/app/pages/[workspaceSlug]/projects/[projectId]/modules/[moduleId].tsx
index e6a2139ba..97471ebd6 100644
--- a/apps/app/pages/[workspaceSlug]/projects/[projectId]/modules/[moduleId].tsx
+++ b/apps/app/pages/[workspaceSlug]/projects/[projectId]/modules/[moduleId].tsx
@@ -16,11 +16,9 @@ import AppLayout from "layouts/app-layout";
import { IssueViewContextProvider } from "contexts/issue-view.context";
// components
import ExistingIssuesListModal from "components/common/existing-issues-list-modal";
-import ModulesBoardView from "components/project/modules/board-view";
-import ModulesListView from "components/project/modules/list-view";
-import ModuleDetailSidebar from "components/project/modules/module-detail-sidebar";
-import ConfirmModuleDeletion from "components/project/modules/confirm-module-deletion";
+import ModulesBoardView from "components/modules/board-view";
import { CreateUpdateIssueModal, DeleteIssueModal } from "components/issues";
+import { DeleteModuleModal, ModuleDetailsSidebar, ModulesListView } from "components/modules";
import View from "components/core/view";
// ui
import { CustomMenu, EmptySpace, EmptySpaceItem, Spinner } from "components/ui";
@@ -212,7 +210,7 @@ const SingleModule: React.FC = (props) => {
isOpen={!!deleteIssue}
data={moduleIssuesArray?.find((issue) => issue.id === deleteIssue)}
/>
- = (props) => {