diff --git a/apps/app/components/command-palette/index.tsx b/apps/app/components/command-palette/index.tsx index 441fb31fa..26dc252b2 100644 --- a/apps/app/components/command-palette/index.tsx +++ b/apps/app/components/command-palette/index.tsx @@ -20,9 +20,9 @@ import userService from "services/user.service"; // components import ShortcutsModal from "components/command-palette/shortcuts"; import { CreateProjectModal } from "components/project"; -import { CreateUpdateIssueModal } from "components/issues/modal"; +import { CreateUpdateIssueModal } from "components/issues"; +import { CreateUpdateModuleModal } from "components/modules"; import CreateUpdateCycleModal from "components/project/cycles/create-update-cycle-modal"; -import CreateUpdateModuleModal from "components/project/modules/create-update-module-modal"; import BulkDeleteIssuesModal from "components/common/bulk-delete-issues-modal"; // headless ui // helpers @@ -179,7 +179,6 @@ const CommandPalette: React.FC = () => { )} diff --git a/apps/app/components/issues/index.ts b/apps/app/components/issues/index.ts index ba8b85301..de602c2e1 100644 --- a/apps/app/components/issues/index.ts +++ b/apps/app/components/issues/index.ts @@ -1,5 +1,6 @@ export * from "./board-view"; export * from "./comment"; +export * from "./sidebar-select"; export * from "./activity"; export * from "./delete-issue-modal"; export * from "./description-form"; diff --git a/apps/app/components/issues/modal.tsx b/apps/app/components/issues/modal.tsx index 2bb588460..09ad6446b 100644 --- a/apps/app/components/issues/modal.tsx +++ b/apps/app/components/issues/modal.tsx @@ -16,8 +16,6 @@ import issuesService from "services/issues.service"; import useUser from "hooks/use-user"; import useToast from "hooks/use-toast"; // components -import { CreateUpdateStateModal } from "components/states"; -import CreateUpdateCycleModal from "components/project/cycles/create-update-cycle-modal"; import { IssueForm } from "components/issues"; // common import { renderDateFormat } from "helpers/date-time.helper"; @@ -206,15 +204,15 @@ export const CreateUpdateIssueModal: React.FC = ({ }; const handleFormSubmit = async (formData: Partial) => { - if (workspaceSlug && activeProject) { - const payload: Partial = { - ...formData, - target_date: formData.target_date ? renderDateFormat(formData.target_date ?? "") : null, - }; + if (!workspaceSlug || !activeProject) return; - if (!data) await createIssue(payload); - else await updateIssue(payload); - } + const payload: Partial = { + ...formData, + target_date: formData.target_date ? renderDateFormat(formData.target_date ?? "") : null, + }; + + if (!data) await createIssue(payload); + else await updateIssue(payload); }; return ( diff --git a/apps/app/components/issues/sidebar.tsx b/apps/app/components/issues/sidebar.tsx index 0c358f9a4..5868e884b 100644 --- a/apps/app/components/issues/sidebar.tsx +++ b/apps/app/components/issues/sidebar.tsx @@ -16,6 +16,7 @@ import useToast from "hooks/use-toast"; import issuesServices from "services/issues.service"; // components import { + DeleteIssueModal, SidebarAssigneeSelect, SidebarBlockedSelect, SidebarBlockerSelect, @@ -23,8 +24,7 @@ import { SidebarParentSelect, SidebarPrioritySelect, SidebarStateSelect, -} from "components/issues/sidebar-select"; -import { DeleteIssueModal } from "components/issues"; +} from "components/issues"; // ui import { Input, Button, Spinner, CustomDatePicker } from "components/ui"; // icons diff --git a/apps/app/components/project/modules/board-view/index.tsx b/apps/app/components/modules/board-view/index.tsx similarity index 98% rename from apps/app/components/project/modules/board-view/index.tsx rename to apps/app/components/modules/board-view/index.tsx index 4951f80af..95efa123a 100644 --- a/apps/app/components/project/modules/board-view/index.tsx +++ b/apps/app/components/modules/board-view/index.tsx @@ -13,7 +13,7 @@ import issuesService from "services/issues.service"; import useIssuesProperties from "hooks/use-issue-properties"; import useIssueView from "hooks/use-issue-view"; // components -import SingleBoard from "components/project/modules/board-view/single-board"; +import SingleBoard from "components/modules/board-view/single-board"; // ui import { Spinner } from "components/ui"; // types diff --git a/apps/app/components/project/modules/board-view/single-board.tsx b/apps/app/components/modules/board-view/single-board.tsx similarity index 100% rename from apps/app/components/project/modules/board-view/single-board.tsx rename to apps/app/components/modules/board-view/single-board.tsx diff --git a/apps/app/components/project/modules/confirm-module-deletion.tsx b/apps/app/components/modules/delete-module-modal.tsx similarity index 97% rename from apps/app/components/project/modules/confirm-module-deletion.tsx rename to apps/app/components/modules/delete-module-modal.tsx index df3f32fea..317f49a68 100644 --- a/apps/app/components/project/modules/confirm-module-deletion.tsx +++ b/apps/app/components/modules/delete-module-modal.tsx @@ -25,7 +25,7 @@ type Props = { data?: IModule; }; -const ConfirmModuleDeletion: React.FC = ({ isOpen, setIsOpen, data }) => { +export const DeleteModuleModal: React.FC = ({ isOpen, setIsOpen, data }) => { const [isDeleteLoading, setIsDeleteLoading] = useState(false); const router = useRouter(); @@ -152,5 +152,3 @@ const ConfirmModuleDeletion: React.FC = ({ isOpen, setIsOpen, data }) => ); }; - -export default ConfirmModuleDeletion; diff --git a/apps/app/components/modules/form.tsx b/apps/app/components/modules/form.tsx new file mode 100644 index 000000000..60fd93059 --- /dev/null +++ b/apps/app/components/modules/form.tsx @@ -0,0 +1,128 @@ +// react-hook-form +import { Controller, useForm } from "react-hook-form"; +// components +import { ModuleLeadSelect, ModuleMembersSelect, ModuleStatusSelect } from "components/modules"; +// ui +import { Button, CustomDatePicker, Input, TextArea } from "components/ui"; +// types +import { IModule } from "types"; + +type Props = { + handleFormSubmit: (values: Partial) => void; + handleClose: () => void; + status: boolean; +}; + +const defaultValues: Partial = { + name: "", + description: "", + status: null, + lead: null, + members_list: [], +}; + +export const ModuleForm: React.FC = ({ handleFormSubmit, handleClose, status }) => { + const { + register, + formState: { errors, isSubmitting }, + handleSubmit, + control, + reset, + } = useForm({ + defaultValues, + }); + + const handleCreateUpdateModule = async (formData: Partial) => { + await handleFormSubmit(formData); + + reset({ + ...defaultValues, + }); + }; + + return ( +
+
+

+ {status ? "Update" : "Create"} Module +

+
+
+ +
+
+