diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx index d08ae98df..f04d609d4 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx @@ -4,7 +4,7 @@ import { useCallback } from "react"; import { observer } from "mobx-react"; import Link from "next/link"; import { useParams } from "next/navigation"; -import { Earth, Layers, Lock } from "lucide-react"; +import { Layers, Lock } from "lucide-react"; // types import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; // ui @@ -23,6 +23,7 @@ import { EUserProjectRoles } from "@/constants/project"; import { EViewAccess } from "@/constants/views"; // helpers import { isIssueFilterActive } from "@/helpers/filter.helper"; +import { getPublishViewLink } from "@/helpers/project-views.helpers"; import { truncateText } from "@/helpers/string.helper"; // hooks import { @@ -132,6 +133,7 @@ export const ProjectViewIssuesHeader: React.FC = observer(() => { const canUserCreateIssue = currentProjectRole && [EUserProjectRoles.ADMIN, EUserProjectRoles.MEMBER].includes(currentProjectRole); + const publishLink = getPublishViewLink(viewDetails?.anchor); return (
@@ -206,11 +208,25 @@ export const ProjectViewIssuesHeader: React.FC = observer(() => { /> -
- - {viewDetails?.access === EViewAccess.PUBLIC ? : } - -
+ {viewDetails?.access === EViewAccess.PRIVATE && ( +
+ + + +
+ )} + + {viewDetails?.anchor && publishLink && ( + + + Live + + )}
{!viewDetails?.is_locked && ( diff --git a/web/helpers/project-views.helpers.ts b/web/helpers/project-views.helpers.ts index c0c42b104..0de90196d 100644 --- a/web/helpers/project-views.helpers.ts +++ b/web/helpers/project-views.helpers.ts @@ -2,6 +2,7 @@ import isNil from "lodash/isNil"; import orderBy from "lodash/orderBy"; import { IProjectView, TViewFilterProps, TViewFiltersSortBy, TViewFiltersSortKey } from "@plane/types"; import { getDate } from "@/helpers/date-time.helper"; +import { SPACE_BASE_PATH, SPACE_BASE_URL } from "./common.helper"; import { satisfiesDateFilter } from "./filter.helper"; /** @@ -88,3 +89,15 @@ export const getValidatedViewFilters = (data: Partial) => { return data; }; + +/** + * returns published view link + * @param anchor + * @returns + */ +export const getPublishViewLink = (anchor: string | undefined) => { + if (!anchor) return; + + const SPACE_APP_URL = (SPACE_BASE_URL.trim() === "" ? window.location.origin : SPACE_BASE_URL) + SPACE_BASE_PATH; + return `${SPACE_APP_URL}/views/${anchor}`; +}; \ No newline at end of file