mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-21 05:00:56 +00:00
95 lines
3.5 KiB
TypeScript
95 lines
3.5 KiB
TypeScript
import { Helmet } from "react-helmet";
|
|
import { useTranslation } from "react-i18next";
|
|
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 { ProjectPermissionActions, ProjectPermissionSub, useProject } from "@app/context";
|
|
import { ProjectPermissionSecretSyncActions } from "@app/context/ProjectPermissionContext/types";
|
|
import { IntegrationsListPageTabs } from "@app/types/integrations";
|
|
|
|
import {
|
|
FrameworkIntegrationTab,
|
|
InfrastructureIntegrationTab,
|
|
NativeIntegrationsTab,
|
|
SecretSyncsTab
|
|
} from "./components";
|
|
|
|
export const IntegrationsListPage = () => {
|
|
const navigate = useNavigate();
|
|
const { currentProject } = useProject();
|
|
const { t } = useTranslation();
|
|
|
|
const { selectedTab } = useSearch({
|
|
from: ROUTE_PATHS.SecretManager.IntegrationsListPage.id
|
|
});
|
|
|
|
const updateSelectedTab = (tab: string) => {
|
|
navigate({
|
|
to: ROUTE_PATHS.SecretManager.IntegrationsListPage.path,
|
|
search: {
|
|
selectedTab: tab as IntegrationsListPageTabs
|
|
},
|
|
params: {
|
|
projectId: currentProject.id
|
|
}
|
|
});
|
|
};
|
|
|
|
return (
|
|
<>
|
|
<Helmet>
|
|
<title>{t("common.head-title", { title: t("integrations.title") })}</title>
|
|
<meta property="og:image" content="/images/message.png" />
|
|
<meta property="og:title" content="Manage your .env files in seconds" />
|
|
<meta name="og:description" content={t("integrations.description") as string} />
|
|
</Helmet>
|
|
<div className="container relative mx-auto max-w-7xl pb-12 text-white">
|
|
<div className="mb-8">
|
|
<PageHeader
|
|
title="Integrations"
|
|
description="Manage integrations with third-party services."
|
|
/>
|
|
<Tabs value={selectedTab} onValueChange={updateSelectedTab}>
|
|
<TabList>
|
|
<Tab value={IntegrationsListPageTabs.SecretSyncs}>Secret Syncs</Tab>
|
|
<Tab value={IntegrationsListPageTabs.NativeIntegrations}>Native Integrations</Tab>
|
|
<Tab value={IntegrationsListPageTabs.FrameworkIntegrations}>
|
|
Framework Integrations
|
|
</Tab>
|
|
<Tab value={IntegrationsListPageTabs.InfrastructureIntegrations}>
|
|
Infrastructure Integrations
|
|
</Tab>
|
|
</TabList>
|
|
<TabPanel value={IntegrationsListPageTabs.SecretSyncs}>
|
|
<ProjectPermissionCan
|
|
renderGuardBanner
|
|
I={ProjectPermissionSecretSyncActions.Read}
|
|
a={ProjectPermissionSub.SecretSyncs}
|
|
>
|
|
<SecretSyncsTab />
|
|
</ProjectPermissionCan>
|
|
</TabPanel>
|
|
<TabPanel value={IntegrationsListPageTabs.NativeIntegrations}>
|
|
<ProjectPermissionCan
|
|
renderGuardBanner
|
|
I={ProjectPermissionActions.Read}
|
|
a={ProjectPermissionSub.Integrations}
|
|
>
|
|
<NativeIntegrationsTab />
|
|
</ProjectPermissionCan>
|
|
</TabPanel>
|
|
<TabPanel value={IntegrationsListPageTabs.FrameworkIntegrations}>
|
|
<FrameworkIntegrationTab />
|
|
</TabPanel>
|
|
<TabPanel value={IntegrationsListPageTabs.InfrastructureIntegrations}>
|
|
<InfrastructureIntegrationTab />
|
|
</TabPanel>
|
|
</Tabs>
|
|
</div>
|
|
</div>
|
|
</>
|
|
);
|
|
};
|