diff --git a/apps/space/components/issues/navbar/theme.tsx b/apps/space/components/issues/navbar/theme.tsx
index faee1a706..2e40af8a3 100644
--- a/apps/space/components/issues/navbar/theme.tsx
+++ b/apps/space/components/issues/navbar/theme.tsx
@@ -15,7 +15,7 @@ import { RootStore } from "store/root";
export const NavbarTheme = observer(() => {
const store: RootStore = useMobxStore();
- const { setTheme, theme } = useTheme();
+ const { setTheme, theme = "light" } = useTheme();
const handleTheme = () => {
store?.theme?.setTheme(store?.theme?.theme === "light" ? "dark" : "light");
diff --git a/apps/space/components/views/project-details.tsx b/apps/space/components/views/project-details.tsx
new file mode 100644
index 000000000..f40bb1d0a
--- /dev/null
+++ b/apps/space/components/views/project-details.tsx
@@ -0,0 +1,66 @@
+import { useRouter } from "next/router";
+import { observer } from "mobx-react-lite";
+// components
+import { IssueListView } from "components/issues/board-views/list";
+import { IssueKanbanView } from "components/issues/board-views/kanban";
+import { IssueCalendarView } from "components/issues/board-views/calendar";
+import { IssueSpreadsheetView } from "components/issues/board-views/spreadsheet";
+import { IssueGanttView } from "components/issues/board-views/gantt";
+import { IssuePeekOverview } from "components/issues/peek-overview";
+// mobx store
+import { RootStore } from "store/root";
+import { useMobxStore } from "lib/mobx/store-provider";
+
+export const ProjectDetailsView = () => {
+ const router = useRouter();
+ const { workspace_slug } = router.query;
+
+ const store: RootStore = useMobxStore();
+
+ const activeIssueId = store.issue.activePeekOverviewIssueId;
+
+ return (
+
+ {workspace_slug && (
+
store.issue.setActivePeekOverviewIssueId(null)}
+ issue={store?.issue?.issues?.find((_issue) => _issue.id === activeIssueId) || null}
+ workspaceSlug={workspace_slug.toString()}
+ />
+ )}
+
+ {store?.issue?.loader && !store.issue.issues ? (
+ Loading...
+ ) : (
+ <>
+ {store?.issue?.error ? (
+
+ Something went wrong.
+
+ ) : (
+ store?.issue?.currentIssueBoardView && (
+ <>
+ {store?.issue?.currentIssueBoardView === "list" && (
+
+ )}
+ {store?.issue?.currentIssueBoardView === "kanban" && (
+
+
+
+ )}
+ {store?.issue?.currentIssueBoardView === "calendar" && }
+ {store?.issue?.currentIssueBoardView === "spreadsheet" && }
+ {store?.issue?.currentIssueBoardView === "gantt" && }
+ >
+ )
+ )}
+ >
+ )}
+
+ );
+};
diff --git a/apps/space/constants/seo.ts b/apps/space/constants/seo.ts
index aafd5f7a3..b2baca612 100644
--- a/apps/space/constants/seo.ts
+++ b/apps/space/constants/seo.ts
@@ -1,8 +1,7 @@
-export const SITE_NAME = "Plane | Simple, extensible, open-source project management tool.";
-export const SITE_TITLE = "Plane | Simple, extensible, open-source project management tool.";
-export const SITE_DESCRIPTION =
- "Open-source project management tool to manage issues, sprints, and product roadmaps with peace of mind.";
+export const SITE_NAME = "Plane Deploy | Make your Plane boards and roadmaps pubic with just one-click. ";
+export const SITE_TITLE = "Plane Deploy | Make your Plane boards public with one-click";
+export const SITE_DESCRIPTION = "Plane Deploy is a customer feedback management tool built on top of plane.so";
export const SITE_KEYWORDS =
- "software development, plan, ship, software, accelerate, code management, release management, project management, issue tracking, agile, scrum, kanban, collaboration";
+ "software development, customer feedback, software, accelerate, code management, release management, project management, issue tracking, agile, scrum, kanban, collaboration";
export const SITE_URL = "https://app.plane.so/";
-export const TWITTER_USER_NAME = "Plane | Simple, extensible, open-source project management tool.";
+export const TWITTER_USER_NAME = "planepowers";
diff --git a/apps/space/pages/[workspace_slug]/[project_slug]/index.tsx b/apps/space/pages/[workspace_slug]/[project_slug]/index.tsx
index 57a8b8770..5d29e60f2 100644
--- a/apps/space/pages/[workspace_slug]/[project_slug]/index.tsx
+++ b/apps/space/pages/[workspace_slug]/[project_slug]/index.tsx
@@ -1,27 +1,19 @@
-import { useEffect, useState } from "react";
+import { useEffect } from "react";
+import type { GetServerSideProps } from "next";
import { useRouter } from "next/router";
-// mobx
-import { observer } from "mobx-react-lite";
-// components
-import { IssueListView } from "components/issues/board-views/list";
-import { IssueKanbanView } from "components/issues/board-views/kanban";
-import { IssueCalendarView } from "components/issues/board-views/calendar";
-import { IssueSpreadsheetView } from "components/issues/board-views/spreadsheet";
-import { IssueGanttView } from "components/issues/board-views/gantt";
-import { IssuePeekOverview } from "components/issues/peek-overview";
-// mobx store
-import { RootStore } from "store/root";
-import { useMobxStore } from "lib/mobx/store-provider";
+import Head from "next/head";
// types
import { TIssueBoardKeys } from "store/types";
import ProjectLayout from "layouts/project-layout";
+import { ProjectDetailsView } from "components/views/project-details";
-const WorkspaceProjectPage = () => {
- const store: RootStore = useMobxStore();
+const WorkspaceProjectPage = (props: any) => {
+ console.log("props", props);
+ const SITE_TITLE = props?.project_settings?.project_details?.name || "Plane | Deploy";
const router = useRouter();
- const activeIssueId = store.issue.activePeekOverviewIssueId;
+ // const activeIssueId = store.issue.activePeekOverviewIssueId;
const { workspace_slug, project_slug, board, states, labels, priorities } = router.query as {
workspace_slug: string;
@@ -33,124 +25,96 @@ const WorkspaceProjectPage = () => {
};
// updating default board view when we are in the issues page
- useEffect(() => {
- if (workspace_slug && project_slug && store?.project?.workspaceProjectSettings) {
- const workspacePRojectSettingViews = store?.project?.workspaceProjectSettings?.views;
- const userAccessViews: TIssueBoardKeys[] = [];
+ // useEffect(() => {
+ // if (workspace_slug && project_slug && store?.project?.workspaceProjectSettings) {
+ // const workspaceProjectSettingViews = store?.project?.workspaceProjectSettings?.views;
+ // const userAccessViews: TIssueBoardKeys[] = [];
- Object.keys(workspacePRojectSettingViews).filter((_key) => {
- if (_key === "list" && workspacePRojectSettingViews.list === true) userAccessViews.push(_key);
- if (_key === "kanban" && workspacePRojectSettingViews.kanban === true) userAccessViews.push(_key);
- if (_key === "calendar" && workspacePRojectSettingViews.calendar === true) userAccessViews.push(_key);
- if (_key === "spreadsheet" && workspacePRojectSettingViews.spreadsheet === true) userAccessViews.push(_key);
- if (_key === "gantt" && workspacePRojectSettingViews.gantt === true) userAccessViews.push(_key);
- });
+ // Object.keys(workspaceProjectSettingViews).filter((_key) => {
+ // if (_key === "list" && workspaceProjectSettingViews.list === true) userAccessViews.push(_key);
+ // if (_key === "kanban" && workspaceProjectSettingViews.kanban === true) userAccessViews.push(_key);
+ // if (_key === "calendar" && workspaceProjectSettingViews.calendar === true) userAccessViews.push(_key);
+ // if (_key === "spreadsheet" && workspaceProjectSettingViews.spreadsheet === true) userAccessViews.push(_key);
+ // if (_key === "gantt" && workspaceProjectSettingViews.gantt === true) userAccessViews.push(_key);
+ // });
- let url = `/${workspace_slug}/${project_slug}`;
- let _board = board;
+ // let url = `/${workspace_slug}/${project_slug}`;
+ // let _board = board;
- if (userAccessViews && userAccessViews.length > 0) {
- if (!board) {
- store.issue.setCurrentIssueBoardView(userAccessViews[0]);
- _board = userAccessViews[0];
- } else {
- if (userAccessViews.includes(board)) {
- if (store.issue.currentIssueBoardView === null) store.issue.setCurrentIssueBoardView(board);
- else {
- if (board === store.issue.currentIssueBoardView) {
- _board = board;
- } else {
- _board = board;
- store.issue.setCurrentIssueBoardView(board);
- }
- }
- } else {
- store.issue.setCurrentIssueBoardView(userAccessViews[0]);
- _board = userAccessViews[0];
- }
- }
- }
+ // if (userAccessViews && userAccessViews.length > 0) {
+ // if (!board) {
+ // store.issue.setCurrentIssueBoardView(userAccessViews[0]);
+ // _board = userAccessViews[0];
+ // } else {
+ // if (userAccessViews.includes(board)) {
+ // if (store.issue.currentIssueBoardView === null) store.issue.setCurrentIssueBoardView(board);
+ // else {
+ // if (board === store.issue.currentIssueBoardView) {
+ // _board = board;
+ // } else {
+ // _board = board;
+ // store.issue.setCurrentIssueBoardView(board);
+ // }
+ // }
+ // } else {
+ // store.issue.setCurrentIssueBoardView(userAccessViews[0]);
+ // _board = userAccessViews[0];
+ // }
+ // }
+ // }
- _board = _board || "list";
- url = `${url}?board=${_board}`;
+ // _board = _board || "list";
+ // url = `${url}?board=${_board}`;
- if (states) url = `${url}&states=${states}`;
- if (labels) url = `${url}&labels=${labels}`;
- if (priorities) url = `${url}&priorities=${priorities}`;
+ // if (states) url = `${url}&states=${states}`;
+ // if (labels) url = `${url}&labels=${labels}`;
+ // if (priorities) url = `${url}&priorities=${priorities}`;
- url = decodeURIComponent(url);
+ // url = decodeURIComponent(url);
- router.replace(url);
- }
- }, [
- workspace_slug,
- project_slug,
- board,
- router,
- store?.issue,
- store?.project?.workspaceProjectSettings,
- states,
- labels,
- priorities,
- ]);
+ // router.replace(url);
+ // }
+ // }, [
+ // workspace_slug,
+ // project_slug,
+ // board,
+ // router,
+ // store?.issue,
+ // store?.project?.workspaceProjectSettings,
+ // states,
+ // labels,
+ // priorities,
+ // ]);
- useEffect(() => {
- if (!workspace_slug || !project_slug) return;
+ // useEffect(() => {
+ // if (!workspace_slug || !project_slug) return;
- const params = {
- state: states || null,
- labels: labels || null,
- priority: priorities || null,
- };
+ // const params = {
+ // state: states || null,
+ // labels: labels || null,
+ // priority: priorities || null,
+ // };
- store?.project?.getProjectSettingsAsync(workspace_slug, project_slug);
- store?.issue?.getIssuesAsync(workspace_slug, project_slug, params);
- }, [workspace_slug, project_slug, store?.project, store?.issue, states, labels, priorities]);
+ // store?.project?.getProjectSettingsAsync(workspace_slug, project_slug);
+ // store?.issue?.getIssuesAsync(workspace_slug, project_slug, params);
+ // }, [workspace_slug, project_slug, store?.project, store?.issue, states, labels, priorities]);
return (
-
-
store.issue.setActivePeekOverviewIssueId(null)}
- issue={store?.issue?.issues?.find((_issue) => _issue.id === activeIssueId) || null}
- workspaceSlug={workspace_slug}
- />
-
- {store?.issue?.loader && !store.issue.issues ? (
- Loading...
- ) : (
- <>
- {store?.issue?.error ? (
-
- Something went wrong.
-
- ) : (
- store?.issue?.currentIssueBoardView && (
- <>
- {store?.issue?.currentIssueBoardView === "list" && (
-
- )}
- {store?.issue?.currentIssueBoardView === "kanban" && (
-
-
-
- )}
- {store?.issue?.currentIssueBoardView === "calendar" && }
- {store?.issue?.currentIssueBoardView === "spreadsheet" && }
- {store?.issue?.currentIssueBoardView === "gantt" && }
- >
- )
- )}
- >
- )}
-
+
+ {SITE_TITLE}
+
+
);
};
-export default observer(WorkspaceProjectPage);
+export const getServerSideProps: GetServerSideProps = async ({ query: { workspace_slug, project_slug } }) => {
+ const res = await fetch(
+ `${process.env.NEXT_PUBLIC_API_BASE_URL}/api/public/workspaces/${workspace_slug}/project-boards/${project_slug}/settings/`
+ );
+ const project_settings = await res.json();
+ return { props: { project_settings } };
+};
+
+export default WorkspaceProjectPage;
diff --git a/apps/space/public/favicon/android-chrome-192x192.png b/apps/space/public/favicon/android-chrome-192x192.png
new file mode 100644
index 000000000..62e95acfc
Binary files /dev/null and b/apps/space/public/favicon/android-chrome-192x192.png differ
diff --git a/apps/space/public/favicon/android-chrome-512x512.png b/apps/space/public/favicon/android-chrome-512x512.png
new file mode 100644
index 000000000..41400832b
Binary files /dev/null and b/apps/space/public/favicon/android-chrome-512x512.png differ
diff --git a/apps/space/public/favicon/apple-touch-icon.png b/apps/space/public/favicon/apple-touch-icon.png
new file mode 100644
index 000000000..5273d4951
Binary files /dev/null and b/apps/space/public/favicon/apple-touch-icon.png differ
diff --git a/apps/space/public/favicon/favicon-16x16.png b/apps/space/public/favicon/favicon-16x16.png
new file mode 100644
index 000000000..8ddbd49c0
Binary files /dev/null and b/apps/space/public/favicon/favicon-16x16.png differ
diff --git a/apps/space/public/favicon/favicon-32x32.png b/apps/space/public/favicon/favicon-32x32.png
new file mode 100644
index 000000000..80cbe7a68
Binary files /dev/null and b/apps/space/public/favicon/favicon-32x32.png differ
diff --git a/apps/space/public/favicon/favicon.ico b/apps/space/public/favicon/favicon.ico
new file mode 100644
index 000000000..9094a07c7
Binary files /dev/null and b/apps/space/public/favicon/favicon.ico differ
diff --git a/apps/space/public/favicon/site.webmanifest b/apps/space/public/favicon/site.webmanifest
new file mode 100644
index 000000000..45dc8a206
--- /dev/null
+++ b/apps/space/public/favicon/site.webmanifest
@@ -0,0 +1 @@
+{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
\ No newline at end of file