diff --git a/frontend/src/components/navigation/NavHeader.tsx b/frontend/src/components/navigation/NavHeader.tsx index 99f5fbdd2..ba25fd847 100644 --- a/frontend/src/components/navigation/NavHeader.tsx +++ b/frontend/src/components/navigation/NavHeader.tsx @@ -93,7 +93,7 @@ export default function NavHeader({ {pageName === "Secrets" ? ( @@ -129,7 +129,7 @@ export default function NavHeader({
@@ -191,7 +191,7 @@ export default function NavHeader({
) : ( ) : ( { createNotification({ text: "Project created", type: "success" }); reset(); onOpenChange(false); - navigate({ to: getProjectHomePage(project), params: { projectId: project.id } }); + navigate({ to: getProjectHomePage(project.defaultType), params: { projectId: project.id } }); } catch (err) { console.error(err); createNotification({ text: "Failed to create project", type: "error" }); diff --git a/frontend/src/components/utilities/ShouldWrapComponent.tsx b/frontend/src/components/utilities/ShouldWrapComponent.tsx index f6503d35d..25f5d1659 100644 --- a/frontend/src/components/utilities/ShouldWrapComponent.tsx +++ b/frontend/src/components/utilities/ShouldWrapComponent.tsx @@ -1,4 +1,4 @@ -import { ReactNode, ComponentType } from "react"; +import { ComponentType, ReactNode } from "react"; type ShouldWrapProps> = { children: ReactNode; diff --git a/frontend/src/components/v2/index.tsx b/frontend/src/components/v2/index.tsx index 202e5ecf8..1256cf005 100644 --- a/frontend/src/components/v2/index.tsx +++ b/frontend/src/components/v2/index.tsx @@ -8,9 +8,9 @@ export * from "./Card"; export * from "./Checkbox"; export * from "./ConfirmActionModal"; export * from "./ContentLoader"; -export * from "./Divider"; export * from "./DatePicker"; export * from "./DeleteActionModal"; +export * from "./Divider"; export * from "./Drawer"; export * from "./Dropdown"; export * from "./Editor"; diff --git a/frontend/src/helpers/project.ts b/frontend/src/helpers/project.ts index bc5f844f7..e75bb63de 100644 --- a/frontend/src/helpers/project.ts +++ b/frontend/src/helpers/project.ts @@ -1,6 +1,6 @@ import { apiRequest } from "@app/config/request"; import { createWorkspace } from "@app/hooks/api/workspace/queries"; -import { ProjectType, Workspace } from "@app/hooks/api/workspace/types"; +import { ProjectType } from "@app/hooks/api/workspace/types"; const secretsToBeAdded = [ { diff --git a/frontend/src/hooks/api/identities/types.ts b/frontend/src/hooks/api/identities/types.ts index 1af1cc24c..b233738d8 100644 --- a/frontend/src/hooks/api/identities/types.ts +++ b/frontend/src/hooks/api/identities/types.ts @@ -51,7 +51,7 @@ export type IdentityMembershipOrg = { export type IdentityMembership = { id: string; identity: Identity; - project: Pick; + project: Pick; roles: Array< { id: string; diff --git a/frontend/src/layouts/AdminLayout/Sidebar.tsx b/frontend/src/layouts/AdminLayout/Sidebar.tsx index 60240f72f..df2ab9c68 100644 --- a/frontend/src/layouts/AdminLayout/Sidebar.tsx +++ b/frontend/src/layouts/AdminLayout/Sidebar.tsx @@ -85,9 +85,7 @@ export const AdminSidebar = () => { const isActive = matchRoute({ to: tab.link, fuzzy: false }); return ( - - {tab.label} - + {tab.label} ); })} @@ -97,9 +95,7 @@ export const AdminSidebar = () => { const isActive = matchRoute({ to: tab.link, fuzzy: false }); return ( - - {tab.label} - + {tab.label} ); })} diff --git a/frontend/src/layouts/KmsLayout/KmsLayout.tsx b/frontend/src/layouts/KmsLayout/KmsLayout.tsx index fcf6af23e..ba31e870d 100644 --- a/frontend/src/layouts/KmsLayout/KmsLayout.tsx +++ b/frontend/src/layouts/KmsLayout/KmsLayout.tsx @@ -59,4 +59,3 @@ export const KmsLayout = () => { ); }; - diff --git a/frontend/src/layouts/KmsLayout/index.tsx b/frontend/src/layouts/KmsLayout/index.tsx index 3846a52e6..7ec3e20bc 100644 --- a/frontend/src/layouts/KmsLayout/index.tsx +++ b/frontend/src/layouts/KmsLayout/index.tsx @@ -1 +1 @@ -export { KmsLayout } from "./KmsLayout"; \ No newline at end of file +export { KmsLayout } from "./KmsLayout"; diff --git a/frontend/src/layouts/OrganizationLayout/OrganizationLayout.tsx b/frontend/src/layouts/OrganizationLayout/OrganizationLayout.tsx index 69ea006dc..7f82f2993 100644 --- a/frontend/src/layouts/OrganizationLayout/OrganizationLayout.tsx +++ b/frontend/src/layouts/OrganizationLayout/OrganizationLayout.tsx @@ -1,33 +1,25 @@ import { useTranslation } from "react-i18next"; import { faMobile } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { Outlet, useLocation, useParams, useSearch } from "@tanstack/react-router"; +import { Outlet, useParams } from "@tanstack/react-router"; +import { twMerge } from "tailwind-merge"; import { CreateOrgModal } from "@app/components/organization/CreateOrgModal"; import { Banner } from "@app/components/page-frames/Banner"; -import { OrgPermissionSubjects, useOrgPermission, useServerConfig } from "@app/context"; -import { OrgPermissionSecretShareAction } from "@app/context/OrgPermissionContext/types"; +import { useServerConfig } from "@app/context"; import { usePopUp } from "@app/hooks"; import { InsecureConnectionBanner } from "./components/InsecureConnectionBanner"; -import { OrgSidebar } from "./components/OrgSidebar"; import { Navbar } from "./components/NavBar"; -import { twMerge } from "tailwind-merge"; +import { OrgSidebar } from "./components/OrgSidebar"; export const OrganizationLayout = () => { const { config } = useServerConfig(); - const { permission } = useOrgPermission(); const projectId = useParams({ strict: false, select: (el) => el?.projectId }); const isInsideProject = Boolean(projectId); - console.log(isInsideProject); - - const shouldShowProductsSidebar = permission.can( - OrgPermissionSecretShareAction.ManageSettings, - OrgPermissionSubjects.SecretShare - ); const { popUp, handlePopUpToggle } = usePopUp(["createOrg"] as const); diff --git a/frontend/src/layouts/OrganizationLayout/ProductsSideBar/DefaultSideBar.tsx b/frontend/src/layouts/OrganizationLayout/ProductsSideBar/DefaultSideBar.tsx deleted file mode 100644 index 4d55edb58..000000000 --- a/frontend/src/layouts/OrganizationLayout/ProductsSideBar/DefaultSideBar.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import { Link } from "@tanstack/react-router"; - -import { Menu, MenuGroup, MenuItem } from "@app/components/v2"; - -export const DefaultSideBar = () => ( - - - - {({ isActive }) => ( - - Access Control - - )} - - - {({ isActive }) => ( - - App Connections - - )} - - - {({ isActive }) => ( - - Gateways - - )} - - - {({ isActive }) => ( - - Single Sign-On (SSO) - - )} - - - - - {({ isActive }) => ( - - Audit Logs - - )} - - - {({ isActive }) => ( - - Usage & Billing - - )} - - - {({ isActive }) => ( - - Organization Settings - - )} - - - -); diff --git a/frontend/src/layouts/OrganizationLayout/ProductsSideBar/ProjectOverviewSideBar.tsx b/frontend/src/layouts/OrganizationLayout/ProductsSideBar/ProjectOverviewSideBar.tsx deleted file mode 100644 index 48678625d..000000000 --- a/frontend/src/layouts/OrganizationLayout/ProductsSideBar/ProjectOverviewSideBar.tsx +++ /dev/null @@ -1,99 +0,0 @@ -import { faArrowUpRightFromSquare } from "@fortawesome/free-solid-svg-icons"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { Link, useMatchRoute } from "@tanstack/react-router"; - -import { Menu, MenuGroup, MenuItem } from "@app/components/v2"; -import { ProjectType } from "@app/hooks/api/workspace/types"; - -type TProjectOverviewSideBarProps = { - type: ProjectType; -}; - -export const ProjectOverviewSideBar = ({ type }: TProjectOverviewSideBarProps) => { - const matchRoute = useMatchRoute(); - - const isOverviewActive = !!matchRoute({ - to: "/organization/projects", - fuzzy: false - }); - - let label: string; - let icon: string; - let link: string; - - switch (type) { - case ProjectType.CertificateManager: - label = "Cert Management"; - icon = "note"; - link = "https://infisical.com/docs/documentation/platform/pki/overview"; - break; - case ProjectType.SecretManager: - label = "Secret Management"; - icon = "sliding-carousel"; - link = "https://infisical.com/docs/documentation/getting-started/introduction"; - break; - case ProjectType.KMS: - label = "KMS"; - icon = "unlock"; - link = "https://infisical.com/docs/documentation/platform/kms/overview"; - break; - case ProjectType.SSH: - label = "SSH"; - icon = "verified"; - link = "https://infisical.com/docs/documentation/platform/ssh/overview"; - break; - case ProjectType.SecretScanning: - label = "Secret Scanning"; - icon = "secret-scan"; - link = "https://infisical.com/docs/documentation/platform/secret-scanning/overview"; - break; - default: - throw new Error("Unknown project type"); - } - - return ( - <> -
- -
- -
-
-
- Infisical Docs -
-
- {type === ProjectType.SecretManager ? "Get Started" : `${label} Overview`} -
-
-
-
- - - - - {label} - - - - - - {({ isActive }) => ( - - Settings - - )} - - - - - ); -}; diff --git a/frontend/src/layouts/OrganizationLayout/ProductsSideBar/SecretSharingSideBar.tsx b/frontend/src/layouts/OrganizationLayout/ProductsSideBar/SecretSharingSideBar.tsx deleted file mode 100644 index fbfc018c0..000000000 --- a/frontend/src/layouts/OrganizationLayout/ProductsSideBar/SecretSharingSideBar.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { Link, useMatchRoute } from "@tanstack/react-router"; - -import { Menu, MenuGroup, MenuItem } from "@app/components/v2"; - -export const SecretSharingSideBar = () => { - const matchRoute = useMatchRoute(); - const isOverviewActive = !!matchRoute({ - to: "/organization/secret-sharing", - fuzzy: false - }); - - return ( - - - - {() => ( - - Secret Sharing - - )} - - - - - {({ isActive }) => ( - - Settings - - )} - - - - ); -}; diff --git a/frontend/src/layouts/OrganizationLayout/ProductsSideBar/index.ts b/frontend/src/layouts/OrganizationLayout/ProductsSideBar/index.ts deleted file mode 100644 index 057f5fe6b..000000000 --- a/frontend/src/layouts/OrganizationLayout/ProductsSideBar/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "./DefaultSideBar"; -export * from "./ProjectOverviewSideBar"; -export * from "./SecretSharingSideBar"; diff --git a/frontend/src/layouts/OrganizationLayout/components/NavBar/Navbar.tsx b/frontend/src/layouts/OrganizationLayout/components/NavBar/Navbar.tsx index 10f45feb3..92d1f97a7 100644 --- a/frontend/src/layouts/OrganizationLayout/components/NavBar/Navbar.tsx +++ b/frontend/src/layouts/OrganizationLayout/components/NavBar/Navbar.tsx @@ -1,5 +1,6 @@ import { useState } from "react"; import { faGithub, faSlack } from "@fortawesome/free-brands-svg-icons"; +import { faCircleQuestion } from "@fortawesome/free-regular-svg-icons"; import { faArrowUpRightFromSquare, faBook, @@ -13,7 +14,6 @@ import { faUser, faUsers } from "@fortawesome/free-solid-svg-icons"; -import { faCircleQuestion } from "@fortawesome/free-regular-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate, useRouter, useRouterState } from "@tanstack/react-router"; @@ -29,6 +29,8 @@ import { DropdownMenuTrigger, IconButton, Lottie, + Modal, + ModalContent, TBreadcrumbFormat } from "@app/components/v2"; import { envConfig } from "@app/config/env"; @@ -42,6 +44,8 @@ import { SubscriptionPlan } from "@app/hooks/api/types"; import { AuthMethod } from "@app/hooks/api/users/types"; import { navigateUserToOrg } from "@app/pages/auth/LoginPage/Login.utils"; +import { ServerAdminsPanel } from "../ServerAdminsPanel/ServerAdminsPanel"; + const getPlan = (subscription: SubscriptionPlan) => { if (subscription.groups) return "Enterprise"; if (subscription.pitRecovery) return "Pro"; @@ -82,6 +86,7 @@ export const Navbar = () => { const { currentOrg } = useOrganization(); const [openSupport, setOpenSupport] = useState(false); const [openUser, setOpenUser] = useState(false); + const [showAdminsModal, setShowAdminsModal] = useState(false); const { data: orgs } = useGetOrganizations(); const navigate = useNavigate(); @@ -366,6 +371,13 @@ export const Navbar = () => { + + +
+ +
+
+
); }; diff --git a/frontend/src/layouts/OrganizationLayout/components/OrgSidebar/Copy.tsx b/frontend/src/layouts/OrganizationLayout/components/OrgSidebar/Copy.tsx index 4ddcce662..1d37d2995 100644 --- a/frontend/src/layouts/OrganizationLayout/components/OrgSidebar/Copy.tsx +++ b/frontend/src/layouts/OrganizationLayout/components/OrgSidebar/Copy.tsx @@ -284,7 +284,7 @@ export const OrgSidebar = () => {
{currentOrg.secretsProductEnabled && ( - + {({ isActive }) => ( { const { subscription } = useSubscription(); - const [showAdminsModal, setShowAdminsModal] = useState(false); const { user } = useUser(); const { mutateAsync } = useGetOrgTrialUrl(); @@ -55,8 +53,11 @@ export const OrgSidebar = ({ isHidden }: Props) => { {({ isActive }) => ( - - Projects + +
+ + Projects +
)} @@ -136,8 +137,11 @@ export const OrgSidebar = ({ isHidden }: Props) => { {({ isActive }) => ( - - Share Secret + +
+ + Share Secret +
)} @@ -208,13 +212,7 @@ export const OrgSidebar = ({ isHidden }: Props) => { )} - - -
- -
-
-
+ handlePopUpToggle("createOrg", false)} diff --git a/frontend/src/layouts/PkiManagerLayout/PkiManagerLayout.tsx b/frontend/src/layouts/PkiManagerLayout/PkiManagerLayout.tsx index bc75659dd..e1be17a35 100644 --- a/frontend/src/layouts/PkiManagerLayout/PkiManagerLayout.tsx +++ b/frontend/src/layouts/PkiManagerLayout/PkiManagerLayout.tsx @@ -99,4 +99,3 @@ export const PkiManagerLayout = () => { ); }; - diff --git a/frontend/src/layouts/PkiManagerLayout/index.tsx b/frontend/src/layouts/PkiManagerLayout/index.tsx index caf250f0d..6de729cf0 100644 --- a/frontend/src/layouts/PkiManagerLayout/index.tsx +++ b/frontend/src/layouts/PkiManagerLayout/index.tsx @@ -1 +1 @@ -export { PkiManagerLayout } from "./PkiManagerLayout"; \ No newline at end of file +export { PkiManagerLayout } from "./PkiManagerLayout"; diff --git a/frontend/src/layouts/ProjectGeneralLayout/ProjectGeneralLayout.tsx b/frontend/src/layouts/ProjectGeneralLayout/ProjectGeneralLayout.tsx index fe9e88f74..c248d7ff3 100644 --- a/frontend/src/layouts/ProjectGeneralLayout/ProjectGeneralLayout.tsx +++ b/frontend/src/layouts/ProjectGeneralLayout/ProjectGeneralLayout.tsx @@ -51,4 +51,3 @@ export const ProjectGeneralLayout = () => {
); }; - diff --git a/frontend/src/layouts/ProjectGeneralLayout/index.tsx b/frontend/src/layouts/ProjectGeneralLayout/index.tsx index 56a93994a..d048fbebc 100644 --- a/frontend/src/layouts/ProjectGeneralLayout/index.tsx +++ b/frontend/src/layouts/ProjectGeneralLayout/index.tsx @@ -1,2 +1 @@ export { ProjectGeneralLayout } from "./ProjectGeneralLayout"; - diff --git a/frontend/src/layouts/ProjectLayout/Copy.tsx b/frontend/src/layouts/ProjectLayout/Copy.tsx index 86fc39300..687c0377e 100644 --- a/frontend/src/layouts/ProjectLayout/Copy.tsx +++ b/frontend/src/layouts/ProjectLayout/Copy.tsx @@ -225,7 +225,7 @@ export const ProjectLayout = () => { {isSSH && ( <> { )} {/* { {(isAllowed) => isAllowed && ( { const { currentWorkspace } = useWorkspace(); @@ -36,20 +37,11 @@ export const AssumePrivilegeModeBanner = () => { }, { onSuccess: () => { - let page: string; + const url = getProjectHomePage( + getCurrentProductFromUrl(window.location.href) || ProjectType.SecretManager + ); - switch (currentWorkspace.type) { - case ProjectType.SecretScanning: - page = "data-sources"; - break; - case ProjectType.CertificateManager: - page = "subscribers"; - break; - default: - page = "overview"; - } - - window.location.href = `/${currentWorkspace.type}/${currentWorkspace.id}/${page}`; + window.location.href = url.replace("$projectId", currentWorkspace.id); } } ); diff --git a/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx b/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx index 63e9f5260..d91418cec 100644 --- a/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx +++ b/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx @@ -4,17 +4,17 @@ import { faCheck, faCube, faPlus, - faStar as faSolidStar, - faSort + faSort, + faStar as faSolidStar } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { Link, linkOptions } from "@tanstack/react-router"; 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, DropdownMenu, DropdownMenuContent, DropdownMenuItem, @@ -28,13 +28,12 @@ import { useSubscription, useWorkspace } from "@app/context"; +import { getCurrentProductFromUrl, getProjectHomePage } from "@app/helpers/project"; import { usePopUp } from "@app/hooks"; import { useGetUserWorkspaces } from "@app/hooks/api"; import { useUpdateUserProjectFavorites } from "@app/hooks/api/users/mutation"; import { useGetUserProjectFavorites } from "@app/hooks/api/users/queries"; import { ProjectType, Workspace } from "@app/hooks/api/workspace/types"; -import { Link, linkOptions } from "@tanstack/react-router"; -import { getCurrentProductFromUrl, getProjectHomePage } from "@app/helpers/project"; // TODO(pta): add search to project select export const ProjectSelect = () => { diff --git a/frontend/src/layouts/SecretManagerLayout/SecretManagerLayout.tsx b/frontend/src/layouts/SecretManagerLayout/SecretManagerLayout.tsx index 62f8abfd5..1e18e9a4b 100644 --- a/frontend/src/layouts/SecretManagerLayout/SecretManagerLayout.tsx +++ b/frontend/src/layouts/SecretManagerLayout/SecretManagerLayout.tsx @@ -105,7 +105,7 @@ export const SecretManagerLayout = () => { )} { ); }; - diff --git a/frontend/src/layouts/SecretScanningLayout/index.tsx b/frontend/src/layouts/SecretScanningLayout/index.tsx index 0bf5eaede..0d27a555d 100644 --- a/frontend/src/layouts/SecretScanningLayout/index.tsx +++ b/frontend/src/layouts/SecretScanningLayout/index.tsx @@ -1 +1 @@ -export { SecretScanningLayout } from "./SecretScanningLayout"; \ No newline at end of file +export { SecretScanningLayout } from "./SecretScanningLayout"; diff --git a/frontend/src/layouts/SshLayout/SshLayout.tsx b/frontend/src/layouts/SshLayout/SshLayout.tsx index b7eeed726..124af7519 100644 --- a/frontend/src/layouts/SshLayout/SshLayout.tsx +++ b/frontend/src/layouts/SshLayout/SshLayout.tsx @@ -1,9 +1,9 @@ import { Link, Outlet } from "@tanstack/react-router"; import { motion } from "framer-motion"; +import { ProjectPermissionCan } from "@app/components/permissions"; import { Menu, MenuItem } from "@app/components/v2"; import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; -import { ProjectPermissionCan } from "@app/components/permissions"; export const SshLayout = () => { const { currentWorkspace } = useWorkspace(); @@ -97,4 +97,3 @@ export const SshLayout = () => { ); }; - diff --git a/frontend/src/layouts/SshLayout/index.tsx b/frontend/src/layouts/SshLayout/index.tsx index de907b09b..3652c45cb 100644 --- a/frontend/src/layouts/SshLayout/index.tsx +++ b/frontend/src/layouts/SshLayout/index.tsx @@ -1 +1 @@ -export { SshLayout } from "./SshLayout"; \ No newline at end of file +export { SshLayout } from "./SshLayout"; diff --git a/frontend/src/pages/cert-manager/AlertingPage/components/PkiCollectionModal.tsx b/frontend/src/pages/cert-manager/AlertingPage/components/PkiCollectionModal.tsx index 29e4a5953..bca796fc9 100644 --- a/frontend/src/pages/cert-manager/AlertingPage/components/PkiCollectionModal.tsx +++ b/frontend/src/pages/cert-manager/AlertingPage/components/PkiCollectionModal.tsx @@ -12,7 +12,6 @@ import { useGetPkiCollectionById, useUpdatePkiCollection } from "@app/hooks/api"; -import { ProjectType } from "@app/hooks/api/workspace/types"; import { UsePopUpState } from "@app/hooks/usePopUp"; const schema = z.object({ @@ -83,7 +82,7 @@ export const PkiCollectionModal = ({ popUp, handlePopUpToggle }: Props) => { }); navigate({ - to: `/${ProjectType.CertificateManager}/$projectId/pki-collections/$collectionId` as const, + to: "/projects/$projectId/cert-manager/pki-collections/$collectionId", params: { projectId, collectionId diff --git a/frontend/src/pages/cert-manager/AlertingPage/components/PkiCollectionTable.tsx b/frontend/src/pages/cert-manager/AlertingPage/components/PkiCollectionTable.tsx index 8a3e6ffe5..1a6e613b6 100644 --- a/frontend/src/pages/cert-manager/AlertingPage/components/PkiCollectionTable.tsx +++ b/frontend/src/pages/cert-manager/AlertingPage/components/PkiCollectionTable.tsx @@ -61,7 +61,7 @@ export const PkiCollectionTable = ({ handlePopUpOpen }: Props) => { key={`pki-collection-${pkiCollection.id}`} onClick={() => navigate({ - to: `/${ProjectType.CertificateManager}/$projectId/pki-collections/$collectionId` as const, + to: `/projects/$projectId/${ProjectType.CertificateManager}/pki-collections/$collectionId` as const, params: { projectId, collectionId: pkiCollection.id diff --git a/frontend/src/pages/cert-manager/AlertingPage/route.tsx b/frontend/src/pages/cert-manager/AlertingPage/route.tsx index 359b7e53b..0b402699f 100644 --- a/frontend/src/pages/cert-manager/AlertingPage/route.tsx +++ b/frontend/src/pages/cert-manager/AlertingPage/route.tsx @@ -1,9 +1,9 @@ -import { createFileRoute } from '@tanstack/react-router' +import { createFileRoute } from "@tanstack/react-router"; -import { AlertingPage } from './AlertingPage' +import { AlertingPage } from "./AlertingPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/alerting', + "/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/alerting" )({ component: AlertingPage, beforeLoad: ({ context }) => { @@ -11,9 +11,9 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Alerting', - }, - ], - } - }, -}) + label: "Alerting" + } + ] + }; + } +}); diff --git a/frontend/src/pages/cert-manager/CertAuthDetailsByIDPage/CertAuthDetailsByIDPage.tsx b/frontend/src/pages/cert-manager/CertAuthDetailsByIDPage/CertAuthDetailsByIDPage.tsx index bd1a9318d..17a9fb8bf 100644 --- a/frontend/src/pages/cert-manager/CertAuthDetailsByIDPage/CertAuthDetailsByIDPage.tsx +++ b/frontend/src/pages/cert-manager/CertAuthDetailsByIDPage/CertAuthDetailsByIDPage.tsx @@ -71,7 +71,7 @@ const Page = () => { handlePopUpClose("deleteCa"); navigate({ - to: `/${ProjectType.CertificateManager}/$projectId/certificate-authorities` as const, + to: `/projects/$projectId/${ProjectType.CertificateManager}/certificate-authorities` as const, params: { projectId } diff --git a/frontend/src/pages/cert-manager/CertAuthDetailsByIDPage/route.tsx b/frontend/src/pages/cert-manager/CertAuthDetailsByIDPage/route.tsx index b17768b26..10620b325 100644 --- a/frontend/src/pages/cert-manager/CertAuthDetailsByIDPage/route.tsx +++ b/frontend/src/pages/cert-manager/CertAuthDetailsByIDPage/route.tsx @@ -1,9 +1,9 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { CertAuthDetailsByIDPage } from './CertAuthDetailsByIDPage' +import { CertAuthDetailsByIDPage } from "./CertAuthDetailsByIDPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/ca/$caName', + "/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/ca/$caName" )({ component: CertAuthDetailsByIDPage, beforeLoad: ({ context, params }) => { @@ -11,15 +11,15 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Certificate Authorities', + label: "Certificate Authorities", link: linkOptions({ - to: '/cert-manager/$projectId/certificate-authorities', + to: "/projects/$projectId/cert-manager/certificate-authorities", params: { - projectId: params.projectId, - }, - }), - }, - ], - } - }, -}) + projectId: params.projectId + } + }) + } + ] + }; + } +}); diff --git a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaTable.tsx b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaTable.tsx index 33bae14bd..e0b91a239 100644 --- a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaTable.tsx +++ b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/components/CaTable.tsx @@ -79,7 +79,7 @@ export const CaTable = ({ handlePopUpOpen }: Props) => { key={`ca-${ca.id}`} onClick={() => navigate({ - to: `/${ProjectType.CertificateManager}/$projectId/ca/$caName` as const, + to: `/projects/$projectId/${ProjectType.CertificateManager}/ca/$caName` as const, params: { projectId: currentWorkspace.id, caName: ca.name diff --git a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/route.tsx b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/route.tsx index a1dd18845..36baa6e9e 100644 --- a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/route.tsx +++ b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/route.tsx @@ -1,9 +1,9 @@ -import { createFileRoute } from '@tanstack/react-router' +import { createFileRoute } from "@tanstack/react-router"; -import { CertificateAuthoritiesPage } from './CertificateAuthoritiesPage' +import { CertificateAuthoritiesPage } from "./CertificateAuthoritiesPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/certificate-authorities', + "/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/certificate-authorities" )({ component: CertificateAuthoritiesPage, beforeLoad: ({ context }) => { @@ -11,9 +11,9 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Certificate Authorities', - }, - ], - } - }, -}) + label: "Certificate Authorities" + } + ] + }; + } +}); diff --git a/frontend/src/pages/cert-manager/CertificatesPage/route.tsx b/frontend/src/pages/cert-manager/CertificatesPage/route.tsx index b78cd6850..1a9a29da0 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/route.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/route.tsx @@ -1,9 +1,9 @@ -import { createFileRoute } from '@tanstack/react-router' +import { createFileRoute } from "@tanstack/react-router"; -import { CertificatesPage } from './CertificatesPage' +import { CertificatesPage } from "./CertificatesPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/certificates', + "/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/certificates" )({ - component: CertificatesPage, -}) + component: CertificatesPage +}); diff --git a/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/PkiCollectionDetailsByIDPage.tsx b/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/PkiCollectionDetailsByIDPage.tsx index b95ff4d5f..33c4808fd 100644 --- a/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/PkiCollectionDetailsByIDPage.tsx +++ b/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/PkiCollectionDetailsByIDPage.tsx @@ -57,7 +57,7 @@ export const PkiCollectionPage = () => { }); handlePopUpClose("deletePkiCollection"); navigate({ - to: `/${ProjectType.CertificateManager}/$projectId/certificates` as const, + to: `/projects/$projectId/${ProjectType.CertificateManager}/certificates` as const, params: { projectId } diff --git a/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/routes.tsx b/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/routes.tsx index b6f5fc259..af8f27602 100644 --- a/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/routes.tsx +++ b/frontend/src/pages/cert-manager/PkiCollectionDetailsByIDPage/routes.tsx @@ -1,9 +1,9 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { PkiCollectionDetailsByIDPage } from './PkiCollectionDetailsByIDPage' +import { PkiCollectionDetailsByIDPage } from "./PkiCollectionDetailsByIDPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/pki-collections/$collectionId', + "/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/pki-collections/$collectionId" )({ component: PkiCollectionDetailsByIDPage, beforeLoad: ({ context, params }) => { @@ -11,15 +11,15 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Certificate Collections', + label: "Certificate Collections", link: linkOptions({ - to: '/cert-manager/$projectId/certificates', + to: "/projects/$projectId/cert-manager/certificates", params: { - projectId: params.projectId, - }, - }), - }, - ], - } - }, -}) + projectId: params.projectId + } + }) + } + ] + }; + } +}); diff --git a/frontend/src/pages/cert-manager/PkiSubscriberDetailsByIDPage/PkiSubscriberDetailsByIDPage.tsx b/frontend/src/pages/cert-manager/PkiSubscriberDetailsByIDPage/PkiSubscriberDetailsByIDPage.tsx index ad6e88adf..6f7e1362c 100644 --- a/frontend/src/pages/cert-manager/PkiSubscriberDetailsByIDPage/PkiSubscriberDetailsByIDPage.tsx +++ b/frontend/src/pages/cert-manager/PkiSubscriberDetailsByIDPage/PkiSubscriberDetailsByIDPage.tsx @@ -61,7 +61,7 @@ const Page = () => { handlePopUpClose("deletePkiSubscriber"); navigate({ - to: `/${ProjectType.CertificateManager}/$projectId/subscribers` as const, + to: `/projects/$projectId/${ProjectType.CertificateManager}/subscribers` as const, params: { projectId } diff --git a/frontend/src/pages/cert-manager/PkiSubscriberDetailsByIDPage/route.tsx b/frontend/src/pages/cert-manager/PkiSubscriberDetailsByIDPage/route.tsx index 78fc5a8f7..dbec32faa 100644 --- a/frontend/src/pages/cert-manager/PkiSubscriberDetailsByIDPage/route.tsx +++ b/frontend/src/pages/cert-manager/PkiSubscriberDetailsByIDPage/route.tsx @@ -1,9 +1,9 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { PkiSubscriberDetailsByIDPage } from './PkiSubscriberDetailsByIDPage' +import { PkiSubscriberDetailsByIDPage } from "./PkiSubscriberDetailsByIDPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/subscribers/$subscriberName', + "/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/subscribers/$subscriberName" )({ component: PkiSubscriberDetailsByIDPage, beforeLoad: ({ context, params }) => { @@ -11,15 +11,15 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Subscribers', + label: "Subscribers", link: linkOptions({ - to: '/cert-manager/$projectId/subscribers', + to: "/projects/$projectId/cert-manager/subscribers", params: { - projectId: params.projectId, - }, - }), - }, - ], - } - }, -}) + projectId: params.projectId + } + }) + } + ] + }; + } +}); diff --git a/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscribersTable.tsx b/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscribersTable.tsx index 3ba473985..eead0371a 100644 --- a/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscribersTable.tsx +++ b/frontend/src/pages/cert-manager/PkiSubscribersPage/components/PkiSubscribersTable.tsx @@ -76,7 +76,7 @@ export const PkiSubscribersTable = ({ handlePopUpOpen }: Props) => { key={`pki-subscriber-${subscriber.id}`} onClick={() => navigate({ - to: `/${ProjectType.CertificateManager}/$projectId/subscribers/$subscriberName` as const, + to: `/projects/$projectId/${ProjectType.CertificateManager}/subscribers/$subscriberName` as const, params: { projectId: currentWorkspace.id, subscriberName: subscriber.name diff --git a/frontend/src/pages/cert-manager/PkiSubscribersPage/route.tsx b/frontend/src/pages/cert-manager/PkiSubscribersPage/route.tsx index ec4904736..7b57a80c3 100644 --- a/frontend/src/pages/cert-manager/PkiSubscribersPage/route.tsx +++ b/frontend/src/pages/cert-manager/PkiSubscribersPage/route.tsx @@ -1,9 +1,9 @@ -import { createFileRoute } from '@tanstack/react-router' +import { createFileRoute } from "@tanstack/react-router"; -import { PkiSubscribersPage } from './PkiSubscribersPage' +import { PkiSubscribersPage } from "./PkiSubscribersPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/subscribers/', + "/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/subscribers/" )({ - component: PkiSubscribersPage, -}) + component: PkiSubscribersPage +}); diff --git a/frontend/src/pages/cert-manager/PkiTemplateListPage/route.tsx b/frontend/src/pages/cert-manager/PkiTemplateListPage/route.tsx index 7221e1e8b..84e24041b 100644 --- a/frontend/src/pages/cert-manager/PkiTemplateListPage/route.tsx +++ b/frontend/src/pages/cert-manager/PkiTemplateListPage/route.tsx @@ -1,9 +1,9 @@ -import { createFileRoute } from '@tanstack/react-router' +import { createFileRoute } from "@tanstack/react-router"; -import { PkiTemplateListPage } from './PkiTemplateListPage' +import { PkiTemplateListPage } from "./PkiTemplateListPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/certificate-templates/', + "/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/certificate-templates/" )({ - component: PkiTemplateListPage, -}) + component: PkiTemplateListPage +}); diff --git a/frontend/src/pages/cert-manager/SettingsPage/route.tsx b/frontend/src/pages/cert-manager/SettingsPage/route.tsx index 73a93a668..dc8922092 100644 --- a/frontend/src/pages/cert-manager/SettingsPage/route.tsx +++ b/frontend/src/pages/cert-manager/SettingsPage/route.tsx @@ -1,9 +1,9 @@ -import { createFileRoute } from '@tanstack/react-router' +import { createFileRoute } from "@tanstack/react-router"; -import { SettingsPage } from './SettingsPage' +import { SettingsPage } from "./SettingsPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/settings', + "/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/cert-manager/_cert-manager-layout/settings" )({ component: SettingsPage, beforeLoad: ({ context }) => { @@ -11,9 +11,9 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Settings', - }, - ], - } - }, -}) + label: "Settings" + } + ] + }; + } +}); diff --git a/frontend/src/pages/kms/KmipPage/route.tsx b/frontend/src/pages/kms/KmipPage/route.tsx index b3caa471b..111356c29 100644 --- a/frontend/src/pages/kms/KmipPage/route.tsx +++ b/frontend/src/pages/kms/KmipPage/route.tsx @@ -1,9 +1,9 @@ -import { createFileRoute } from '@tanstack/react-router' +import { createFileRoute } from "@tanstack/react-router"; -import { KmipPage } from './KmipPage' +import { KmipPage } from "./KmipPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/kms/_kms-layout/kmip', + "/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/kms/_kms-layout/kmip" )({ - component: KmipPage, -}) + component: KmipPage +}); diff --git a/frontend/src/pages/kms/OverviewPage/route.tsx b/frontend/src/pages/kms/OverviewPage/route.tsx index b7af147c7..79a27f668 100644 --- a/frontend/src/pages/kms/OverviewPage/route.tsx +++ b/frontend/src/pages/kms/OverviewPage/route.tsx @@ -1,9 +1,9 @@ -import { createFileRoute } from '@tanstack/react-router' +import { createFileRoute } from "@tanstack/react-router"; -import { OverviewPage } from './OverviewPage' +import { OverviewPage } from "./OverviewPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/kms/_kms-layout/overview', + "/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/kms/_kms-layout/overview" )({ - component: OverviewPage, -}) + component: OverviewPage +}); diff --git a/frontend/src/pages/kms/SettingsPage/route.tsx b/frontend/src/pages/kms/SettingsPage/route.tsx index ec315f6ce..8dd90bbdd 100644 --- a/frontend/src/pages/kms/SettingsPage/route.tsx +++ b/frontend/src/pages/kms/SettingsPage/route.tsx @@ -1,9 +1,9 @@ -import { createFileRoute } from '@tanstack/react-router' +import { createFileRoute } from "@tanstack/react-router"; -import { SettingsPage } from './SettingsPage' +import { SettingsPage } from "./SettingsPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/kms/_kms-layout/settings', + "/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/kms/_kms-layout/settings" )({ component: SettingsPage, beforeLoad: ({ context }) => { @@ -11,9 +11,9 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Settings', - }, - ], - } - }, -}) + label: "Settings" + } + ] + }; + } +}); diff --git a/frontend/src/pages/middlewares/restrict-login-signup.tsx b/frontend/src/pages/middlewares/restrict-login-signup.tsx index 68d3f0892..c3d58f248 100644 --- a/frontend/src/pages/middlewares/restrict-login-signup.tsx +++ b/frontend/src/pages/middlewares/restrict-login-signup.tsx @@ -12,7 +12,6 @@ import { SessionStorageKeys } from "@app/const"; import { useServerConfig } from "@app/context"; import { authKeys, fetchAuthToken } from "@app/hooks/api/auth/queries"; import { setAuthToken } from "@app/hooks/api/reactQuery"; -import { ProjectType } from "@app/hooks/api/workspace/types"; const QueryParamsSchema = z.object({ callback_port: z.coerce.number().optional().catch(undefined), diff --git a/frontend/src/pages/organization/AdminPage/components/OrgAdminProjects/OrgAdminProjects.tsx b/frontend/src/pages/organization/AdminPage/components/OrgAdminProjects/OrgAdminProjects.tsx index dc9c9953b..c2ca92575 100644 --- a/frontend/src/pages/organization/AdminPage/components/OrgAdminProjects/OrgAdminProjects.tsx +++ b/frontend/src/pages/organization/AdminPage/components/OrgAdminProjects/OrgAdminProjects.tsx @@ -33,6 +33,7 @@ import { withPermission } from "@app/hoc"; import { useDebounce } from "@app/hooks"; import { useOrgAdminAccessProject, useOrgAdminGetProjects } from "@app/hooks/api"; import { ProjectType } from "@app/hooks/api/workspace/types"; +import { getProjectHomePage } from "@app/helpers/project"; export const OrgAdminProjects = withPermission( () => { @@ -58,26 +59,8 @@ export const OrgAdminProjects = withPermission( await orgAdminAccessProject.mutateAsync({ projectId }); - if (type === ProjectType.CertificateManager) { - await navigate({ - to: "/cert-manager/$projectId/subscribers" as const, - params: { - projectId - } - }); - return; - } - if (type === ProjectType.SecretScanning) { - await navigate({ - to: "/secret-scanning/$projectId/data-sources" as const, - params: { - projectId - } - }); - return; - } await navigate({ - to: `/${type}/$projectId/overview` as const, + to: getProjectHomePage(type), params: { projectId } @@ -122,7 +105,7 @@ export const OrgAdminProjects = withPermission( {isProjectsLoading && } {!isProjectsLoading && - projects?.map(({ name, slug, createdAt, type, id }) => ( + projects?.map(({ name, slug, createdAt, id, defaultType }) => ( {name} {slug} @@ -143,7 +126,7 @@ export const OrgAdminProjects = withPermission( onClick={(e) => { e.stopPropagation(); e.preventDefault(); - handleAccessProject(type, id); + handleAccessProject(defaultType, id); }} icon={} disabled={ diff --git a/frontend/src/pages/organization/AuditLogsPage/components/LogsFilter.tsx b/frontend/src/pages/organization/AuditLogsPage/components/LogsFilter.tsx index b015e0679..0ba187341 100644 --- a/frontend/src/pages/organization/AuditLogsPage/components/LogsFilter.tsx +++ b/frontend/src/pages/organization/AuditLogsPage/components/LogsFilter.tsx @@ -418,10 +418,10 @@ export const LogsFilter = ({ onChange(e); }} placeholder="All projects" - options={workspacesInOrg.map(({ name, id, type }) => ({ + options={workspacesInOrg.map(({ name, id, defaultType }) => ({ name, id, - type + type: defaultType }))} getOptionValue={(option) => option.id} getOptionLabel={(option) => option.name} diff --git a/frontend/src/pages/organization/BillingPage/BillingPage.tsx b/frontend/src/pages/organization/BillingPage/BillingPage.tsx index a58a7f14d..e49314f13 100644 --- a/frontend/src/pages/organization/BillingPage/BillingPage.tsx +++ b/frontend/src/pages/organization/BillingPage/BillingPage.tsx @@ -2,10 +2,10 @@ import { Helmet } from "react-helmet"; import { useTranslation } from "react-i18next"; import { OrgPermissionCan } from "@app/components/permissions"; +import { PageHeader } from "@app/components/v2"; import { OrgPermissionBillingActions, OrgPermissionSubjects } from "@app/context"; import { BillingTabGroup } from "./components"; -import { PageHeader } from "@app/components/v2"; export const BillingPage = () => { const { t } = useTranslation(); diff --git a/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityProjectsSection/IdentityProjectRow.tsx b/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityProjectsSection/IdentityProjectRow.tsx index da89d47d8..8d8d45445 100644 --- a/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityProjectsSection/IdentityProjectRow.tsx +++ b/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityProjectsSection/IdentityProjectRow.tsx @@ -5,7 +5,7 @@ import { useNavigate } from "@tanstack/react-router"; import { format } from "date-fns"; import { createNotification } from "@app/components/notifications"; -import { IconButton, Tag, Td, Tooltip, Tr } from "@app/components/v2"; +import { IconButton, Td, Tooltip, Tr } from "@app/components/v2"; import { formatProjectRoleName } from "@app/helpers/roles"; import { useGetUserWorkspaces } from "@app/hooks/api"; import { IdentityMembership } from "@app/hooks/api/identities/types"; @@ -50,7 +50,7 @@ export const IdentityProjectRow = ({ onClick={() => { if (isAccessible) { navigate({ - to: `/${project?.type}/$projectId/access-management` as const, + to: "/projects/$projectId/access-management", params: { projectId: project.id }, @@ -68,9 +68,6 @@ export const IdentityProjectRow = ({ }} > {project.name} - - {project.type} - {`${formatProjectRoleName(roles[0].role, roles[0].customRoleName)}${ roles.length > 1 ? ` (+${roles.length - 1})` : "" }`} diff --git a/frontend/src/pages/organization/ProjectsPage/components/AllProjectView.tsx b/frontend/src/pages/organization/ProjectsPage/components/AllProjectView.tsx index daea79374..0a1bd7364 100644 --- a/frontend/src/pages/organization/ProjectsPage/components/AllProjectView.tsx +++ b/frontend/src/pages/organization/ProjectsPage/components/AllProjectView.tsx @@ -222,7 +222,7 @@ export const AllProjectView = ({ onKeyDown={(evt) => { if (evt.key === "Enter" && workspace.isMember) { navigate({ - to: getProjectHomePage(workspace), + to: getProjectHomePage(workspace.defaultType), params: { projectId: workspace.id } @@ -232,7 +232,7 @@ export const AllProjectView = ({ onClick={() => { if (workspace.isMember) { navigate({ - to: getProjectHomePage(workspace), + to: getProjectHomePage(workspace.defaultType), params: { projectId: workspace.id } diff --git a/frontend/src/pages/organization/ProjectsPage/components/MyProjectView.tsx b/frontend/src/pages/organization/ProjectsPage/components/MyProjectView.tsx index 9bd7bfb68..f315215e7 100644 --- a/frontend/src/pages/organization/ProjectsPage/components/MyProjectView.tsx +++ b/frontend/src/pages/organization/ProjectsPage/components/MyProjectView.tsx @@ -215,7 +215,7 @@ export const MyProjectView = ({
{ navigate({ - to: getProjectHomePage(workspace), + to: getProjectHomePage(workspace.defaultType), params: { projectId: workspace.id } diff --git a/frontend/src/pages/organization/SecretManagerSettingsPage/route.tsx b/frontend/src/pages/organization/SecretManagerSettingsPage/route.tsx index 83f6d0992..e03aa627e 100644 --- a/frontend/src/pages/organization/SecretManagerSettingsPage/route.tsx +++ b/frontend/src/pages/organization/SecretManagerSettingsPage/route.tsx @@ -10,7 +10,7 @@ export const Route = createFileRoute( breadcrumbs: [ { label: "Secret Management", - link: linkOptions({ to: "/organization/secret-manager/overview" }) + link: linkOptions({ to: "/organization/projects" }) }, { label: "Settings" diff --git a/frontend/src/pages/organization/UserDetailsByIDPage/components/UserProjectsSection/UserProjectRow.tsx b/frontend/src/pages/organization/UserDetailsByIDPage/components/UserProjectsSection/UserProjectRow.tsx index b3581183c..db8d570cd 100644 --- a/frontend/src/pages/organization/UserDetailsByIDPage/components/UserProjectsSection/UserProjectRow.tsx +++ b/frontend/src/pages/organization/UserDetailsByIDPage/components/UserProjectsSection/UserProjectRow.tsx @@ -43,7 +43,7 @@ export const UserProjectRow = ({ onClick={() => { if (isAccessible) { navigate({ - to: `/${project.type}/$projectId/access-management` as const, + to: "/projects/$projectId/access-management", params: { projectId: project.id }, diff --git a/frontend/src/pages/project/AccessControlPage/AccessControlPage.tsx b/frontend/src/pages/project/AccessControlPage/AccessControlPage.tsx index d01d45c2d..096514b69 100644 --- a/frontend/src/pages/project/AccessControlPage/AccessControlPage.tsx +++ b/frontend/src/pages/project/AccessControlPage/AccessControlPage.tsx @@ -4,7 +4,6 @@ import { useNavigate, useSearch } from "@tanstack/react-router"; import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2"; import { useWorkspace } from "@app/context"; -import { ProjectType } from "@app/hooks/api/workspace/types"; import { ProjectAccessControlTabs } from "@app/types/project"; import { @@ -25,7 +24,7 @@ const Page = () => { const updateSelectedTab = (tab: string) => { navigate({ - to: `/${currentWorkspace.type}/$projectId/access-management` as const, + to: "/projects/$projectId/access-management", search: (prev) => ({ ...prev, selectedTab: tab }), params: { projectId: currentWorkspace.id @@ -49,9 +48,7 @@ const Page = () => {

Machine Identities

- {currentWorkspace?.type === ProjectType.SecretManager && ( - Service Tokens - )} + Service Tokens Project Roles @@ -63,11 +60,9 @@ const Page = () => { - {currentWorkspace?.type === ProjectType.SecretManager && ( - - - - )} + + + diff --git a/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupsTable.tsx b/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupsTable.tsx index 2a08a250c..37816ceb9 100644 --- a/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupsTable.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupsTable.tsx @@ -158,7 +158,7 @@ export const GroupTable = ({ handlePopUpOpen }: Props) => { onKeyDown={(evt) => { if (evt.key === "Enter") { navigate({ - to: `/${currentWorkspace.type}/$projectId/groups/$groupId` as const, + to: "/projects/$projectId/groups/$groupId", params: { projectId: currentWorkspace.id, groupId: id @@ -168,7 +168,7 @@ export const GroupTable = ({ handlePopUpOpen }: Props) => { }} onClick={() => navigate({ - to: `/${currentWorkspace.type}/$projectId/groups/$groupId` as const, + to: "/projects/$projectId/groups/$groupId", params: { projectId: currentWorkspace.id, groupId: id diff --git a/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx b/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx index 57adf845c..52ac3b349 100644 --- a/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx @@ -260,7 +260,7 @@ export const IdentityTab = withProjectPermission( onKeyDown={(evt) => { if (evt.key === "Enter") { navigate({ - to: `/${currentWorkspace?.type}/$projectId/identities/$identityId` as const, + to: "/projects/$projectId/identities/$identityId", params: { projectId: currentWorkspace.id, identityId: id @@ -270,7 +270,7 @@ export const IdentityTab = withProjectPermission( }} onClick={() => navigate({ - to: `/${currentWorkspace?.type}/$projectId/identities/$identityId` as const, + to: "/projects/$projectId/identities/$identityId", params: { projectId: currentWorkspace.id, identityId: id diff --git a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MemberRoleForm/MemberRoleForm.tsx b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MemberRoleForm/MemberRoleForm.tsx index 93839337b..ba4e0fac4 100644 --- a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MemberRoleForm/MemberRoleForm.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MemberRoleForm/MemberRoleForm.tsx @@ -21,7 +21,7 @@ export const MemberRoleForm = ({ projectMember, onOpenUpgradeModal }: Props) => > { onKeyDown={(evt) => { if (evt.key === "Enter") { navigate({ - to: `/${currentWorkspace.type}/$projectId/members/$membershipId` as const, + to: "/projects/$projectId/members/$membershipId", params: { projectId: workspaceId, membershipId @@ -321,7 +321,7 @@ export const MembersTable = ({ handlePopUpOpen }: Props) => { }} onClick={() => navigate({ - to: `/${currentWorkspace.type}/$projectId/members/$membershipId` as const, + to: "/projects/$projectId/members/$membershipId", params: { projectId: workspaceId, membershipId diff --git a/frontend/src/pages/project/AccessControlPage/components/ProjectRoleListTab/components/ProjectRoleList/ProjectRoleList.tsx b/frontend/src/pages/project/AccessControlPage/components/ProjectRoleListTab/components/ProjectRoleList/ProjectRoleList.tsx index b29bf469b..2a01764b0 100644 --- a/frontend/src/pages/project/AccessControlPage/components/ProjectRoleListTab/components/ProjectRoleList/ProjectRoleList.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/ProjectRoleListTab/components/ProjectRoleList/ProjectRoleList.tsx @@ -249,7 +249,7 @@ export const ProjectRoleList = () => { className="h-10 cursor-pointer transition-colors duration-100 hover:bg-mineshaft-700" onClick={() => navigate({ - to: `/${currentWorkspace?.type}/$projectId/roles/$roleSlug` as const, + to: "/projects/$projectId/roles/$roleSlug", params: { projectId: currentWorkspace.id, roleSlug: slug @@ -291,7 +291,7 @@ export const ProjectRoleList = () => { onClick={(e) => { e.stopPropagation(); navigate({ - to: `/${currentWorkspace?.type}/$projectId/roles/$roleSlug` as const, + to: "/projects/$projectId/roles/$roleSlug", params: { projectId: currentWorkspace.id, roleSlug: slug diff --git a/frontend/src/pages/project/GroupDetailsByIDPage/components/GroupDetailsSection.tsx b/frontend/src/pages/project/GroupDetailsByIDPage/components/GroupDetailsSection.tsx index 4f1dcb586..b23cfdad1 100644 --- a/frontend/src/pages/project/GroupDetailsByIDPage/components/GroupDetailsSection.tsx +++ b/frontend/src/pages/project/GroupDetailsByIDPage/components/GroupDetailsSection.tsx @@ -46,7 +46,13 @@ export const GroupDetailsSection = ({ groupMembership }: Props) => { }); navigate({ - to: `/${currentWorkspace.type}/${currentWorkspace.id}/access-management?selectedTab=groups` + to: "/projects/$projectId/access-management", + params: { + projectId: currentWorkspace.id + }, + search: { + selectedTab: "groups" + } }); handlePopUpClose("deleteGroup"); diff --git a/frontend/src/pages/project/GroupDetailsByIDPage/components/GroupMembersSection/GroupMembersTable.tsx b/frontend/src/pages/project/GroupDetailsByIDPage/components/GroupMembersSection/GroupMembersTable.tsx index c0639260a..681deea42 100644 --- a/frontend/src/pages/project/GroupDetailsByIDPage/components/GroupMembersSection/GroupMembersTable.tsx +++ b/frontend/src/pages/project/GroupDetailsByIDPage/components/GroupMembersSection/GroupMembersTable.tsx @@ -24,6 +24,7 @@ import { Tr } from "@app/components/v2"; import { useWorkspace } from "@app/context"; +import { getCurrentProductFromUrl, getProjectHomePage } from "@app/helpers/project"; import { getUserTablePreference, PreferenceKey, @@ -136,20 +137,10 @@ export const GroupMembersTable = ({ groupMembership }: Props) => { text: "User privilege assumption has started" }); - let overviewPage: string; - - switch (currentWorkspace.type) { - case ProjectType.SecretScanning: - overviewPage = "data-sources"; - break; - case ProjectType.CertificateManager: - overviewPage = "subscribers"; - break; - default: - overviewPage = "overview"; - } - - window.location.href = `/${currentWorkspace.type}/${currentWorkspace.id}/${overviewPage}`; + const url = getProjectHomePage( + getCurrentProductFromUrl(window.location.href) || ProjectType.SecretManager + ); + window.location.href = url.replace("$projectId", currentWorkspace.id); } } ); diff --git a/frontend/src/pages/project/GroupDetailsByIDPage/route.tsx b/frontend/src/pages/project/GroupDetailsByIDPage/route.tsx index 8406637e4..aac99921c 100644 --- a/frontend/src/pages/project/GroupDetailsByIDPage/route.tsx +++ b/frontend/src/pages/project/GroupDetailsByIDPage/route.tsx @@ -1,14 +1,14 @@ -import { createFileRoute } from '@tanstack/react-router' +import { createFileRoute } from "@tanstack/react-router"; -import { GroupDetailsByIDPage } from './GroupDetailsByIDPage' +import { GroupDetailsByIDPage } from "./GroupDetailsByIDPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/_project-general-layout/groups/$groupId', + "/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/_project-general-layout/groups/$groupId" )({ component: GroupDetailsByIDPage, beforeLoad: ({ context }) => { return { - breadcrumbs: [], - } - }, -}) + breadcrumbs: [] + }; + } +}); diff --git a/frontend/src/pages/project/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx b/frontend/src/pages/project/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx index 81182f2ec..bc4ae078f 100644 --- a/frontend/src/pages/project/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx +++ b/frontend/src/pages/project/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx @@ -20,6 +20,7 @@ import { ProjectPermissionSub, useWorkspace } from "@app/context"; +import { getCurrentProductFromUrl, getProjectHomePage } from "@app/helpers/project"; import { usePopUp } from "@app/hooks"; import { useAssumeProjectPrivileges, @@ -27,6 +28,7 @@ import { useGetWorkspaceIdentityMembershipDetails } from "@app/hooks/api"; import { ActorType } from "@app/hooks/api/auditLogs/enums"; +import { ProjectType } from "@app/hooks/api/workspace/types"; import { IdentityProjectAdditionalPrivilegeSection } from "./components/IdentityProjectAdditionalPrivilegeSection"; import { IdentityRoleDetailsSection } from "./components/IdentityRoleDetailsSection"; @@ -66,7 +68,10 @@ const Page = () => { type: "success", text: "Identity privilege assumption has started" }); - window.location.href = `/${currentWorkspace.type}/${currentWorkspace.id}/overview`; + const url = getProjectHomePage( + getCurrentProductFromUrl(window.location.href) || ProjectType.SecretManager + ); + window.location.href = url.replace("$projectId", currentWorkspace.id); } } ); @@ -84,7 +89,7 @@ const Page = () => { }); handlePopUpClose("deleteIdentity"); navigate({ - to: `/${currentWorkspace.type}/$projectId/access-management` as const, + to: "/projects/$projectId/access-management", params: { projectId: workspaceId }, diff --git a/frontend/src/pages/project/IdentityDetailsByIDPage/route.tsx b/frontend/src/pages/project/IdentityDetailsByIDPage/route.tsx index 7cc1ffd93..672b11c0c 100644 --- a/frontend/src/pages/project/IdentityDetailsByIDPage/route.tsx +++ b/frontend/src/pages/project/IdentityDetailsByIDPage/route.tsx @@ -1,14 +1,14 @@ -import { createFileRoute } from '@tanstack/react-router' +import { createFileRoute } from "@tanstack/react-router"; -import { IdentityDetailsByIDPage } from './IdentityDetailsByIDPage' +import { IdentityDetailsByIDPage } from "./IdentityDetailsByIDPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/_project-general-layout/identities/$identityId', + "/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/_project-general-layout/identities/$identityId" )({ component: IdentityDetailsByIDPage, beforeLoad: ({ context }) => { return { - breadcrumbs: [], - } - }, -}) + breadcrumbs: [] + }; + } +}); diff --git a/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx b/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx index 94666e0f5..f84e0ea36 100644 --- a/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx +++ b/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx @@ -21,6 +21,7 @@ import { useOrganization, useWorkspace } from "@app/context"; +import { getCurrentProductFromUrl, getProjectHomePage } from "@app/helpers/project"; import { usePopUp } from "@app/hooks"; import { useAssumeProjectPrivileges, @@ -72,20 +73,10 @@ export const Page = () => { text: "User privilege assumption has started" }); - let page: string; - - switch (currentWorkspace.type) { - case ProjectType.SecretScanning: - page = "data-sources"; - break; - case ProjectType.CertificateManager: - page = "subscribers"; - break; - default: - page = "overview"; - } - - window.location.href = `/${currentWorkspace.type}/${currentWorkspace.id}/${page}`; + const url = getProjectHomePage( + getCurrentProductFromUrl(window.location.href) || ProjectType.SecretManager + ); + window.location.href = url.replace("$projectId", currentWorkspace.id); } } ); @@ -105,7 +96,7 @@ export const Page = () => { type: "success" }); navigate({ - to: `/${currentWorkspace.type}/$projectId/access-management` as const, + to: "/projects/$projectId/access-management", params: { projectId: currentWorkspace.id } diff --git a/frontend/src/pages/project/MemberDetailsByIDPage/route.tsx b/frontend/src/pages/project/MemberDetailsByIDPage/route.tsx index 878fb2943..007abbe8f 100644 --- a/frontend/src/pages/project/MemberDetailsByIDPage/route.tsx +++ b/frontend/src/pages/project/MemberDetailsByIDPage/route.tsx @@ -1,14 +1,14 @@ -import { createFileRoute } from '@tanstack/react-router' +import { createFileRoute } from "@tanstack/react-router"; -import { MemberDetailsByIDPage } from './MemberDetailsByIDPage' +import { MemberDetailsByIDPage } from "./MemberDetailsByIDPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/_project-general-layout/members/$membershipId', + "/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/_project-general-layout/members/$membershipId" )({ component: MemberDetailsByIDPage, beforeLoad: ({ context }) => { return { - breadcrumbs: [], - } - }, -}) + breadcrumbs: [] + }; + } +}); diff --git a/frontend/src/pages/project/RoleDetailsBySlugPage/RoleDetailsBySlugPage.tsx b/frontend/src/pages/project/RoleDetailsBySlugPage/RoleDetailsBySlugPage.tsx index 9579ab511..af062aa13 100644 --- a/frontend/src/pages/project/RoleDetailsBySlugPage/RoleDetailsBySlugPage.tsx +++ b/frontend/src/pages/project/RoleDetailsBySlugPage/RoleDetailsBySlugPage.tsx @@ -60,7 +60,7 @@ const Page = () => { }); handlePopUpClose("deleteRole"); navigate({ - to: `/${currentWorkspace?.type}/$projectId/access-management` as const, + to: "/projects/$projectId/access-management", params: { projectId }, diff --git a/frontend/src/pages/project/RoleDetailsBySlugPage/components/DuplicateProjectRoleModal.tsx b/frontend/src/pages/project/RoleDetailsBySlugPage/components/DuplicateProjectRoleModal.tsx index 16be01b67..ccc3e4ea5 100644 --- a/frontend/src/pages/project/RoleDetailsBySlugPage/components/DuplicateProjectRoleModal.tsx +++ b/frontend/src/pages/project/RoleDetailsBySlugPage/components/DuplicateProjectRoleModal.tsx @@ -80,7 +80,7 @@ const Content = ({ role, onClose }: ContentProps) => { }); navigate({ - to: `/${currentWorkspace.type}/$projectId/roles/$roleSlug` as const, + to: "/projects/$projectId/roles/$roleSlug", params: { roleSlug: newRole.slug, projectId: currentWorkspace.id diff --git a/frontend/src/pages/project/RoleDetailsBySlugPage/components/RoleModal.tsx b/frontend/src/pages/project/RoleDetailsBySlugPage/components/RoleModal.tsx index 2e51de9b7..0f1433af3 100644 --- a/frontend/src/pages/project/RoleDetailsBySlugPage/components/RoleModal.tsx +++ b/frontend/src/pages/project/RoleDetailsBySlugPage/components/RoleModal.tsx @@ -100,7 +100,7 @@ export const RoleModal = ({ popUp, handlePopUpToggle }: Props) => { }); navigate({ - to: `/${currentWorkspace.type}/$projectId/roles/$roleSlug` as const, + to: "/projects/$projectId/roles/$roleSlug", params: { roleSlug: newRole.slug, projectId diff --git a/frontend/src/pages/project/RoleDetailsBySlugPage/route.tsx b/frontend/src/pages/project/RoleDetailsBySlugPage/route.tsx index 978a6ba18..55b14de60 100644 --- a/frontend/src/pages/project/RoleDetailsBySlugPage/route.tsx +++ b/frontend/src/pages/project/RoleDetailsBySlugPage/route.tsx @@ -1,14 +1,14 @@ -import { createFileRoute } from '@tanstack/react-router' +import { createFileRoute } from "@tanstack/react-router"; -import { RoleDetailsBySlugPage } from './RoleDetailsBySlugPage' +import { RoleDetailsBySlugPage } from "./RoleDetailsBySlugPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/_project-general-layout/roles/$roleSlug', + "/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/_project-general-layout/roles/$roleSlug" )({ component: RoleDetailsBySlugPage, - beforeLoad: ({ context }) => { + beforeLoad: ({}) => { return { - breadcrumbs: [], - } - }, -}) + breadcrumbs: [] + }; + } +}); diff --git a/frontend/src/pages/project/SettingsPage/route.tsx b/frontend/src/pages/project/SettingsPage/route.tsx index 767eb6b5b..13058630a 100644 --- a/frontend/src/pages/project/SettingsPage/route.tsx +++ b/frontend/src/pages/project/SettingsPage/route.tsx @@ -1,14 +1,15 @@ -import { createFileRoute } from '@tanstack/react-router' -import { SettingsPage } from './SettingsPage' +import { createFileRoute } from "@tanstack/react-router"; + +import { SettingsPage } from "./SettingsPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/_project-general-layout/settings', + "/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/_project-general-layout/settings" )({ component: SettingsPage, beforeLoad: ({ context, params }) => { return { breadcrumbs: [ - ...context.breadcrumbs, + ...context.breadcrumbs // { // label: "Access Control", // link: linkOptions({ @@ -18,7 +19,7 @@ export const Route = createFileRoute( // } // }) // } - ], - } - }, -}) + ] + }; + } +}); diff --git a/frontend/src/pages/project/layout-general.tsx b/frontend/src/pages/project/layout-general.tsx index ee99716ab..ae2f764d0 100644 --- a/frontend/src/pages/project/layout-general.tsx +++ b/frontend/src/pages/project/layout-general.tsx @@ -1,8 +1,9 @@ -import { ProjectGeneralLayout } from '@app/layouts/ProjectGeneralLayout' -import { createFileRoute } from '@tanstack/react-router' +import { createFileRoute } from "@tanstack/react-router"; + +import { ProjectGeneralLayout } from "@app/layouts/ProjectGeneralLayout"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/_project-general-layout', + "/_authenticate/_inject-org-details/_org-layout/projects/$projectId/_project-layout/_project-general-layout" )({ - component: ProjectGeneralLayout, -}) + component: ProjectGeneralLayout +}); diff --git a/frontend/src/pages/project/layout.tsx b/frontend/src/pages/project/layout.tsx index 798216d7a..8f85cb1a5 100644 --- a/frontend/src/pages/project/layout.tsx +++ b/frontend/src/pages/project/layout.tsx @@ -1,10 +1,10 @@ import { createFileRoute } from "@tanstack/react-router"; + +import { BreadcrumbTypes } from "@app/components/v2"; import { workspaceKeys } from "@app/hooks/api"; import { fetchUserProjectPermissions, roleQueryKeys } from "@app/hooks/api/roles/queries"; import { fetchWorkspaceById } from "@app/hooks/api/workspace/queries"; - import { ProjectLayout } from "@app/layouts/ProjectLayout"; -import { BreadcrumbTypes } from "@app/components/v2"; import { ProjectSelect } from "@app/layouts/ProjectLayout/components/ProjectSelect"; export const Route = createFileRoute( diff --git a/frontend/src/pages/public/ErrorPage/ErrorPage.tsx b/frontend/src/pages/public/ErrorPage/ErrorPage.tsx index c20533915..1910eb891 100644 --- a/frontend/src/pages/public/ErrorPage/ErrorPage.tsx +++ b/frontend/src/pages/public/ErrorPage/ErrorPage.tsx @@ -31,7 +31,7 @@ export const ErrorPage = ({ error }: ErrorComponentProps) => { {" "} if the issue persists.

- +