+
diff --git a/space/components/common/index.ts b/space/components/common/index.ts
index c4ea97f3c..1949c069b 100644
--- a/space/components/common/index.ts
+++ b/space/components/common/index.ts
@@ -1,3 +1,2 @@
-export * from "./latest-feature-block";
export * from "./project-logo";
export * from "./logo-spinner";
diff --git a/space/components/common/latest-feature-block.tsx b/space/components/common/latest-feature-block.tsx
deleted file mode 100644
index c1b5db954..000000000
--- a/space/components/common/latest-feature-block.tsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import Image from "next/image";
-import Link from "next/link";
-import { useTheme } from "next-themes";
-// icons
-import { Lightbulb } from "lucide-react";
-// images
-import latestFeatures from "public/onboarding/onboarding-pages.svg";
-
-export const LatestFeatureBlock = () => {
- const { resolvedTheme } = useTheme();
-
- return (
- <>
-
-
-
- Pages gets a facelift! Write anything and use Galileo to help you start.{" "}
-
- Learn more
-
-
-
-
- >
- );
-};
diff --git a/space/components/instance/index.ts b/space/components/instance/index.ts
index 6568894f0..be80bc669 100644
--- a/space/components/instance/index.ts
+++ b/space/components/instance/index.ts
@@ -1,2 +1 @@
-export * from "./not-ready-view";
export * from "./instance-failure-view";
diff --git a/space/components/instance/not-ready-view.tsx b/space/components/instance/not-ready-view.tsx
deleted file mode 100644
index be46a9473..000000000
--- a/space/components/instance/not-ready-view.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-"use client";
-
-import { FC } from "react";
-import Image from "next/image";
-import Link from "next/link";
-import { useTheme } from "next-themes";
-// ui
-import { Button } from "@plane/ui";
-// helper
-import { GOD_MODE_URL, SPACE_BASE_PATH } from "@/helpers/common.helper";
-// images
-import PlaneTakeOffImage from "@/public/instance/plane-takeoff.png";
-import PlaneBackgroundPatternDark from "public/auth/background-pattern-dark.svg";
-import PlaneBackgroundPattern from "public/auth/background-pattern.svg";
-import BlackHorizontalLogo from "public/plane-logos/black-horizontal-with-blue-logo.png";
-import WhiteHorizontalLogo from "public/plane-logos/white-horizontal-with-blue-logo.png";
-
-export const InstanceNotReady: FC = () => {
- const { resolvedTheme } = useTheme();
- const patternBackground = resolvedTheme === "dark" ? PlaneBackgroundPatternDark : PlaneBackgroundPattern;
-
- const logo = resolvedTheme === "light" ? BlackHorizontalLogo : WhiteHorizontalLogo;
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
Welcome aboard Plane!
-
-
- Get started by setting up your instance and workspace
-
-
-
-
-
-
-
-
- );
-};
diff --git a/space/components/issues/board-views/block-downvotes.tsx b/space/components/issues/board-views/block-downvotes.tsx
deleted file mode 100644
index 4326a8823..000000000
--- a/space/components/issues/board-views/block-downvotes.tsx
+++ /dev/null
@@ -1,10 +0,0 @@
-"use client";
-
-export const IssueBlockDownVotes = ({ number }: { number: number }) => (
-
-
- arrow_upward_alt
-
- {number}
-
-);
diff --git a/space/components/issues/board-views/block-due-date.tsx b/space/components/issues/board-views/block-due-date.tsx
deleted file mode 100644
index ecf229562..000000000
--- a/space/components/issues/board-views/block-due-date.tsx
+++ /dev/null
@@ -1,59 +0,0 @@
-"use client";
-
-// helpers
-import { renderFullDate } from "@/helpers/date-time.helper";
-
-export const dueDateIconDetails = (
- date: string,
- stateGroup: string
-): {
- iconName: string;
- className: string;
-} => {
- let iconName = "calendar_today";
- let className = "";
-
- if (!date || ["completed", "cancelled"].includes(stateGroup)) {
- iconName = "calendar_today";
- className = "";
- } else {
- const today = new Date();
- today.setHours(0, 0, 0, 0);
- const targetDate = new Date(date);
- targetDate.setHours(0, 0, 0, 0);
-
- const timeDifference = targetDate.getTime() - today.getTime();
-
- if (timeDifference < 0) {
- iconName = "event_busy";
- className = "text-red-500";
- } else if (timeDifference === 0) {
- iconName = "today";
- className = "text-red-500";
- } else if (timeDifference === 24 * 60 * 60 * 1000) {
- iconName = "event";
- className = "text-yellow-500";
- } else {
- iconName = "calendar_today";
- className = "";
- }
- }
-
- return {
- iconName,
- className,
- };
-};
-
-export const IssueBlockDueDate = ({ due_date, group }: { due_date: string; group: string }) => {
- const iconDetails = dueDateIconDetails(due_date, group);
-
- return (
-
-
- {iconDetails.iconName}
-
- {renderFullDate(due_date)}
-
- );
-};
diff --git a/space/components/issues/board-views/block-labels.tsx b/space/components/issues/board-views/block-labels.tsx
deleted file mode 100644
index 05f6a039f..000000000
--- a/space/components/issues/board-views/block-labels.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-"use client";
-
-export const IssueBlockLabels = ({ labels }: any) => (
-
- {labels &&
- labels.length > 0 &&
- labels.map((_label: any) => (
-
- ))}
-
-);
diff --git a/space/components/issues/board-views/block-state.tsx b/space/components/issues/board-views/block-state.tsx
deleted file mode 100644
index 39b10ceb0..000000000
--- a/space/components/issues/board-views/block-state.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-// ui
-import { StateGroupIcon } from "@plane/ui";
-// constants
-import { issueGroupFilter } from "@/constants/issue";
-
-export const IssueBlockState = ({ state }: any) => {
- const stateGroup = issueGroupFilter(state.group);
-
- if (stateGroup === null) return <>>;
- return (
-
- );
-};
diff --git a/space/components/issues/board-views/block-upvotes.tsx b/space/components/issues/board-views/block-upvotes.tsx
deleted file mode 100644
index 3927acac4..000000000
--- a/space/components/issues/board-views/block-upvotes.tsx
+++ /dev/null
@@ -1,8 +0,0 @@
-"use client";
-
-export const IssueBlockUpVotes = ({ number }: { number: number }) => (
-
- arrow_upward_alt
- {number}
-
-);
diff --git a/space/components/issues/board-views/calendar/index.tsx b/space/components/issues/board-views/calendar/index.tsx
deleted file mode 100644
index 0edeca96c..000000000
--- a/space/components/issues/board-views/calendar/index.tsx
+++ /dev/null
@@ -1 +0,0 @@
-export const IssueCalendarView = () =>
;
diff --git a/space/components/issues/board-views/gantt/index.tsx b/space/components/issues/board-views/gantt/index.tsx
deleted file mode 100644
index 5da924b2c..000000000
--- a/space/components/issues/board-views/gantt/index.tsx
+++ /dev/null
@@ -1 +0,0 @@
-export const IssueGanttView = () =>
;
diff --git a/space/components/issues/board-views/kanban/header.tsx b/space/components/issues/board-views/kanban/header.tsx
deleted file mode 100644
index baf5612b3..000000000
--- a/space/components/issues/board-views/kanban/header.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-"use client";
-// mobx react lite
-import { observer } from "mobx-react-lite";
-// ui
-import { StateGroupIcon } from "@plane/ui";
-// constants
-import { issueGroupFilter } from "@/constants/issue";
-// mobx hook
-// import { useIssue } from "@/hooks/store";
-// interfaces
-import { IIssueState } from "@/types/issue";
-
-export const IssueKanBanHeader = observer(({ state }: { state: IIssueState }) => {
- // const { getCountOfIssuesByState } = useIssue();
- const stateGroup = issueGroupFilter(state.group);
-
- if (stateGroup === null) return <>>;
-
- return (
-
-
-
-
-
{state?.name}
- {/*
{getCountOfIssuesByState(state.id)} */}
-
- );
-});
diff --git a/space/components/issues/board-views/spreadsheet/index.tsx b/space/components/issues/board-views/spreadsheet/index.tsx
deleted file mode 100644
index 45ebf2792..000000000
--- a/space/components/issues/board-views/spreadsheet/index.tsx
+++ /dev/null
@@ -1 +0,0 @@
-export const IssueSpreadsheetView = () =>
;
diff --git a/space/components/issues/filters/applied-filters/filters-list.tsx b/space/components/issues/filters/applied-filters/filters-list.tsx
index 83d651f5d..87089c500 100644
--- a/space/components/issues/filters/applied-filters/filters-list.tsx
+++ b/space/components/issues/filters/applied-filters/filters-list.tsx
@@ -1,10 +1,10 @@
"use client";
-// icons
import { observer } from "mobx-react-lite";
import { X } from "lucide-react";
// types
-import { IIssueLabel, IIssueState, TFilters } from "@/types/issue";
+import { IStateLite } from "@plane/types";
+import { IIssueLabel, TFilters } from "@/types/issue";
// components
import { AppliedPriorityFilters } from "./priority";
import { AppliedStateFilters } from "./state";
@@ -14,7 +14,7 @@ type Props = {
handleRemoveAllFilters: () => void;
handleRemoveFilter: (key: keyof TFilters, value: string | null) => void;
labels?: IIssueLabel[] | undefined;
- states?: IIssueState[] | undefined;
+ states?: IStateLite[] | undefined;
};
export const replaceUnderscoreIfSnakeCase = (str: string) => str.replace(/_/g, " ");
diff --git a/space/components/issues/filters/applied-filters/root.tsx b/space/components/issues/filters/applied-filters/root.tsx
index 5d6a404ed..9b6625d75 100644
--- a/space/components/issues/filters/applied-filters/root.tsx
+++ b/space/components/issues/filters/applied-filters/root.tsx
@@ -80,7 +80,7 @@ export const IssueAppliedFilters: FC
= observer((props) =>
if (Object.keys(appliedFilters).length === 0) return null;
return (
-
+
void;
- states: IIssueState[];
+ states: IStateLite[];
values: string[];
};
diff --git a/space/components/issues/filters/selection.tsx b/space/components/issues/filters/selection.tsx
index a1180b0ee..926fbf5b0 100644
--- a/space/components/issues/filters/selection.tsx
+++ b/space/components/issues/filters/selection.tsx
@@ -4,7 +4,8 @@ import React, { useState } from "react";
import { observer } from "mobx-react-lite";
import { Search, X } from "lucide-react";
// types
-import { IIssueState, IIssueLabel, IIssueFilterOptions, TIssueFilterKeys } from "@/types/issue";
+import { IStateLite } from "@plane/types";
+import { IIssueLabel, IIssueFilterOptions, TIssueFilterKeys } from "@/types/issue";
// components
import { FilterPriority, FilterState } from "./";
@@ -13,7 +14,7 @@ type Props = {
handleFilters: (key: keyof IIssueFilterOptions, value: string | string[]) => void;
layoutDisplayFiltersOptions: TIssueFilterKeys[];
labels?: IIssueLabel[] | undefined;
- states?: IIssueState[] | undefined;
+ states?: IStateLite[] | undefined;
};
export const FilterSelection: React.FC = observer((props) => {
diff --git a/space/components/issues/filters/state.tsx b/space/components/issues/filters/state.tsx
index 24b6bb5c8..f61237eef 100644
--- a/space/components/issues/filters/state.tsx
+++ b/space/components/issues/filters/state.tsx
@@ -1,17 +1,18 @@
"use client";
import React, { useState } from "react";
+// types
+import { IStateLite } from "@plane/types";
+// ui
import { Loader, StateGroupIcon } from "@plane/ui";
// components
import { FilterHeader, FilterOption } from "@/components/issues/filters/helpers";
-// types
-import { IIssueState } from "@/types/issue";
type Props = {
appliedFilters: string[] | null;
handleUpdate: (val: string) => void;
searchQuery: string;
- states: IIssueState[] | undefined;
+ states: IStateLite[] | undefined;
};
export const FilterState: React.FC = (props) => {
diff --git a/space/components/issues/index.ts b/space/components/issues/index.ts
new file mode 100644
index 000000000..6aee62097
--- /dev/null
+++ b/space/components/issues/index.ts
@@ -0,0 +1,2 @@
+export * from "./issue-layouts";
+export * from "./navbar";
diff --git a/space/components/issues/issue-layouts/index.ts b/space/components/issues/issue-layouts/index.ts
new file mode 100644
index 000000000..5ab6813cd
--- /dev/null
+++ b/space/components/issues/issue-layouts/index.ts
@@ -0,0 +1,4 @@
+export * from "./kanban";
+export * from "./list";
+export * from "./properties";
+export * from "./root";
diff --git a/space/components/issues/board-views/kanban/block.tsx b/space/components/issues/issue-layouts/kanban/block.tsx
similarity index 57%
rename from space/components/issues/board-views/kanban/block.tsx
rename to space/components/issues/issue-layouts/kanban/block.tsx
index e7481e359..ac03823b4 100644
--- a/space/components/issues/board-views/kanban/block.tsx
+++ b/space/components/issues/issue-layouts/kanban/block.tsx
@@ -2,11 +2,10 @@
import { FC } from "react";
import { observer } from "mobx-react-lite";
-import { useRouter, useSearchParams } from "next/navigation";
+import Link from "next/link";
+import { useSearchParams } from "next/navigation";
// components
-import { IssueBlockDueDate } from "@/components/issues/board-views/block-due-date";
-import { IssueBlockPriority } from "@/components/issues/board-views/block-priority";
-import { IssueBlockState } from "@/components/issues/board-views/block-state";
+import { IssueBlockDueDate, IssueBlockPriority, IssueBlockState } from "@/components/issues";
// helpers
import { queryParamGenerator } from "@/helpers/query-param-generator";
// hooks
@@ -14,45 +13,43 @@ import { useIssueDetails, usePublish } from "@/hooks/store";
// interfaces
import { IIssue } from "@/types/issue";
-type IssueKanBanBlockProps = {
+type Props = {
anchor: string;
issue: IIssue;
params: any;
};
-export const IssueKanBanBlock: FC = observer((props) => {
+export const IssueKanBanBlock: FC = observer((props) => {
const { anchor, issue } = props;
- // router
- const router = useRouter();
const searchParams = useSearchParams();
// query params
- const board = searchParams.get("board") || undefined;
- const state = searchParams.get("state") || undefined;
- const priority = searchParams.get("priority") || undefined;
- const labels = searchParams.get("labels") || undefined;
+ const board = searchParams.get("board");
+ const state = searchParams.get("state");
+ const priority = searchParams.get("priority");
+ const labels = searchParams.get("labels");
// store hooks
const { project_details } = usePublish(anchor);
const { setPeekId } = useIssueDetails();
+ const { queryParam } = queryParamGenerator({ board, peekId: issue.id, priority, state, labels });
+
const handleBlockClick = () => {
setPeekId(issue.id);
- const { queryParam } = queryParamGenerator({ board, peekId: issue.id, priority, state, labels });
- router.push(`/issues/${anchor}?${queryParam}`);
};
return (
-
+
{/* id */}
{project_details?.identifier}-{issue?.sequence_id}
{/* name */}
-
+
{issue.name}
@@ -76,6 +73,6 @@ export const IssueKanBanBlock: FC = observer((props) => {
)}
-
+
);
});
diff --git a/space/components/issues/issue-layouts/kanban/header.tsx b/space/components/issues/issue-layouts/kanban/header.tsx
new file mode 100644
index 000000000..ee5433d68
--- /dev/null
+++ b/space/components/issues/issue-layouts/kanban/header.tsx
@@ -0,0 +1,25 @@
+"use client";
+
+import { observer } from "mobx-react-lite";
+// types
+import { IStateLite } from "@plane/types";
+// ui
+import { StateGroupIcon } from "@plane/ui";
+
+type Props = {
+ state: IStateLite;
+};
+
+export const IssueKanBanHeader: React.FC = observer((props) => {
+ const { state } = props;
+
+ return (
+
+
+
+
+
{state?.name}
+ {/*
{getCountOfIssuesByState(state.id)} */}
+
+ );
+});
diff --git a/space/components/issues/issue-layouts/kanban/index.ts b/space/components/issues/issue-layouts/kanban/index.ts
new file mode 100644
index 000000000..62874fbda
--- /dev/null
+++ b/space/components/issues/issue-layouts/kanban/index.ts
@@ -0,0 +1,3 @@
+export * from "./block";
+export * from "./header";
+export * from "./root";
diff --git a/space/components/issues/board-views/kanban/index.tsx b/space/components/issues/issue-layouts/kanban/root.tsx
similarity index 84%
rename from space/components/issues/board-views/kanban/index.tsx
rename to space/components/issues/issue-layouts/kanban/root.tsx
index 4f9867588..e0a5593e9 100644
--- a/space/components/issues/board-views/kanban/index.tsx
+++ b/space/components/issues/issue-layouts/kanban/root.tsx
@@ -3,18 +3,17 @@
import { FC } from "react";
import { observer } from "mobx-react-lite";
// components
-import { IssueKanBanBlock } from "@/components/issues/board-views/kanban/block";
-import { IssueKanBanHeader } from "@/components/issues/board-views/kanban/header";
+import { IssueKanBanBlock, IssueKanBanHeader } from "@/components/issues";
// ui
import { Icon } from "@/components/ui";
// mobx hook
import { useIssue } from "@/hooks/store";
-type IssueKanbanViewProps = {
+type Props = {
anchor: string;
};
-export const IssueKanbanView: FC = observer((props) => {
+export const IssueKanbanLayoutRoot: FC = observer((props) => {
const { anchor } = props;
// store hooks
const { states, getFilteredIssuesByState } = useIssue();
diff --git a/space/components/issues/board-views/list/block.tsx b/space/components/issues/issue-layouts/list/block.tsx
similarity index 72%
rename from space/components/issues/board-views/list/block.tsx
rename to space/components/issues/issue-layouts/list/block.tsx
index 98e5299f2..8c241753d 100644
--- a/space/components/issues/board-views/list/block.tsx
+++ b/space/components/issues/issue-layouts/list/block.tsx
@@ -1,29 +1,26 @@
"use client";
import { FC } from "react";
import { observer } from "mobx-react-lite";
-import { useRouter, useSearchParams } from "next/navigation";
+import Link from "next/link";
+import { useSearchParams } from "next/navigation";
// components
-import { IssueBlockDueDate } from "@/components/issues/board-views/block-due-date";
-import { IssueBlockLabels } from "@/components/issues/board-views/block-labels";
-import { IssueBlockPriority } from "@/components/issues/board-views/block-priority";
-import { IssueBlockState } from "@/components/issues/board-views/block-state";
+import { IssueBlockDueDate, IssueBlockLabels, IssueBlockPriority, IssueBlockState } from "@/components/issues";
// helpers
import { queryParamGenerator } from "@/helpers/query-param-generator";
// hook
import { useIssueDetails, usePublish } from "@/hooks/store";
-// interfaces
+// types
import { IIssue } from "@/types/issue";
-// store
type IssueListBlockProps = {
anchor: string;
issue: IIssue;
};
-export const IssueListBlock: FC = observer((props) => {
+export const IssueListLayoutBlock: FC = observer((props) => {
const { anchor, issue } = props;
- const searchParams = useSearchParams();
// query params
+ const searchParams = useSearchParams();
const board = searchParams.get("board") || undefined;
const state = searchParams.get("state") || undefined;
const priority = searchParams.get("priority") || undefined;
@@ -31,25 +28,25 @@ export const IssueListBlock: FC = observer((props) => {
// store hooks
const { setPeekId } = useIssueDetails();
const { project_details } = usePublish(anchor);
- // router
- const router = useRouter();
+ const { queryParam } = queryParamGenerator({ board, peekId: issue.id, priority, state, labels });
const handleBlockClick = () => {
setPeekId(issue.id);
-
- const { queryParam } = queryParamGenerator({ board, peekId: issue.id, priority, state, labels });
- router.push(`/issues/${anchor}?${queryParam}`);
};
return (
-
+
{/* id */}
{project_details?.identifier}-{issue?.sequence_id}
{/* name */}
-
@@ -83,6 +80,6 @@ export const IssueListBlock: FC
= observer((props) => {
)}
-
+
);
});
diff --git a/space/components/issues/board-views/list/header.tsx b/space/components/issues/issue-layouts/list/header.tsx
similarity index 54%
rename from space/components/issues/board-views/list/header.tsx
rename to space/components/issues/issue-layouts/list/header.tsx
index 2f8f6c018..a038050a9 100644
--- a/space/components/issues/board-views/list/header.tsx
+++ b/space/components/issues/issue-layouts/list/header.tsx
@@ -1,20 +1,18 @@
"use client";
+
+import React from "react";
import { observer } from "mobx-react-lite";
+// types
+import { IStateLite } from "@plane/types";
// ui
import { StateGroupIcon } from "@plane/ui";
-// constants
-import { issueGroupFilter } from "@/constants/issue";
-// mobx hook
-// import { useIssue } from "@/hooks/store";
-// types
-import { IIssueState } from "@/types/issue";
-export const IssueListHeader = observer(({ state }: { state: IIssueState }) => {
- // const { getCountOfIssuesByState } = useIssue();
- const stateGroup = issueGroupFilter(state.group);
- // const count = getCountOfIssuesByState(state.id);
+type Props = {
+ state: IStateLite;
+};
- if (stateGroup === null) return <>>;
+export const IssueListLayoutHeader: React.FC