diff --git a/frontend/src/components/projects/NewProjectModal.tsx b/frontend/src/components/projects/NewProjectModal.tsx index aa18be38b..6d575829e 100644 --- a/frontend/src/components/projects/NewProjectModal.tsx +++ b/frontend/src/components/projects/NewProjectModal.tsx @@ -4,6 +4,7 @@ import { faInfoCircle } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { zodResolver } from "@hookform/resolvers/zod"; import { useNavigate } from "@tanstack/react-router"; +import { twMerge } from "tailwind-merge"; import z from "zod"; import { createNotification } from "@app/components/notifications"; @@ -16,6 +17,7 @@ import { Button, FormControl, Input, + Lottie, Modal, ModalClose, ModalContent, @@ -35,6 +37,7 @@ import { getProjectHomePage } from "@app/helpers/project"; import { useCreateWorkspace, useGetExternalKmsList, useGetUserWorkspaces } from "@app/hooks/api"; import { INTERNAL_KMS_KEY_ID } from "@app/hooks/api/kms/types"; import { InfisicalProjectTemplate, useListProjectTemplates } from "@app/hooks/api/projectTemplates"; +import { ProjectType } from "@app/hooks/api/workspace/types"; const formSchema = z.object({ name: z.string().trim().min(1, "Required").max(64, "Too long, maximum length is 64 characters"), @@ -43,6 +46,7 @@ const formSchema = z.object({ .trim() .max(256, "Description too long, max length is 256 characters") .optional(), + type: z.nativeEnum(ProjectType), kmsKeyId: z.string(), template: z.string() }); @@ -56,6 +60,34 @@ interface NewProjectModalProps { type NewProjectFormProps = Pick; +const PROJECT_TYPE_MENU_ITEMS = [ + { + label: "Secret Manager", + value: ProjectType.SecretManager, + icon: "vault" + }, + { + label: "Certificate Manager", + value: ProjectType.CertificateManager, + icon: "note" + }, + { + label: "KMS", + value: ProjectType.KMS, + icon: "unlock" + }, + { + label: "SSH", + value: ProjectType.SSH, + icon: "terminal" + }, + { + label: "Secret Scanning", + value: ProjectType.SecretScanning, + icon: "secret-scan" + } +]; + const NewProjectForm = ({ onOpenChange }: NewProjectFormProps) => { const navigate = useNavigate(); const { currentOrg } = useOrganization(); @@ -101,7 +133,8 @@ const NewProjectForm = ({ onOpenChange }: NewProjectFormProps) => { name, description, kmsKeyId, - template + template, + type }: TAddProjectFormData) => { // type check if (!currentOrg) return; @@ -113,7 +146,8 @@ const NewProjectForm = ({ onOpenChange }: NewProjectFormProps) => { projectName: name, projectDescription: description, kmsKeyId: kmsKeyId !== INTERNAL_KMS_KEY_ID ? kmsKeyId : undefined, - template + template, + type }); await refetchWorkspaces(); @@ -150,6 +184,42 @@ const NewProjectForm = ({ onOpenChange }: NewProjectFormProps) => { )} /> + ( + +
+ {PROJECT_TYPE_MENU_ITEMS.map((el) => ( +
field.onChange(el.value)} + role="button" + tabIndex={0} + onKeyDown={(e) => { + if (e.key === "Enter") { + field.onChange(el.value); + } + }} + > + +
{el.label}
+
+ ))} +
+
+ )} + /> { )} /> + { }; return titleConvert[type]; }; + +export const getProjectLottieIcon = (type: ProjectType) => { + const titleConvert = { + [ProjectType.SecretManager]: "vault", + [ProjectType.KMS]: "unlock", + [ProjectType.CertificateManager]: "note", + [ProjectType.SSH]: "terminal", + [ProjectType.SecretScanning]: "secret-scan" + }; + return titleConvert[type]; +}; diff --git a/frontend/src/hooks/api/identities/types.ts b/frontend/src/hooks/api/identities/types.ts index b9319ebc6..1af1cc24c 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/hooks/api/workspace/types.ts b/frontend/src/hooks/api/workspace/types.ts index 2ee6531d8..7d6f68821 100644 --- a/frontend/src/hooks/api/workspace/types.ts +++ b/frontend/src/hooks/api/workspace/types.ts @@ -184,6 +184,7 @@ export type TSearchProjectsDTO = { name?: string; limit?: number; offset?: number; + type?: ProjectType; options?: { enabled?: boolean }; orderBy?: ProjectIdentityOrderBy; orderDirection?: OrderByDirection; diff --git a/frontend/src/layouts/KmsLayout/KmsLayout.tsx b/frontend/src/layouts/KmsLayout/KmsLayout.tsx index 2a7f6928c..b6b212154 100644 --- a/frontend/src/layouts/KmsLayout/KmsLayout.tsx +++ b/frontend/src/layouts/KmsLayout/KmsLayout.tsx @@ -1,10 +1,10 @@ +import { faCog, faCube, faHome, faLock, faUsers } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { Link, Outlet } from "@tanstack/react-router"; import { motion } from "framer-motion"; import { Lottie, Menu, MenuGroup, MenuItem } from "@app/components/v2"; import { useWorkspace } from "@app/context"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { faCog, faUsers } from "@fortawesome/free-solid-svg-icons"; export const KmsLayout = () => { const { currentWorkspace } = useWorkspace(); @@ -34,7 +34,16 @@ export const KmsLayout = () => { projectId: currentWorkspace.id }} > - {({ isActive }) => Overview} + {({ isActive }) => ( + +
+
+ +
+ Overview +
+
+ )} { projectId: currentWorkspace.id }} > - {({ isActive }) => KMIP} + {({ isActive }) => ( + +
+
+ +
+ KMIP +
+
+ )} @@ -83,6 +101,22 @@ export const KmsLayout = () => { +
+ + + + +
+ } + > + Organization Home + + + +
diff --git a/frontend/src/layouts/PkiManagerLayout/PkiManagerLayout.tsx b/frontend/src/layouts/PkiManagerLayout/PkiManagerLayout.tsx index 7b5171c67..f8f7a4d86 100644 --- a/frontend/src/layouts/PkiManagerLayout/PkiManagerLayout.tsx +++ b/frontend/src/layouts/PkiManagerLayout/PkiManagerLayout.tsx @@ -1,5 +1,15 @@ import { useTranslation } from "react-i18next"; -import { faCog, faMobile, faUsers } from "@fortawesome/free-solid-svg-icons"; +import { + faBell, + faCertificate, + faCog, + faFileLines, + faHome, + faMobile, + faSitemap, + faStamp, + faUsers +} from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { Link, Outlet } from "@tanstack/react-router"; import { motion } from "framer-motion"; @@ -37,7 +47,16 @@ export const PkiManagerLayout = () => { projectId: currentWorkspace.id }} > - {({ isActive }) => Subscribers} + {({ isActive }) => ( + +
+
+ +
+ Subscribers +
+
+ )} { }} > {({ isActive }) => ( - Certificate Templates + +
+
+ +
+ Certificate Templates +
+
)} { projectId: currentWorkspace.id }} > - {({ isActive }) => Certificates} + {({ isActive }) => ( + +
+
+ +
+ Certificates +
+
+ )} { }} > {({ isActive }) => ( - Certificates Authorities + +
+
+ +
+ Certificates Authority +
+
)} { projectId: currentWorkspace.id }} > - {({ isActive }) => Alerting} + {({ isActive }) => ( + +
+
+ +
+ Alerting +
+
+ )} @@ -114,6 +165,22 @@ export const PkiManagerLayout = () => {
+
+ + + + +
+ } + > + Organization Home + + + +
diff --git a/frontend/src/layouts/SecretManagerLayout/SecretManagerLayout.tsx b/frontend/src/layouts/SecretManagerLayout/SecretManagerLayout.tsx index 111ac9d0d..7db007d6e 100644 --- a/frontend/src/layouts/SecretManagerLayout/SecretManagerLayout.tsx +++ b/frontend/src/layouts/SecretManagerLayout/SecretManagerLayout.tsx @@ -3,6 +3,7 @@ import { faArrowsSpin, faCheckToSlot, faCog, + faHome, faMobile, faPuzzlePiece, faUsers, @@ -182,6 +183,22 @@ export const SecretManagerLayout = () => {
+
+ + + + +
+ } + > + Organization Home + + + +
diff --git a/frontend/src/layouts/SecretScanningLayout/SecretScanningLayout.tsx b/frontend/src/layouts/SecretScanningLayout/SecretScanningLayout.tsx index 9ec0ca6b6..81252eeb6 100644 --- a/frontend/src/layouts/SecretScanningLayout/SecretScanningLayout.tsx +++ b/frontend/src/layouts/SecretScanningLayout/SecretScanningLayout.tsx @@ -1,9 +1,15 @@ -import { faCog, faUsers } from "@fortawesome/free-solid-svg-icons"; +import { + faCog, + faDatabase, + faHome, + faMagnifyingGlass, + faUsers +} from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { Link, Outlet } from "@tanstack/react-router"; import { motion } from "framer-motion"; -import { Menu, MenuGroup, MenuItem } from "@app/components/v2"; +import { Lottie, Menu, MenuGroup, MenuItem } from "@app/components/v2"; import { useWorkspace } from "@app/context"; export const SecretScanningLayout = () => { @@ -21,7 +27,8 @@ export const SecretScanningLayout = () => { className="dark w-full border-r border-mineshaft-600 bg-gradient-to-tr from-mineshaft-700 via-mineshaft-800 to-mineshaft-900 md:w-60" >
diff --git a/frontend/src/layouts/SshLayout/SshLayout.tsx b/frontend/src/layouts/SshLayout/SshLayout.tsx index b1ffc47df..f1a93641c 100644 --- a/frontend/src/layouts/SshLayout/SshLayout.tsx +++ b/frontend/src/layouts/SshLayout/SshLayout.tsx @@ -1,11 +1,11 @@ +import { faCog, faHome, faServer, faStamp, faUsers } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { Link, Outlet } from "@tanstack/react-router"; import { motion } from "framer-motion"; import { ProjectPermissionCan } from "@app/components/permissions"; -import { Menu, MenuGroup, MenuItem } from "@app/components/v2"; +import { Lottie, Menu, MenuGroup, MenuItem } from "@app/components/v2"; import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { faCog, faUsers } from "@fortawesome/free-solid-svg-icons"; export const SshLayout = () => { const { currentWorkspace } = useWorkspace(); @@ -22,7 +22,10 @@ export const SshLayout = () => { className="dark w-full border-r border-mineshaft-600 bg-gradient-to-tr from-mineshaft-700 via-mineshaft-800 to-mineshaft-900 md:w-60" >
diff --git a/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/route.tsx b/frontend/src/pages/cert-manager/CertificateAuthoritiesPage/route.tsx index 80b1437d9..b01369c07 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/cert-management/$projectId/_cert-manager-layout/certificate-authorities', + "/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_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 a93c57f89..68deb41b9 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/cert-management/$projectId/_cert-manager-layout/certificates', + "/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/certificates" )({ component: CertificatesPage, beforeLoad: ({ context }) => { @@ -11,9 +11,9 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Certificates', - }, - ], - } - }, -}) + label: "Certificates" + } + ] + }; + } +}); diff --git a/frontend/src/pages/cert-manager/PkiSubscribersPage/route.tsx b/frontend/src/pages/cert-manager/PkiSubscribersPage/route.tsx index 53735c73b..c8a2541d8 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/cert-management/$projectId/_cert-manager-layout/subscribers/', + "/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/subscribers/" )({ component: PkiSubscribersPage, beforeLoad: ({ context }) => { @@ -11,9 +11,9 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Subscribers', - }, - ], - } - }, -}) + label: "Subscribers" + } + ] + }; + } +}); diff --git a/frontend/src/pages/cert-manager/PkiTemplateListPage/route.tsx b/frontend/src/pages/cert-manager/PkiTemplateListPage/route.tsx index 1bfe673d0..cf568bf2c 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/cert-management/$projectId/_cert-manager-layout/certificate-templates/', + "/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/certificate-templates/" )({ component: PkiTemplateListPage, beforeLoad: ({ context }) => { @@ -11,9 +11,9 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Certificate Templates', - }, - ], - } - }, -}) + label: "Certificate Templates" + } + ] + }; + } +}); diff --git a/frontend/src/pages/cert-manager/SettingsPage/SettingsPage.tsx b/frontend/src/pages/cert-manager/SettingsPage/SettingsPage.tsx index 6c42e66dc..22c1a6961 100644 --- a/frontend/src/pages/cert-manager/SettingsPage/SettingsPage.tsx +++ b/frontend/src/pages/cert-manager/SettingsPage/SettingsPage.tsx @@ -2,12 +2,13 @@ import { Helmet } from "react-helmet"; import { useTranslation } from "react-i18next"; import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2"; +import { ProjectGeneralTab } from "@app/pages/project/SettingsPage/components/ProjectGeneralTab"; const tabs = [ { name: "General", key: "tab-project-general", - Component: () =>
Coming soon
+ Component: ProjectGeneralTab } ]; diff --git a/frontend/src/pages/cert-manager/SettingsPage/route.tsx b/frontend/src/pages/cert-manager/SettingsPage/route.tsx index 1ea79cc29..f1400f30e 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/cert-management/$projectId/_cert-manager-layout/settings', + "/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_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/cert-manager/layout.tsx b/frontend/src/pages/cert-manager/layout.tsx index eb805f649..6b846909e 100644 --- a/frontend/src/pages/cert-manager/layout.tsx +++ b/frontend/src/pages/cert-manager/layout.tsx @@ -1,10 +1,10 @@ import { createFileRoute } from "@tanstack/react-router"; -import { PkiManagerLayout } from "@app/layouts/PkiManagerLayout"; -import { workspaceKeys } from "@app/hooks/api"; -import { fetchWorkspaceById } from "@app/hooks/api/workspace/queries"; -import { fetchUserProjectPermissions, roleQueryKeys } from "@app/hooks/api/roles/queries"; 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 { PkiManagerLayout } from "@app/layouts/PkiManagerLayout"; import { ProjectSelect } from "@app/layouts/ProjectLayout/components/ProjectSelect"; export const Route = createFileRoute( diff --git a/frontend/src/pages/kms/KmipPage/route.tsx b/frontend/src/pages/kms/KmipPage/route.tsx index 11b98399a..662bfc32c 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/kms/$projectId/_kms-layout/kmip', + "/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_kms-layout/kmip" )({ component: KmipPage, beforeLoad: ({ context }) => { @@ -11,9 +11,9 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'KMIP', - }, - ], - } - }, -}) + label: "KMIP" + } + ] + }; + } +}); diff --git a/frontend/src/pages/kms/OverviewPage/route.tsx b/frontend/src/pages/kms/OverviewPage/route.tsx index b0d56f1de..8d4270a25 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/kms/$projectId/_kms-layout/overview', + "/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_kms-layout/overview" )({ component: OverviewPage, beforeLoad: ({ context }) => { @@ -11,9 +11,9 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Overview', - }, - ], - } - }, -}) + label: "Overview" + } + ] + }; + } +}); diff --git a/frontend/src/pages/kms/SettingsPage/SettingsPage.tsx b/frontend/src/pages/kms/SettingsPage/SettingsPage.tsx index 566107a77..cdc0582dc 100644 --- a/frontend/src/pages/kms/SettingsPage/SettingsPage.tsx +++ b/frontend/src/pages/kms/SettingsPage/SettingsPage.tsx @@ -2,12 +2,13 @@ import { Helmet } from "react-helmet"; import { useTranslation } from "react-i18next"; import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2"; +import { ProjectGeneralTab } from "@app/pages/project/SettingsPage/components/ProjectGeneralTab"; const tabs = [ { name: "General", key: "tab-project-general", - Component: () =>
Coming soon...
+ Component: ProjectGeneralTab } ]; diff --git a/frontend/src/pages/kms/SettingsPage/route.tsx b/frontend/src/pages/kms/SettingsPage/route.tsx index 3c77c9496..b47df3f86 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/kms/$projectId/_kms-layout/settings', + "/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_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/organization/IdentityDetailsByIDPage/components/IdentityProjectsSection/IdentityProjectRow.tsx b/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityProjectsSection/IdentityProjectRow.tsx index 899206730..5b0aac0b7 100644 --- a/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityProjectsSection/IdentityProjectRow.tsx +++ b/frontend/src/pages/organization/IdentityDetailsByIDPage/components/IdentityProjectsSection/IdentityProjectRow.tsx @@ -6,7 +6,6 @@ import { format } from "date-fns"; import { createNotification } from "@app/components/notifications"; import { IconButton, Td, Tooltip, Tr } from "@app/components/v2"; -import { useWorkspace } from "@app/context"; import { getProjectBaseURL } from "@app/helpers/project"; import { formatProjectRoleName } from "@app/helpers/roles"; import { useGetUserWorkspaces } from "@app/hooks/api"; @@ -34,7 +33,6 @@ export const IdentityProjectRow = ({ }: Props) => { const { data: workspaces } = useGetUserWorkspaces(); const navigate = useNavigate(); - const { currentWorkspace } = useWorkspace(); const isAccessible = useMemo(() => { const workspaceIds = new Map(); @@ -53,7 +51,7 @@ export const IdentityProjectRow = ({ onClick={() => { if (isAccessible) { navigate({ - to: `${getProjectBaseURL(currentWorkspace.type)}/access-management` as const, + to: `${getProjectBaseURL(project.type)}/access-management` as const, params: { projectId: project.id }, diff --git a/frontend/src/pages/organization/ProjectsPage/components/AllProjectView.tsx b/frontend/src/pages/organization/ProjectsPage/components/AllProjectView.tsx index 5e596be50..7d63243c6 100644 --- a/frontend/src/pages/organization/ProjectsPage/components/AllProjectView.tsx +++ b/frontend/src/pages/organization/ProjectsPage/components/AllProjectView.tsx @@ -4,6 +4,7 @@ import { faArrowDownAZ, faBorderAll, faCheck, + faCheckCircle, faFolderOpen, faList, faMagnifyingGlass, @@ -17,6 +18,11 @@ import { createNotification } from "@app/components/notifications"; import { OrgPermissionCan } from "@app/components/permissions"; import { Button, + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuTrigger, FormControl, IconButton, Input, @@ -27,7 +33,7 @@ import { Tooltip } from "@app/components/v2"; import { OrgPermissionActions, OrgPermissionSubjects } from "@app/context"; -import { getProjectHomePage } from "@app/helpers/project"; +import { getProjectHomePage, getProjectTitle } from "@app/helpers/project"; import { getUserTablePreference, PreferenceKey, @@ -35,7 +41,7 @@ import { } from "@app/helpers/userTablePreferences"; import { useDebounce, usePagination, usePopUp, useResetPageHelper } from "@app/hooks"; import { useRequestProjectAccess, useSearchProjects } from "@app/hooks/api"; -import { Workspace } from "@app/hooks/api/workspace/types"; +import { ProjectType, Workspace } from "@app/hooks/api/workspace/types"; type Props = { onAddNewProject: () => void; @@ -98,6 +104,7 @@ export const AllProjectView = ({ const navigate = useNavigate(); const [searchFilter, setSearchFilter] = useState(""); const [debouncedSearch] = useDebounce(searchFilter); + const [projectTypeFilter, setProjectTypeFilter] = useState(); const { setPage, perPage, @@ -124,7 +131,8 @@ export const AllProjectView = ({ limit, offset, name: debouncedSearch || undefined, - orderDirection + orderDirection, + type: projectTypeFilter }); useResetPageHelper({ @@ -134,6 +142,9 @@ export const AllProjectView = ({ }); const requestedWorkspaceDetails = (popUp.requestAccessConfirmation.data || {}) as Workspace; + const handleToggleFilterByProjectType = (el: ProjectType) => + setProjectTypeFilter((state) => (state === el ? undefined : el)); + return (
@@ -160,6 +171,49 @@ export const AllProjectView = ({
+ + +
+ + + + + +
+
+ + Filter By Project Type + {Object.values(ProjectType).map((el) => ( + { + e.preventDefault(); + handleToggleFilterByProjectType(el); + }} + icon={projectTypeFilter === el && } + iconPos="right" + > +
+ {getProjectTitle(el)} +
+
+ ))} +
+
- {workspace.description} + {getProjectTitle(workspace.type)}{" "} + {workspace.description ? `- ${workspace.description}` : ""}
diff --git a/frontend/src/pages/organization/ProjectsPage/components/MyProjectView.tsx b/frontend/src/pages/organization/ProjectsPage/components/MyProjectView.tsx index 853d8e47f..f33270e61 100644 --- a/frontend/src/pages/organization/ProjectsPage/components/MyProjectView.tsx +++ b/frontend/src/pages/organization/ProjectsPage/components/MyProjectView.tsx @@ -2,9 +2,9 @@ import { ReactNode, useMemo, useState } from "react"; import { faFolderOpen, faStar } from "@fortawesome/free-regular-svg-icons"; import { faArrowDownAZ, - faArrowRight, faArrowUpZA, faBorderAll, + faCheckCircle, faList, faMagnifyingGlass, faPlus, @@ -13,12 +13,26 @@ import { } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useNavigate } from "@tanstack/react-router"; +import { twMerge } from "tailwind-merge"; import { createNotification } from "@app/components/notifications"; import { OrgPermissionCan } from "@app/components/permissions"; -import { Button, IconButton, Input, Pagination, Skeleton, Tooltip } from "@app/components/v2"; +import { + Button, + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuTrigger, + IconButton, + Input, + Lottie, + Pagination, + Skeleton, + Tooltip +} from "@app/components/v2"; import { OrgPermissionActions, OrgPermissionSubjects, useOrganization } from "@app/context"; -import { getProjectHomePage } from "@app/helpers/project"; +import { getProjectHomePage, getProjectLottieIcon, getProjectTitle } from "@app/helpers/project"; import { getUserTablePreference, PreferenceKey, @@ -29,7 +43,7 @@ import { useGetUserWorkspaces } from "@app/hooks/api"; import { OrderByDirection } from "@app/hooks/api/generic/types"; import { useUpdateUserProjectFavorites } from "@app/hooks/api/users/mutation"; import { useGetUserProjectFavorites } from "@app/hooks/api/users/queries"; -import { Workspace } from "@app/hooks/api/workspace/types"; +import { ProjectType, Workspace } from "@app/hooks/api/workspace/types"; type Props = { onAddNewProject: () => void; @@ -53,6 +67,9 @@ export const MyProjectView = ({ }: Props) => { const navigate = useNavigate(); const { currentOrg } = useOrganization(); + const [projectTypeFilter, setProjectTypeFilter] = useState>>( + {} + ); const { data: workspaces = [], isPending: isWorkspaceLoading } = useGetUserWorkspaces(); const { @@ -67,6 +84,7 @@ export const MyProjectView = ({ } = usePagination(ProjectOrderBy.Name, { initPerPage: getUserTablePreference("myProjectsTable", PreferenceKey.PerPage, 24) }); + const isTableFilteredByType = Boolean(Object.values(projectTypeFilter).some((el) => el)); const handlePerPageChange = (newPerPage: number) => { setPerPage(newPerPage); @@ -88,13 +106,18 @@ export const MyProjectView = ({ const filteredWorkspaces = useMemo( () => workspaces - .filter((ws) => ws?.name?.toLowerCase().includes(searchFilter.toLowerCase())) + .filter((ws) => { + if (isTableFilteredByType && !projectTypeFilter?.[ws.type]) { + return false; + } + return ws?.name?.toLowerCase().includes(searchFilter.toLowerCase()); + }) .sort((a, b) => orderDirection === OrderByDirection.ASC ? a.name.toLowerCase().localeCompare(b.name.toLowerCase()) : b.name.toLowerCase().localeCompare(a.name.toLowerCase()) ), - [searchFilter, orderDirection, workspaces] + [searchFilter, orderDirection, workspaces, projectTypeFilter] ); useResetPageHelper({ @@ -117,6 +140,15 @@ export const MyProjectView = ({ }; }, [filteredWorkspaces, projectFavorites, offset, limit, page]); + const handleToggleFilterByProjectType = (type: ProjectType) => { + setProjectTypeFilter((state) => { + return { + ...(state || {}), + [type]: !state?.[type] + }; + }); + }; + const addProjectToFavorites = async (projectId: string) => { try { if (currentOrg?.id) { @@ -160,53 +192,46 @@ export const MyProjectView = ({ }); }} key={workspace.id} - className="flex h-40 min-w-72 cursor-pointer flex-col rounded-md border border-mineshaft-600 bg-mineshaft-800 p-4" + className="relative flex h-36 min-w-72 cursor-pointer flex-col rounded-md border border-mineshaft-500 bg-mineshaft-800 p-4 transition-all hover:border-mineshaft-400" > -
-
{workspace.name}
- {isFavorite ? ( - { - e.stopPropagation(); - removeProjectFromFavorites(workspace.id); - }} - /> - ) : ( - { - e.stopPropagation(); - addProjectToFavorites(workspace.id); - }} - /> - )} -
- -
- {workspace.description} -
- -
- +
+ {getProjectTitle(workspace.type)} +
+
+
+
+ {workspace.description || "No description"}
); @@ -222,12 +247,16 @@ export const MyProjectView = ({ }); }} key={workspace.id} - className={`group grid h-14 min-w-72 cursor-pointer grid-cols-6 border-l border-r border-t border-mineshaft-600 bg-mineshaft-800 px-6 hover:bg-mineshaft-700 ${ + className={`group grid h-16 min-w-72 cursor-pointer grid-cols-6 border-l border-r border-t border-mineshaft-600 bg-mineshaft-800 px-6 hover:bg-mineshaft-700 ${ index === 0 && "rounded-t-md" }`} > -
+
{workspace.name}
+
+ {getProjectTitle(workspace.type)}{" "} + {workspace.description ? `- ${workspace.description}` : ""} +
{isFavorite ? ( @@ -258,7 +287,7 @@ export const MyProjectView = ({ switch (projectsViewMode) { case ProjectsViewMode.GRID: projectsComponents = ( -
+
{isProjectViewLoading && Array.apply(0, Array(3)).map((_x, i) => (
+ + +
+ + + + + +
+
+ + Filter By Project Type + {Object.values(ProjectType).map((el) => ( + { + e.preventDefault(); + handleToggleFilterByProjectType(el); + }} + icon={projectTypeFilter?.[el] && } + iconPos="right" + > +
+ {getProjectTitle(el)} +
+
+ ))} +
+
{ const { data: workspaces = [] } = useGetUserWorkspaces(); const navigate = useNavigate(); - const { currentWorkspace } = useWorkspace(); const isAccessible = useMemo(() => { const workspaceIds = new Map(); @@ -46,7 +44,7 @@ export const UserProjectRow = ({ onClick={() => { if (isAccessible) { navigate({ - to: `${getProjectBaseURL(currentWorkspace.type)}/access-management` as const, + to: `${getProjectBaseURL(project.type)}/access-management` as const, params: { projectId: project.id }, 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 9840fae03..9bd98084e 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 @@ -33,6 +33,7 @@ import { Tr } from "@app/components/v2"; import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; +import { getProjectBaseURL } from "@app/helpers/project"; import { getUserTablePreference, PreferenceKey, @@ -44,7 +45,6 @@ import { OrderByDirection } from "@app/hooks/api/generic/types"; import { UsePopUpState } from "@app/hooks/usePopUp"; import { GroupRoles } from "./GroupRoles"; -import { getProjectBaseURL } from "@app/helpers/project"; type Props = { handlePopUpOpen: ( diff --git a/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx b/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx index e52464600..5b6e773db 100644 --- a/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx @@ -46,6 +46,7 @@ import { Tr } from "@app/components/v2"; import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; +import { getProjectBaseURL } from "@app/helpers/project"; import { formatProjectRoleName } from "@app/helpers/roles"; import { getUserTablePreference, @@ -60,7 +61,6 @@ import { ProjectIdentityOrderBy } from "@app/hooks/api/workspace/types"; import { usePopUp } from "@app/hooks/usePopUp"; import { IdentityModal } from "./components/IdentityModal"; -import { getProjectBaseURL } from "@app/helpers/project"; const MAX_ROLES_TO_BE_SHOWN_IN_TABLE = 2; 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 3dd2e2275..735257293 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 @@ -2,10 +2,10 @@ import { Link } from "@tanstack/react-router"; import { Alert, AlertDescription } from "@app/components/v2"; import { useWorkspace } from "@app/context"; +import { getProjectBaseURL } from "@app/helpers/project"; import { TWorkspaceUser } from "@app/hooks/api/types"; import { MemberRbacSection } from "./MemberRbacSection"; -import { getProjectBaseURL } from "@app/helpers/project"; type Props = { projectMember: TWorkspaceUser; diff --git a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MembersTable.tsx b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MembersTable.tsx index b20090116..2cbe144ee 100644 --- a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MembersTable.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MembersTable.tsx @@ -50,6 +50,7 @@ import { useUser, useWorkspace } from "@app/context"; +import { getProjectBaseURL } from "@app/helpers/project"; import { formatProjectRoleName } from "@app/helpers/roles"; import { getUserTablePreference, @@ -60,7 +61,6 @@ import { usePagination, useResetPageHelper } from "@app/hooks"; import { useGetProjectRoles, useGetWorkspaceUsers } from "@app/hooks/api"; import { OrderByDirection } from "@app/hooks/api/generic/types"; import { UsePopUpState } from "@app/hooks/usePopUp"; -import { getProjectBaseURL } from "@app/helpers/project"; const MAX_ROLES_TO_BE_SHOWN_IN_TABLE = 2; 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 cfe6c97e4..211f1d0e8 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 @@ -40,6 +40,7 @@ import { Tr } from "@app/components/v2"; import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; +import { getProjectBaseURL } from "@app/helpers/project"; import { isCustomProjectRole } from "@app/helpers/roles"; import { getUserTablePreference, @@ -52,7 +53,6 @@ import { OrderByDirection } from "@app/hooks/api/generic/types"; import { ProjectMembershipRole, TProjectRole } from "@app/hooks/api/roles/types"; import { DuplicateProjectRoleModal } from "@app/pages/project/RoleDetailsBySlugPage/components/DuplicateProjectRoleModal"; import { RoleModal } from "@app/pages/project/RoleDetailsBySlugPage/components/RoleModal"; -import { getProjectBaseURL } from "@app/helpers/project"; enum RolesOrderBy { Name = "name", diff --git a/frontend/src/pages/project/AccessControlPage/route-cert-manager.tsx b/frontend/src/pages/project/AccessControlPage/route-cert-manager.tsx index 08edaaabf..e5549b5be 100644 --- a/frontend/src/pages/project/AccessControlPage/route-cert-manager.tsx +++ b/frontend/src/pages/project/AccessControlPage/route-cert-manager.tsx @@ -1,34 +1,32 @@ -import { createFileRoute, stripSearchParams } from '@tanstack/react-router' -import { zodValidator } from '@tanstack/zod-adapter' -import { z } from 'zod' +import { createFileRoute, stripSearchParams } from "@tanstack/react-router"; +import { zodValidator } from "@tanstack/zod-adapter"; +import { z } from "zod"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { AccessControlPage } from './AccessControlPage' +import { AccessControlPage } from "./AccessControlPage"; const AccessControlPageQuerySchema = z.object({ - selectedTab: z - .nativeEnum(ProjectAccessControlTabs) - .catch(ProjectAccessControlTabs.Member), - requesterEmail: z.string().catch(''), -}) + selectedTab: z.nativeEnum(ProjectAccessControlTabs).catch(ProjectAccessControlTabs.Member), + requesterEmail: z.string().catch("") +}); export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/access-management', + "/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/access-management" )({ component: AccessControlPage, validateSearch: zodValidator(AccessControlPageQuerySchema), search: { - middlewares: [stripSearchParams({ requesterEmail: '' })], + middlewares: [stripSearchParams({ requesterEmail: "" })] }, beforeLoad: ({ context }) => { return { breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', - }, - ], - } - }, -}) + label: "Access Control" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/AccessControlPage/route-kms.tsx b/frontend/src/pages/project/AccessControlPage/route-kms.tsx index df197ec80..0968565c4 100644 --- a/frontend/src/pages/project/AccessControlPage/route-kms.tsx +++ b/frontend/src/pages/project/AccessControlPage/route-kms.tsx @@ -1,34 +1,32 @@ -import { createFileRoute, stripSearchParams } from '@tanstack/react-router' -import { zodValidator } from '@tanstack/zod-adapter' -import { z } from 'zod' +import { createFileRoute, stripSearchParams } from "@tanstack/react-router"; +import { zodValidator } from "@tanstack/zod-adapter"; +import { z } from "zod"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { AccessControlPage } from './AccessControlPage' +import { AccessControlPage } from "./AccessControlPage"; const AccessControlPageQuerySchema = z.object({ - selectedTab: z - .nativeEnum(ProjectAccessControlTabs) - .catch(ProjectAccessControlTabs.Member), - requesterEmail: z.string().catch(''), -}) + selectedTab: z.nativeEnum(ProjectAccessControlTabs).catch(ProjectAccessControlTabs.Member), + requesterEmail: z.string().catch("") +}); export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_kms-layout/access-management', + "/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_kms-layout/access-management" )({ component: AccessControlPage, validateSearch: zodValidator(AccessControlPageQuerySchema), search: { - middlewares: [stripSearchParams({ requesterEmail: '' })], + middlewares: [stripSearchParams({ requesterEmail: "" })] }, beforeLoad: ({ context }) => { return { breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', - }, - ], - } - }, -}) + label: "Access Control" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/AccessControlPage/route-secret-manager.tsx b/frontend/src/pages/project/AccessControlPage/route-secret-manager.tsx index 71801c858..efdb9f9b2 100644 --- a/frontend/src/pages/project/AccessControlPage/route-secret-manager.tsx +++ b/frontend/src/pages/project/AccessControlPage/route-secret-manager.tsx @@ -1,34 +1,32 @@ -import { createFileRoute, stripSearchParams } from '@tanstack/react-router' -import { zodValidator } from '@tanstack/zod-adapter' -import { z } from 'zod' +import { createFileRoute, stripSearchParams } from "@tanstack/react-router"; +import { zodValidator } from "@tanstack/zod-adapter"; +import { z } from "zod"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { AccessControlPage } from './AccessControlPage' +import { AccessControlPage } from "./AccessControlPage"; const AccessControlPageQuerySchema = z.object({ - selectedTab: z - .nativeEnum(ProjectAccessControlTabs) - .catch(ProjectAccessControlTabs.Member), - requesterEmail: z.string().catch(''), -}) + selectedTab: z.nativeEnum(ProjectAccessControlTabs).catch(ProjectAccessControlTabs.Member), + requesterEmail: z.string().catch("") +}); export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/access-management', + "/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/access-management" )({ component: AccessControlPage, validateSearch: zodValidator(AccessControlPageQuerySchema), search: { - middlewares: [stripSearchParams({ requesterEmail: '' })], + middlewares: [stripSearchParams({ requesterEmail: "" })] }, beforeLoad: ({ context }) => { return { breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', - }, - ], - } - }, -}) + label: "Access Control" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/AccessControlPage/route-secret-scanning.tsx b/frontend/src/pages/project/AccessControlPage/route-secret-scanning.tsx index 87e92d294..2305a761c 100644 --- a/frontend/src/pages/project/AccessControlPage/route-secret-scanning.tsx +++ b/frontend/src/pages/project/AccessControlPage/route-secret-scanning.tsx @@ -1,34 +1,32 @@ -import { createFileRoute, stripSearchParams } from '@tanstack/react-router' -import { zodValidator } from '@tanstack/zod-adapter' -import { z } from 'zod' +import { createFileRoute, stripSearchParams } from "@tanstack/react-router"; +import { zodValidator } from "@tanstack/zod-adapter"; +import { z } from "zod"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { AccessControlPage } from './AccessControlPage' +import { AccessControlPage } from "./AccessControlPage"; const AccessControlPageQuerySchema = z.object({ - selectedTab: z - .nativeEnum(ProjectAccessControlTabs) - .catch(ProjectAccessControlTabs.Member), - requesterEmail: z.string().catch(''), -}) + selectedTab: z.nativeEnum(ProjectAccessControlTabs).catch(ProjectAccessControlTabs.Member), + requesterEmail: z.string().catch("") +}); export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/secret-scanning/$projectId/_secret-scanning-layout/access-management', + "/_authenticate/_inject-org-details/_org-layout/projects/secret-scanning/$projectId/_secret-scanning-layout/access-management" )({ component: AccessControlPage, validateSearch: zodValidator(AccessControlPageQuerySchema), search: { - middlewares: [stripSearchParams({ requesterEmail: '' })], + middlewares: [stripSearchParams({ requesterEmail: "" })] }, beforeLoad: ({ context }) => { return { breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', - }, - ], - } - }, -}) + label: "Access Control" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/AccessControlPage/route-ssh.tsx b/frontend/src/pages/project/AccessControlPage/route-ssh.tsx index fb7236281..d4cc6f11e 100644 --- a/frontend/src/pages/project/AccessControlPage/route-ssh.tsx +++ b/frontend/src/pages/project/AccessControlPage/route-ssh.tsx @@ -1,34 +1,32 @@ -import { createFileRoute, stripSearchParams } from '@tanstack/react-router' -import { zodValidator } from '@tanstack/zod-adapter' -import { z } from 'zod' +import { createFileRoute, stripSearchParams } from "@tanstack/react-router"; +import { zodValidator } from "@tanstack/zod-adapter"; +import { z } from "zod"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { AccessControlPage } from './AccessControlPage' +import { AccessControlPage } from "./AccessControlPage"; const AccessControlPageQuerySchema = z.object({ - selectedTab: z - .nativeEnum(ProjectAccessControlTabs) - .catch(ProjectAccessControlTabs.Member), - requesterEmail: z.string().catch(''), -}) + selectedTab: z.nativeEnum(ProjectAccessControlTabs).catch(ProjectAccessControlTabs.Member), + requesterEmail: z.string().catch("") +}); export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/ssh/$projectId/_ssh-layout/access-management', + "/_authenticate/_inject-org-details/_org-layout/projects/ssh/$projectId/_ssh-layout/access-management" )({ component: AccessControlPage, validateSearch: zodValidator(AccessControlPageQuerySchema), search: { - middlewares: [stripSearchParams({ requesterEmail: '' })], + middlewares: [stripSearchParams({ requesterEmail: "" })] }, beforeLoad: ({ context }) => { return { breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', - }, - ], - } - }, -}) + label: "Access Control" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/GroupDetailsByIDPage/components/GroupDetailsSection.tsx b/frontend/src/pages/project/GroupDetailsByIDPage/components/GroupDetailsSection.tsx index e1f4196df..90c327067 100644 --- a/frontend/src/pages/project/GroupDetailsByIDPage/components/GroupDetailsSection.tsx +++ b/frontend/src/pages/project/GroupDetailsByIDPage/components/GroupDetailsSection.tsx @@ -15,11 +15,11 @@ import { } from "@app/components/v2"; import { CopyButton } from "@app/components/v2/CopyButton"; import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; +import { getProjectBaseURL } from "@app/helpers/project"; import { usePopUp } from "@app/hooks"; import { useDeleteGroupFromWorkspace } from "@app/hooks/api"; import { TGroupMembership } from "@app/hooks/api/groups/types"; import { GroupRoles } from "@app/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupRoles"; -import { getProjectBaseURL } from "@app/helpers/project"; type Props = { groupMembership: TGroupMembership; diff --git a/frontend/src/pages/project/GroupDetailsByIDPage/route-cert-manager.tsx b/frontend/src/pages/project/GroupDetailsByIDPage/route-cert-manager.tsx index 319ea1eb5..4f8736482 100644 --- a/frontend/src/pages/project/GroupDetailsByIDPage/route-cert-manager.tsx +++ b/frontend/src/pages/project/GroupDetailsByIDPage/route-cert-manager.tsx @@ -1,11 +1,11 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { GroupDetailsByIDPage } from './GroupDetailsByIDPage' +import { GroupDetailsByIDPage } from "./GroupDetailsByIDPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/groups/$groupId', + "/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/groups/$groupId" )({ component: GroupDetailsByIDPage, beforeLoad: ({ context, params }) => { @@ -13,21 +13,21 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', + label: "Access Control", link: linkOptions({ - to: '/projects/$projectId/access-management', + to: "/projects/$projectId/access-management", params: { - projectId: params.projectId, + projectId: params.projectId }, search: { - selectedTab: ProjectAccessControlTabs.Groups, - }, - }), + selectedTab: ProjectAccessControlTabs.Groups + } + }) }, { - label: 'Group', - }, - ], - } - }, -}) + label: "Group" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/GroupDetailsByIDPage/route-kms.tsx b/frontend/src/pages/project/GroupDetailsByIDPage/route-kms.tsx index 6fba57a44..3167bdb5c 100644 --- a/frontend/src/pages/project/GroupDetailsByIDPage/route-kms.tsx +++ b/frontend/src/pages/project/GroupDetailsByIDPage/route-kms.tsx @@ -1,11 +1,11 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { GroupDetailsByIDPage } from './GroupDetailsByIDPage' +import { GroupDetailsByIDPage } from "./GroupDetailsByIDPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_kms-layout/groups/$groupId', + "/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_kms-layout/groups/$groupId" )({ component: GroupDetailsByIDPage, beforeLoad: ({ context, params }) => { @@ -13,21 +13,21 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', + label: "Access Control", link: linkOptions({ - to: '/projects/$projectId/access-management', + to: "/projects/$projectId/access-management", params: { - projectId: params.projectId, + projectId: params.projectId }, search: { - selectedTab: ProjectAccessControlTabs.Groups, - }, - }), + selectedTab: ProjectAccessControlTabs.Groups + } + }) }, { - label: 'Group', - }, - ], - } - }, -}) + label: "Group" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/GroupDetailsByIDPage/route-secret-manager.tsx b/frontend/src/pages/project/GroupDetailsByIDPage/route-secret-manager.tsx index 02697c36e..d68c50c0e 100644 --- a/frontend/src/pages/project/GroupDetailsByIDPage/route-secret-manager.tsx +++ b/frontend/src/pages/project/GroupDetailsByIDPage/route-secret-manager.tsx @@ -1,11 +1,11 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { GroupDetailsByIDPage } from './GroupDetailsByIDPage' +import { GroupDetailsByIDPage } from "./GroupDetailsByIDPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/groups/$groupId', + "/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/groups/$groupId" )({ component: GroupDetailsByIDPage, beforeLoad: ({ context, params }) => { @@ -13,21 +13,21 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', + label: "Access Control", link: linkOptions({ - to: '/projects/$projectId/access-management', + to: "/projects/$projectId/access-management", params: { - projectId: params.projectId, + projectId: params.projectId }, search: { - selectedTab: ProjectAccessControlTabs.Groups, - }, - }), + selectedTab: ProjectAccessControlTabs.Groups + } + }) }, { - label: 'Group', - }, - ], - } - }, -}) + label: "Group" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/GroupDetailsByIDPage/route-secret-scanning.tsx b/frontend/src/pages/project/GroupDetailsByIDPage/route-secret-scanning.tsx index 5bb7f3856..92cbcff62 100644 --- a/frontend/src/pages/project/GroupDetailsByIDPage/route-secret-scanning.tsx +++ b/frontend/src/pages/project/GroupDetailsByIDPage/route-secret-scanning.tsx @@ -1,11 +1,11 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { GroupDetailsByIDPage } from './GroupDetailsByIDPage' +import { GroupDetailsByIDPage } from "./GroupDetailsByIDPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/secret-scanning/$projectId/_secret-scanning-layout/groups/$groupId', + "/_authenticate/_inject-org-details/_org-layout/projects/secret-scanning/$projectId/_secret-scanning-layout/groups/$groupId" )({ component: GroupDetailsByIDPage, beforeLoad: ({ context, params }) => { @@ -13,21 +13,21 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', + label: "Access Control", link: linkOptions({ - to: '/projects/$projectId/access-management', + to: "/projects/$projectId/access-management", params: { - projectId: params.projectId, + projectId: params.projectId }, search: { - selectedTab: ProjectAccessControlTabs.Groups, - }, - }), + selectedTab: ProjectAccessControlTabs.Groups + } + }) }, { - label: 'Group', - }, - ], - } - }, -}) + label: "Group" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/GroupDetailsByIDPage/route-ssh.tsx b/frontend/src/pages/project/GroupDetailsByIDPage/route-ssh.tsx index ba3a63762..0b3eefc8b 100644 --- a/frontend/src/pages/project/GroupDetailsByIDPage/route-ssh.tsx +++ b/frontend/src/pages/project/GroupDetailsByIDPage/route-ssh.tsx @@ -1,11 +1,11 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { GroupDetailsByIDPage } from './GroupDetailsByIDPage' +import { GroupDetailsByIDPage } from "./GroupDetailsByIDPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/ssh/$projectId/_ssh-layout/groups/$groupId', + "/_authenticate/_inject-org-details/_org-layout/projects/ssh/$projectId/_ssh-layout/groups/$groupId" )({ component: GroupDetailsByIDPage, beforeLoad: ({ context, params }) => { @@ -13,21 +13,21 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', + label: "Access Control", link: linkOptions({ - to: '/projects/$projectId/access-management', + to: "/projects/$projectId/access-management", params: { - projectId: params.projectId, + projectId: params.projectId }, search: { - selectedTab: ProjectAccessControlTabs.Groups, - }, - }), + selectedTab: ProjectAccessControlTabs.Groups + } + }) }, { - label: 'Group', - }, - ], - } - }, -}) + label: "Group" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/IdentityDetailsByIDPage/route-cert-manager.tsx b/frontend/src/pages/project/IdentityDetailsByIDPage/route-cert-manager.tsx index 55b97e665..b0777d272 100644 --- a/frontend/src/pages/project/IdentityDetailsByIDPage/route-cert-manager.tsx +++ b/frontend/src/pages/project/IdentityDetailsByIDPage/route-cert-manager.tsx @@ -1,11 +1,11 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { IdentityDetailsByIDPage } from './IdentityDetailsByIDPage' +import { IdentityDetailsByIDPage } from "./IdentityDetailsByIDPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/identities/$identityId', + "/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/identities/$identityId" )({ component: IdentityDetailsByIDPage, beforeLoad: ({ context, params }) => { @@ -13,21 +13,21 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', + label: "Access Control", link: linkOptions({ - to: '/projects/$projectId/access-management', + to: "/projects/$projectId/access-management", params: { - projectId: params.projectId, + projectId: params.projectId }, search: { - selectedTab: ProjectAccessControlTabs.Identities, - }, - }), + selectedTab: ProjectAccessControlTabs.Identities + } + }) }, { - label: 'Machine Identity', - }, - ], - } - }, -}) + label: "Machine Identity" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/IdentityDetailsByIDPage/route-kms.tsx b/frontend/src/pages/project/IdentityDetailsByIDPage/route-kms.tsx index d1adcfa81..e6179f324 100644 --- a/frontend/src/pages/project/IdentityDetailsByIDPage/route-kms.tsx +++ b/frontend/src/pages/project/IdentityDetailsByIDPage/route-kms.tsx @@ -1,11 +1,11 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { IdentityDetailsByIDPage } from './IdentityDetailsByIDPage' +import { IdentityDetailsByIDPage } from "./IdentityDetailsByIDPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_kms-layout/identities/$identityId', + "/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_kms-layout/identities/$identityId" )({ component: IdentityDetailsByIDPage, beforeLoad: ({ context, params }) => { @@ -13,21 +13,21 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', + label: "Access Control", link: linkOptions({ - to: '/projects/$projectId/access-management', + to: "/projects/$projectId/access-management", params: { - projectId: params.projectId, + projectId: params.projectId }, search: { - selectedTab: ProjectAccessControlTabs.Identities, - }, - }), + selectedTab: ProjectAccessControlTabs.Identities + } + }) }, { - label: 'Machine Identity', - }, - ], - } - }, -}) + label: "Machine Identity" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/IdentityDetailsByIDPage/route-secret-manager.tsx b/frontend/src/pages/project/IdentityDetailsByIDPage/route-secret-manager.tsx index 71a1bfa8e..f7a22dbfd 100644 --- a/frontend/src/pages/project/IdentityDetailsByIDPage/route-secret-manager.tsx +++ b/frontend/src/pages/project/IdentityDetailsByIDPage/route-secret-manager.tsx @@ -1,11 +1,11 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { IdentityDetailsByIDPage } from './IdentityDetailsByIDPage' +import { IdentityDetailsByIDPage } from "./IdentityDetailsByIDPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/identities/$identityId', + "/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/identities/$identityId" )({ component: IdentityDetailsByIDPage, beforeLoad: ({ context, params }) => { @@ -13,21 +13,21 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', + label: "Access Control", link: linkOptions({ - to: '/projects/$projectId/access-management', + to: "/projects/$projectId/access-management", params: { - projectId: params.projectId, + projectId: params.projectId }, search: { - selectedTab: ProjectAccessControlTabs.Identities, - }, - }), + selectedTab: ProjectAccessControlTabs.Identities + } + }) }, { - label: 'Machine Identity', - }, - ], - } - }, -}) + label: "Machine Identity" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/IdentityDetailsByIDPage/route-secret-scanning.tsx b/frontend/src/pages/project/IdentityDetailsByIDPage/route-secret-scanning.tsx index 8766aae36..1ccf183ec 100644 --- a/frontend/src/pages/project/IdentityDetailsByIDPage/route-secret-scanning.tsx +++ b/frontend/src/pages/project/IdentityDetailsByIDPage/route-secret-scanning.tsx @@ -1,11 +1,11 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { IdentityDetailsByIDPage } from './IdentityDetailsByIDPage' +import { IdentityDetailsByIDPage } from "./IdentityDetailsByIDPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/secret-scanning/$projectId/_secret-scanning-layout/identities/$identityId', + "/_authenticate/_inject-org-details/_org-layout/projects/secret-scanning/$projectId/_secret-scanning-layout/identities/$identityId" )({ component: IdentityDetailsByIDPage, beforeLoad: ({ context, params }) => { @@ -13,21 +13,21 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', + label: "Access Control", link: linkOptions({ - to: '/projects/$projectId/access-management', + to: "/projects/$projectId/access-management", params: { - projectId: params.projectId, + projectId: params.projectId }, search: { - selectedTab: ProjectAccessControlTabs.Identities, - }, - }), + selectedTab: ProjectAccessControlTabs.Identities + } + }) }, { - label: 'Machine Identity', - }, - ], - } - }, -}) + label: "Machine Identity" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/IdentityDetailsByIDPage/route-ssh.tsx b/frontend/src/pages/project/IdentityDetailsByIDPage/route-ssh.tsx index f9a4e7c31..ddde97813 100644 --- a/frontend/src/pages/project/IdentityDetailsByIDPage/route-ssh.tsx +++ b/frontend/src/pages/project/IdentityDetailsByIDPage/route-ssh.tsx @@ -1,11 +1,11 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { IdentityDetailsByIDPage } from './IdentityDetailsByIDPage' +import { IdentityDetailsByIDPage } from "./IdentityDetailsByIDPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/ssh/$projectId/_ssh-layout/identities/$identityId', + "/_authenticate/_inject-org-details/_org-layout/projects/ssh/$projectId/_ssh-layout/identities/$identityId" )({ component: IdentityDetailsByIDPage, beforeLoad: ({ context, params }) => { @@ -13,21 +13,21 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', + label: "Access Control", link: linkOptions({ - to: '/projects/$projectId/access-management', + to: "/projects/$projectId/access-management", params: { - projectId: params.projectId, + projectId: params.projectId }, search: { - selectedTab: ProjectAccessControlTabs.Identities, - }, - }), + selectedTab: ProjectAccessControlTabs.Identities + } + }) }, { - label: 'Machine Identity', - }, - ], - } - }, -}) + label: "Machine Identity" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/MemberDetailsByIDPage/route-cert-manager.tsx b/frontend/src/pages/project/MemberDetailsByIDPage/route-cert-manager.tsx index def050e18..b55368def 100644 --- a/frontend/src/pages/project/MemberDetailsByIDPage/route-cert-manager.tsx +++ b/frontend/src/pages/project/MemberDetailsByIDPage/route-cert-manager.tsx @@ -1,11 +1,11 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { MemberDetailsByIDPage } from './MemberDetailsByIDPage' +import { MemberDetailsByIDPage } from "./MemberDetailsByIDPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/members/$membershipId', + "/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/members/$membershipId" )({ component: MemberDetailsByIDPage, beforeLoad: ({ context, params }) => { @@ -13,21 +13,21 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', + label: "Access Control", link: linkOptions({ - to: '/projects/$projectId/access-management', + to: "/projects/$projectId/access-management", params: { - projectId: params.projectId, + projectId: params.projectId }, search: { - selectedTab: ProjectAccessControlTabs.Member, - }, - }), + selectedTab: ProjectAccessControlTabs.Member + } + }) }, { - label: 'User', - }, - ], - } - }, -}) + label: "User" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/MemberDetailsByIDPage/route-kms.tsx b/frontend/src/pages/project/MemberDetailsByIDPage/route-kms.tsx index 0eee9c738..1ac3b4f4f 100644 --- a/frontend/src/pages/project/MemberDetailsByIDPage/route-kms.tsx +++ b/frontend/src/pages/project/MemberDetailsByIDPage/route-kms.tsx @@ -1,11 +1,11 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { MemberDetailsByIDPage } from './MemberDetailsByIDPage' +import { MemberDetailsByIDPage } from "./MemberDetailsByIDPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_kms-layout/members/$membershipId', + "/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_kms-layout/members/$membershipId" )({ component: MemberDetailsByIDPage, beforeLoad: ({ context, params }) => { @@ -13,21 +13,21 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', + label: "Access Control", link: linkOptions({ - to: '/projects/$projectId/access-management', + to: "/projects/$projectId/access-management", params: { - projectId: params.projectId, + projectId: params.projectId }, search: { - selectedTab: ProjectAccessControlTabs.Member, - }, - }), + selectedTab: ProjectAccessControlTabs.Member + } + }) }, { - label: 'User', - }, - ], - } - }, -}) + label: "User" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/MemberDetailsByIDPage/route-secret-manager.tsx b/frontend/src/pages/project/MemberDetailsByIDPage/route-secret-manager.tsx index a31c6642a..88921d273 100644 --- a/frontend/src/pages/project/MemberDetailsByIDPage/route-secret-manager.tsx +++ b/frontend/src/pages/project/MemberDetailsByIDPage/route-secret-manager.tsx @@ -1,11 +1,11 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { MemberDetailsByIDPage } from './MemberDetailsByIDPage' +import { MemberDetailsByIDPage } from "./MemberDetailsByIDPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/members/$membershipId', + "/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/members/$membershipId" )({ component: MemberDetailsByIDPage, beforeLoad: ({ context, params }) => { @@ -13,21 +13,21 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', + label: "Access Control", link: linkOptions({ - to: '/projects/$projectId/access-management', + to: "/projects/$projectId/access-management", params: { - projectId: params.projectId, + projectId: params.projectId }, search: { - selectedTab: ProjectAccessControlTabs.Member, - }, - }), + selectedTab: ProjectAccessControlTabs.Member + } + }) }, { - label: 'User', - }, - ], - } - }, -}) + label: "User" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/MemberDetailsByIDPage/route-secret-scanning.tsx b/frontend/src/pages/project/MemberDetailsByIDPage/route-secret-scanning.tsx index 51dc7191d..5fa834531 100644 --- a/frontend/src/pages/project/MemberDetailsByIDPage/route-secret-scanning.tsx +++ b/frontend/src/pages/project/MemberDetailsByIDPage/route-secret-scanning.tsx @@ -1,11 +1,11 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { MemberDetailsByIDPage } from './MemberDetailsByIDPage' +import { MemberDetailsByIDPage } from "./MemberDetailsByIDPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/secret-scanning/$projectId/_secret-scanning-layout/members/$membershipId', + "/_authenticate/_inject-org-details/_org-layout/projects/secret-scanning/$projectId/_secret-scanning-layout/members/$membershipId" )({ component: MemberDetailsByIDPage, beforeLoad: ({ context, params }) => { @@ -13,21 +13,21 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', + label: "Access Control", link: linkOptions({ - to: '/projects/$projectId/access-management', + to: "/projects/$projectId/access-management", params: { - projectId: params.projectId, + projectId: params.projectId }, search: { - selectedTab: ProjectAccessControlTabs.Member, - }, - }), + selectedTab: ProjectAccessControlTabs.Member + } + }) }, { - label: 'User', - }, - ], - } - }, -}) + label: "User" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/MemberDetailsByIDPage/route-ssh.tsx b/frontend/src/pages/project/MemberDetailsByIDPage/route-ssh.tsx index faa76f2b4..5a2f7e313 100644 --- a/frontend/src/pages/project/MemberDetailsByIDPage/route-ssh.tsx +++ b/frontend/src/pages/project/MemberDetailsByIDPage/route-ssh.tsx @@ -1,11 +1,11 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { MemberDetailsByIDPage } from './MemberDetailsByIDPage' +import { MemberDetailsByIDPage } from "./MemberDetailsByIDPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/ssh/$projectId/_ssh-layout/members/$membershipId', + "/_authenticate/_inject-org-details/_org-layout/projects/ssh/$projectId/_ssh-layout/members/$membershipId" )({ component: MemberDetailsByIDPage, beforeLoad: ({ context, params }) => { @@ -13,21 +13,21 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', + label: "Access Control", link: linkOptions({ - to: '/projects/$projectId/access-management', + to: "/projects/$projectId/access-management", params: { - projectId: params.projectId, + projectId: params.projectId }, search: { - selectedTab: ProjectAccessControlTabs.Member, - }, - }), + selectedTab: ProjectAccessControlTabs.Member + } + }) }, { - label: 'User', - }, - ], - } - }, -}) + label: "User" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/RoleDetailsBySlugPage/RoleDetailsBySlugPage.tsx b/frontend/src/pages/project/RoleDetailsBySlugPage/RoleDetailsBySlugPage.tsx index 8a4c2eb4d..95070c2c4 100644 --- a/frontend/src/pages/project/RoleDetailsBySlugPage/RoleDetailsBySlugPage.tsx +++ b/frontend/src/pages/project/RoleDetailsBySlugPage/RoleDetailsBySlugPage.tsx @@ -17,6 +17,7 @@ import { PageHeader } from "@app/components/v2"; import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@app/context"; +import { getProjectBaseURL } from "@app/helpers/project"; import { useDeleteProjectRole, useGetProjectRoleBySlug } from "@app/hooks/api"; import { ProjectMembershipRole } from "@app/hooks/api/roles/types"; import { usePopUp } from "@app/hooks/usePopUp"; @@ -25,7 +26,6 @@ import { RolePermissionsSection } from "@app/pages/project/RoleDetailsBySlugPage import { ProjectAccessControlTabs } from "@app/types/project"; import { RoleModal } from "./components/RoleModal"; -import { getProjectBaseURL } from "@app/helpers/project"; const Page = () => { const navigate = useNavigate(); diff --git a/frontend/src/pages/project/RoleDetailsBySlugPage/components/DuplicateProjectRoleModal.tsx b/frontend/src/pages/project/RoleDetailsBySlugPage/components/DuplicateProjectRoleModal.tsx index 0777d9a1b..24974225e 100644 --- a/frontend/src/pages/project/RoleDetailsBySlugPage/components/DuplicateProjectRoleModal.tsx +++ b/frontend/src/pages/project/RoleDetailsBySlugPage/components/DuplicateProjectRoleModal.tsx @@ -7,10 +7,10 @@ import { createNotification } from "@app/components/notifications"; import { Button, FormControl, Input, Modal, ModalContent, Spinner } from "@app/components/v2"; import { ProjectPermissionSub, useWorkspace } from "@app/context"; import { ProjectPermissionSecretActions } from "@app/context/ProjectPermissionContext/types"; +import { getProjectBaseURL } from "@app/helpers/project"; import { useCreateProjectRole, useGetProjectRoleBySlug } from "@app/hooks/api"; import { TProjectRole } from "@app/hooks/api/roles/types"; import { slugSchema } from "@app/lib/schemas"; -import { getProjectBaseURL } from "@app/helpers/project"; type Props = { isOpen: boolean; diff --git a/frontend/src/pages/project/RoleDetailsBySlugPage/components/RoleModal.tsx b/frontend/src/pages/project/RoleDetailsBySlugPage/components/RoleModal.tsx index 4c22f970d..eb7a2ba83 100644 --- a/frontend/src/pages/project/RoleDetailsBySlugPage/components/RoleModal.tsx +++ b/frontend/src/pages/project/RoleDetailsBySlugPage/components/RoleModal.tsx @@ -7,6 +7,7 @@ import { z } from "zod"; import { createNotification } from "@app/components/notifications"; import { Button, FormControl, Input, Modal, ModalContent } from "@app/components/v2"; import { useWorkspace } from "@app/context"; +import { getProjectBaseURL } from "@app/helpers/project"; import { useCreateProjectRole, useGetProjectRoleBySlug, @@ -14,7 +15,6 @@ import { } from "@app/hooks/api"; import { UsePopUpState } from "@app/hooks/usePopUp"; import { slugSchema } from "@app/lib/schemas"; -import { getProjectBaseURL } from "@app/helpers/project"; const schema = z .object({ diff --git a/frontend/src/pages/project/RoleDetailsBySlugPage/route-cert-manager.tsx b/frontend/src/pages/project/RoleDetailsBySlugPage/route-cert-manager.tsx index 9174e0e24..fdcfac7fb 100644 --- a/frontend/src/pages/project/RoleDetailsBySlugPage/route-cert-manager.tsx +++ b/frontend/src/pages/project/RoleDetailsBySlugPage/route-cert-manager.tsx @@ -1,11 +1,11 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { RoleDetailsBySlugPage } from './RoleDetailsBySlugPage' +import { RoleDetailsBySlugPage } from "./RoleDetailsBySlugPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/roles/$roleSlug', + "/_authenticate/_inject-org-details/_org-layout/projects/cert-management/$projectId/_cert-manager-layout/roles/$roleSlug" )({ component: RoleDetailsBySlugPage, beforeLoad: ({ context, params }) => { @@ -13,21 +13,21 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', + label: "Access Control", link: linkOptions({ - to: '/projects/$projectId/access-management', + to: "/projects/$projectId/access-management", params: { - projectId: params.projectId, + projectId: params.projectId }, search: { - selectedTab: ProjectAccessControlTabs.Roles, - }, - }), + selectedTab: ProjectAccessControlTabs.Roles + } + }) }, { - label: 'Roles', - }, - ], - } - }, -}) + label: "Roles" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/RoleDetailsBySlugPage/route-kms.tsx b/frontend/src/pages/project/RoleDetailsBySlugPage/route-kms.tsx index b0f218e05..d17f16342 100644 --- a/frontend/src/pages/project/RoleDetailsBySlugPage/route-kms.tsx +++ b/frontend/src/pages/project/RoleDetailsBySlugPage/route-kms.tsx @@ -1,11 +1,11 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { RoleDetailsBySlugPage } from './RoleDetailsBySlugPage' +import { RoleDetailsBySlugPage } from "./RoleDetailsBySlugPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_kms-layout/roles/$roleSlug', + "/_authenticate/_inject-org-details/_org-layout/projects/kms/$projectId/_kms-layout/roles/$roleSlug" )({ component: RoleDetailsBySlugPage, beforeLoad: ({ context, params }) => { @@ -13,21 +13,21 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', + label: "Access Control", link: linkOptions({ - to: '/projects/$projectId/access-management', + to: "/projects/$projectId/access-management", params: { - projectId: params.projectId, + projectId: params.projectId }, search: { - selectedTab: ProjectAccessControlTabs.Roles, - }, - }), + selectedTab: ProjectAccessControlTabs.Roles + } + }) }, { - label: 'Roles', - }, - ], - } - }, -}) + label: "Roles" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/RoleDetailsBySlugPage/route-secret-manager.tsx b/frontend/src/pages/project/RoleDetailsBySlugPage/route-secret-manager.tsx index 6735c7df2..5e2f03743 100644 --- a/frontend/src/pages/project/RoleDetailsBySlugPage/route-secret-manager.tsx +++ b/frontend/src/pages/project/RoleDetailsBySlugPage/route-secret-manager.tsx @@ -1,11 +1,11 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { RoleDetailsBySlugPage } from './RoleDetailsBySlugPage' +import { RoleDetailsBySlugPage } from "./RoleDetailsBySlugPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/roles/$roleSlug', + "/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/roles/$roleSlug" )({ component: RoleDetailsBySlugPage, beforeLoad: ({ context, params }) => { @@ -13,21 +13,21 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', + label: "Access Control", link: linkOptions({ - to: '/projects/$projectId/access-management', + to: "/projects/$projectId/access-management", params: { - projectId: params.projectId, + projectId: params.projectId }, search: { - selectedTab: ProjectAccessControlTabs.Roles, - }, - }), + selectedTab: ProjectAccessControlTabs.Roles + } + }) }, { - label: 'Roles', - }, - ], - } - }, -}) + label: "Roles" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/RoleDetailsBySlugPage/route-secret-scanning.tsx b/frontend/src/pages/project/RoleDetailsBySlugPage/route-secret-scanning.tsx index 0b5f1169c..44aecad7c 100644 --- a/frontend/src/pages/project/RoleDetailsBySlugPage/route-secret-scanning.tsx +++ b/frontend/src/pages/project/RoleDetailsBySlugPage/route-secret-scanning.tsx @@ -1,11 +1,11 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { RoleDetailsBySlugPage } from './RoleDetailsBySlugPage' +import { RoleDetailsBySlugPage } from "./RoleDetailsBySlugPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/secret-scanning/$projectId/_secret-scanning-layout/roles/$roleSlug', + "/_authenticate/_inject-org-details/_org-layout/projects/secret-scanning/$projectId/_secret-scanning-layout/roles/$roleSlug" )({ component: RoleDetailsBySlugPage, beforeLoad: ({ context, params }) => { @@ -13,21 +13,21 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', + label: "Access Control", link: linkOptions({ - to: '/projects/$projectId/access-management', + to: "/projects/$projectId/access-management", params: { - projectId: params.projectId, + projectId: params.projectId }, search: { - selectedTab: ProjectAccessControlTabs.Roles, - }, - }), + selectedTab: ProjectAccessControlTabs.Roles + } + }) }, { - label: 'Roles', - }, - ], - } - }, -}) + label: "Roles" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/RoleDetailsBySlugPage/route-ssh.tsx b/frontend/src/pages/project/RoleDetailsBySlugPage/route-ssh.tsx index 5a27da08b..c91851dea 100644 --- a/frontend/src/pages/project/RoleDetailsBySlugPage/route-ssh.tsx +++ b/frontend/src/pages/project/RoleDetailsBySlugPage/route-ssh.tsx @@ -1,11 +1,11 @@ -import { createFileRoute, linkOptions } from '@tanstack/react-router' +import { createFileRoute, linkOptions } from "@tanstack/react-router"; -import { ProjectAccessControlTabs } from '@app/types/project' +import { ProjectAccessControlTabs } from "@app/types/project"; -import { RoleDetailsBySlugPage } from './RoleDetailsBySlugPage' +import { RoleDetailsBySlugPage } from "./RoleDetailsBySlugPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/ssh/$projectId/_ssh-layout/roles/$roleSlug', + "/_authenticate/_inject-org-details/_org-layout/projects/ssh/$projectId/_ssh-layout/roles/$roleSlug" )({ component: RoleDetailsBySlugPage, beforeLoad: ({ context, params }) => { @@ -13,21 +13,21 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Access Control', + label: "Access Control", link: linkOptions({ - to: '/projects/$projectId/access-management', + to: "/projects/$projectId/access-management", params: { - projectId: params.projectId, + projectId: params.projectId }, search: { - selectedTab: ProjectAccessControlTabs.Roles, - }, - }), + selectedTab: ProjectAccessControlTabs.Roles + } + }) }, { - label: 'Roles', - }, - ], - } - }, -}) + label: "Roles" + } + ] + }; + } +}); diff --git a/frontend/src/pages/project/SettingsPage/route-cert-manager.tsx b/frontend/src/pages/project/SettingsPage/route-cert-manager.tsx index 348820131..0718ea2f2 100644 --- a/frontend/src/pages/project/SettingsPage/route-cert-manager.tsx +++ b/frontend/src/pages/project/SettingsPage/route-cert-manager.tsx @@ -16,4 +16,4 @@ export const Route = createFileRoute( ] }; } -}); \ No newline at end of file +}); diff --git a/frontend/src/pages/project/SettingsPage/route-kms.tsx b/frontend/src/pages/project/SettingsPage/route-kms.tsx index 348820131..0718ea2f2 100644 --- a/frontend/src/pages/project/SettingsPage/route-kms.tsx +++ b/frontend/src/pages/project/SettingsPage/route-kms.tsx @@ -16,4 +16,4 @@ export const Route = createFileRoute( ] }; } -}); \ No newline at end of file +}); diff --git a/frontend/src/pages/project/SettingsPage/route-secret-manager.tsx b/frontend/src/pages/project/SettingsPage/route-secret-manager.tsx index 348820131..0718ea2f2 100644 --- a/frontend/src/pages/project/SettingsPage/route-secret-manager.tsx +++ b/frontend/src/pages/project/SettingsPage/route-secret-manager.tsx @@ -16,4 +16,4 @@ export const Route = createFileRoute( ] }; } -}); \ No newline at end of file +}); diff --git a/frontend/src/pages/project/SettingsPage/route-secret-scanning.tsx b/frontend/src/pages/project/SettingsPage/route-secret-scanning.tsx index 348820131..0718ea2f2 100644 --- a/frontend/src/pages/project/SettingsPage/route-secret-scanning.tsx +++ b/frontend/src/pages/project/SettingsPage/route-secret-scanning.tsx @@ -16,4 +16,4 @@ export const Route = createFileRoute( ] }; } -}); \ No newline at end of file +}); diff --git a/frontend/src/pages/project/SettingsPage/route-ssh.tsx b/frontend/src/pages/project/SettingsPage/route-ssh.tsx index 7eba80943..364823b97 100644 --- a/frontend/src/pages/project/SettingsPage/route-ssh.tsx +++ b/frontend/src/pages/project/SettingsPage/route-ssh.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/_project-layout/projects/ssh/$projectId/_ssh-layout/settings', + "/_authenticate/_inject-org-details/_org-layout/_project-layout/projects/ssh/$projectId/_ssh-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/secret-manager/IPAllowlistPage/route.tsx b/frontend/src/pages/secret-manager/IPAllowlistPage/route.tsx index c55feb4ef..639289de2 100644 --- a/frontend/src/pages/secret-manager/IPAllowlistPage/route.tsx +++ b/frontend/src/pages/secret-manager/IPAllowlistPage/route.tsx @@ -1,9 +1,9 @@ -import { createFileRoute } from '@tanstack/react-router' +import { createFileRoute } from "@tanstack/react-router"; -import { IPAllowListPage } from './IPAllowlistPage' +import { IPAllowListPage } from "./IPAllowlistPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/allowlist', + "/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/allowlist" )({ - component: () => IPAllowListPage, -}) + component: () => IPAllowListPage +}); diff --git a/frontend/src/pages/secret-manager/SecretApprovalsPage/route.tsx b/frontend/src/pages/secret-manager/SecretApprovalsPage/route.tsx index e4544cb47..dfc6d4e4d 100644 --- a/frontend/src/pages/secret-manager/SecretApprovalsPage/route.tsx +++ b/frontend/src/pages/secret-manager/SecretApprovalsPage/route.tsx @@ -1,15 +1,15 @@ -import { createFileRoute } from '@tanstack/react-router' -import { zodValidator } from '@tanstack/zod-adapter' -import { z } from 'zod' +import { createFileRoute } from "@tanstack/react-router"; +import { zodValidator } from "@tanstack/zod-adapter"; +import { z } from "zod"; -import { SecretApprovalsPage } from './SecretApprovalsPage' +import { SecretApprovalsPage } from "./SecretApprovalsPage"; const SecretApprovalPageQueryParams = z.object({ - requestId: z.string().catch(''), -}) + requestId: z.string().catch("") +}); export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/approval', + "/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/approval" )({ component: SecretApprovalsPage, validateSearch: zodValidator(SecretApprovalPageQueryParams), @@ -18,9 +18,9 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Approvals', - }, - ], - } - }, -}) + label: "Approvals" + } + ] + }; + } +}); diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/SecretListView/SecretDetailSidebar.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/SecretListView/SecretDetailSidebar.tsx index d1e967e15..e764c7296 100644 --- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/SecretListView/SecretDetailSidebar.tsx +++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/SecretListView/SecretDetailSidebar.tsx @@ -52,6 +52,7 @@ import { useWorkspace } from "@app/context"; import { ProjectPermissionSecretActions } from "@app/context/ProjectPermissionContext/types"; +import { getProjectBaseURL } from "@app/helpers/project"; import { usePopUp, useToggle } from "@app/hooks"; import { useGetSecretVersion } from "@app/hooks/api"; import { ActorType } from "@app/hooks/api/auditLogs/enums"; @@ -64,7 +65,6 @@ import { camelCaseToSpaces } from "@app/lib/fn/string"; import { CreateReminderForm } from "./CreateReminderForm"; import { HIDDEN_SECRET_VALUE } from "./SecretItem"; import { formSchema, SecretActionType, TFormSchema } from "./SecretListView.utils"; -import { getProjectBaseURL } from "@app/helpers/project"; type Props = { isOpen?: boolean; diff --git a/frontend/src/pages/secret-manager/SecretRotationPage/route.tsx b/frontend/src/pages/secret-manager/SecretRotationPage/route.tsx index 2d5e080f9..85fce6ccf 100644 --- a/frontend/src/pages/secret-manager/SecretRotationPage/route.tsx +++ b/frontend/src/pages/secret-manager/SecretRotationPage/route.tsx @@ -1,9 +1,9 @@ -import { createFileRoute } from '@tanstack/react-router' +import { createFileRoute } from "@tanstack/react-router"; -import { SecretRotationPage } from './SecretRotationPage' +import { SecretRotationPage } from "./SecretRotationPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/secret-rotation', + "/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-manager-layout/secret-rotation" )({ component: SecretRotationPage, beforeLoad: ({ context }) => { @@ -11,9 +11,9 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Secret Rotation', - }, - ], - } - }, -}) + label: "Secret Rotation" + } + ] + }; + } +}); diff --git a/frontend/src/pages/secret-manager/SettingsPage/SettingsPage.tsx b/frontend/src/pages/secret-manager/SettingsPage/SettingsPage.tsx index 49bf7780e..0a4075111 100644 --- a/frontend/src/pages/secret-manager/SettingsPage/SettingsPage.tsx +++ b/frontend/src/pages/secret-manager/SettingsPage/SettingsPage.tsx @@ -4,9 +4,10 @@ import { useTranslation } from "react-i18next"; import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2"; import { useWorkspace } from "@app/context"; import { ProjectVersion } from "@app/hooks/api/workspace/types"; +import { ProjectGeneralTab } from "@app/pages/project/SettingsPage/components/ProjectGeneralTab"; import { EncryptionTab } from "./components/EncryptionTab"; -import { ProjectGeneralTab } from "./components/ProjectGeneralTab"; +import { SecretSettingsTab } from "./components/ProjectGeneralTab"; import { WebhooksTab } from "./components/WebhooksTab"; import { WorkflowIntegrationTab } from "./components/WorkflowIntegrationSection"; @@ -15,6 +16,7 @@ export const SettingsPage = () => { const { currentWorkspace } = useWorkspace(); const tabs = [ { name: "General", key: "tab-project-general", Component: ProjectGeneralTab }, + { name: "Secrets Settings", key: "tab-secret-general", Component: SecretSettingsTab }, { name: "Encryption", key: "tab-project-encryption", diff --git a/frontend/src/pages/secret-manager/SettingsPage/components/ProjectGeneralTab/ProjectGeneralTab.tsx b/frontend/src/pages/secret-manager/SettingsPage/components/ProjectGeneralTab/ProjectGeneralTab.tsx index 2973736f3..5f817a46a 100644 --- a/frontend/src/pages/secret-manager/SettingsPage/components/ProjectGeneralTab/ProjectGeneralTab.tsx +++ b/frontend/src/pages/secret-manager/SettingsPage/components/ProjectGeneralTab/ProjectGeneralTab.tsx @@ -6,7 +6,7 @@ import { SecretSharingSection } from "../SecretSharingSection"; import { SecretSnapshotsLegacySection } from "../SecretSnapshotsLegacySection"; import { SecretTagsSection } from "../SecretTagsSection"; -export const ProjectGeneralTab = () => { +export const SecretSettingsTab = () => { return (
diff --git a/frontend/src/pages/secret-manager/SettingsPage/components/ProjectGeneralTab/index.tsx b/frontend/src/pages/secret-manager/SettingsPage/components/ProjectGeneralTab/index.tsx index c6e611e0f..b32882dbe 100644 --- a/frontend/src/pages/secret-manager/SettingsPage/components/ProjectGeneralTab/index.tsx +++ b/frontend/src/pages/secret-manager/SettingsPage/components/ProjectGeneralTab/index.tsx @@ -1 +1 @@ -export { ProjectGeneralTab } from "./ProjectGeneralTab"; +export { SecretSettingsTab } from "./ProjectGeneralTab"; diff --git a/frontend/src/pages/secret-manager/SettingsPage/route.tsx b/frontend/src/pages/secret-manager/SettingsPage/route.tsx index 9e2d7c57a..d3343d668 100644 --- a/frontend/src/pages/secret-manager/SettingsPage/route.tsx +++ b/frontend/src/pages/secret-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/secret-management/$projectId/_secret-manager-layout/settings', + "/_authenticate/_inject-org-details/_org-layout/projects/secret-management/$projectId/_secret-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/secret-scanning/SecretScanningDataSourcesPage/route.tsx b/frontend/src/pages/secret-scanning/SecretScanningDataSourcesPage/route.tsx index 3ee43d803..b13c99db7 100644 --- a/frontend/src/pages/secret-scanning/SecretScanningDataSourcesPage/route.tsx +++ b/frontend/src/pages/secret-scanning/SecretScanningDataSourcesPage/route.tsx @@ -1,9 +1,9 @@ -import { createFileRoute } from '@tanstack/react-router' +import { createFileRoute } from "@tanstack/react-router"; -import { SecretScanningDataSourcesPage } from './SecretScanningDataSourcesPage' +import { SecretScanningDataSourcesPage } from "./SecretScanningDataSourcesPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/secret-scanning/$projectId/_secret-scanning-layout/data-sources/', + "/_authenticate/_inject-org-details/_org-layout/projects/secret-scanning/$projectId/_secret-scanning-layout/data-sources/" )({ component: SecretScanningDataSourcesPage, beforeLoad: ({ context }) => { @@ -11,9 +11,9 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Data Sources', - }, - ], - } - }, -}) + label: "Data Sources" + } + ] + }; + } +}); diff --git a/frontend/src/pages/secret-scanning/SecretScanningFindingsPage/route.tsx b/frontend/src/pages/secret-scanning/SecretScanningFindingsPage/route.tsx index 8152e7123..bfed1fcaf 100644 --- a/frontend/src/pages/secret-scanning/SecretScanningFindingsPage/route.tsx +++ b/frontend/src/pages/secret-scanning/SecretScanningFindingsPage/route.tsx @@ -1,32 +1,29 @@ -import { createFileRoute } from '@tanstack/react-router' -import { zodValidator } from '@tanstack/zod-adapter' -import { z } from 'zod' +import { createFileRoute } from "@tanstack/react-router"; +import { zodValidator } from "@tanstack/zod-adapter"; +import { z } from "zod"; -import { SecretScanningFindingStatus } from '@app/hooks/api/secretScanningV2' +import { SecretScanningFindingStatus } from "@app/hooks/api/secretScanningV2"; -import { SecretScanningFindingsPage } from './SecretScanningFindingsPage' +import { SecretScanningFindingsPage } from "./SecretScanningFindingsPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/secret-scanning/$projectId/_secret-scanning-layout/findings', + "/_authenticate/_inject-org-details/_org-layout/projects/secret-scanning/$projectId/_secret-scanning-layout/findings" )({ validateSearch: zodValidator( z.object({ search: z.string().optional(), - status: z - .nativeEnum(SecretScanningFindingStatus) - .optional() - .catch(undefined), - }), + status: z.nativeEnum(SecretScanningFindingStatus).optional().catch(undefined) + }) ), beforeLoad: ({ context }) => { return { breadcrumbs: [ ...context.breadcrumbs, { - label: 'Findings', - }, - ], - } + label: "Findings" + } + ] + }; }, - component: SecretScanningFindingsPage, -}) + component: SecretScanningFindingsPage +}); diff --git a/frontend/src/pages/secret-scanning/SettingsPage/SettingsPage.tsx b/frontend/src/pages/secret-scanning/SettingsPage/SettingsPage.tsx index 333479984..78df3da54 100644 --- a/frontend/src/pages/secret-scanning/SettingsPage/SettingsPage.tsx +++ b/frontend/src/pages/secret-scanning/SettingsPage/SettingsPage.tsx @@ -10,6 +10,7 @@ import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2"; import { ProjectPermissionSub, useSubscription } from "@app/context"; import { ProjectPermissionSecretScanningConfigActions } from "@app/context/ProjectPermissionContext/types"; import { usePopUp } from "@app/hooks"; +import { ProjectGeneralTab } from "@app/pages/project/SettingsPage/components/ProjectGeneralTab"; import { ProjectScanningConfigTab } from "./components/ProjectScanningConfigTab"; @@ -62,8 +63,12 @@ export const SettingsPage = () => { General + Scanning Settings + + + { @@ -11,9 +11,9 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Settings', - }, - ], - } - }, -}) + label: "Settings" + } + ] + }; + } +}); diff --git a/frontend/src/pages/ssh/SettingsPage/SettingsPage.tsx b/frontend/src/pages/ssh/SettingsPage/SettingsPage.tsx index 7a7b612df..841bb119f 100644 --- a/frontend/src/pages/ssh/SettingsPage/SettingsPage.tsx +++ b/frontend/src/pages/ssh/SettingsPage/SettingsPage.tsx @@ -4,6 +4,7 @@ import { useTranslation } from "react-i18next"; import { ProjectPermissionCan } from "@app/components/permissions"; import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2"; import { ProjectPermissionActions, ProjectPermissionSub } from "@app/context"; +import { ProjectGeneralTab } from "@app/pages/project/SettingsPage/components/ProjectGeneralTab"; import { ProjectSshTab } from "./components/ProjectSshTab"; @@ -20,8 +21,12 @@ export const SettingsPage = () => { General + SSH Settings + + + { @@ -11,9 +11,9 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Settings', - }, - ], - } - }, -}) + label: "Settings" + } + ] + }; + } +}); diff --git a/frontend/src/pages/ssh/SshCertsPage/route.tsx b/frontend/src/pages/ssh/SshCertsPage/route.tsx index e1105d5d2..ebfecd77c 100644 --- a/frontend/src/pages/ssh/SshCertsPage/route.tsx +++ b/frontend/src/pages/ssh/SshCertsPage/route.tsx @@ -1,9 +1,9 @@ -import { createFileRoute } from '@tanstack/react-router' +import { createFileRoute } from "@tanstack/react-router"; -import { SshCertsPage } from './SshCertsPage' +import { SshCertsPage } from "./SshCertsPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/ssh/$projectId/_ssh-layout/certificates', + "/_authenticate/_inject-org-details/_org-layout/projects/ssh/$projectId/_ssh-layout/certificates" )({ - component: SshCertsPage, -}) + component: SshCertsPage +}); diff --git a/frontend/src/pages/ssh/SshHostsPage/route.tsx b/frontend/src/pages/ssh/SshHostsPage/route.tsx index 239fbc1d7..c9e9f8857 100644 --- a/frontend/src/pages/ssh/SshHostsPage/route.tsx +++ b/frontend/src/pages/ssh/SshHostsPage/route.tsx @@ -1,9 +1,9 @@ -import { createFileRoute } from '@tanstack/react-router' +import { createFileRoute } from "@tanstack/react-router"; -import { SshHostsPage } from './SshHostsPage' +import { SshHostsPage } from "./SshHostsPage"; export const Route = createFileRoute( - '/_authenticate/_inject-org-details/_org-layout/projects/ssh/$projectId/_ssh-layout/overview', + "/_authenticate/_inject-org-details/_org-layout/projects/ssh/$projectId/_ssh-layout/overview" )({ component: SshHostsPage, beforeLoad: ({ context }) => { @@ -11,9 +11,9 @@ export const Route = createFileRoute( breadcrumbs: [ ...context.breadcrumbs, { - label: 'Hosts', - }, - ], - } - }, -}) + label: "Hosts" + } + ] + }; + } +});