refactor: issues folder structure

This commit is contained in:
Aaryan Khandelwal 2023-02-02 15:00:35 +05:30
parent 7e92efee23
commit 8b1bf53831
44 changed files with 249 additions and 324 deletions

View file

@ -17,7 +17,7 @@ import useIssuesProperties from "hooks/use-issue-properties";
// types
import { IIssue, Properties } from "types";
// components
import { IssueListItem } from "components/issues";
import { MyIssuesListItem } from "components/issues";
// helpers
import { replaceUnderscoreIfSnakeCase } from "helpers/string.helper";
// types
@ -142,7 +142,11 @@ const MyIssuesPage: NextPage = () => {
<Disclosure.Panel>
<div className="divide-y-2">
{myIssues.map((issue: IIssue) => (
<IssueListItem key={issue.id} issue={issue} properties={properties} />
<MyIssuesListItem
key={issue.id}
issue={issue}
properties={properties}
/>
))}
</div>
</Disclosure.Panel>

View file

@ -13,8 +13,7 @@ import { IssueViewContextProvider } from "contexts/issue-view.context";
// components
import CyclesListView from "components/project/cycles/list-view";
import CyclesBoardView from "components/project/cycles/board-view";
import { CreateUpdateIssueModal } from "components/issues";
import ConfirmIssueDeletion from "components/project/issues/confirm-issue-deletion";
import { CreateUpdateIssueModal, DeleteIssueModal } from "components/issues";
import ExistingIssuesListModal from "components/common/existing-issues-list-modal";
import CycleDetailSidebar from "components/project/cycles/cycle-detail-sidebar";
import View from "components/core/view";
@ -38,6 +37,7 @@ import {
PROJECT_ISSUES_LIST,
PROJECT_MEMBERS,
PROJECT_DETAILS,
CYCLE_DETAILS,
} from "constants/fetch-keys";
const SingleCycle: React.FC<UserAuth> = (props) => {
@ -77,6 +77,18 @@ const SingleCycle: React.FC<UserAuth> = (props) => {
: null
);
const { data: cycleDetails } = useSWR(
cycleId ? CYCLE_DETAILS(cycleId as string) : null,
workspaceSlug && projectId && cycleId
? () =>
cycleServices.getCycleDetails(
workspaceSlug as string,
projectId as string,
cycleId as string
)
: null
);
const { data: cycleIssues } = useSWR<CycleIssueResponse[]>(
workspaceSlug && projectId && cycleId ? CYCLE_ISSUES(cycleId as string) : null,
workspaceSlug && projectId && cycleId
@ -181,7 +193,7 @@ const SingleCycle: React.FC<UserAuth> = (props) => {
issues={issues?.results.filter((i) => !i.issue_cycle) ?? []}
handleOnSubmit={handleAddIssuesToCycle}
/>
<ConfirmIssueDeletion
<DeleteIssueModal
handleClose={() => setDeleteIssue(undefined)}
isOpen={!!deleteIssue}
data={issues?.results.find((issue) => issue.id === deleteIssue)}
@ -200,7 +212,7 @@ const SingleCycle: React.FC<UserAuth> = (props) => {
label={
<>
<CyclesIcon className="h-3 w-3" />
{cycles?.find((c) => c.id === cycleId)?.name}
{cycleDetails?.name}
</>
}
className="ml-1.5"
@ -287,7 +299,7 @@ const SingleCycle: React.FC<UserAuth> = (props) => {
</div>
)}
<CycleDetailSidebar
cycle={cycles?.find((c) => c.id === (cycleId as string))}
cycle={cycleDetails}
isOpen={cycleSidebar}
cycleIssues={cycleIssues ?? []}
/>

View file

@ -14,11 +14,15 @@ import { requiredAdmin, requiredAuth } from "lib/auth";
// layouts
import AppLayout from "layouts/app-layout";
// components
import AddAsSubIssue from "components/project/issues/issue-detail/add-as-sub-issue";
import IssueDetailSidebar from "components/project/issues/issue-detail/issue-detail-sidebar";
import AddIssueComment from "components/project/issues/issue-detail/comment/issue-comment-section";
import IssueActivitySection from "components/project/issues/issue-detail/activity";
import { IssueDescriptionForm, SubIssueList, CreateUpdateIssueModal } from "components/issues";
import {
IssueDescriptionForm,
SubIssuesList,
CreateUpdateIssueModal,
IssueDetailsSidebar,
IssueActivitySection,
AddComment,
SubIssuesListModal,
} from "components/issues";
// ui
import { Loader, CustomMenu } from "components/ui";
import { Breadcrumbs } from "components/breadcrumbs";
@ -52,7 +56,7 @@ const defaultValues = {
const IssueDetailsPage: NextPage<UserAuth> = (props) => {
// states
const [isOpen, setIsOpen] = useState(false);
const [isAddAsSubIssueOpen, setIsAddAsSubIssueOpen] = useState(false);
const [subIssuesListModal, setSubIssuesListModal] = useState(false);
const [preloadedData, setPreloadedData] = useState<
(Partial<IIssue> & { actionType: "createIssue" | "edit" | "delete" }) | undefined
>(undefined);
@ -211,10 +215,10 @@ const IssueDetailsPage: NextPage<UserAuth> = (props) => {
}}
/>
)}
{isAddAsSubIssueOpen && (
<AddAsSubIssue
isOpen={isAddAsSubIssueOpen}
setIsOpen={setIsAddAsSubIssueOpen}
{subIssuesListModal && (
<SubIssuesListModal
isOpen={subIssuesListModal}
handleClose={() => setSubIssuesListModal(false)}
parent={issueDetails}
/>
)}
@ -276,7 +280,7 @@ const IssueDetailsPage: NextPage<UserAuth> = (props) => {
/>
<div className="mt-2">
{issueId && workspaceSlug && projectId && subIssues?.length > 0 ? (
<SubIssueList
<SubIssuesList
issues={subIssues}
parentIssue={issueDetails}
projectId={projectId?.toString()}
@ -309,7 +313,7 @@ const IssueDetailsPage: NextPage<UserAuth> = (props) => {
</CustomMenu.MenuItem>
<CustomMenu.MenuItem
onClick={() => {
setIsAddAsSubIssueOpen(true);
setSubIssuesListModal(true);
setPreloadedData({
parent: issueDetails.id,
actionType: "createIssue",
@ -329,11 +333,11 @@ const IssueDetailsPage: NextPage<UserAuth> = (props) => {
issueActivities={issueActivities || []}
mutate={mutateIssueActivities}
/>
<AddIssueComment mutate={mutateIssueActivities} />
<AddComment mutate={mutateIssueActivities} />
</div>
</div>
<div className="basis-1/3 space-y-5 border-l p-5">
<IssueDetailSidebar
<IssueDetailsSidebar
control={control}
issueDetail={issueDetails}
submitChanges={submitChanges}

View file

@ -13,10 +13,8 @@ import AppLayout from "layouts/app-layout";
// contexts
import { IssueViewContextProvider } from "contexts/issue-view.context";
// components
import ListView from "components/project/issues/list-view";
import BoardView from "components/project/issues/BoardView";
import ConfirmIssueDeletion from "components/project/issues/confirm-issue-deletion";
import { CreateUpdateIssueModal } from "components/issues";
import BoardView from "components/issues/board-view";
import { CreateUpdateIssueModal, DeleteIssueModal, IssuesListView } from "components/issues";
import View from "components/core/view";
// ui
import { Spinner, EmptySpace, EmptySpaceItem, HeaderButton } from "components/ui";
@ -99,7 +97,7 @@ const ProjectIssues: NextPage<UserAuth> = (props) => {
handleClose={() => setIsOpen(false)}
data={selectedIssue}
/>
<ConfirmIssueDeletion
<DeleteIssueModal
handleClose={() => setDeleteIssue(undefined)}
isOpen={!!deleteIssue}
data={projectIssues?.results.find((issue) => issue.id === deleteIssue)}
@ -110,7 +108,7 @@ const ProjectIssues: NextPage<UserAuth> = (props) => {
</div>
) : projectIssues.count > 0 ? (
<>
<ListView
<IssuesListView
issues={projectIssues?.results.filter((p) => p.parent === null) ?? []}
handleEditIssue={handleEditIssue}
userAuth={props}

View file

@ -18,10 +18,9 @@ import { IssueViewContextProvider } from "contexts/issue-view.context";
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 ConfirmIssueDeletion from "components/project/issues/confirm-issue-deletion";
import ModuleDetailSidebar from "components/project/modules/module-detail-sidebar";
import ConfirmModuleDeletion from "components/project/modules/confirm-module-deletion";
import { CreateUpdateIssueModal } from "components/issues";
import { CreateUpdateIssueModal, DeleteIssueModal } from "components/issues";
import View from "components/core/view";
// ui
import { CustomMenu, EmptySpace, EmptySpaceItem, Spinner } from "components/ui";
@ -46,7 +45,7 @@ import {
import { NextPageContext } from "next";
// fetch-keys
import {
MODULE_DETAIL,
MODULE_DETAILS,
MODULE_ISSUES,
MODULE_LIST,
PROJECT_ISSUES_LIST,
@ -96,8 +95,8 @@ const SingleModule: React.FC<UserAuth> = (props) => {
: null
);
const { data: moduleDetail } = useSWR<IModule>(
MODULE_DETAIL,
const { data: moduleDetails } = useSWR<IModule>(
moduleId ? MODULE_DETAILS(moduleId as string) : null,
workspaceSlug && projectId
? () =>
modulesService.getModuleDetails(
@ -181,9 +180,9 @@ const SingleModule: React.FC<UserAuth> = (props) => {
};
const handleDeleteModule = () => {
if (!moduleDetail) return;
if (!moduleDetails) return;
setSelectedModuleForDelete({ ...moduleDetail, actionType: "delete" });
setSelectedModuleForDelete({ ...moduleDetails, actionType: "delete" });
setModuleDeleteModal(true);
};
@ -208,7 +207,7 @@ const SingleModule: React.FC<UserAuth> = (props) => {
issues={issues?.results.filter((i) => !i.issue_module) ?? []}
handleOnSubmit={handleAddIssuesToModule}
/>
<ConfirmIssueDeletion
<DeleteIssueModal
handleClose={() => setDeleteIssue(undefined)}
isOpen={!!deleteIssue}
data={moduleIssuesArray?.find((issue) => issue.id === deleteIssue)}
@ -226,7 +225,7 @@ const SingleModule: React.FC<UserAuth> = (props) => {
breadcrumbs={
<Breadcrumbs>
<BreadcrumbItem
title={`${moduleDetail?.project_detail.name ?? "Project"} Modules`}
title={`${moduleDetails?.project_detail.name ?? "Project"} Modules`}
link={`/${workspaceSlug}/projects/${projectId}/modules`}
/>
</Breadcrumbs>
@ -236,7 +235,7 @@ const SingleModule: React.FC<UserAuth> = (props) => {
label={
<>
<RectangleGroupIcon className="h-3 w-3" />
{modules?.find((c) => c.id === moduleId)?.name}
{moduleDetails?.name}
</>
}
className="ml-1.5"
@ -323,7 +322,7 @@ const SingleModule: React.FC<UserAuth> = (props) => {
</div>
)}
<ModuleDetailSidebar
module={modules?.find((m) => m.id === moduleId)}
module={moduleDetails}
isOpen={moduleSidebar}
moduleIssues={moduleIssues}
handleDeleteModule={handleDeleteModule}

View file

@ -13,11 +13,7 @@ import { requiredAdmin } from "lib/auth";
// layouts
import SettingsLayout from "layouts/settings-layout";
// components
import ConfirmStateDeletion from "components/project/issues/BoardView/state/confirm-state-delete";
import {
CreateUpdateStateInline,
StateGroup,
} from "components/project/issues/BoardView/state/create-update-state-inline";
import { CreateUpdateStateInline, DeleteStateModal, StateGroup } from "components/states";
// ui
import { Loader } from "components/ui";
import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs";
@ -67,7 +63,7 @@ const StatesSettings: NextPage<TStateSettingsProps> = (props) => {
return (
<>
<ConfirmStateDeletion
<DeleteStateModal
isOpen={!!selectDeleteState}
data={states?.find((state) => state.id === selectDeleteState) ?? null}
onClose={() => setSelectDeleteState(null)}