[WEB-3040] chore: project breadcrumb link component added to CE and EE (#2113)

* chore: project breadcrumb link component added to CE and EE

* chore: project breadcrumb redirection improvement
This commit is contained in:
Anmol Singh Bhatia
2025-01-06 20:45:40 +05:30
committed by GitHub
parent 6e726aea46
commit 9a32da945f
6 changed files with 72 additions and 84 deletions

View File

@@ -11,7 +11,7 @@ import { TIssue } from "@plane/types";
import { Breadcrumbs, Header, EpicIcon } from "@plane/ui";
// components
import { EUserPermissions, EUserPermissionsLevel } from "@/ce/constants";
import { BreadcrumbLink, Logo } from "@/components/common";
import { BreadcrumbLink } from "@/components/common";
// helpers
import { cn } from "@/helpers/common.helper";
// hooks
@@ -19,6 +19,7 @@ import { useAppTheme, useIssueDetail, useProject, useUserPermissions } from "@/h
import { useAppRouter } from "@/hooks/use-app-router";
import { useIssuesActions } from "@/hooks/use-issues-actions";
// plane-web
import { ProjectBreadcrumb } from "@/plane-web/components/breadcrumbs";
import { ProjectEpicQuickActions } from "@/plane-web/components/epics";
export const ProjectEpicDetailsHeader = observer(() => {
@@ -64,22 +65,7 @@ export const ProjectEpicDetailsHeader = observer(() => {
<Header.LeftItem>
<div>
<Breadcrumbs onBack={router.back} isLoading={loader}>
<Breadcrumbs.BreadcrumbItem
type="text"
link={
<BreadcrumbLink
href={`/${workspaceSlug}/projects`}
label={currentProjectDetails?.name ?? "Project"}
icon={
currentProjectDetails && (
<span className="grid h-4 w-4 flex-shrink-0 place-items-center">
<Logo logo={currentProjectDetails?.logo_props} size={16} />
</span>
)
}
/>
}
/>
<ProjectBreadcrumb />
<Breadcrumbs.BreadcrumbItem
type="text"
link={

View File

@@ -3,21 +3,20 @@
import { useState } from "react";
import { observer } from "mobx-react";
import { useParams } from "next/navigation";
// icons
import { Briefcase } from "lucide-react";
// plane constants
import { EIssuesStoreType } from "@plane/constants";
// ui
import { Breadcrumbs, Button, Tooltip, Header, EpicIcon } from "@plane/ui";
// components
import { BreadcrumbLink, CountChip, Logo } from "@/components/common";
import { BreadcrumbLink, CountChip } from "@/components/common";
import HeaderFilters from "@/components/issues/filters";
// hooks
import { useProject, useUserPermissions } from "@/hooks/store";
import { useIssues } from "@/hooks/store/use-issues";
import { useAppRouter } from "@/hooks/use-app-router";
import { usePlatformOS } from "@/hooks/use-platform-os";
// plane web constants
// plane web
import { ProjectBreadcrumb } from "@/plane-web/components/breadcrumbs";
import { CreateUpdateEpicModal } from "@/plane-web/components/epics/epic-modal";
import { EUserPermissions, EUserPermissionsLevel } from "@/plane-web/constants/user-permissions";
import { useIssueTypes } from "@/plane-web/hooks/store";
@@ -58,27 +57,7 @@ export const EpicsHeader = observer(() => {
<Header.LeftItem>
<div className="flex items-center gap-2.5">
<Breadcrumbs onBack={() => router.back()} isLoading={loader}>
<Breadcrumbs.BreadcrumbItem
type="text"
link={
<BreadcrumbLink
label={currentProjectDetails?.name ?? "Project"}
icon={
currentProjectDetails ? (
currentProjectDetails && (
<span className="grid place-items-center flex-shrink-0 h-4 w-4">
<Logo logo={currentProjectDetails?.logo_props} size={16} />
</span>
)
) : (
<span className="grid h-7 w-7 flex-shrink-0 place-items-center rounded uppercase">
<Briefcase className="h-4 w-4" />
</span>
)
}
/>
}
/>
<ProjectBreadcrumb />
<Breadcrumbs.BreadcrumbItem
type="text"
link={<BreadcrumbLink label="Epics" icon={<EpicIcon className="h-4 w-4 text-custom-text-300" />} />}

View File

@@ -1 +1 @@
export * from "ce/components/breadcrumbs";
export * from "./project";

View File

@@ -0,0 +1,53 @@
"use client";
import { observer } from "mobx-react";
import { useParams } from "next/navigation";
import { Briefcase } from "lucide-react";
// ui
import { Breadcrumbs, Logo } from "@plane/ui";
// components
import { ProjectBreadcrumb as CEProjectBreadcrumb } from "@/ce/components/breadcrumbs";
import { BreadcrumbLink } from "@/components/common";
// hooks
import { useProject } from "@/hooks/store";
// local components
import { WithFeatureFlagHOC } from "../feature-flags";
export const ProjectBreadcrumb = observer(() => {
// router
const { workspaceSlug } = useParams() as { workspaceSlug: string };
// store hooks
const { currentProjectDetails } = useProject();
return (
<WithFeatureFlagHOC
workspaceSlug={workspaceSlug?.toString()}
flag="PROJECT_OVERVIEW"
fallback={<CEProjectBreadcrumb />}
>
<Breadcrumbs.BreadcrumbItem
type="text"
link={
<BreadcrumbLink
href={`/${workspaceSlug}/projects/${currentProjectDetails?.id}/overview`}
label={currentProjectDetails?.name ?? "Project"}
icon={
currentProjectDetails ? (
currentProjectDetails && (
<span className="grid place-items-center flex-shrink-0 h-4 w-4">
<Logo logo={currentProjectDetails?.logo_props} size={16} />
</span>
)
) : (
<span className="grid h-7 w-7 flex-shrink-0 place-items-center rounded uppercase">
<Briefcase className="h-4 w-4" />
</span>
)
}
/>
}
/>
</WithFeatureFlagHOC>
);
});

View File

@@ -4,13 +4,13 @@ import { observer } from "mobx-react";
import Link from "next/link";
import { useParams } from "next/navigation";
// icons
import { Briefcase, Circle, ExternalLink } from "lucide-react";
import { Circle, ExternalLink } from "lucide-react";
// plane constants
import { EIssuesStoreType } from "@plane/constants";
// ui
import { Breadcrumbs, Button, LayersIcon, Tooltip, Header, OverviewIcon } from "@plane/ui";
// components
import { BreadcrumbLink, CountChip, Logo } from "@/components/common";
import { BreadcrumbLink, CountChip } from "@/components/common";
// constants
import HeaderFilters from "@/components/issues/filters";
// helpers
@@ -20,6 +20,8 @@ import { useEventTracker, useProject, useCommandPalette, useUserPermissions } fr
import { useIssues } from "@/hooks/store/use-issues";
import { useAppRouter } from "@/hooks/use-app-router";
import { usePlatformOS } from "@/hooks/use-platform-os";
// plane web
import { ProjectBreadcrumb } from "@/plane-web/components/breadcrumbs";
import { EUserPermissions, EUserPermissionsLevel } from "@/plane-web/constants/user-permissions";
export const AdvancedIssuesHeader = observer(() => {
@@ -52,27 +54,7 @@ export const AdvancedIssuesHeader = observer(() => {
<Header.LeftItem>
<div className="flex items-center gap-2.5">
<Breadcrumbs onBack={() => router.back()} isLoading={loader}>
<Breadcrumbs.BreadcrumbItem
type="text"
link={
<BreadcrumbLink
label={currentProjectDetails?.name ?? "Project"}
icon={
currentProjectDetails ? (
currentProjectDetails && (
<span className="grid place-items-center flex-shrink-0 h-4 w-4">
<Logo logo={currentProjectDetails?.logo_props} size={16} />
</span>
)
) : (
<span className="grid h-7 w-7 flex-shrink-0 place-items-center rounded uppercase">
<Briefcase className="h-4 w-4" />
</span>
)
}
/>
}
/>
<ProjectBreadcrumb />
<Breadcrumbs.BreadcrumbItem
type="text"

View File

@@ -8,11 +8,14 @@ import { Info, RefreshCcw } from "lucide-react";
// ui
import { Breadcrumbs, Button, Intake, Header, Popover, Loader } from "@plane/ui";
// components
import { BreadcrumbLink, Logo } from "@/components/common";
// hooks
import { BreadcrumbLink } from "@/components/common";
import { InboxIssueCreateModalRoot } from "@/components/inbox";
// hooks
import { useProject, useProjectInbox, useUserPermissions } from "@/hooks/store";
// plane web
import { ProjectBreadcrumb } from "@/plane-web/components/breadcrumbs";
import { EUserPermissions, EUserPermissionsLevel } from "@/plane-web/constants/user-permissions";
// local components
import IntakeTooltip from "../intake-tooltip";
export const IntakeHeader: FC = observer(() => {
@@ -48,22 +51,7 @@ export const IntakeHeader: FC = observer(() => {
<Header.LeftItem>
<div className="flex items-center gap-1">
<Breadcrumbs isLoading={currentProjectDetailsLoader}>
<Breadcrumbs.BreadcrumbItem
type="text"
link={
<BreadcrumbLink
href={`/${workspaceSlug}/projects`}
label={currentProjectDetails?.name ?? "Project"}
icon={
currentProjectDetails && (
<span className="grid place-items-center flex-shrink-0 h-4 w-4">
<Logo logo={currentProjectDetails?.logo_props} size={16} />
</span>
)
}
/>
}
/>
<ProjectBreadcrumb />
<Breadcrumbs.BreadcrumbItem
type="text"
link={<BreadcrumbLink label="Intake" icon={<Intake className="h-4 w-4 text-custom-text-300" />} />}