forked from github/plane
5b0066140f
* chore: format all files in the project * fix: removing @types/react from dependencies * fix: adding prettier and eslint config * chore: format files * fix: upgrading turbo version * chore: ignoring warnings and adding todos * fix: updated the type of bubble menu item in the document editor * chore: format files --------- Co-authored-by: Aaryan Khandelwal <aaryankhandu123@gmail.com>
94 lines
2.7 KiB
TypeScript
94 lines
2.7 KiB
TypeScript
import { FC } from "react";
|
|
import useSWR from "swr";
|
|
import { observer } from "mobx-react-lite";
|
|
// store
|
|
import { useMobxStore } from "lib/mobx/store-provider";
|
|
// components
|
|
import { CyclesBoard, CyclesList, CyclesListGanttChartView } from "components/cycles";
|
|
// ui components
|
|
import { Loader } from "@plane/ui";
|
|
// types
|
|
import { TCycleLayout } from "types";
|
|
|
|
export interface ICyclesView {
|
|
filter: "all" | "current" | "upcoming" | "draft" | "completed" | "incomplete";
|
|
layout: TCycleLayout;
|
|
workspaceSlug: string;
|
|
projectId: string;
|
|
peekCycle: string | undefined;
|
|
}
|
|
|
|
export const CyclesView: FC<ICyclesView> = observer((props) => {
|
|
const { filter, layout, workspaceSlug, projectId, peekCycle } = props;
|
|
|
|
// store
|
|
const { cycle: cycleStore } = useMobxStore();
|
|
|
|
// api call to fetch cycles list
|
|
useSWR(
|
|
workspaceSlug && projectId && filter ? `CYCLES_LIST_${projectId}_${filter}` : null,
|
|
workspaceSlug && projectId && filter ? () => cycleStore.fetchCycles(workspaceSlug, projectId, filter) : null
|
|
);
|
|
|
|
const cyclesList =
|
|
filter === "completed"
|
|
? cycleStore.projectCompletedCycles
|
|
: filter === "draft"
|
|
? cycleStore.projectDraftCycles
|
|
: filter === "upcoming"
|
|
? cycleStore.projectUpcomingCycles
|
|
: cycleStore.projectCycles;
|
|
|
|
return (
|
|
<>
|
|
{layout === "list" && (
|
|
<>
|
|
{cyclesList ? (
|
|
<CyclesList cycles={cyclesList} filter={filter} workspaceSlug={workspaceSlug} projectId={projectId} />
|
|
) : (
|
|
<Loader className="space-y-4 p-8">
|
|
<Loader.Item height="50px" />
|
|
<Loader.Item height="50px" />
|
|
<Loader.Item height="50px" />
|
|
</Loader>
|
|
)}
|
|
</>
|
|
)}
|
|
|
|
{layout === "board" && (
|
|
<>
|
|
{cyclesList ? (
|
|
<CyclesBoard
|
|
cycles={cyclesList}
|
|
filter={filter}
|
|
workspaceSlug={workspaceSlug}
|
|
projectId={projectId}
|
|
peekCycle={peekCycle}
|
|
/>
|
|
) : (
|
|
<Loader className="grid grid-cols-1 gap-9 p-8 md:grid-cols-2 lg:grid-cols-3">
|
|
<Loader.Item height="200px" />
|
|
<Loader.Item height="200px" />
|
|
<Loader.Item height="200px" />
|
|
</Loader>
|
|
)}
|
|
</>
|
|
)}
|
|
|
|
{layout === "gantt" && (
|
|
<>
|
|
{cyclesList ? (
|
|
<CyclesListGanttChartView cycles={cyclesList} workspaceSlug={workspaceSlug} />
|
|
) : (
|
|
<Loader className="space-y-4">
|
|
<Loader.Item height="50px" />
|
|
<Loader.Item height="50px" />
|
|
<Loader.Item height="50px" />
|
|
</Loader>
|
|
)}
|
|
</>
|
|
)}
|
|
</>
|
|
);
|
|
});
|