diff --git a/frontend/src/pages/organization/RoleByIDPage/route.tsx b/frontend/src/pages/organization/RoleByIDPage/route.tsx
index d0d65f661..9ff1f4f4d 100644
--- a/frontend/src/pages/organization/RoleByIDPage/route.tsx
+++ b/frontend/src/pages/organization/RoleByIDPage/route.tsx
@@ -1,9 +1,24 @@
-import { createFileRoute } from "@tanstack/react-router";
+import { createFileRoute, linkOptions } from "@tanstack/react-router";
import { RoleByIDPage } from "./RoleByIDPage";
export const Route = createFileRoute(
"/_authenticate/_inject-org-details/organization/_layout/roles/$roleId"
)({
- component: RoleByIDPage
+ component: RoleByIDPage,
+ context: () => ({
+ breadcrumbs: [
+ {
+ label: "home",
+ link: linkOptions({ to: "/organization/secret-manager/overview" })
+ },
+ {
+ label: "Access Control",
+ link: linkOptions({ to: "/organization/access-management" })
+ },
+ {
+ label: "RBAC"
+ }
+ ]
+ })
});
diff --git a/frontend/src/pages/organization/SecretManagerOverviewPage/SecretManagerOverviewPage.tsx b/frontend/src/pages/organization/SecretManagerOverviewPage/SecretManagerOverviewPage.tsx
index 1588ae970..dc89362b5 100644
--- a/frontend/src/pages/organization/SecretManagerOverviewPage/SecretManagerOverviewPage.tsx
+++ b/frontend/src/pages/organization/SecretManagerOverviewPage/SecretManagerOverviewPage.tsx
@@ -22,7 +22,15 @@ import { UpgradePlanModal } from "@app/components/license/UpgradePlanModal";
import { createNotification } from "@app/components/notifications";
import { OrgPermissionCan } from "@app/components/permissions";
import { NewProjectModal } from "@app/components/projects";
-import { Button, IconButton, Input, Pagination, Skeleton, Tooltip } from "@app/components/v2";
+import {
+ Button,
+ IconButton,
+ Input,
+ PageHeader,
+ Pagination,
+ Skeleton,
+ Tooltip
+} from "@app/components/v2";
import {
OrgPermissionActions,
OrgPermissionSubjects,
@@ -50,13 +58,6 @@ enum ProjectOrderBy {
Name = "name"
}
-const formatTitle = (type: ProjectType) => {
- if (type === ProjectType.SecretManager) return "Secret Management";
- if (type === ProjectType.CertificateManager) return "Cert Management";
- if (type === ProjectType.KMS) return "Key Management";
- return "SSH";
-};
-
const formatDescription = (type: ProjectType) => {
if (type === ProjectType.SecretManager)
return "Securely store, manage, and rotate various application secrets, such as database credentials, API keys, etc.";
@@ -371,7 +372,7 @@ export const ProductOverviewPage = ({ type }: Props) => {
{!serverDetails?.redisConfigured && (
-
+
)}
-
-
-
-
{formatDescription(type)}
-
-
+
+
+
-
-
Secret Scanning
-
- Automatically monitor your GitHub activity and prevent secret leaks
-
+
+
{config.isSecretScanningDisabled && (
We are working on improving the performance of secret scanning due to increased
@@ -210,4 +210,4 @@ export const SecretScanningPage = withPermission(
action: OrgPermissionActions.Read,
subject: OrgPermissionSubjects.SecretScanning
}
-);
+);
\ No newline at end of file
diff --git a/frontend/src/pages/organization/SecretScanningPage/route.tsx b/frontend/src/pages/organization/SecretScanningPage/route.tsx
index d77c728fa..27dbece84 100644
--- a/frontend/src/pages/organization/SecretScanningPage/route.tsx
+++ b/frontend/src/pages/organization/SecretScanningPage/route.tsx
@@ -1,4 +1,4 @@
-import { createFileRoute, stripSearchParams } from "@tanstack/react-router";
+import { createFileRoute, linkOptions, stripSearchParams } from "@tanstack/react-router";
import { zodValidator } from "@tanstack/zod-adapter";
import { z } from "zod";
@@ -12,8 +12,8 @@ const SecretScanningQueryParams = z.object({
export const Route = createFileRoute(
"/_authenticate/_inject-org-details/organization/_layout/secret-scanning"
)({
- component: SecretScanningPage,
validateSearch: zodValidator(SecretScanningQueryParams),
+ component: SecretScanningPage,
search: {
middlewares: [
stripSearchParams({
@@ -21,5 +21,16 @@ export const Route = createFileRoute(
state: ""
})
]
- }
+ },
+ context: () => ({
+ breadcrumbs: [
+ {
+ label: "home",
+ link: linkOptions({ to: "/" })
+ },
+ {
+ label: "secret scanning"
+ }
+ ]
+ })
});
diff --git a/frontend/src/pages/organization/SecretSharingPage/SecretSharingPage.tsx b/frontend/src/pages/organization/SecretSharingPage/SecretSharingPage.tsx
index f5aa294f8..8270d9cdc 100644
--- a/frontend/src/pages/organization/SecretSharingPage/SecretSharingPage.tsx
+++ b/frontend/src/pages/organization/SecretSharingPage/SecretSharingPage.tsx
@@ -4,6 +4,7 @@ import { faArrowUpRightFromSquare } from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { ShareSecretSection } from "./components";
+import { PageHeader } from "@app/components/v2";
export const SecretSharingPage = () => {
const { t } = useTranslation();
@@ -18,28 +19,25 @@ export const SecretSharingPage = () => {
-
-
-
-
Secret Sharing
-
Share secrets securely using a shareable link
-
-
-
+
diff --git a/frontend/src/pages/organization/SecretSharingPage/route.tsx b/frontend/src/pages/organization/SecretSharingPage/route.tsx
index fec2f8925..1389edd40 100644
--- a/frontend/src/pages/organization/SecretSharingPage/route.tsx
+++ b/frontend/src/pages/organization/SecretSharingPage/route.tsx
@@ -1,9 +1,20 @@
-import { createFileRoute } from "@tanstack/react-router";
+import { createFileRoute, linkOptions } from "@tanstack/react-router";
import { SecretSharingPage } from "./SecretSharingPage";
export const Route = createFileRoute(
"/_authenticate/_inject-org-details/organization/_layout/secret-sharing"
)({
- component: SecretSharingPage
+ component: SecretSharingPage,
+ context: () => ({
+ breadcrumbs: [
+ {
+ label: "home",
+ link: linkOptions({ to: "/" })
+ },
+ {
+ label: "secret sharing"
+ }
+ ]
+ })
});
diff --git a/frontend/src/pages/organization/SettingsPage/SettingsPage.tsx b/frontend/src/pages/organization/SettingsPage/SettingsPage.tsx
index 32ee0ae1c..454c7c100 100644
--- a/frontend/src/pages/organization/SettingsPage/SettingsPage.tsx
+++ b/frontend/src/pages/organization/SettingsPage/SettingsPage.tsx
@@ -2,6 +2,7 @@ import { Helmet } from "react-helmet";
import { useTranslation } from "react-i18next";
import { OrgTabGroup } from "./components";
+import { PageHeader } from "@app/components/v2";
export const SettingsPage = () => {
const { t } = useTranslation();
@@ -11,11 +12,9 @@ export const SettingsPage = () => {
{t("common.head-title", { title: t("settings.org.title") })}
-
-
-
-
{t("settings.org.title")}
-
+
diff --git a/frontend/src/pages/organization/SettingsPage/route.tsx b/frontend/src/pages/organization/SettingsPage/route.tsx
index d19733c89..40ac5b53f 100644
--- a/frontend/src/pages/organization/SettingsPage/route.tsx
+++ b/frontend/src/pages/organization/SettingsPage/route.tsx
@@ -1,4 +1,4 @@
-import { createFileRoute, stripSearchParams } from "@tanstack/react-router";
+import { createFileRoute, linkOptions, stripSearchParams } from "@tanstack/react-router";
import { zodValidator } from "@tanstack/zod-adapter";
import { z } from "zod";
@@ -15,5 +15,16 @@ export const Route = createFileRoute(
validateSearch: zodValidator(SettingsPageQueryParams),
search: {
middlewares: [stripSearchParams({ selectedTab: "" })]
- }
+ },
+ context: () => ({
+ breadcrumbs: [
+ {
+ label: "home",
+ link: linkOptions({ to: "/" })
+ },
+ {
+ label: "Settings"
+ }
+ ]
+ })
});
diff --git a/frontend/src/pages/organization/UserDetailsByIDPage/UserDetailsByIDPage.tsx b/frontend/src/pages/organization/UserDetailsByIDPage/UserDetailsByIDPage.tsx
index 2a4e9ca57..ed0b46888 100644
--- a/frontend/src/pages/organization/UserDetailsByIDPage/UserDetailsByIDPage.tsx
+++ b/frontend/src/pages/organization/UserDetailsByIDPage/UserDetailsByIDPage.tsx
@@ -1,7 +1,5 @@
import { Helmet } from "react-helmet";
import { useTranslation } from "react-i18next";
-import { faChevronLeft, faEllipsis } from "@fortawesome/free-solid-svg-icons";
-import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { useNavigate, useParams } from "@tanstack/react-router";
import { twMerge } from "tailwind-merge";
@@ -15,6 +13,7 @@ import {
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
+ PageHeader,
Tooltip
} from "@app/components/v2";
import { ROUTE_PATHS } from "@app/const/routes";
@@ -118,143 +117,132 @@ const Page = withPermission(
return (
{membership && (
-
-
}
- onClick={() => {
- navigate({
- to: "/organization/access-management" as const,
- search: {
- selectedTab: OrgAccessControlTabSections.Member
- }
- });
- }}
- className="mb-4"
- >
- Users
-
-
-
- {membership.user.firstName || membership.user.lastName
+
+
- {userId !== membership.user.id && (
-
-
-
-
-
-
-
-
-
-
- {(isAllowed) => (
-
- handlePopUpOpen("orgMembership", {
- membershipId: membership.id,
- role: membership.role,
- roleId: membership.roleId
- })
- }
- disabled={!isAllowed}
- >
- Edit User
-
- )}
-
-
- {(isAllowed) => (
- {
- if (currentOrg?.scimEnabled) {
- createNotification({
- text: "You cannot manage users from Infisical when SCIM is enabled for your organization",
- type: "error"
- });
- return;
+ : "-"
+ }
+ >
+
+ {userId !== membership.user.id && (
+
+
+
+
+
+
+
+
+
+
+ {(isAllowed) => (
+
+ handlePopUpOpen("orgMembership", {
+ membershipId: membership.id,
+ role: membership.role,
+ roleId: membership.roleId
+ })
}
-
- if (!membership.isActive) {
- // activate user
- await updateOrgMembership({
- organizationId: orgId,
- membershipId,
- isActive: true
- });
-
- return;
+ disabled={!isAllowed}
+ >
+ Edit User
+
+ )}
+
+
+ {(isAllowed) => (
+ {
+ if (currentOrg?.scimEnabled) {
+ createNotification({
+ text: "You cannot manage users from Infisical when SCIM is enabled for your organization",
+ type: "error"
+ });
+ return;
+ }
- // deactivate user
- handlePopUpOpen("deactivateMember", {
- orgMembershipId: membershipId,
- username: membership.user.username
- });
- }}
- disabled={!isAllowed}
- >
- {`${membership.isActive ? "Deactivate" : "Activate"} User`}
-
- )}
-
-
- {(isAllowed) => (
- {
- if (currentOrg?.scimEnabled) {
- createNotification({
- text: "You cannot manage users from Infisical when SCIM is enabled for your organization",
- type: "error"
+ if (!membership.isActive) {
+ // activate user
+ await updateOrgMembership({
+ organizationId: orgId,
+ membershipId,
+ isActive: true
+ });
+
+ return;
+ }
+
+ // deactivate user
+ handlePopUpOpen("deactivateMember", {
+ orgMembershipId: membershipId,
+ username: membership.user.username
});
- return;
- }
+ }}
+ disabled={!isAllowed}
+ >
+ {`${membership.isActive ? "Deactivate" : "Activate"} User`}
+
+ )}
+
+
+ {(isAllowed) => (
+ {
+ if (currentOrg?.scimEnabled) {
+ createNotification({
+ text: "You cannot manage users from Infisical when SCIM is enabled for your organization",
+ type: "error"
+ });
+ return;
+ }
- handlePopUpOpen("removeMember", {
- orgMembershipId: membershipId,
- username: membership.user.username
- });
- }}
- disabled={!isAllowed}
- >
- Remove User
-
- )}
-
-
-
- )}
-
+ handlePopUpOpen("removeMember", {
+ orgMembershipId: membershipId,
+ username: membership.user.username
+ });
+ }}
+ disabled={!isAllowed}
+ >
+ Remove User
+
+ )}
+
+
+
+ )}
+
+
diff --git a/frontend/src/pages/organization/UserDetailsByIDPage/route.tsx b/frontend/src/pages/organization/UserDetailsByIDPage/route.tsx
index 37bac8f73..4806c9124 100644
--- a/frontend/src/pages/organization/UserDetailsByIDPage/route.tsx
+++ b/frontend/src/pages/organization/UserDetailsByIDPage/route.tsx
@@ -1,9 +1,24 @@
-import { createFileRoute } from "@tanstack/react-router";
+import { createFileRoute, linkOptions } from "@tanstack/react-router";
import { UserDetailsByIDPage } from "./UserDetailsByIDPage";
export const Route = createFileRoute(
"/_authenticate/_inject-org-details/organization/_layout/members/$membershipId"
)({
- component: UserDetailsByIDPage
+ component: UserDetailsByIDPage,
+ context: () => ({
+ breadcrumbs: [
+ {
+ label: "home",
+ link: linkOptions({ to: "/organization/secret-manager/overview" })
+ },
+ {
+ label: "Access Control",
+ link: linkOptions({ to: "/organization/access-management" })
+ },
+ {
+ label: "Users"
+ }
+ ]
+ })
});