mirror of
https://github.com/makeplane/plane
synced 2024-06-14 14:31:34 +00:00
55 lines
1.6 KiB
TypeScript
55 lines
1.6 KiB
TypeScript
import { observer } from "mobx-react";
|
|
import {
|
|
CalendarLayoutLoader,
|
|
GanttLayoutLoader,
|
|
KanbanLayoutLoader,
|
|
ListLayoutLoader,
|
|
SpreadsheetLayoutLoader,
|
|
} from "@/components/ui";
|
|
import { EIssueLayoutTypes } from "@/constants/issue";
|
|
import { useIssues } from "@/hooks/store";
|
|
import { useIssueStoreType } from "@/hooks/use-issue-layout-store";
|
|
import { IssueLayoutEmptyState } from "./empty-states";
|
|
|
|
const ActiveLoader = (props: { layout: EIssueLayoutTypes }) => {
|
|
const { layout } = props;
|
|
switch (layout) {
|
|
case EIssueLayoutTypes.LIST:
|
|
return <ListLayoutLoader />;
|
|
case EIssueLayoutTypes.KANBAN:
|
|
return <KanbanLayoutLoader />;
|
|
case EIssueLayoutTypes.SPREADSHEET:
|
|
return <SpreadsheetLayoutLoader />;
|
|
case EIssueLayoutTypes.CALENDAR:
|
|
return <CalendarLayoutLoader />;
|
|
case EIssueLayoutTypes.GANTT:
|
|
return <GanttLayoutLoader />;
|
|
default:
|
|
return null;
|
|
}
|
|
};
|
|
|
|
interface Props {
|
|
children: string | JSX.Element | JSX.Element[];
|
|
layout: EIssueLayoutTypes;
|
|
}
|
|
|
|
export const IssueLayoutHOC = observer((props: Props) => {
|
|
const { layout } = props;
|
|
|
|
const storeType = useIssueStoreType();
|
|
const { issues } = useIssues(storeType);
|
|
|
|
const issueCount = issues.getGroupIssueCount(undefined, undefined, false);
|
|
|
|
if (issues?.getIssueLoader() === "init-loader" || issueCount === undefined) {
|
|
return <ActiveLoader layout={layout} />;
|
|
}
|
|
|
|
if (issues.getGroupIssueCount(undefined, undefined, false) === 0 && layout !== EIssueLayoutTypes.CALENDAR) {
|
|
return <IssueLayoutEmptyState storeType={storeType} />;
|
|
}
|
|
|
|
return <>{props.children}</>;
|
|
});
|