+
+ {!isNoDateCollapsed && (
+
+ {}}
+ getPaginationData={() => undefined}
+ getGroupIssueCount={() => noDateIssueCount}
+ quickActions={quickActions}
+ enableQuickIssueCreate={false}
+ disableIssueCreation={true}
+ quickAddCallback={quickAddCallback}
+ addIssuesToView={addIssuesToView}
+ readOnly={readOnly}
+ canEditProperties={canEditProperties}
+ isDragDisabled
+ isEpic={isEpic}
+ />
+
+ )}
+
+ )}
diff --git a/apps/web/core/components/issues/issue-layouts/calendar/day-tile.tsx b/apps/web/core/components/issues/issue-layouts/calendar/day-tile.tsx
index 9c92945eb48..89593dade53 100644
--- a/apps/web/core/components/issues/issue-layouts/calendar/day-tile.tsx
+++ b/apps/web/core/components/issues/issue-layouts/calendar/day-tile.tsx
@@ -14,16 +14,12 @@ import { highlightIssueOnDrop } from "@/components/issues/issue-layouts/utils";
import { MONTHS_LIST } from "@/constants/calendar";
// helpers
// types
-import type { IProjectEpicsFilter } from "@/plane-web/store/issue/epic";
-import type { ICycleIssuesFilter } from "@/store/issue/cycle";
-import type { IModuleIssuesFilter } from "@/store/issue/module";
-import type { IProjectIssuesFilter } from "@/store/issue/project";
-import type { IProjectViewIssuesFilter } from "@/store/issue/project-views";
+import type { IBaseIssueFilterStore } from "@/store/issue/helpers/issue-filter-helper.store";
import type { TRenderQuickActions } from "../list/list-view-types";
import { CalendarIssueBlocks } from "./issue-blocks";
type Props = {
- issuesFilterStore: IProjectIssuesFilter | IModuleIssuesFilter | ICycleIssuesFilter | IProjectViewIssuesFilter;
+ issuesFilterStore: IBaseIssueFilterStore;
date: ICalendarDate;
issues: TIssueMap | undefined;
groupedIssueIds: TGroupedIssues;
@@ -124,7 +120,7 @@ export const CalendarDayTile = observer(function CalendarDayTile(props: Props) {
},
})
);
- }, [dayTileRef?.current, formattedDatePayload]);
+ }, [formattedDatePayload, handleDragAndDrop, issues]);
if (!formattedDatePayload) return null;
const issueIds = groupedIssueIds?.[formattedDatePayload];
diff --git a/apps/web/core/components/issues/issue-layouts/calendar/dropdowns/months-dropdown.tsx b/apps/web/core/components/issues/issue-layouts/calendar/dropdowns/months-dropdown.tsx
index dff887c26f0..d150fac609d 100644
--- a/apps/web/core/components/issues/issue-layouts/calendar/dropdowns/months-dropdown.tsx
+++ b/apps/web/core/components/issues/issue-layouts/calendar/dropdowns/months-dropdown.tsx
@@ -9,15 +9,11 @@ import { ChevronLeftIcon, ChevronRightIcon } from "@plane/propel/icons";
import { getDate } from "@plane/utils";
import { MONTHS_LIST } from "@/constants/calendar";
import { useCalendarView } from "@/hooks/store/use-calendar-view";
-import type { IProjectEpicsFilter } from "@/plane-web/store/issue/epic";
-import type { ICycleIssuesFilter } from "@/store/issue/cycle";
-import type { IModuleIssuesFilter } from "@/store/issue/module";
-import type { IProjectIssuesFilter } from "@/store/issue/project";
-import type { IProjectViewIssuesFilter } from "@/store/issue/project-views";
+import type { IBaseIssueFilterStore } from "@/store/issue/helpers/issue-filter-helper.store";
// helpers
interface Props {
- issuesFilterStore: IProjectIssuesFilter | IModuleIssuesFilter | ICycleIssuesFilter | IProjectViewIssuesFilter;
+ issuesFilterStore: IBaseIssueFilterStore;
}
export const CalendarMonthsDropdown = observer(function CalendarMonthsDropdown(props: Props) {
const { issuesFilterStore } = props;
diff --git a/apps/web/core/components/issues/issue-layouts/calendar/dropdowns/options-dropdown.tsx b/apps/web/core/components/issues/issue-layouts/calendar/dropdowns/options-dropdown.tsx
index a2c30768388..cc798b24c4c 100644
--- a/apps/web/core/components/issues/issue-layouts/calendar/dropdowns/options-dropdown.tsx
+++ b/apps/web/core/components/issues/issue-layouts/calendar/dropdowns/options-dropdown.tsx
@@ -18,14 +18,10 @@ import { ToggleSwitch } from "@plane/ui";
import { CALENDAR_LAYOUTS } from "@/constants/calendar";
import { useCalendarView } from "@/hooks/store/use-calendar-view";
import useSize from "@/hooks/use-window-size";
-import type { IProjectEpicsFilter } from "@/plane-web/store/issue/epic";
-import type { ICycleIssuesFilter } from "@/store/issue/cycle";
-import type { IModuleIssuesFilter } from "@/store/issue/module";
-import type { IProjectIssuesFilter } from "@/store/issue/project";
-import type { IProjectViewIssuesFilter } from "@/store/issue/project-views";
+import type { IBaseIssueFilterStore } from "@/store/issue/helpers/issue-filter-helper.store";
interface ICalendarHeader {
- issuesFilterStore: IProjectIssuesFilter | IModuleIssuesFilter | ICycleIssuesFilter | IProjectViewIssuesFilter;
+ issuesFilterStore: IBaseIssueFilterStore;
updateFilters?: (
projectId: string,
filterType: TSupportedFilterTypeForUpdate,
diff --git a/apps/web/core/components/issues/issue-layouts/calendar/header.tsx b/apps/web/core/components/issues/issue-layouts/calendar/header.tsx
index 6f653963dd3..3617e7c1525 100644
--- a/apps/web/core/components/issues/issue-layouts/calendar/header.tsx
+++ b/apps/web/core/components/issues/issue-layouts/calendar/header.tsx
@@ -8,15 +8,11 @@ import type { TSupportedFilterForUpdate } from "@plane/types";
import { Row } from "@plane/ui";
// icons
import { useCalendarView } from "@/hooks/store/use-calendar-view";
-import type { IProjectEpicsFilter } from "@/plane-web/store/issue/epic";
-import type { ICycleIssuesFilter } from "@/store/issue/cycle";
-import type { IModuleIssuesFilter } from "@/store/issue/module";
-import type { IProjectIssuesFilter } from "@/store/issue/project";
-import type { IProjectViewIssuesFilter } from "@/store/issue/project-views";
+import type { IBaseIssueFilterStore } from "@/store/issue/helpers/issue-filter-helper.store";
import { CalendarMonthsDropdown, CalendarOptionsDropdown } from "./dropdowns";
interface ICalendarHeader {
- issuesFilterStore: IProjectIssuesFilter | IModuleIssuesFilter | ICycleIssuesFilter | IProjectViewIssuesFilter;
+ issuesFilterStore: IBaseIssueFilterStore;
updateFilters?: (
projectId: string,
filterType: TSupportedFilterTypeForUpdate,
diff --git a/apps/web/core/components/issues/issue-layouts/calendar/roots/workspace-root.tsx b/apps/web/core/components/issues/issue-layouts/calendar/roots/workspace-root.tsx
new file mode 100644
index 00000000000..da4b8a0c02d
--- /dev/null
+++ b/apps/web/core/components/issues/issue-layouts/calendar/roots/workspace-root.tsx
@@ -0,0 +1,289 @@
+import { useCallback, useEffect, useMemo, useState } from "react";
+import { observer } from "mobx-react";
+import { useParams } from "next/navigation";
+// plane imports
+import { EIssueGroupByToServerOptions, EUserPermissions, EUserPermissionsLevel } from "@plane/constants";
+import { TOAST_TYPE, setToast } from "@plane/propel/toast";
+import type { TGroupedIssues, TIssue, TIssuesResponse } from "@plane/types";
+import { EIssuesStoreType } from "@plane/types";
+// components
+import { AllIssueQuickActions } from "../../quick-action-dropdowns";
+// hooks
+import { useCalendarView } from "@/hooks/store/use-calendar-view";
+import { useIssues } from "@/hooks/store/use-issues";
+import { useProject } from "@/hooks/store/use-project";
+import { useUserPermissions } from "@/hooks/store/user";
+import { useIssuesActions } from "@/hooks/use-issues-actions";
+// services
+import { WorkspaceService } from "@/plane-web/services";
+// local imports
+import { CalendarChart } from "../calendar";
+import { handleDragDrop } from "../utils";
+
+const workspaceService = new WorkspaceService();
+
+type Props = {
+ isDefaultView: boolean;
+ globalViewId: string;
+};
+
+export const WorkspaceCalendarRoot = observer(function WorkspaceCalendarRoot(props: Props) {
+ const { globalViewId } = props;
+
+ // router
+ const { workspaceSlug } = useParams();
+
+ // state for "No Date" issues
+ const [noDateIssueIds, setNoDateIssueIds] = useState