diff --git a/frontend/src/components/projects/NewProjectModal.tsx b/frontend/src/components/projects/NewProjectModal.tsx index 663d6a0b7..d9887a929 100644 --- a/frontend/src/components/projects/NewProjectModal.tsx +++ b/frontend/src/components/projects/NewProjectModal.tsx @@ -157,7 +157,7 @@ const NewProjectForm = ({ onOpenChange }: NewProjectFormProps) => { onOpenChange(false); navigate({ to: getProjectHomePage(project.type, project.environments), - params: { projectId: project.id } + params: { projectId: project.id, orgId: currentOrg.id } }); }; const onSubmit = handleSubmit((data) => { diff --git a/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx b/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx index 08fdceb58..976bda52a 100644 --- a/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx +++ b/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx @@ -97,7 +97,8 @@ export const ProjectSelect = () => { @@ -154,7 +155,8 @@ export const ProjectSelect = () => { const url = linkOptions({ to: getProjectHomePage(workspace.type, workspace.environments), params: { - projectId: workspace.id + projectId: workspace.id, + orgId: workspace.orgId }, search: { subOrganization: currentOrg?.subOrganization?.name diff --git a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateManagePkiSyncsModal.tsx b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateManagePkiSyncsModal.tsx index db3e6c197..9d928ec8d 100644 --- a/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateManagePkiSyncsModal.tsx +++ b/frontend/src/pages/cert-manager/CertificatesPage/components/CertificateManagePkiSyncsModal.tsx @@ -20,7 +20,7 @@ import { Tr } from "@app/components/v2"; import { ROUTE_PATHS } from "@app/const/routes"; -import { useProject } from "@app/context"; +import { useOrganization, useProject } from "@app/context"; import { PkiSync, useAddCertificatesToPkiSync, @@ -49,6 +49,7 @@ export const CertificateManagePkiSyncsModal = ({ popUp, handlePopUpToggle }: Pro const [currentPage, setCurrentPage] = useState(1); const [searchTerm, setSearchTerm] = useState(""); + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); const navigate = useNavigate(); const { certificateId, commonName } = popUp.data || {}; @@ -92,6 +93,7 @@ export const CertificateManagePkiSyncsModal = ({ popUp, handlePopUpToggle }: Pro navigate({ to: ROUTE_PATHS.CertManager.IntegrationsListPage.path, params: { + orgId: currentOrg.id, projectId: currentProject.id }, search: { diff --git a/frontend/src/pages/cert-manager/IntegrationsListPage/IntegrationsListPage.tsx b/frontend/src/pages/cert-manager/IntegrationsListPage/IntegrationsListPage.tsx index 8358c28a3..9387074eb 100644 --- a/frontend/src/pages/cert-manager/IntegrationsListPage/IntegrationsListPage.tsx +++ b/frontend/src/pages/cert-manager/IntegrationsListPage/IntegrationsListPage.tsx @@ -5,7 +5,7 @@ import { useNavigate, useSearch } from "@tanstack/react-router"; import { ProjectPermissionCan } from "@app/components/permissions"; import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2"; import { ROUTE_PATHS } from "@app/const/routes"; -import { ProjectPermissionSub, useProject } from "@app/context"; +import { ProjectPermissionSub, useOrganization, useProject } from "@app/context"; import { ProjectPermissionPkiSyncActions } from "@app/context/ProjectPermissionContext/types"; import { ProjectType } from "@app/hooks/api/projects/types"; import { IntegrationsListPageTabs } from "@app/types/integrations"; @@ -14,6 +14,7 @@ import { PkiSyncsTab } from "./components"; export const IntegrationsListPage = () => { const navigate = useNavigate(); + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); const { t } = useTranslation(); @@ -30,7 +31,8 @@ export const IntegrationsListPage = () => { selectedTab: tab as IntegrationsListPageTabs }, params: { - projectId: currentProject?.id + projectId: currentProject?.id, + orgId: currentOrg.id } }); }; diff --git a/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncTable/PkiSyncRow.tsx b/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncTable/PkiSyncRow.tsx index 0b2ce65c1..dfc3ce399 100644 --- a/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncTable/PkiSyncRow.tsx +++ b/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncTable/PkiSyncRow.tsx @@ -39,7 +39,7 @@ import { } from "@app/components/v2"; import { Badge } from "@app/components/v3"; import { ROUTE_PATHS } from "@app/const/routes"; -import { ProjectPermissionSub } from "@app/context"; +import { ProjectPermissionSub, useOrganization } from "@app/context"; import { ProjectPermissionPkiSyncActions } from "@app/context/ProjectPermissionContext/types"; import { PKI_SYNC_MAP } from "@app/helpers/pkiSyncs"; import { useToggle } from "@app/hooks"; @@ -82,6 +82,7 @@ export const PkiSyncRow = ({ const { syncOption } = usePkiSyncOption(destination); + const { currentOrg } = useOrganization(); const [isIdCopied, setIsIdCopied] = useToggle(false); const handleCopyId = useCallback(() => { @@ -127,7 +128,8 @@ export const PkiSyncRow = ({ to: ROUTE_PATHS.CertManager.PkiSyncDetailsByIDPage.path, params: { syncId: id, - projectId + projectId, + orgId: currentOrg.id } }); }} diff --git a/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncsTab.tsx b/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncsTab.tsx index da0bc180f..677a2b2a5 100644 --- a/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncsTab.tsx +++ b/frontend/src/pages/cert-manager/IntegrationsListPage/components/PkiSyncsTab/PkiSyncsTab.tsx @@ -8,7 +8,7 @@ import { CreatePkiSyncModal } from "@app/components/pki-syncs"; import { Button, Spinner } from "@app/components/v2"; import { DocumentationLinkBadge } from "@app/components/v3"; import { ROUTE_PATHS } from "@app/const/routes"; -import { ProjectPermissionSub, useProject } from "@app/context"; +import { ProjectPermissionSub, useOrganization, useProject } from "@app/context"; import { ProjectPermissionPkiSyncActions } from "@app/context/ProjectPermissionContext/types"; import { usePopUp } from "@app/hooks"; import { useListPkiSyncs } from "@app/hooks/api/pkiSyncs"; @@ -26,18 +26,19 @@ export const PkiSyncsTab = () => { const navigate = useNavigate(); const { currentProject } = useProject(); - + const { currentOrg } = useOrganization(); const memoizedSearch = useMemo(() => search, [search]); const navigateToBase = useCallback(() => { navigate({ to: ROUTE_PATHS.CertManager.IntegrationsListPage.path, params: { - projectId: currentProject?.id + projectId: currentProject?.id, + orgId: currentOrg.id }, search: memoizedSearch }); - }, [navigate, currentProject?.id, memoizedSearch]); + }, [navigate, currentProject?.id, currentOrg.id, memoizedSearch]); useEffect(() => { if (!addSync) return; @@ -59,7 +60,7 @@ export const PkiSyncsTab = () => { handlePopUpOpen("addSync", { destination: parsedData.destination, initialData }); navigate({ to: ROUTE_PATHS.CertManager.IntegrationsListPage.path, - params: { projectId: currentProject?.id }, + params: { projectId: currentProject?.id, orgId: currentOrg.id }, search: { selectedTab: IntegrationsListPageTabs.PkiSyncs }, replace: true }); @@ -79,7 +80,8 @@ export const PkiSyncsTab = () => { connectionId, connectionName, navigate, - currentProject?.id + currentProject?.id, + currentOrg.id ]); const { data: pkiSyncs = [], isPending: isPkiSyncsPending } = useListPkiSyncs( diff --git a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/PkiSyncDetailsByIDPage.tsx b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/PkiSyncDetailsByIDPage.tsx index b1b1b2836..7a63bdf2e 100644 --- a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/PkiSyncDetailsByIDPage.tsx +++ b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/PkiSyncDetailsByIDPage.tsx @@ -26,7 +26,7 @@ import { const PageContent = () => { const navigate = useNavigate(); - const { syncId, projectId } = useParams({ + const { syncId, projectId, orgId } = useParams({ from: ROUTE_PATHS.CertManager.PkiSyncDetailsByIDPage.id }); @@ -77,7 +77,8 @@ const PageContent = () => { navigate({ to: ROUTE_PATHS.CertManager.IntegrationsListPage.path, params: { - projectId + projectId, + orgId }, search: { selectedTab: IntegrationsListPageTabs.PkiSyncs diff --git a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncActionTriggers.tsx b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncActionTriggers.tsx index 5171b4d95..8277d3345 100644 --- a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncActionTriggers.tsx +++ b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncActionTriggers.tsx @@ -36,7 +36,7 @@ import { } from "@app/components/v2"; import { Badge } from "@app/components/v3"; import { ROUTE_PATHS } from "@app/const/routes"; -import { ProjectPermissionSub } from "@app/context"; +import { ProjectPermissionSub, useOrganization } from "@app/context"; import { ProjectPermissionPkiSyncActions } from "@app/context/ProjectPermissionContext/types"; import { PKI_SYNC_MAP } from "@app/helpers/pkiSyncs"; import { usePopUp, useToggle } from "@app/hooks"; @@ -69,6 +69,7 @@ export const PkiSyncActionTriggers = ({ pkiSync }: Props) => { const updatePkiSyncMutation = useUpdatePkiSync(); const { syncOption } = usePkiSyncOption(destination); + const { currentOrg } = useOrganization(); const destinationName = PKI_SYNC_MAP[destination].name; @@ -287,7 +288,8 @@ export const PkiSyncActionTriggers = ({ pkiSync }: Props) => { navigate({ to: ROUTE_PATHS.CertManager.IntegrationsListPage.path, params: { - projectId + projectId, + orgId: currentOrg.id }, search: { selectedTab: IntegrationsListPageTabs.PkiSyncs diff --git a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncAuditLogsSection.tsx b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncAuditLogsSection.tsx index 6ef633091..4be7e0b3e 100644 --- a/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncAuditLogsSection.tsx +++ b/frontend/src/pages/cert-manager/PkiSyncDetailsByIDPage/components/PkiSyncAuditLogsSection.tsx @@ -2,7 +2,7 @@ import { faFingerprint } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { Link } from "@tanstack/react-router"; -import { useProject, useSubscription } from "@app/context"; +import { useOrganization, useProject, useSubscription } from "@app/context"; import { EventType } from "@app/hooks/api/auditLogs/enums"; import { TPkiSync } from "@app/hooks/api/pkiSyncs"; import { LogsSection } from "@app/pages/organization/AuditLogsPage/components/LogsSection"; @@ -20,7 +20,7 @@ type Props = { export const PkiSyncAuditLogsSection = ({ pkiSync }: Props) => { const { subscription } = useSubscription(); const { currentProject } = useProject(); - + const { currentOrg } = useOrganization(); const auditLogsRetentionDays = subscription?.auditLogsRetentionDays ?? 30; return ( @@ -53,7 +53,12 @@ export const PkiSyncAuditLogsSection = ({ pkiSync }: Props) => {

Please{" "} {subscription && subscription.slug !== null ? ( - + upgrade your subscription diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupsTable.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupsTable.tsx index cc6d7c7aa..5b4698ec9 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupsTable.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgGroupsTab/components/OrgGroupsSection/OrgGroupsTable.tsx @@ -235,8 +235,9 @@ export const OrgGroupsTable = ({ handlePopUpOpen }: Props) => { navigate({ - to: "/organization/groups/$groupId", + to: "/organizations/$orgId/groups/$groupId", params: { + orgId, groupId: id } }) @@ -334,8 +335,9 @@ export const OrgGroupsTable = ({ handlePopUpOpen }: Props) => { icon={} onClick={() => navigate({ - to: "/organization/groups/$groupId", + to: "/organizations/$orgId/groups/$groupId", params: { + orgId, groupId: id } }) diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTable.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTable.tsx index 2f8ce56c5..0c8cfd6bb 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTable.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityTable.tsx @@ -301,9 +301,10 @@ export const IdentityTable = ({ handlePopUpOpen }: Props) => { key={`identity-${id}`} onClick={() => navigate({ - to: "/organization/identities/$identityId", + to: "/organizations/$orgId/identities/$identityId", params: { - identityId: id + identityId: id, + orgId } }) } @@ -397,9 +398,10 @@ export const IdentityTable = ({ handlePopUpOpen }: Props) => { onClick={(e) => { e.stopPropagation(); navigate({ - to: "/organization/identities/$identityId", + to: "/organizations/$orgId/identities/$identityId", params: { - identityId: id + identityId: id, + orgId } }); }} diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/MachineAuthTemplateUsagesModal.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/MachineAuthTemplateUsagesModal.tsx index 909391474..bf6eba63e 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/MachineAuthTemplateUsagesModal.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/MachineAuthTemplateUsagesModal.tsx @@ -61,9 +61,10 @@ export const MachineAuthTemplateUsagesModal = ({ key={`usage-${usage.identityId}`} onClick={() => navigate({ - to: "/organization/identities/$identityId", + to: "/organizations/$orgId/identities/$identityId", params: { - identityId: usage.identityId + identityId: usage.identityId, + orgId: organizationId } }) } diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/OrgIdentityLinkForm.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/OrgIdentityLinkForm.tsx index 24406382e..dde0588de 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/OrgIdentityLinkForm.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/OrgIdentityLinkForm.tsx @@ -64,9 +64,10 @@ export const OrgIdentityLinkForm = ({ onClose }: Props) => { type: "success" }); navigate({ - to: "/organization/identities/$identityId", + to: "/organizations/$orgId/identities/$identityId", params: { - identityId: identity.id + identityId: identity.id, + orgId: currentOrg.id } }); }; diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/OrgIdentityModal.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/OrgIdentityModal.tsx index 9c54a1e54..dfc496ca8 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/OrgIdentityModal.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/OrgIdentityModal.tsx @@ -155,9 +155,10 @@ export const OrgIdentityModal = ({ popUp, handlePopUpToggle }: Props) => { handlePopUpToggle("identity", false); navigate({ - to: "/organization/identities/$identityId", + to: "/organizations/$orgId/identities/$identityId", params: { - identityId: createdId + identityId: createdId, + orgId } }); } diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersTable.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersTable.tsx index ea0465bb8..d81c0a3eb 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersTable.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersTable.tsx @@ -481,9 +481,10 @@ export const OrgMembersTable = ({ className="h-10 w-full cursor-pointer transition-colors duration-100 hover:bg-mineshaft-700" onClick={() => navigate({ - to: "/organization/members/$membershipId" as const, + to: "/organizations/$orgId/members/$membershipId" as const, params: { - membershipId: orgMembershipId + membershipId: orgMembershipId, + orgId } }) } @@ -619,9 +620,10 @@ export const OrgMembersTable = ({ onClick={(e) => { e.stopPropagation(); navigate({ - to: "/organization/members/$membershipId" as const, + to: "/organizations/$orgId/members/$membershipId" as const, params: { - membershipId: orgMembershipId + membershipId: orgMembershipId, + orgId } }); }} diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgRoleTabSection/OrgRoleTable.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgRoleTabSection/OrgRoleTable.tsx index 9579ce6d6..ee3c536e8 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgRoleTabSection/OrgRoleTable.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgRoleTabSection/OrgRoleTable.tsx @@ -280,9 +280,10 @@ export const OrgRoleTable = () => { className="h-10 cursor-pointer transition-colors duration-100 hover:bg-mineshaft-700" onClick={() => navigate({ - to: "/organization/roles/$roleId", + to: "/organizations/$orgId/roles/$roleId", params: { - roleId: id + roleId: id, + orgId } }) } @@ -339,9 +340,10 @@ export const OrgRoleTable = () => { onClick={(e) => { e.stopPropagation(); navigate({ - to: "/organization/roles/$roleId", + to: "/organizations/$orgId/roles/$roleId", params: { - roleId: id + roleId: id, + orgId } }); }} diff --git a/frontend/src/pages/organization/GroupDetailsByIDPage/GroupDetailsByIDPage.tsx b/frontend/src/pages/organization/GroupDetailsByIDPage/GroupDetailsByIDPage.tsx index e7c517d6c..ebed8fedc 100644 --- a/frontend/src/pages/organization/GroupDetailsByIDPage/GroupDetailsByIDPage.tsx +++ b/frontend/src/pages/organization/GroupDetailsByIDPage/GroupDetailsByIDPage.tsx @@ -44,7 +44,7 @@ const Page = () => { const { data, isPending } = useGetGroupById(groupId); - const { isSubOrganization } = useOrganization(); + const { isSubOrganization, currentOrg } = useOrganization(); const { mutateAsync: deleteMutateAsync } = useDeleteGroup(); @@ -62,7 +62,8 @@ const Page = () => { type: "success" }); navigate({ - to: "/organization/access-management" as const, + to: "/organizations/$orgId/access-management" as const, + params: { orgId: currentOrg.id }, search: { selectedTab: TabSections.Groups } @@ -78,7 +79,8 @@ const Page = () => { {data && (

({ + context: ({ params }) => ({ breadcrumbs: [ { label: "Access Control", - link: linkOptions({ to: "/organization/access-management" }) + link: linkOptions({ + to: "/organizations/$orgId/access-management" as const, + params + }) }, { label: "groups" diff --git a/frontend/src/pages/organization/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx b/frontend/src/pages/organization/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx index 4fdc55f07..1cc37a8e8 100644 --- a/frontend/src/pages/organization/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx +++ b/frontend/src/pages/organization/IdentityDetailsByIDPage/IdentityDetailsByIDPage.tsx @@ -61,7 +61,8 @@ const Page = () => { handlePopUpClose("deleteIdentity"); navigate({ - to: "/organization/access-management", + to: "/organizations/$orgId/access-management" as const, + params: { orgId }, search: { selectedTab: OrgAccessControlTabSections.Identities } @@ -73,7 +74,8 @@ const Page = () => { {data && (
({ + context: ({ params }) => ({ breadcrumbs: [ { label: "Access Control", - link: linkOptions({ to: "/organization/access-management" }) + link: linkOptions({ to: "/organizations/$orgId/access-management" as const, params }) }, { label: "Identities" diff --git a/frontend/src/pages/organization/RoleByIDPage/RoleByIDPage.tsx b/frontend/src/pages/organization/RoleByIDPage/RoleByIDPage.tsx index 78c5393a7..ff3594ef3 100644 --- a/frontend/src/pages/organization/RoleByIDPage/RoleByIDPage.tsx +++ b/frontend/src/pages/organization/RoleByIDPage/RoleByIDPage.tsx @@ -56,7 +56,8 @@ export const Page = () => { handlePopUpClose("deleteOrgRole"); navigate({ - to: "/organization/access-management" as const, + to: "/organizations/$orgId/access-management" as const, + params: { orgId }, search: { selectedTab: OrgAccessControlTabSections.Roles } @@ -70,7 +71,8 @@ export const Page = () => { {data && (
{ }); navigate({ - to: "/organization/roles/$roleId", + to: "/organizations/$orgId/roles/$roleId" as const, params: { + orgId: role.orgId, roleId: newRole.id } }); diff --git a/frontend/src/pages/organization/RoleByIDPage/components/RoleModal.tsx b/frontend/src/pages/organization/RoleByIDPage/components/RoleModal.tsx index 73da4f161..f47d5ed2c 100644 --- a/frontend/src/pages/organization/RoleByIDPage/components/RoleModal.tsx +++ b/frontend/src/pages/organization/RoleByIDPage/components/RoleModal.tsx @@ -97,8 +97,9 @@ export const RoleModal = ({ popUp, handlePopUpToggle }: Props) => { handlePopUpToggle("role", false); navigate({ - to: "/organization/roles/$roleId", + to: "/organizations/$orgId/roles/$roleId" as const, params: { + orgId, roleId: newRole.id } }); diff --git a/frontend/src/pages/organization/SecretSharingPage/ShareSecretSection.tsx b/frontend/src/pages/organization/SecretSharingPage/ShareSecretSection.tsx index 134e341a6..7b8b16860 100644 --- a/frontend/src/pages/organization/SecretSharingPage/ShareSecretSection.tsx +++ b/frontend/src/pages/organization/SecretSharingPage/ShareSecretSection.tsx @@ -17,7 +17,7 @@ enum SecretSharingPageTabs { export const ShareSecretSection = () => { const navigate = useNavigate(); - const { isSubOrganization } = useOrganization(); + const { isSubOrganization, currentOrg } = useOrganization(); const { selectedTab } = useSearch({ from: ROUTE_PATHS.Organization.SecretSharing.id @@ -26,6 +26,7 @@ export const ShareSecretSection = () => { const updateSelectedTab = (tab: string) => { navigate({ to: ROUTE_PATHS.Organization.SecretSharing.path, + params: { orgId: currentOrg.id }, search: (prev) => ({ ...prev, selectedTab: tab as SecretSharingPageTabs }) }); }; diff --git a/frontend/src/pages/organization/SettingsPage/OauthCallbackPage/OauthCallbackPage.tsx b/frontend/src/pages/organization/SettingsPage/OauthCallbackPage/OauthCallbackPage.tsx index 5efec93d9..054455e05 100644 --- a/frontend/src/pages/organization/SettingsPage/OauthCallbackPage/OauthCallbackPage.tsx +++ b/frontend/src/pages/organization/SettingsPage/OauthCallbackPage/OauthCallbackPage.tsx @@ -57,7 +57,8 @@ export const OAuthCallbackPage = () => { }); navigate({ - to: ROUTE_PATHS.Organization.SettingsPage.path + to: ROUTE_PATHS.Organization.SettingsPage.path, + params: { orgId: currentOrg.id } }); }, []); diff --git a/frontend/src/pages/organization/SettingsPage/components/ExternalMigrationsTab/components/VaultConnectionSection.tsx b/frontend/src/pages/organization/SettingsPage/components/ExternalMigrationsTab/components/VaultConnectionSection.tsx index aa7765db8..070d9929d 100644 --- a/frontend/src/pages/organization/SettingsPage/components/ExternalMigrationsTab/components/VaultConnectionSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/ExternalMigrationsTab/components/VaultConnectionSection.tsx @@ -17,6 +17,7 @@ import { THead, Tr } from "@app/components/v2"; +import { useOrganization } from "@app/context"; import { useListAppConnections } from "@app/hooks/api/appConnections/queries"; import { useDeleteVaultExternalMigrationConfig, @@ -33,6 +34,8 @@ export const VaultConnectionSection = () => { const [configToDelete, setConfigToDelete] = useState(null); const { data: configs = [], isPending: isLoadingConfigs } = useGetVaultExternalMigrationConfigs(); + + const { currentOrg } = useOrganization(); const { data: appConnections = [] } = useListAppConnections(); const { mutateAsync: deleteConfig } = useDeleteVaultExternalMigrationConfig(); @@ -157,7 +160,8 @@ export const VaultConnectionSection = () => { Configure namespace-specific connections to enable in-platform migration features. Manage connections in the{" "} App Connections diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgNameChangeSection/SubOrgNameChangeSection.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgNameChangeSection/SubOrgNameChangeSection.tsx index e08d4d1b5..2a8e932a7 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgNameChangeSection/SubOrgNameChangeSection.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgNameChangeSection/SubOrgNameChangeSection.tsx @@ -44,7 +44,11 @@ export const SubOrgNameChangeSection = (): JSX.Element => { subOrgId: currentOrg.id }); - navigate({ to: "/organization/settings", search: { subOrganization: name } }); + navigate({ + to: "/organizations/$orgId/settings", + params: { orgId: currentOrg.id }, + search: { subOrganization: name } + }); queryClient.invalidateQueries(); await router.invalidate({ sync: true }); createNotification({ diff --git a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/LDAPGroupMapModal.tsx b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/LDAPGroupMapModal.tsx index 31e96a1cb..9687c5d4d 100644 --- a/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/LDAPGroupMapModal.tsx +++ b/frontend/src/pages/organization/SettingsPage/components/OrgSsoTab/LDAPGroupMapModal.tsx @@ -263,7 +263,8 @@ export const LDAPGroupMapModal = ({ popUp, handlePopUpOpen, handlePopUpToggle }: size="sm" onClick={() => navigate({ - to: "/organization/access-management" + to: "/organizations/$orgId/access-management", + params: { orgId: currentOrg.id } }) } > diff --git a/frontend/src/pages/organization/UserDetailsByIDPage/UserDetailsByIDPage.tsx b/frontend/src/pages/organization/UserDetailsByIDPage/UserDetailsByIDPage.tsx index 2277e767d..3b26f80f0 100644 --- a/frontend/src/pages/organization/UserDetailsByIDPage/UserDetailsByIDPage.tsx +++ b/frontend/src/pages/organization/UserDetailsByIDPage/UserDetailsByIDPage.tsx @@ -91,7 +91,8 @@ const Page = withPermission( handlePopUpClose("removeMember"); navigate({ - to: "/organization/access-management" as const, + to: "/organizations/$orgId/access-management" as const, + params: { orgId }, search: { selectedTab: OrgAccessControlTabSections.Member } @@ -103,7 +104,8 @@ const Page = withPermission( {membership && (
({ + context: ({ params }) => ({ breadcrumbs: [ { label: "Access Control", - link: linkOptions({ to: "/organization/access-management" }) + link: linkOptions({ to: "/organizations/$orgId/access-management" as const, params }) }, { label: "Users" diff --git a/frontend/src/pages/project/AccessControlPage/AccessControlPage.tsx b/frontend/src/pages/project/AccessControlPage/AccessControlPage.tsx index aaa3a6eb7..84a5376ab 100644 --- a/frontend/src/pages/project/AccessControlPage/AccessControlPage.tsx +++ b/frontend/src/pages/project/AccessControlPage/AccessControlPage.tsx @@ -3,7 +3,7 @@ import { useTranslation } from "react-i18next"; import { useNavigate, useSearch } from "@tanstack/react-router"; import { PageHeader, Tab, TabList, TabPanel, Tabs } from "@app/components/v2"; -import { useProject } from "@app/context"; +import { useOrganization, useProject } from "@app/context"; import { getProjectBaseURL } from "@app/helpers/project"; import { ProjectType } from "@app/hooks/api/projects/types"; import { ProjectAccessControlTabs } from "@app/types/project"; @@ -18,6 +18,7 @@ import { const Page = () => { const navigate = useNavigate(); + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); const selectedTab = useSearch({ strict: false, @@ -29,6 +30,7 @@ const Page = () => { to: `${getProjectBaseURL(currentProject.type)}/access-management` as const, search: (prev) => ({ ...prev, selectedTab: tab }), params: { + orgId: currentOrg.id, projectId: currentProject.id } }); diff --git a/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupModal.tsx b/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupModal.tsx index f8788762c..17ef73120 100644 --- a/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupModal.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/GroupsTab/components/GroupsSection/GroupModal.tsx @@ -140,7 +140,7 @@ const Content = ({ popUp, handlePopUpToggle }: Props) => {
All groups in your organization have already been added to this project.
- +
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 3ce5b4062..c3d850c6b 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 @@ -32,7 +32,12 @@ import { Tooltip, Tr } from "@app/components/v2"; -import { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context"; +import { + ProjectPermissionActions, + ProjectPermissionSub, + useOrganization, + useProject +} from "@app/context"; import { getProjectBaseURL } from "@app/helpers/project"; import { getUserTablePreference, @@ -61,6 +66,7 @@ enum GroupsOrderBy { } export const GroupTable = ({ handlePopUpOpen }: Props) => { + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); const navigate = useNavigate(); @@ -161,6 +167,7 @@ export const GroupTable = ({ handlePopUpOpen }: Props) => { navigate({ to: `${getProjectBaseURL(currentProject.type)}/groups/$groupId` as const, params: { + orgId: currentOrg.id, projectId: currentProject.id, groupId: id } @@ -171,6 +178,7 @@ export const GroupTable = ({ handlePopUpOpen }: Props) => { navigate({ to: `${getProjectBaseURL(currentProject.type)}/groups/$groupId` as const, params: { + orgId: currentOrg.id, projectId: currentProject.id, groupId: id } diff --git a/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx b/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx index e98633368..72bae83f2 100644 --- a/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx +++ b/frontend/src/pages/project/AccessControlPage/components/IdentityTab/IdentityTab.tsx @@ -277,6 +277,7 @@ export const IdentityTab = withProjectPermission( navigate({ to: `${getProjectBaseURL(currentProject.type)}/identities/$identityId` as const, params: { + orgId: currentOrg.id, projectId: currentProject.id, identityId: id } @@ -287,6 +288,7 @@ export const IdentityTab = withProjectPermission( navigate({ to: `${getProjectBaseURL(currentProject.type)}/identities/$identityId` as const, params: { + orgId: currentOrg.id, projectId: currentProject.id, identityId: id } diff --git a/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MemberRoleForm/MemberRoleForm.tsx b/frontend/src/pages/project/AccessControlPage/components/MembersTab/components/MemberRoleForm/MemberRoleForm.tsx index 187e1813a..aa5e9efb1 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 @@ -1,7 +1,7 @@ import { Link } from "@tanstack/react-router"; import { Alert, AlertDescription } from "@app/components/v2"; -import { useProject } from "@app/context"; +import { useOrganization, useProject } from "@app/context"; import { getProjectBaseURL } from "@app/helpers/project"; import { TWorkspaceUser } from "@app/hooks/api/types"; @@ -12,6 +12,7 @@ type Props = { onOpenUpgradeModal: (title: string) => void; }; export const MemberRoleForm = ({ projectMember, onOpenUpgradeModal }: Props) => { + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); return (
@@ -24,6 +25,7 @@ export const MemberRoleForm = ({ projectMember, onOpenUpgradeModal }: Props) => { select: (el) => el.groupId as string }); + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); const { data: groupMembership, isPending } = useGetWorkspaceGroupMembershipDetails( @@ -42,7 +48,8 @@ const Page = () => { { navigate({ to: `${getProjectBaseURL(currentProject.type)}/access-management` as const, params: { - projectId + projectId, + orgId: currentOrg.id }, search: { selectedTab: "identities" @@ -137,7 +138,8 @@ const Page = () => { { {(isAllowed) => isAllowed ? ( diff --git a/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx b/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx index 2c578ea4f..8064f070d 100644 --- a/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx +++ b/frontend/src/pages/project/MemberDetailsByIDPage/MemberDetailsByIDPage.tsx @@ -95,7 +95,8 @@ export const Page = () => { navigate({ to: `${getProjectBaseURL(currentProject.type)}/access-management` as const, params: { - projectId: currentProject.id + projectId: currentProject.id, + orgId: currentOrg.id } }); handlePopUpClose("removeMember"); @@ -116,7 +117,8 @@ export const Page = () => { { select: (el) => el.roleSlug as string }); const { currentProject } = useProject(); + const { currentOrg } = useOrganization(); const projectId = currentProject?.id || ""; + const orgId = currentOrg?.id || ""; const { data } = useGetProjectRoleBySlug(projectId, roleSlug as string); @@ -68,7 +75,8 @@ const Page = () => { navigate({ to: `${getProjectBaseURL(currentProject.type)}/access-management` as const, params: { - projectId + projectId, + orgId }, search: { selectedTab: ProjectAccessControlTabs.Roles @@ -87,7 +95,8 @@ const Page = () => { { resolver: zodResolver(schema) }); + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); const createRole = useCreateProjectRole(); @@ -83,6 +84,7 @@ const Content = ({ role, onClose }: ContentProps) => { navigate({ to: `${getProjectBaseURL(currentProject.type)}/roles/$roleSlug` as const, params: { + orgId: currentOrg.id, roleSlug: newRole.slug, projectId: currentProject.id } diff --git a/frontend/src/pages/project/RoleDetailsBySlugPage/components/RoleModal.tsx b/frontend/src/pages/project/RoleDetailsBySlugPage/components/RoleModal.tsx index 03525eac5..4fcb246ef 100644 --- a/frontend/src/pages/project/RoleDetailsBySlugPage/components/RoleModal.tsx +++ b/frontend/src/pages/project/RoleDetailsBySlugPage/components/RoleModal.tsx @@ -6,7 +6,7 @@ import { z } from "zod"; import { createNotification } from "@app/components/notifications"; import { Button, FormControl, Input, Modal, ModalContent } from "@app/components/v2"; -import { useProject } from "@app/context"; +import { useOrganization, useProject } from "@app/context"; import { getProjectBaseURL } from "@app/helpers/project"; import { useCreateProjectRole, @@ -38,6 +38,9 @@ export const RoleModal = ({ popUp, handlePopUpToggle }: Props) => { roleSlug: string; }; + const { currentOrg } = useOrganization(); + const orgId = currentOrg?.id || ""; + const { currentProject } = useProject(); const projectId = currentProject?.id || ""; @@ -93,6 +96,7 @@ export const RoleModal = ({ popUp, handlePopUpToggle }: Props) => { navigate({ to: `${getProjectBaseURL(currentProject.type)}/roles/$roleSlug` as const, params: { + orgId, roleSlug: slug, projectId } @@ -111,6 +115,7 @@ export const RoleModal = ({ popUp, handlePopUpToggle }: Props) => { navigate({ to: `${getProjectBaseURL(currentProject.type)}/roles/$roleSlug` as const, params: { + orgId, roleSlug: newRole.slug, projectId } diff --git a/frontend/src/pages/secret-manager/CommitDetailsPage/CommitDetailsPage.tsx b/frontend/src/pages/secret-manager/CommitDetailsPage/CommitDetailsPage.tsx index 705ea2663..90688778b 100644 --- a/frontend/src/pages/secret-manager/CommitDetailsPage/CommitDetailsPage.tsx +++ b/frontend/src/pages/secret-manager/CommitDetailsPage/CommitDetailsPage.tsx @@ -45,7 +45,7 @@ export const CommitDetailsPage = () => { folderId, environment: envSlug }, - search: (query: Record) => ({ + search: (query) => ({ ...query, secretPath }) @@ -62,7 +62,7 @@ export const CommitDetailsPage = () => { environment: envSlug, commitId: selectedCommitId }, - search: (query: Record) => ({ + search: (query) => ({ ...query, secretPath }) diff --git a/frontend/src/pages/secret-manager/CommitsPage/CommitsPage.tsx b/frontend/src/pages/secret-manager/CommitsPage/CommitsPage.tsx index e22b7c212..36e5c2015 100644 --- a/frontend/src/pages/secret-manager/CommitsPage/CommitsPage.tsx +++ b/frontend/src/pages/secret-manager/CommitsPage/CommitsPage.tsx @@ -46,7 +46,7 @@ export const CommitsPage = () => { environment: envSlug, commitId }, - search: (query: Record) => ({ + search: (query) => ({ ...query, secretPath }) diff --git a/frontend/src/pages/secret-manager/IntegrationsDetailsByIDPage/components/IntegrationAuditLogsSection.tsx b/frontend/src/pages/secret-manager/IntegrationsDetailsByIDPage/components/IntegrationAuditLogsSection.tsx index fcd080e65..fc0e31245 100644 --- a/frontend/src/pages/secret-manager/IntegrationsDetailsByIDPage/components/IntegrationAuditLogsSection.tsx +++ b/frontend/src/pages/secret-manager/IntegrationsDetailsByIDPage/components/IntegrationAuditLogsSection.tsx @@ -1,7 +1,7 @@ import { Link } from "@tanstack/react-router"; import { EmptyState } from "@app/components/v2"; -import { useProject, useSubscription } from "@app/context"; +import { useOrganization, useProject, useSubscription } from "@app/context"; import { EventType } from "@app/hooks/api/auditLogs/enums"; import { TIntegrationWithEnv } from "@app/hooks/api/integrations/types"; import { LogsSection } from "@app/pages/organization/AuditLogsPage/components/LogsSection"; @@ -15,6 +15,7 @@ type Props = { export const IntegrationAuditLogsSection = ({ integration }: Props) => { const { subscription } = useSubscription(); + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); const auditLogsRetentionDays = subscription?.auditLogsRetentionDays ?? 30; @@ -53,7 +54,12 @@ export const IntegrationAuditLogsSection = ({ integration }: Props) => {

Please{" "} {subscription && subscription.slug !== null ? ( - + { const navigate = useNavigate(); + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); const { t } = useTranslation(); @@ -33,7 +39,8 @@ export const IntegrationsListPage = () => { selectedTab: tab as IntegrationsListPageTabs }, params: { - projectId: currentProject.id + projectId: currentProject.id, + orgId: currentOrg.id } }); }; diff --git a/frontend/src/pages/secret-manager/IntegrationsListPage/components/CloudIntegrationSection/CloudIntegrationSection.tsx b/frontend/src/pages/secret-manager/IntegrationsListPage/components/CloudIntegrationSection/CloudIntegrationSection.tsx index 9a6db9def..ff92f9f41 100644 --- a/frontend/src/pages/secret-manager/IntegrationsListPage/components/CloudIntegrationSection/CloudIntegrationSection.tsx +++ b/frontend/src/pages/secret-manager/IntegrationsListPage/components/CloudIntegrationSection/CloudIntegrationSection.tsx @@ -24,6 +24,7 @@ import { ROUTE_PATHS } from "@app/const/routes"; import { ProjectPermissionActions, ProjectPermissionSub, + useOrganization, useProject, useProjectPermission } from "@app/context"; @@ -60,6 +61,7 @@ export const CloudIntegrationSection = ({ "deleteConfirmation" ] as const); const { permission } = useProjectPermission(); + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); const navigate = useNavigate(); @@ -138,6 +140,7 @@ export const CloudIntegrationSection = ({ navigate({ to: ROUTE_PATHS.SecretManager.IntegrationsListPage.path, params: { + orgId: currentOrg.id, projectId: currentProject.id }, search: { diff --git a/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncRow.tsx b/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncRow.tsx index 0e04281a4..5e00d62af 100644 --- a/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncRow.tsx +++ b/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncTable/SecretSyncRow.tsx @@ -40,7 +40,7 @@ import { } from "@app/components/v2"; import { Badge } from "@app/components/v3"; import { ROUTE_PATHS } from "@app/const/routes"; -import { ProjectPermissionSub } from "@app/context"; +import { ProjectPermissionSub, useOrganization } from "@app/context"; import { ProjectPermissionSecretSyncActions } from "@app/context/ProjectPermissionContext/types"; import { SECRET_SYNC_MAP } from "@app/helpers/secretSyncs"; import { useToggle } from "@app/hooks"; @@ -81,6 +81,7 @@ export const SecretSyncRow = ({ projectId } = secretSync; + const { currentOrg } = useOrganization(); const { syncOption } = useSecretSyncOption(destination); const destinationName = SECRET_SYNC_MAP[destination].name; @@ -134,7 +135,8 @@ export const SecretSyncRow = ({ params: { syncId: id, destination, - projectId + projectId, + orgId: currentOrg.id } }) } diff --git a/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncsTab.tsx b/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncsTab.tsx index 24fba3b64..e584a73f7 100644 --- a/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncsTab.tsx +++ b/frontend/src/pages/secret-manager/IntegrationsListPage/components/SecretSyncsTab/SecretSyncsTab.tsx @@ -9,7 +9,7 @@ import { TSecretSyncForm } from "@app/components/secret-syncs/forms/schemas"; import { Button, Spinner } from "@app/components/v2"; import { DocumentationLinkBadge } from "@app/components/v3"; import { ROUTE_PATHS } from "@app/const/routes"; -import { ProjectPermissionSub, useProject } from "@app/context"; +import { ProjectPermissionSub, useOrganization, useProject } from "@app/context"; import { ProjectPermissionSecretSyncActions } from "@app/context/ProjectPermissionContext/types"; import { usePopUp } from "@app/hooks"; import { useListSecretSyncs } from "@app/hooks/api/secretSyncs"; @@ -26,6 +26,7 @@ export const SecretSyncsTab = () => { const navigate = useNavigate(); + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); useEffect(() => { @@ -35,7 +36,8 @@ export const SecretSyncsTab = () => { navigate({ to: ROUTE_PATHS.SecretManager.IntegrationsListPage.path, params: { - projectId: currentProject.id + projectId: currentProject.id, + orgId: currentOrg.id }, search }); @@ -66,6 +68,7 @@ export const SecretSyncsTab = () => { navigate({ to: ROUTE_PATHS.SecretManager.IntegrationsListPage.path, params: { + orgId: currentOrg.id, projectId: currentProject.id }, search diff --git a/frontend/src/pages/secret-manager/SecretDashboardPage/components/EnvironmentTabs/EnvironmentTabs.tsx b/frontend/src/pages/secret-manager/SecretDashboardPage/components/EnvironmentTabs/EnvironmentTabs.tsx index f8a201717..ed8a5ae88 100644 --- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/EnvironmentTabs/EnvironmentTabs.tsx +++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/EnvironmentTabs/EnvironmentTabs.tsx @@ -24,6 +24,7 @@ import { ROUTE_PATHS } from "@app/const/routes"; import { ProjectPermissionActions, ProjectPermissionSub, + useOrganization, useProject, useSubscription } from "@app/context"; @@ -45,6 +46,7 @@ type Props = { const TABS_TO_SHOW = 5; export const EnvironmentTabs = ({ secretPath }: Props) => { + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); const currentEnv = useParams({ from: ROUTE_PATHS.SecretManager.SecretDashboardPage.id, @@ -96,7 +98,8 @@ export const EnvironmentTabs = ({ secretPath }: Props) => { to: ROUTE_PATHS.SecretManager.SecretDashboardPage.path, params: { envSlug, - projectId: currentProject.id + projectId: currentProject.id, + orgId: currentOrg.id }, search: (prev) => prev }); 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 3cb2a59ca..5a9b522a3 100644 --- a/frontend/src/pages/secret-manager/SecretDashboardPage/components/SecretListView/SecretDetailSidebar.tsx +++ b/frontend/src/pages/secret-manager/SecretDashboardPage/components/SecretListView/SecretDetailSidebar.tsx @@ -46,6 +46,7 @@ import { InfisicalSecretInput } from "@app/components/v2/InfisicalSecretInput"; import { ProjectPermissionActions, ProjectPermissionSub, + useOrganization, useProject, useProjectPermission, useSubscription @@ -98,6 +99,7 @@ export const SecretDetailSidebar = ({ secretPath, handleSecretShare }: Props) => { + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); const [isFieldFocused, setIsFieldFocused] = useToggle(); const queryClient = useQueryClient(); @@ -776,6 +778,7 @@ export const SecretDetailSidebar = ({ `${getProjectBaseURL(currentProject.type)}/identities/$identityId` as const } params={{ + orgId: currentOrg.id, projectId: currentProject.id, identityId: identity.id }} @@ -806,8 +809,9 @@ export const SecretDetailSidebar = ({ className="z-100" > { const navigate = useNavigate(); - const { destination, syncId, projectId } = useParams({ + const { destination, syncId, projectId, orgId } = useParams({ from: ROUTE_PATHS.SecretManager.SecretSyncDetailsByIDPage.id, select: (params) => ({ ...params, @@ -82,6 +82,7 @@ const PageContent = () => { navigate({ to: ROUTE_PATHS.SecretManager.IntegrationsListPage.path, params: { + orgId, projectId }, search: { diff --git a/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncActionTriggers.tsx b/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncActionTriggers.tsx index ad82460eb..517d1cc7c 100644 --- a/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncActionTriggers.tsx +++ b/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncActionTriggers.tsx @@ -36,7 +36,7 @@ import { } from "@app/components/v2"; import { Badge } from "@app/components/v3"; import { ROUTE_PATHS } from "@app/const/routes"; -import { ProjectPermissionSub } from "@app/context"; +import { ProjectPermissionSub, useOrganization } from "@app/context"; import { ProjectPermissionSecretSyncActions } from "@app/context/ProjectPermissionContext/types"; import { SECRET_SYNC_MAP } from "@app/helpers/secretSyncs"; import { usePopUp, useToggle } from "@app/hooks"; @@ -65,6 +65,7 @@ export const SecretSyncActionTriggers = ({ secretSync }: Props) => { const updateSync = useUpdateSecretSync(); const { destination, environment, folder } = secretSync; + const { currentOrg } = useOrganization(); const destinationName = SECRET_SYNC_MAP[destination].name; const { syncOption } = useSecretSyncOption(destination); @@ -291,6 +292,7 @@ export const SecretSyncActionTriggers = ({ secretSync }: Props) => { navigate({ to: ROUTE_PATHS.SecretManager.IntegrationsListPage.path, params: { + orgId: currentOrg.id, projectId: secretSync.projectId }, search: { diff --git a/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncAuditLogsSection.tsx b/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncAuditLogsSection.tsx index a08d88139..74011228b 100644 --- a/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncAuditLogsSection.tsx +++ b/frontend/src/pages/secret-manager/SecretSyncDetailsByIDPage/components/SecretSyncAuditLogsSection.tsx @@ -2,7 +2,7 @@ import { faFingerprint } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { Link } from "@tanstack/react-router"; -import { useProject, useSubscription } from "@app/context"; +import { useOrganization, useProject, useSubscription } from "@app/context"; import { EventType } from "@app/hooks/api/auditLogs/enums"; import { TSecretSync } from "@app/hooks/api/secretSyncs"; import { LogsSection } from "@app/pages/organization/AuditLogsPage/components/LogsSection"; @@ -19,6 +19,7 @@ type Props = { export const SecretSyncAuditLogsSection = ({ secretSync }: Props) => { const { subscription } = useSubscription(); + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); const auditLogsRetentionDays = subscription?.auditLogsRetentionDays ?? 30; @@ -53,7 +54,12 @@ export const SecretSyncAuditLogsSection = ({ secretSync }: Props) => {

Please{" "} {subscription && subscription.slug !== null ? ( - + { const { code, state } = useSearch({ from: ROUTE_PATHS.SecretManager.Integratons.GitlabOauthCallbackPage.id }); + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); useEffect(() => { @@ -25,7 +26,8 @@ export const GitLabOAuthCallbackPage = () => { if (csrfToken !== storedState) { console.error("CSRF token mismatch"); navigate({ - to: "/organization/app-connections", + to: "/organizations/$orgId/app-connections", + params: { orgId: currentOrg.id }, search: { error: "invalid_state" } }); return; @@ -37,7 +39,8 @@ export const GitLabOAuthCallbackPage = () => { if (!storedFormData) { console.error("No stored form data found"); navigate({ - to: "/organization/app-connections", + to: "/organizations/$orgId/app-connections", + params: { orgId: currentOrg.id }, search: { error: "missing_form_data" } }); return; @@ -73,7 +76,8 @@ export const GitLabOAuthCallbackPage = () => { // Navigate to success page or app connections list navigate({ - to: "/organization/app-connections", + to: "/organizations/$orgId/app-connections", + params: { orgId: currentOrg.id }, search: { success: formData.isUpdate ? "connection_updated" : "connection_created", connectionId: appConnection.id @@ -82,12 +86,21 @@ export const GitLabOAuthCallbackPage = () => { } catch (err) { console.error("Error handling GitLab OAuth callback:", err); navigate({ - to: "/organization/app-connections", + to: "/organizations/$orgId/app-connections", + params: { orgId: currentOrg.id }, search: { error: "connection_failed" } }); } })(); - }, [code, state, navigate, createAppConnection, updateAppConnection, currentProject.id]); + }, [ + code, + state, + navigate, + createAppConnection, + updateAppConnection, + currentProject.id, + currentOrg.id + ]); return (

diff --git a/frontend/src/pages/secret-manager/integrations/HerokuOauthCallbackPage/HerokuOauthCallbackPage.tsx b/frontend/src/pages/secret-manager/integrations/HerokuOauthCallbackPage/HerokuOauthCallbackPage.tsx index 91e2b9d88..e2ed60d4e 100644 --- a/frontend/src/pages/secret-manager/integrations/HerokuOauthCallbackPage/HerokuOauthCallbackPage.tsx +++ b/frontend/src/pages/secret-manager/integrations/HerokuOauthCallbackPage/HerokuOauthCallbackPage.tsx @@ -2,7 +2,7 @@ import { useEffect } from "react"; import { useNavigate, useSearch } from "@tanstack/react-router"; import { ROUTE_PATHS } from "@app/const/routes"; -import { useProject } from "@app/context"; +import { useOrganization, useProject } from "@app/context"; import { useCreateAppConnection, useUpdateAppConnection } from "@app/hooks/api/appConnections"; import { HerokuConnectionMethod } from "@app/hooks/api/appConnections/types/heroku-connection"; @@ -14,7 +14,7 @@ export const HerokuOAuthCallbackPage = () => { const { code, state } = useSearch({ from: ROUTE_PATHS.SecretManager.Integratons.HerokuOauthCallbackPage.id }); - + const { currentOrg } = useOrganization(); const { currentProject } = useProject(); useEffect(() => { @@ -25,7 +25,8 @@ export const HerokuOAuthCallbackPage = () => { if (state !== storedState) { console.error("CSRF token mismatch"); navigate({ - to: "/organization/app-connections", + to: "/organizations/$orgId/app-connections", + params: { orgId: currentOrg.id }, search: { error: "invalid_state" } }); return; @@ -39,7 +40,8 @@ export const HerokuOAuthCallbackPage = () => { if (!storedFormData) { console.error("No stored form data found"); navigate({ - to: "/organization/app-connections", + to: "/organizations/$orgId/app-connections", + params: { orgId: currentOrg.id }, search: { error: "missing_form_data" } }); return; @@ -74,7 +76,8 @@ export const HerokuOAuthCallbackPage = () => { // Navigate to success page or app connections list navigate({ - to: "/organization/app-connections", + to: "/organizations/$orgId/app-connections", + params: { orgId: currentOrg.id }, search: { success: formData.isUpdate ? "connection_updated" : "connection_created", connectionId: appConnection.id @@ -83,7 +86,8 @@ export const HerokuOAuthCallbackPage = () => { } catch (err) { console.error("Error handling Heroku OAuth callback:", err); navigate({ - to: "/organization/app-connections", + to: "/organizations/$orgId/app-connections", + params: { orgId: currentOrg.id }, search: { error: "connection_failed" } }); } diff --git a/frontend/src/pages/secret-scanning/SecretScanningDataSourcesPage/components/SecretScanningDataSourceRow.tsx b/frontend/src/pages/secret-scanning/SecretScanningDataSourcesPage/components/SecretScanningDataSourceRow.tsx index baeb143da..fc721e384 100644 --- a/frontend/src/pages/secret-scanning/SecretScanningDataSourcesPage/components/SecretScanningDataSourceRow.tsx +++ b/frontend/src/pages/secret-scanning/SecretScanningDataSourcesPage/components/SecretScanningDataSourceRow.tsx @@ -102,6 +102,7 @@ export const SecretScanningDataSourceRow = ({ navigate({ to: ROUTE_PATHS.SecretScanning.DataSourceByIdPage.path, params: { + orgId: currentOrg.id, dataSourceId: id, type, projectId