mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-09 04:28:17 +00:00
feat: updated nav ui based on feedback
This commit is contained in:
@@ -18,261 +18,261 @@ export const ROUTE_PATHS = Object.freeze({
|
|||||||
Organization: {
|
Organization: {
|
||||||
SecretScanning: setRoute(
|
SecretScanning: setRoute(
|
||||||
"/organization/secret-scanning",
|
"/organization/secret-scanning",
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/secret-scanning"
|
"/_authenticate/_inject-org-details/_org-layout/organization/secret-scanning"
|
||||||
),
|
),
|
||||||
SettingsPage: setRoute(
|
SettingsPage: setRoute(
|
||||||
"/organization/settings",
|
"/organization/settings",
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/settings"
|
"/_authenticate/_inject-org-details/_org-layout/organization/settings"
|
||||||
),
|
),
|
||||||
GroupDetailsByIDPage: setRoute(
|
GroupDetailsByIDPage: setRoute(
|
||||||
"/organization/groups/$groupId",
|
"/organization/groups/$groupId",
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/groups/$groupId"
|
"/_authenticate/_inject-org-details/_org-layout/organization/groups/$groupId"
|
||||||
),
|
),
|
||||||
IdentityDetailsByIDPage: setRoute(
|
IdentityDetailsByIDPage: setRoute(
|
||||||
"/organization/identities/$identityId",
|
"/organization/identities/$identityId",
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/identities/$identityId"
|
"/_authenticate/_inject-org-details/_org-layout/organization/identities/$identityId"
|
||||||
),
|
),
|
||||||
UserDetailsByIDPage: setRoute(
|
UserDetailsByIDPage: setRoute(
|
||||||
"/organization/members/$membershipId",
|
"/organization/members/$membershipId",
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/members/$membershipId"
|
"/_authenticate/_inject-org-details/_org-layout/organization/members/$membershipId"
|
||||||
),
|
),
|
||||||
AccessControlPage: setRoute(
|
AccessControlPage: setRoute(
|
||||||
"/organization/access-management",
|
"/organization/access-management",
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/access-management"
|
"/_authenticate/_inject-org-details/_org-layout/organization/access-management"
|
||||||
),
|
),
|
||||||
RoleByIDPage: setRoute(
|
RoleByIDPage: setRoute(
|
||||||
"/organization/roles/$roleId",
|
"/organization/roles/$roleId",
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/roles/$roleId"
|
"/_authenticate/_inject-org-details/_org-layout/organization/roles/$roleId"
|
||||||
),
|
),
|
||||||
AppConnections: {
|
AppConnections: {
|
||||||
GithubOauthCallbackPage: setRoute(
|
GithubOauthCallbackPage: setRoute(
|
||||||
"/organization/app-connections/github/oauth/callback",
|
"/organization/app-connections/github/oauth/callback",
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/app-connections/github/oauth/callback"
|
"/_authenticate/_inject-org-details/_org-layout/organization/app-connections/github/oauth/callback"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
SecretManager: {
|
SecretManager: {
|
||||||
ApprovalPage: setRoute(
|
ApprovalPage: setRoute(
|
||||||
"/secret-manager/$projectId/approval",
|
"/secret-manager/$projectId/approval",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/approval"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/approval"
|
||||||
),
|
),
|
||||||
SecretDashboardPage: setRoute(
|
SecretDashboardPage: setRoute(
|
||||||
"/secret-manager/$projectId/secrets/$envSlug",
|
"/secret-manager/$projectId/secrets/$envSlug",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/secrets/$envSlug"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/secrets/$envSlug"
|
||||||
),
|
),
|
||||||
OverviewPage: setRoute(
|
OverviewPage: setRoute(
|
||||||
"/secret-manager/$projectId/overview",
|
"/secret-manager/$projectId/overview",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/overview"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/overview"
|
||||||
),
|
),
|
||||||
IntegrationDetailsByIDPage: setRoute(
|
IntegrationDetailsByIDPage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/$integrationId",
|
"/secret-manager/$projectId/integrations/$integrationId",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/$integrationId"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/$integrationId"
|
||||||
),
|
),
|
||||||
Integratons: {
|
Integratons: {
|
||||||
SelectIntegrationAuth: setRoute(
|
SelectIntegrationAuth: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/select-integration-auth",
|
"/secret-manager/$projectId/integrations/select-integration-auth",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/select-integration-auth"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/select-integration-auth"
|
||||||
),
|
),
|
||||||
HerokuOauthCallbackPage: setRoute(
|
HerokuOauthCallbackPage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/heroku/oauth2/callback",
|
"/secret-manager/$projectId/integrations/heroku/oauth2/callback",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/heroku/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/heroku/oauth2/callback"
|
||||||
),
|
),
|
||||||
HerokuConfigurePage: setRoute(
|
HerokuConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/heroku/create",
|
"/secret-manager/$projectId/integrations/heroku/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/heroku/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/heroku/create"
|
||||||
),
|
),
|
||||||
AwsParameterStoreConfigurePage: setRoute(
|
AwsParameterStoreConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/aws-parameter-store/create",
|
"/secret-manager/$projectId/integrations/aws-parameter-store/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/aws-parameter-store/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/aws-parameter-store/create"
|
||||||
),
|
),
|
||||||
AwsSecretManagerConfigurePage: setRoute(
|
AwsSecretManagerConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/aws-secret-manager/create",
|
"/secret-manager/$projectId/integrations/aws-secret-manager/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/aws-secret-manager/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/aws-secret-manager/create"
|
||||||
),
|
),
|
||||||
AzureAppConfigurationsOauthCallbackPage: setRoute(
|
AzureAppConfigurationsOauthCallbackPage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/azure-app-configuration/oauth2/callback",
|
"/secret-manager/$projectId/integrations/azure-app-configuration/oauth2/callback",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/azure-app-configuration/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/azure-app-configuration/oauth2/callback"
|
||||||
),
|
),
|
||||||
AzureAppConfigurationsConfigurePage: setRoute(
|
AzureAppConfigurationsConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/azure-app-configuration/create",
|
"/secret-manager/$projectId/integrations/azure-app-configuration/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/azure-app-configuration/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/azure-app-configuration/create"
|
||||||
),
|
),
|
||||||
AzureDevopsConfigurePage: setRoute(
|
AzureDevopsConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/azure-devops/create",
|
"/secret-manager/$projectId/integrations/azure-devops/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/azure-devops/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/azure-devops/create"
|
||||||
),
|
),
|
||||||
AzureKeyVaultAuthorizePage: setRoute(
|
AzureKeyVaultAuthorizePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/azure-key-vault/authorize",
|
"/secret-manager/$projectId/integrations/azure-key-vault/authorize",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/azure-key-vault/authorize"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/azure-key-vault/authorize"
|
||||||
),
|
),
|
||||||
AzureKeyVaultOauthCallbackPage: setRoute(
|
AzureKeyVaultOauthCallbackPage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/azure-key-vault/oauth2/callback",
|
"/secret-manager/$projectId/integrations/azure-key-vault/oauth2/callback",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/azure-key-vault/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/azure-key-vault/oauth2/callback"
|
||||||
),
|
),
|
||||||
AzureKeyVaultConfigurePage: setRoute(
|
AzureKeyVaultConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/azure-key-vault/create",
|
"/secret-manager/$projectId/integrations/azure-key-vault/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/azure-key-vault/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/azure-key-vault/create"
|
||||||
),
|
),
|
||||||
BitbucketOauthCallbackPage: setRoute(
|
BitbucketOauthCallbackPage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/bitbucket/oauth2/callback",
|
"/secret-manager/$projectId/integrations/bitbucket/oauth2/callback",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/bitbucket/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/bitbucket/oauth2/callback"
|
||||||
),
|
),
|
||||||
BitbucketConfigurePage: setRoute(
|
BitbucketConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/bitbucket/create",
|
"/secret-manager/$projectId/integrations/bitbucket/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/bitbucket/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/bitbucket/create"
|
||||||
),
|
),
|
||||||
ChecklyConfigurePage: setRoute(
|
ChecklyConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/checkly/create",
|
"/secret-manager/$projectId/integrations/checkly/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/checkly/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/checkly/create"
|
||||||
),
|
),
|
||||||
CircleConfigurePage: setRoute(
|
CircleConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/circleci/create",
|
"/secret-manager/$projectId/integrations/circleci/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/circleci/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/circleci/create"
|
||||||
),
|
),
|
||||||
CloudflarePagesConfigurePage: setRoute(
|
CloudflarePagesConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/cloudflare-pages/create",
|
"/secret-manager/$projectId/integrations/cloudflare-pages/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/cloudflare-pages/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/cloudflare-pages/create"
|
||||||
),
|
),
|
||||||
DigitalOceanAppPlatformConfigurePage: setRoute(
|
DigitalOceanAppPlatformConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/digital-ocean-app-platform/create",
|
"/secret-manager/$projectId/integrations/digital-ocean-app-platform/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/digital-ocean-app-platform/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/digital-ocean-app-platform/create"
|
||||||
),
|
),
|
||||||
CloudflareWorkersConfigurePage: setRoute(
|
CloudflareWorkersConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/cloudflare-workers/create",
|
"/secret-manager/$projectId/integrations/cloudflare-workers/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/cloudflare-workers/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/cloudflare-workers/create"
|
||||||
),
|
),
|
||||||
CodefreshConfigurePage: setRoute(
|
CodefreshConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/codefresh/create",
|
"/secret-manager/$projectId/integrations/codefresh/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/codefresh/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/codefresh/create"
|
||||||
),
|
),
|
||||||
GcpSecretManagerConfigurePage: setRoute(
|
GcpSecretManagerConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/gcp-secret-manager/create",
|
"/secret-manager/$projectId/integrations/gcp-secret-manager/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/gcp-secret-manager/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/gcp-secret-manager/create"
|
||||||
),
|
),
|
||||||
GcpSecretManagerOauthCallbackPage: setRoute(
|
GcpSecretManagerOauthCallbackPage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/gcp-secret-manager/oauth2/callback",
|
"/secret-manager/$projectId/integrations/gcp-secret-manager/oauth2/callback",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/gcp-secret-manager/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/gcp-secret-manager/oauth2/callback"
|
||||||
),
|
),
|
||||||
GithubConfigurePage: setRoute(
|
GithubConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/github/create",
|
"/secret-manager/$projectId/integrations/github/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/github/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/github/create"
|
||||||
),
|
),
|
||||||
GithubOauthCallbackPage: setRoute(
|
GithubOauthCallbackPage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/github/oauth2/callback",
|
"/secret-manager/$projectId/integrations/github/oauth2/callback",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/github/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/github/oauth2/callback"
|
||||||
),
|
),
|
||||||
GitlabConfigurePage: setRoute(
|
GitlabConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/gitlab/create",
|
"/secret-manager/$projectId/integrations/gitlab/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/gitlab/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/gitlab/create"
|
||||||
),
|
),
|
||||||
GitlabOauthCallbackPage: setRoute(
|
GitlabOauthCallbackPage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/gitlab/oauth2/callback",
|
"/secret-manager/$projectId/integrations/gitlab/oauth2/callback",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/gitlab/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/gitlab/oauth2/callback"
|
||||||
),
|
),
|
||||||
VercelOauthCallbackPage: setRoute(
|
VercelOauthCallbackPage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/vercel/oauth2/callback",
|
"/secret-manager/$projectId/integrations/vercel/oauth2/callback",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/vercel/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/vercel/oauth2/callback"
|
||||||
),
|
),
|
||||||
VercelConfigurePage: setRoute(
|
VercelConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/vercel/create",
|
"/secret-manager/$projectId/integrations/vercel/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/vercel/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/vercel/create"
|
||||||
),
|
),
|
||||||
FlyioConfigurePage: setRoute(
|
FlyioConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/flyio/create",
|
"/secret-manager/$projectId/integrations/flyio/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/flyio/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/flyio/create"
|
||||||
),
|
),
|
||||||
HashicorpVaultConfigurePage: setRoute(
|
HashicorpVaultConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/hashicorp-vault/create",
|
"/secret-manager/$projectId/integrations/hashicorp-vault/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/hashicorp-vault/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/hashicorp-vault/create"
|
||||||
),
|
),
|
||||||
HasuraCloudConfigurePage: setRoute(
|
HasuraCloudConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/hasura-cloud/create",
|
"/secret-manager/$projectId/integrations/hasura-cloud/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/hasura-cloud/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/hasura-cloud/create"
|
||||||
),
|
),
|
||||||
LaravelForgeConfigurePage: setRoute(
|
LaravelForgeConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/laravel-forge/create",
|
"/secret-manager/$projectId/integrations/laravel-forge/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/laravel-forge/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/laravel-forge/create"
|
||||||
),
|
),
|
||||||
NorthflankConfigurePage: setRoute(
|
NorthflankConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/northflank/create",
|
"/secret-manager/$projectId/integrations/northflank/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/northflank/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/northflank/create"
|
||||||
),
|
),
|
||||||
RailwayConfigurePage: setRoute(
|
RailwayConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/railway/create",
|
"/secret-manager/$projectId/integrations/railway/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/railway/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/railway/create"
|
||||||
),
|
),
|
||||||
RenderConfigurePage: setRoute(
|
RenderConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/render/create",
|
"/secret-manager/$projectId/integrations/render/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/render/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/render/create"
|
||||||
),
|
),
|
||||||
RundeckConfigurePage: setRoute(
|
RundeckConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/rundeck/create",
|
"/secret-manager/$projectId/integrations/rundeck/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/rundeck/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/rundeck/create"
|
||||||
),
|
),
|
||||||
WindmillConfigurePage: setRoute(
|
WindmillConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/windmill/create",
|
"/secret-manager/$projectId/integrations/windmill/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/windmill/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/windmill/create"
|
||||||
),
|
),
|
||||||
TravisCIConfigurePage: setRoute(
|
TravisCIConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/travisci/create",
|
"/secret-manager/$projectId/integrations/travisci/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/travisci/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/travisci/create"
|
||||||
),
|
),
|
||||||
TerraformCloudConfigurePage: setRoute(
|
TerraformCloudConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/terraform-cloud/create",
|
"/secret-manager/$projectId/integrations/terraform-cloud/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/terraform-cloud/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/terraform-cloud/create"
|
||||||
),
|
),
|
||||||
TeamcityConfigurePage: setRoute(
|
TeamcityConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/teamcity/create",
|
"/secret-manager/$projectId/integrations/teamcity/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/teamcity/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/teamcity/create"
|
||||||
),
|
),
|
||||||
SupabaseConfigurePage: setRoute(
|
SupabaseConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/supabase/create",
|
"/secret-manager/$projectId/integrations/supabase/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/supabase/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/supabase/create"
|
||||||
),
|
),
|
||||||
OctopusDeployCloudConfigurePage: setRoute(
|
OctopusDeployCloudConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/octopus-deploy/create",
|
"/secret-manager/$projectId/integrations/octopus-deploy/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/octopus-deploy/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/octopus-deploy/create"
|
||||||
),
|
),
|
||||||
DatabricksConfigurePage: setRoute(
|
DatabricksConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/databricks/create",
|
"/secret-manager/$projectId/integrations/databricks/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/databricks/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/databricks/create"
|
||||||
),
|
),
|
||||||
QoveryConfigurePage: setRoute(
|
QoveryConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/qovery/create",
|
"/secret-manager/$projectId/integrations/qovery/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/qovery/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/qovery/create"
|
||||||
),
|
),
|
||||||
Cloud66ConfigurePage: setRoute(
|
Cloud66ConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/cloud-66/create",
|
"/secret-manager/$projectId/integrations/cloud-66/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/cloud-66/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/cloud-66/create"
|
||||||
),
|
),
|
||||||
NetlifyConfigurePage: setRoute(
|
NetlifyConfigurePage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/netlify/create",
|
"/secret-manager/$projectId/integrations/netlify/create",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/netlify/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/netlify/create"
|
||||||
),
|
),
|
||||||
NetlifyOuathCallbackPage: setRoute(
|
NetlifyOuathCallbackPage: setRoute(
|
||||||
"/secret-manager/$projectId/integrations/netlify/oauth2/callback",
|
"/secret-manager/$projectId/integrations/netlify/oauth2/callback",
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/netlify/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/netlify/oauth2/callback"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
CertManager: {
|
CertManager: {
|
||||||
CertAuthDetailsByIDPage: setRoute(
|
CertAuthDetailsByIDPage: setRoute(
|
||||||
"/cert-manager/$projectId/ca/$caId",
|
"/cert-manager/$projectId/ca/$caId",
|
||||||
"/_authenticate/_inject-org-details/cert-manager/$projectId/_cert-manager-layout/ca/$caId"
|
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/ca/$caId"
|
||||||
),
|
),
|
||||||
OverviewPage: setRoute(
|
OverviewPage: setRoute(
|
||||||
"/cert-manager/$projectId/overview",
|
"/cert-manager/$projectId/overview",
|
||||||
"/_authenticate/_inject-org-details/cert-manager/$projectId/_cert-manager-layout/overview"
|
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/overview"
|
||||||
),
|
),
|
||||||
PkiCollectionDetailsByIDPage: setRoute(
|
PkiCollectionDetailsByIDPage: setRoute(
|
||||||
"/cert-manager/$projectId/pki-collections/$collectionId",
|
"/cert-manager/$projectId/pki-collections/$collectionId",
|
||||||
"/_authenticate/_inject-org-details/cert-manager/$projectId/_cert-manager-layout/pki-collections/$collectionId"
|
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/pki-collections/$collectionId"
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
Ssh: {
|
Ssh: {
|
||||||
SshCaByIDPage: setRoute(
|
SshCaByIDPage: setRoute(
|
||||||
"/ssh/$projectId/ca/$caId",
|
"/ssh/$projectId/ca/$caId",
|
||||||
"/_authenticate/_inject-org-details/ssh/$projectId/_ssh-layout/ca/$caId"
|
"/_authenticate/_inject-org-details/_org-layout/ssh/$projectId/_ssh-layout/ca/$caId"
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
Public: {
|
Public: {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import { envConfig } from "@app/config/env";
|
|||||||
import { ProjectType } from "@app/hooks/api/workspace/types";
|
import { ProjectType } from "@app/hooks/api/workspace/types";
|
||||||
|
|
||||||
import { InsecureConnectionBanner } from "../OrganizationLayout/components/InsecureConnectionBanner";
|
import { InsecureConnectionBanner } from "../OrganizationLayout/components/InsecureConnectionBanner";
|
||||||
import { INFISICAL_SUPPORT_OPTIONS } from "../OrganizationLayout/components/SidebarFooter/SidebarFooter";
|
import { INFISICAL_SUPPORT_OPTIONS } from "../OrganizationLayout/components/MinimizedOrgSidebar/MinimizedOrgSidebar";
|
||||||
|
|
||||||
export const AdminLayout = () => {
|
export const AdminLayout = () => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|||||||
@@ -1,14 +1,11 @@
|
|||||||
import { useState } from "react";
|
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { faMobile } from "@fortawesome/free-solid-svg-icons";
|
import { faMobile } from "@fortawesome/free-solid-svg-icons";
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
import { useQueryClient } from "@tanstack/react-query";
|
import { Link, linkOptions, Outlet, useLocation, useRouterState } from "@tanstack/react-router";
|
||||||
import { Link, Outlet, useNavigate, useRouter, useRouterState } from "@tanstack/react-router";
|
import { AnimatePresence, motion } from "framer-motion";
|
||||||
import { motion } from "framer-motion";
|
import { twMerge } from "tailwind-merge";
|
||||||
|
|
||||||
import { Mfa } from "@app/components/auth/Mfa";
|
|
||||||
import { CreateOrgModal } from "@app/components/organization/CreateOrgModal";
|
import { CreateOrgModal } from "@app/components/organization/CreateOrgModal";
|
||||||
import SecurityClient from "@app/components/utilities/SecurityClient";
|
|
||||||
import {
|
import {
|
||||||
BreadcrumbContainer,
|
BreadcrumbContainer,
|
||||||
Menu,
|
Menu,
|
||||||
@@ -16,182 +13,101 @@ import {
|
|||||||
MenuItem,
|
MenuItem,
|
||||||
TBreadcrumbFormat
|
TBreadcrumbFormat
|
||||||
} from "@app/components/v2";
|
} from "@app/components/v2";
|
||||||
import { useUser } from "@app/context";
|
import { usePopUp } from "@app/hooks";
|
||||||
import { usePopUp, useToggle } from "@app/hooks";
|
|
||||||
import { useSelectOrganization, workspaceKeys } from "@app/hooks/api";
|
|
||||||
import { authKeys } from "@app/hooks/api/auth/queries";
|
|
||||||
import { MfaMethod } from "@app/hooks/api/auth/types";
|
|
||||||
import { ProjectType } from "@app/hooks/api/workspace/types";
|
|
||||||
import { navigateUserToOrg } from "@app/pages/auth/LoginPage/Login.utils";
|
|
||||||
|
|
||||||
import { InsecureConnectionBanner } from "./components/InsecureConnectionBanner";
|
import { InsecureConnectionBanner } from "./components/InsecureConnectionBanner";
|
||||||
import { SidebarFooter } from "./components/SidebarFooter";
|
import { MinimizedOrgSidebar } from "./components/MinimizedOrgSidebar";
|
||||||
import { SidebarHeader } from "./components/SidebarHeader";
|
import { SidebarHeader } from "./components/SidebarHeader";
|
||||||
|
|
||||||
export const OrganizationLayout = () => {
|
export const OrganizationLayout = () => {
|
||||||
const [shouldShowMfa, toggleShowMfa] = useToggle(false);
|
|
||||||
const [requiredMfaMethod, setRequiredMfaMethod] = useState(MfaMethod.EMAIL);
|
|
||||||
const [mfaSuccessCallback, setMfaSuccessCallback] = useState<() => void>(() => {});
|
|
||||||
const matches = useRouterState({ select: (s) => s.matches.at(-1)?.context });
|
const matches = useRouterState({ select: (s) => s.matches.at(-1)?.context });
|
||||||
const breadcrumbs = matches && "breadcrumbs" in matches ? matches.breadcrumbs : undefined;
|
const location = useLocation();
|
||||||
|
const isOrganizationSpecificPage = location.pathname.startsWith("/organization");
|
||||||
const { user } = useUser();
|
const breadcrumbs =
|
||||||
|
isOrganizationSpecificPage && matches && "breadcrumbs" in matches
|
||||||
|
? matches.breadcrumbs
|
||||||
|
: undefined;
|
||||||
|
|
||||||
const { popUp, handlePopUpToggle } = usePopUp(["createOrg"] as const);
|
const { popUp, handlePopUpToggle } = usePopUp(["createOrg"] as const);
|
||||||
const { mutateAsync: selectOrganization } = useSelectOrganization();
|
|
||||||
const navigate = useNavigate();
|
|
||||||
const router = useRouter();
|
|
||||||
const queryClient = useQueryClient();
|
|
||||||
|
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const handleOrgChange = async (orgId: string) => {
|
|
||||||
queryClient.removeQueries({ queryKey: authKeys.getAuthToken });
|
|
||||||
queryClient.removeQueries({ queryKey: workspaceKeys.getAllUserWorkspace() });
|
|
||||||
|
|
||||||
const { token, isMfaEnabled, mfaMethod } = await selectOrganization({
|
const shouldShowOrgSidebar = (
|
||||||
organizationId: orgId
|
[
|
||||||
});
|
linkOptions({ to: "/organization/access-management" }).to,
|
||||||
|
linkOptions({ to: "/organization/settings" }).to,
|
||||||
if (isMfaEnabled) {
|
linkOptions({ to: "/organization/audit-logs" }).to
|
||||||
SecurityClient.setMfaToken(token);
|
] as string[]
|
||||||
if (mfaMethod) {
|
).includes(location.pathname);
|
||||||
setRequiredMfaMethod(mfaMethod);
|
|
||||||
}
|
|
||||||
toggleShowMfa.on();
|
|
||||||
setMfaSuccessCallback(() => () => handleOrgChange(orgId));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
await router.invalidate();
|
|
||||||
await navigateUserToOrg(navigate, orgId);
|
|
||||||
};
|
|
||||||
|
|
||||||
if (shouldShowMfa) {
|
|
||||||
return (
|
|
||||||
<div className="flex max-h-screen min-h-screen flex-col items-center justify-center gap-2 overflow-y-auto bg-gradient-to-tr from-mineshaft-600 via-mineshaft-800 to-bunker-700">
|
|
||||||
<Mfa
|
|
||||||
email={user.email as string}
|
|
||||||
method={requiredMfaMethod}
|
|
||||||
successCallback={mfaSuccessCallback}
|
|
||||||
closeMfa={() => toggleShowMfa.off()}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className="dark hidden h-screen w-full flex-col overflow-x-hidden transition-all md:flex">
|
<div className="dark hidden h-screen w-full flex-col overflow-x-hidden bg-bunker-800 transition-all md:flex">
|
||||||
{!window.isSecureContext && <InsecureConnectionBanner />}
|
{!window.isSecureContext && <InsecureConnectionBanner />}
|
||||||
<div className="flex flex-grow flex-col overflow-y-hidden md:flex-row">
|
<div className="flex flex-grow flex-col overflow-y-hidden md:flex-row">
|
||||||
<aside className="dark w-60 border-r border-mineshaft-600 bg-gradient-to-tr from-mineshaft-700 via-mineshaft-800 to-mineshaft-900 transition-all duration-150">
|
<MinimizedOrgSidebar />
|
||||||
<nav className="items-between flex h-full flex-col justify-between overflow-y-auto dark:[color-scheme:dark]">
|
<AnimatePresence mode="popLayout">
|
||||||
<div>
|
{shouldShowOrgSidebar && (
|
||||||
<SidebarHeader onChangeOrg={handleOrgChange} />
|
<motion.div
|
||||||
<div className="px-1">
|
key="menu-list-items"
|
||||||
<motion.div
|
initial={{ x: -150 }}
|
||||||
key="menu-list-items"
|
animate={{ x: 0 }}
|
||||||
initial={{ x: 300, opacity: 0 }}
|
exit={{ x: -150 }}
|
||||||
animate={{ x: 0, opacity: 1 }}
|
transition={{ duration: 0.2 }}
|
||||||
exit={{ x: -300, opacity: 0 }}
|
className="dark w-60 overflow-hidden border-r border-mineshaft-600 bg-gradient-to-tr from-mineshaft-700 via-mineshaft-800 to-mineshaft-900"
|
||||||
transition={{ duration: 0.1 }}
|
>
|
||||||
>
|
<nav className="items-between flex h-full flex-col overflow-y-auto dark:[color-scheme:dark]">
|
||||||
<Menu>
|
<div className="p-2 pt-3">
|
||||||
<MenuGroup title="PRODUCTS">
|
<SidebarHeader />
|
||||||
<Link to={`/organization/${ProjectType.SecretManager}/overview` as const}>
|
</div>
|
||||||
{({ isActive }) => (
|
<Menu>
|
||||||
<MenuItem isSelected={isActive} icon="sliding-carousel">
|
<MenuGroup title="Organization Control">
|
||||||
Secret Management
|
<Link to="/organization/audit-logs">
|
||||||
</MenuItem>
|
{({ isActive }) => (
|
||||||
)}
|
<MenuItem isSelected={isActive} icon="moving-block">
|
||||||
</Link>
|
Audit Logs
|
||||||
<Link
|
</MenuItem>
|
||||||
to={`/organization/${ProjectType.CertificateManager}/overview` as const}
|
|
||||||
>
|
|
||||||
{({ isActive }) => (
|
|
||||||
<MenuItem isSelected={isActive} icon="note">
|
|
||||||
Cert Management
|
|
||||||
</MenuItem>
|
|
||||||
)}
|
|
||||||
</Link>
|
|
||||||
<Link to={`/organization/${ProjectType.KMS}/overview` as const}>
|
|
||||||
{({ isActive }) => (
|
|
||||||
<MenuItem isSelected={isActive} icon="unlock">
|
|
||||||
Key Management
|
|
||||||
</MenuItem>
|
|
||||||
)}
|
|
||||||
</Link>
|
|
||||||
<Link to={`/organization/${ProjectType.SSH}/overview` as const}>
|
|
||||||
{({ isActive }) => (
|
|
||||||
<MenuItem isSelected={isActive} icon="verified">
|
|
||||||
SSH
|
|
||||||
</MenuItem>
|
|
||||||
)}
|
|
||||||
</Link>
|
|
||||||
<Link to="/organization/secret-scanning">
|
|
||||||
{({ isActive }) => (
|
|
||||||
<MenuItem
|
|
||||||
isSelected={isActive}
|
|
||||||
icon="secret-scan"
|
|
||||||
className="text-white"
|
|
||||||
>
|
|
||||||
Secret Scanning
|
|
||||||
</MenuItem>
|
|
||||||
)}
|
|
||||||
</Link>
|
|
||||||
</MenuGroup>
|
|
||||||
<MenuGroup title="Others">
|
|
||||||
<Link to="/organization/access-management">
|
|
||||||
{({ isActive }) => (
|
|
||||||
<MenuItem isSelected={isActive} icon="groups">
|
|
||||||
Access Control
|
|
||||||
</MenuItem>
|
|
||||||
)}
|
|
||||||
</Link>
|
|
||||||
<Link to="/organization/secret-sharing">
|
|
||||||
{({ isActive }) => (
|
|
||||||
<MenuItem isSelected={isActive} icon="lock-closed">
|
|
||||||
Secret Sharing
|
|
||||||
</MenuItem>
|
|
||||||
)}
|
|
||||||
</Link>
|
|
||||||
{(window.location.origin.includes("https://app.infisical.com") ||
|
|
||||||
window.location.origin.includes("https://eu.infisical.com") ||
|
|
||||||
window.location.origin.includes("https://gamma.infisical.com")) && (
|
|
||||||
<Link to="/organization/billing">
|
|
||||||
{({ isActive }) => (
|
|
||||||
<MenuItem isSelected={isActive} icon="spinning-coin">
|
|
||||||
Usage & Billing
|
|
||||||
</MenuItem>
|
|
||||||
)}
|
|
||||||
</Link>
|
|
||||||
)}
|
)}
|
||||||
<Link to="/organization/audit-logs">
|
</Link>
|
||||||
|
{(window.location.origin.includes("https://app.infisical.com") ||
|
||||||
|
window.location.origin.includes("https://eu.infisical.com") ||
|
||||||
|
window.location.origin.includes("https://gamma.infisical.com")) && (
|
||||||
|
<Link to="/organization/billing">
|
||||||
{({ isActive }) => (
|
{({ isActive }) => (
|
||||||
<MenuItem isSelected={isActive} icon="moving-block">
|
<MenuItem isSelected={isActive} icon="spinning-coin">
|
||||||
Audit Logs
|
Usage & Billing
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
)}
|
)}
|
||||||
</Link>
|
</Link>
|
||||||
<Link to="/organization/settings">
|
)}
|
||||||
{({ isActive }) => (
|
</MenuGroup>
|
||||||
<MenuItem isSelected={isActive} icon="toggle-settings">
|
<MenuGroup title="Others">
|
||||||
Organization Settings
|
<Link to="/organization/access-management">
|
||||||
</MenuItem>
|
{({ isActive }) => (
|
||||||
)}
|
<MenuItem isSelected={isActive} icon="groups">
|
||||||
</Link>
|
Access Control
|
||||||
</MenuGroup>
|
</MenuItem>
|
||||||
</Menu>
|
)}
|
||||||
</motion.div>
|
</Link>
|
||||||
</div>
|
<Link to="/organization/settings">
|
||||||
</div>
|
{({ isActive }) => (
|
||||||
<SidebarFooter />
|
<MenuItem isSelected={isActive} icon="toggle-settings">
|
||||||
</nav>
|
Organization Settings
|
||||||
</aside>
|
</MenuItem>
|
||||||
<CreateOrgModal
|
)}
|
||||||
isOpen={popUp?.createOrg?.isOpen}
|
</Link>
|
||||||
onClose={() => handlePopUpToggle("createOrg", false)}
|
</MenuGroup>
|
||||||
/>
|
</Menu>
|
||||||
<main className="flex-1 overflow-y-auto overflow-x-hidden bg-bunker-800 px-4 pb-4 dark:[color-scheme:dark]">
|
</nav>
|
||||||
|
</motion.div>
|
||||||
|
)}
|
||||||
|
</AnimatePresence>
|
||||||
|
<main
|
||||||
|
className={twMerge(
|
||||||
|
"flex-1 overflow-y-auto overflow-x-hidden bg-bunker-800 px-4 pb-4 dark:[color-scheme:dark]",
|
||||||
|
!isOrganizationSpecificPage && "overflow-hidden p-0"
|
||||||
|
)}
|
||||||
|
>
|
||||||
{breadcrumbs ? (
|
{breadcrumbs ? (
|
||||||
<BreadcrumbContainer breadcrumbs={breadcrumbs as TBreadcrumbFormat[]} />
|
<BreadcrumbContainer breadcrumbs={breadcrumbs as TBreadcrumbFormat[]} />
|
||||||
) : null}
|
) : null}
|
||||||
@@ -199,6 +115,10 @@ export const OrganizationLayout = () => {
|
|||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<CreateOrgModal
|
||||||
|
isOpen={popUp?.createOrg?.isOpen}
|
||||||
|
onClose={() => handlePopUpToggle("createOrg", false)}
|
||||||
|
/>
|
||||||
<div className="z-[200] flex h-screen w-screen flex-col items-center justify-center bg-bunker-800 md:hidden">
|
<div className="z-[200] flex h-screen w-screen flex-col items-center justify-center bg-bunker-800 md:hidden">
|
||||||
<FontAwesomeIcon icon={faMobile} className="mb-8 text-7xl text-gray-300" />
|
<FontAwesomeIcon icon={faMobile} className="mb-8 text-7xl text-gray-300" />
|
||||||
<p className="max-w-sm px-6 text-center text-lg text-gray-200">
|
<p className="max-w-sm px-6 text-center text-lg text-gray-200">
|
||||||
|
|||||||
+9
-4
@@ -22,7 +22,7 @@ export const MenuIconButton = <T extends ElementType = "button">({
|
|||||||
type="button"
|
type="button"
|
||||||
role="menuitem"
|
role="menuitem"
|
||||||
className={twMerge(
|
className={twMerge(
|
||||||
"duration-50 group relative flex w-full cursor-pointer flex-col items-center justify-center rounded p-2 font-inter text-sm text-bunker-100 transition-all hover:bg-mineshaft-700",
|
"group relative flex w-full cursor-pointer flex-col items-center justify-center rounded p-2 font-inter text-sm text-bunker-100 transition-all duration-150 hover:bg-mineshaft-700",
|
||||||
isSelected && "bg-bunker-800 hover:bg-mineshaft-600",
|
isSelected && "bg-bunker-800 hover:bg-mineshaft-600",
|
||||||
isDisabled && "cursor-not-allowed hover:bg-transparent",
|
isDisabled && "cursor-not-allowed hover:bg-transparent",
|
||||||
className
|
className
|
||||||
@@ -34,8 +34,8 @@ export const MenuIconButton = <T extends ElementType = "button">({
|
|||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
className={`${
|
className={`${
|
||||||
isSelected ? "visisble" : "invisible"
|
isSelected ? "opacity-100" : "opacity-0"
|
||||||
} absolute -left-[0.28rem] h-full w-0.5 rounded-md bg-primary`}
|
} absolute -left-[0.28rem] h-full w-1 rounded-md bg-primary transition-all duration-150`}
|
||||||
/>
|
/>
|
||||||
{icon && (
|
{icon && (
|
||||||
<div className="my-auto mb-2 h-6 w-6">
|
<div className="my-auto mb-2 h-6 w-6">
|
||||||
@@ -49,7 +49,12 @@ export const MenuIconButton = <T extends ElementType = "button">({
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
<div className="flex-grow justify-center break-words text-center text-xxs">{children}</div>
|
<div
|
||||||
|
className="flex-grow justify-center break-words text-center"
|
||||||
|
style={{ fontSize: "10px" }}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
</Item>
|
</Item>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
+180
-135
@@ -1,23 +1,23 @@
|
|||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
|
import { faGithub, faSlack } from "@fortawesome/free-brands-svg-icons";
|
||||||
import {
|
import {
|
||||||
faArrowUpRightFromSquare,
|
faArrowUpRightFromSquare,
|
||||||
faBook,
|
faBook,
|
||||||
faCheck,
|
faCheck,
|
||||||
faCog,
|
faCog,
|
||||||
faEllipsis,
|
faEllipsis,
|
||||||
|
faEnvelope,
|
||||||
faInfinity,
|
faInfinity,
|
||||||
faInfo,
|
faInfo,
|
||||||
faInfoCircle,
|
faInfoCircle,
|
||||||
faMoneyBill,
|
faMoneyBill,
|
||||||
faReply,
|
|
||||||
faShare,
|
|
||||||
faSignOut,
|
faSignOut,
|
||||||
|
faUser,
|
||||||
faUsers
|
faUsers
|
||||||
} from "@fortawesome/free-solid-svg-icons";
|
} from "@fortawesome/free-solid-svg-icons";
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
import { useQueryClient } from "@tanstack/react-query";
|
import { useQueryClient } from "@tanstack/react-query";
|
||||||
import { Link, useNavigate, useRouter } from "@tanstack/react-router";
|
import { Link, linkOptions, useLocation, useNavigate, useRouter } from "@tanstack/react-router";
|
||||||
import { motion } from "framer-motion";
|
|
||||||
|
|
||||||
import { Mfa } from "@app/components/auth/Mfa";
|
import { Mfa } from "@app/components/auth/Mfa";
|
||||||
import { CreateOrgModal } from "@app/components/organization/CreateOrgModal";
|
import { CreateOrgModal } from "@app/components/organization/CreateOrgModal";
|
||||||
@@ -42,13 +42,41 @@ import {
|
|||||||
} from "@app/hooks/api";
|
} from "@app/hooks/api";
|
||||||
import { authKeys } from "@app/hooks/api/auth/queries";
|
import { authKeys } from "@app/hooks/api/auth/queries";
|
||||||
import { MfaMethod } from "@app/hooks/api/auth/types";
|
import { MfaMethod } from "@app/hooks/api/auth/types";
|
||||||
|
import { SubscriptionPlan } from "@app/hooks/api/types";
|
||||||
import { AuthMethod } from "@app/hooks/api/users/types";
|
import { AuthMethod } from "@app/hooks/api/users/types";
|
||||||
import { ProjectType } from "@app/hooks/api/workspace/types";
|
import { ProjectType } from "@app/hooks/api/workspace/types";
|
||||||
import { INFISICAL_SUPPORT_OPTIONS } from "@app/layouts/OrganizationLayout/components/SidebarFooter/SidebarFooter";
|
|
||||||
import { navigateUserToOrg } from "@app/pages/auth/LoginPage/Login.utils";
|
import { navigateUserToOrg } from "@app/pages/auth/LoginPage/Login.utils";
|
||||||
|
|
||||||
import { MenuIconButton } from "../MenuIconButton";
|
import { MenuIconButton } from "../MenuIconButton";
|
||||||
import { ProjectSwitcher } from "./ProjectSwitcher";
|
|
||||||
|
const getPlan = (subscription: SubscriptionPlan) => {
|
||||||
|
if (subscription.dynamicSecret) return "Enterprise Plan";
|
||||||
|
if (subscription.pitRecovery) return "Pro Plan";
|
||||||
|
return "Free Plan";
|
||||||
|
};
|
||||||
|
|
||||||
|
export const INFISICAL_SUPPORT_OPTIONS = [
|
||||||
|
[
|
||||||
|
<FontAwesomeIcon key={1} className="pr-4 text-sm" icon={faSlack} />,
|
||||||
|
"Support Forum",
|
||||||
|
"https://infisical.com/slack"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
<FontAwesomeIcon key={2} className="pr-4 text-sm" icon={faBook} />,
|
||||||
|
"Read Docs",
|
||||||
|
"https://infisical.com/docs/documentation/getting-started/introduction"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
<FontAwesomeIcon key={3} className="pr-4 text-sm" icon={faGithub} />,
|
||||||
|
"GitHub Issues",
|
||||||
|
"https://github.com/Infisical/infisical/issues"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
<FontAwesomeIcon key={4} className="pr-4 text-sm" icon={faEnvelope} />,
|
||||||
|
"Email Support",
|
||||||
|
"mailto:[email protected]"
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
export const MinimizedOrgSidebar = () => {
|
export const MinimizedOrgSidebar = () => {
|
||||||
const [shouldShowMfa, toggleShowMfa] = useToggle(false);
|
const [shouldShowMfa, toggleShowMfa] = useToggle(false);
|
||||||
@@ -66,8 +94,17 @@ export const MinimizedOrgSidebar = () => {
|
|||||||
const { mutateAsync: selectOrganization } = useSelectOrganization();
|
const { mutateAsync: selectOrganization } = useSelectOrganization();
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
const location = useLocation();
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
|
|
||||||
|
const isMoreSelected = (
|
||||||
|
[
|
||||||
|
linkOptions({ to: "/organization/access-management" }).to,
|
||||||
|
linkOptions({ to: "/organization/settings" }).to,
|
||||||
|
linkOptions({ to: "/organization/audit-logs" }).to
|
||||||
|
] as string[]
|
||||||
|
).includes(location.pathname);
|
||||||
|
|
||||||
const handleOrgChange = async (orgId: string) => {
|
const handleOrgChange = async (orgId: string) => {
|
||||||
queryClient.removeQueries({ queryKey: authKeys.getAuthToken });
|
queryClient.removeQueries({ queryKey: authKeys.getAuthToken });
|
||||||
queryClient.removeQueries({ queryKey: workspaceKeys.getAllUserWorkspace() });
|
queryClient.removeQueries({ queryKey: workspaceKeys.getAllUserWorkspace() });
|
||||||
@@ -115,11 +152,14 @@ export const MinimizedOrgSidebar = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<aside className="dark w-16 border-r border-mineshaft-600 bg-gradient-to-tr from-mineshaft-700 via-mineshaft-800 to-mineshaft-900 transition-all duration-150">
|
<aside
|
||||||
|
className="dark z-10 border-r border-mineshaft-600 bg-gradient-to-tr from-mineshaft-700 via-mineshaft-800 to-mineshaft-900 transition-all duration-150"
|
||||||
|
style={{ width: "72px" }}
|
||||||
|
>
|
||||||
<nav className="items-between flex h-full flex-col justify-between overflow-y-auto dark:[color-scheme:dark]">
|
<nav className="items-between flex h-full flex-col justify-between overflow-y-auto dark:[color-scheme:dark]">
|
||||||
<div>
|
<div>
|
||||||
<div className="flex cursor-pointer items-center p-2 pt-4 hover:bg-mineshaft-700">
|
<div className="flex cursor-pointer items-center p-2 pt-4 hover:bg-mineshaft-700">
|
||||||
<DropdownMenu>
|
<DropdownMenu modal>
|
||||||
<DropdownMenuTrigger asChild>
|
<DropdownMenuTrigger asChild>
|
||||||
<div className="flex w-full items-center justify-center rounded-md border border-none border-mineshaft-600 p-1 transition-all">
|
<div className="flex w-full items-center justify-center rounded-md border border-none border-mineshaft-600 p-1 transition-all">
|
||||||
<div className="flex h-8 w-8 items-center justify-center rounded-md bg-primary">
|
<div className="flex h-8 w-8 items-center justify-center rounded-md bg-primary">
|
||||||
@@ -127,7 +167,25 @@ export const MinimizedOrgSidebar = () => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</DropdownMenuTrigger>
|
</DropdownMenuTrigger>
|
||||||
<DropdownMenuContent align="start" className="p-1">
|
<DropdownMenuContent
|
||||||
|
align="start"
|
||||||
|
side="right"
|
||||||
|
className="p-1 shadow-mineshaft-600 drop-shadow-md"
|
||||||
|
style={{ minWidth: "320px" }}
|
||||||
|
>
|
||||||
|
<div className="px-2 py-1">
|
||||||
|
<div className="flex w-full items-center justify-center rounded-md border border-mineshaft-600 p-1 transition-all duration-150 hover:bg-mineshaft-700">
|
||||||
|
<div className="mr-2 flex h-8 w-8 items-center justify-center rounded-md bg-primary text-black">
|
||||||
|
{currentOrg?.name.charAt(0)}
|
||||||
|
</div>
|
||||||
|
<div className="flex flex-grow flex-col text-white">
|
||||||
|
<div className="max-w-36 truncate text-ellipsis text-sm font-medium capitalize">
|
||||||
|
{currentOrg?.name}
|
||||||
|
</div>
|
||||||
|
<div className="text-xs text-mineshaft-400">{getPlan(subscription)}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div className="px-2 py-1 text-xs capitalize text-mineshaft-400">
|
<div className="px-2 py-1 text-xs capitalize text-mineshaft-400">
|
||||||
organizations
|
organizations
|
||||||
</div>
|
</div>
|
||||||
@@ -172,11 +230,6 @@ export const MinimizedOrgSidebar = () => {
|
|||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
<div className="mt-1 h-1 border-t border-mineshaft-600" />
|
<div className="mt-1 h-1 border-t border-mineshaft-600" />
|
||||||
<Link to="/organization/secret-manager/overview">
|
|
||||||
<DropdownMenuItem icon={<FontAwesomeIcon icon={faReply} />}>
|
|
||||||
Home
|
|
||||||
</DropdownMenuItem>
|
|
||||||
</Link>
|
|
||||||
<DropdownMenuItem
|
<DropdownMenuItem
|
||||||
icon={<FontAwesomeIcon icon={faSignOut} />}
|
icon={<FontAwesomeIcon icon={faSignOut} />}
|
||||||
onClick={logOutUser}
|
onClick={logOutUser}
|
||||||
@@ -186,132 +239,112 @@ export const MinimizedOrgSidebar = () => {
|
|||||||
</DropdownMenuContent>
|
</DropdownMenuContent>
|
||||||
</DropdownMenu>
|
</DropdownMenu>
|
||||||
</div>
|
</div>
|
||||||
<div className="px-1">
|
<div className="space-y-1 px-1">
|
||||||
<motion.div
|
<Link to="/organization/secret-manager/overview">
|
||||||
key="menu-icons"
|
{({ isActive }) => (
|
||||||
className="space-y-1"
|
<MenuIconButton
|
||||||
initial={{ x: 300, opacity: 0 }}
|
isSelected={
|
||||||
animate={{ x: 0, opacity: 1 }}
|
isActive ||
|
||||||
exit={{ x: -300, opacity: 0 }}
|
window.location.pathname.startsWith(`/${ProjectType.SecretManager}`)
|
||||||
transition={{ duration: 0.1 }}
|
}
|
||||||
>
|
icon="sliding-carousel"
|
||||||
<DropdownMenu modal>
|
|
||||||
<DropdownMenuTrigger>
|
|
||||||
<MenuIconButton
|
|
||||||
isSelected={window.location.pathname.startsWith(
|
|
||||||
`/${ProjectType.SecretManager}`
|
|
||||||
)}
|
|
||||||
icon="sliding-carousel"
|
|
||||||
>
|
|
||||||
Secret Manager
|
|
||||||
</MenuIconButton>
|
|
||||||
</DropdownMenuTrigger>
|
|
||||||
<DropdownMenuContent
|
|
||||||
side="right"
|
|
||||||
className="px-3 pb-2"
|
|
||||||
style={{ minWidth: "320px" }}
|
|
||||||
>
|
>
|
||||||
<ProjectSwitcher type={ProjectType.SecretManager} />
|
Secret Manager
|
||||||
</DropdownMenuContent>
|
</MenuIconButton>
|
||||||
</DropdownMenu>
|
)}
|
||||||
<DropdownMenu modal>
|
</Link>
|
||||||
<DropdownMenuTrigger>
|
<Link to="/organization/cert-manager/overview">
|
||||||
<MenuIconButton
|
{({ isActive }) => (
|
||||||
isSelected={window.location.pathname.startsWith(
|
<MenuIconButton
|
||||||
`/${ProjectType.CertificateManager}`
|
isSelected={
|
||||||
)}
|
isActive ||
|
||||||
icon="note"
|
window.location.pathname.startsWith(`/${ProjectType.CertificateManager}`)
|
||||||
>
|
}
|
||||||
Cert Manager
|
icon="note"
|
||||||
</MenuIconButton>
|
|
||||||
</DropdownMenuTrigger>
|
|
||||||
<DropdownMenuContent
|
|
||||||
side="right"
|
|
||||||
className="px-3 pb-2"
|
|
||||||
style={{ minWidth: "320px" }}
|
|
||||||
>
|
>
|
||||||
<ProjectSwitcher type={ProjectType.CertificateManager} />
|
Cert Manager
|
||||||
</DropdownMenuContent>
|
</MenuIconButton>
|
||||||
</DropdownMenu>
|
)}
|
||||||
<DropdownMenu modal>
|
</Link>
|
||||||
<DropdownMenuTrigger className="w-full">
|
<Link to="/organization/kms/overview">
|
||||||
<MenuIconButton
|
{({ isActive }) => (
|
||||||
isSelected={window.location.pathname.startsWith(`/${ProjectType.KMS}`)}
|
<MenuIconButton
|
||||||
icon="unlock"
|
isSelected={
|
||||||
>
|
isActive || window.location.pathname.startsWith(`/${ProjectType.KMS}`)
|
||||||
KMS
|
}
|
||||||
</MenuIconButton>
|
icon="unlock"
|
||||||
</DropdownMenuTrigger>
|
|
||||||
<DropdownMenuContent
|
|
||||||
side="right"
|
|
||||||
className="px-3 pb-2"
|
|
||||||
style={{ minWidth: "320px" }}
|
|
||||||
>
|
>
|
||||||
<ProjectSwitcher type={ProjectType.KMS} />
|
KMS
|
||||||
</DropdownMenuContent>
|
</MenuIconButton>
|
||||||
</DropdownMenu>
|
)}
|
||||||
<DropdownMenu modal>
|
</Link>
|
||||||
<DropdownMenuTrigger className="w-full">
|
<Link to="/organization/ssh/overview">
|
||||||
<MenuIconButton
|
{({ isActive }) => (
|
||||||
isSelected={window.location.pathname.startsWith(`/${ProjectType.SSH}`)}
|
<MenuIconButton
|
||||||
icon="verified"
|
isSelected={
|
||||||
>
|
isActive || window.location.pathname.startsWith(`/${ProjectType.SSH}`)
|
||||||
SSH
|
}
|
||||||
</MenuIconButton>
|
icon="verified"
|
||||||
</DropdownMenuTrigger>
|
|
||||||
<DropdownMenuContent
|
|
||||||
side="right"
|
|
||||||
className="px-3 pb-2"
|
|
||||||
style={{ minWidth: "320px" }}
|
|
||||||
>
|
>
|
||||||
<ProjectSwitcher type={ProjectType.SSH} />
|
SSH
|
||||||
</DropdownMenuContent>
|
</MenuIconButton>
|
||||||
</DropdownMenu>
|
)}
|
||||||
<DropdownMenu>
|
</Link>
|
||||||
<DropdownMenuTrigger asChild>
|
<div className="w-full bg-mineshaft-500" style={{ height: "1px" }} />
|
||||||
<div className="w-full">
|
<Link to="/organization/secret-scanning">
|
||||||
<MenuIconButton>
|
{({ isActive }) => (
|
||||||
<div className="flex flex-col items-center justify-center">
|
<MenuIconButton isSelected={isActive} icon="secret-scan">
|
||||||
<FontAwesomeIcon icon={faEllipsis} className="mb-3 text-lg" />
|
Secret Scanning
|
||||||
<span>More</span>
|
</MenuIconButton>
|
||||||
</div>
|
)}
|
||||||
</MenuIconButton>
|
</Link>
|
||||||
</div>
|
<Link to="/organization/secret-sharing">
|
||||||
</DropdownMenuTrigger>
|
{({ isActive }) => (
|
||||||
<DropdownMenuContent align="start" side="right" className="p-1">
|
<MenuIconButton isSelected={isActive} icon="lock-closed">
|
||||||
<DropdownMenuLabel>Organization Options</DropdownMenuLabel>
|
Secret Sharing
|
||||||
<Link to="/organization/access-management">
|
</MenuIconButton>
|
||||||
<DropdownMenuItem icon={<FontAwesomeIcon icon={faUsers} />}>
|
)}
|
||||||
Access Control
|
</Link>
|
||||||
|
<div className="my-1 w-full bg-mineshaft-500" style={{ height: "1px" }} />
|
||||||
|
<DropdownMenu>
|
||||||
|
<DropdownMenuTrigger asChild>
|
||||||
|
<div className="w-full">
|
||||||
|
<MenuIconButton isSelected={isMoreSelected}>
|
||||||
|
<div className="relative flex flex-col items-center justify-center">
|
||||||
|
<FontAwesomeIcon icon={faEllipsis} className="mb-3 text-lg" />
|
||||||
|
<span>More</span>
|
||||||
|
</div>
|
||||||
|
</MenuIconButton>
|
||||||
|
</div>
|
||||||
|
</DropdownMenuTrigger>
|
||||||
|
<DropdownMenuContent align="start" side="right" className="p-1">
|
||||||
|
<DropdownMenuLabel>Organization Options</DropdownMenuLabel>
|
||||||
|
<Link to="/organization/access-management">
|
||||||
|
<DropdownMenuItem icon={<FontAwesomeIcon icon={faUsers} />}>
|
||||||
|
Access Control
|
||||||
|
</DropdownMenuItem>
|
||||||
|
</Link>
|
||||||
|
{(window.location.origin.includes("https://app.infisical.com") ||
|
||||||
|
window.location.origin.includes("https://eu.infisical.com") ||
|
||||||
|
window.location.origin.includes("https://gamma.infisical.com")) && (
|
||||||
|
<Link to="/organization/billing">
|
||||||
|
<DropdownMenuItem icon={<FontAwesomeIcon icon={faMoneyBill} />}>
|
||||||
|
Usage & Billing
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
</Link>
|
</Link>
|
||||||
<Link to="/organization/secret-sharing">
|
)}
|
||||||
<DropdownMenuItem icon={<FontAwesomeIcon icon={faShare} />}>
|
<Link to="/organization/audit-logs">
|
||||||
Secret Sharing
|
<DropdownMenuItem icon={<FontAwesomeIcon icon={faBook} />}>
|
||||||
</DropdownMenuItem>
|
Audit Logs
|
||||||
</Link>
|
</DropdownMenuItem>
|
||||||
{(window.location.origin.includes("https://app.infisical.com") ||
|
</Link>
|
||||||
window.location.origin.includes("https://eu.infisical.com") ||
|
<Link to="/organization/settings">
|
||||||
window.location.origin.includes("https://gamma.infisical.com")) && (
|
<DropdownMenuItem icon={<FontAwesomeIcon icon={faCog} />}>
|
||||||
<Link to="/organization/billing">
|
Organization Settings
|
||||||
<DropdownMenuItem icon={<FontAwesomeIcon icon={faMoneyBill} />}>
|
</DropdownMenuItem>
|
||||||
Usage & Billing
|
</Link>
|
||||||
</DropdownMenuItem>
|
</DropdownMenuContent>
|
||||||
</Link>
|
</DropdownMenu>
|
||||||
)}
|
|
||||||
<Link to="/organization/audit-logs">
|
|
||||||
<DropdownMenuItem icon={<FontAwesomeIcon icon={faBook} />}>
|
|
||||||
Audit Logs
|
|
||||||
</DropdownMenuItem>
|
|
||||||
</Link>
|
|
||||||
<Link to="/organization/settings">
|
|
||||||
<DropdownMenuItem icon={<FontAwesomeIcon icon={faCog} />}>
|
|
||||||
Organization Settings
|
|
||||||
</DropdownMenuItem>
|
|
||||||
</Link>
|
|
||||||
</DropdownMenuContent>
|
|
||||||
</DropdownMenu>
|
|
||||||
</motion.div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
@@ -385,7 +418,19 @@ export const MinimizedOrgSidebar = () => {
|
|||||||
</div>
|
</div>
|
||||||
</DropdownMenuTrigger>
|
</DropdownMenuTrigger>
|
||||||
<DropdownMenuContent align="start" className="p-1">
|
<DropdownMenuContent align="start" className="p-1">
|
||||||
<div className="px-2 py-1 text-xs text-mineshaft-400">{user?.username}</div>
|
<div className="px-2 py-1">
|
||||||
|
<div className="flex w-full items-center justify-center rounded-md border border-mineshaft-600 p-1 transition-all duration-150 hover:bg-mineshaft-700">
|
||||||
|
<div className="p-2">
|
||||||
|
<FontAwesomeIcon icon={faUser} className="text-mineshaft-400" />
|
||||||
|
</div>
|
||||||
|
<div className="flex flex-grow flex-col text-white">
|
||||||
|
<div className="max-w-36 truncate text-ellipsis text-sm font-medium capitalize">
|
||||||
|
{user?.firstName} {user?.lastName}
|
||||||
|
</div>
|
||||||
|
<div className="text-xs text-mineshaft-300">{user.email}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<Link to="/personal-settings">
|
<Link to="/personal-settings">
|
||||||
<DropdownMenuItem>Personal Settings</DropdownMenuItem>
|
<DropdownMenuItem>Personal Settings</DropdownMenuItem>
|
||||||
</Link>
|
</Link>
|
||||||
@@ -1,210 +0,0 @@
|
|||||||
import { faGithub, faSlack } from "@fortawesome/free-brands-svg-icons";
|
|
||||||
import {
|
|
||||||
faArrowUpRightFromSquare,
|
|
||||||
faBook,
|
|
||||||
faEnvelope,
|
|
||||||
faInfinity,
|
|
||||||
faInfo,
|
|
||||||
faPlus,
|
|
||||||
faQuestion,
|
|
||||||
faUser
|
|
||||||
} from "@fortawesome/free-solid-svg-icons";
|
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
||||||
import { Link, useNavigate } from "@tanstack/react-router";
|
|
||||||
|
|
||||||
import { WishForm } from "@app/components/features/WishForm";
|
|
||||||
import {
|
|
||||||
DropdownMenu,
|
|
||||||
DropdownMenuContent,
|
|
||||||
DropdownMenuItem,
|
|
||||||
DropdownMenuTrigger
|
|
||||||
} from "@app/components/v2";
|
|
||||||
import { envConfig } from "@app/config/env";
|
|
||||||
import { useOrganization, useSubscription, useUser } from "@app/context";
|
|
||||||
import { useGetOrgTrialUrl, useLogoutUser } from "@app/hooks/api";
|
|
||||||
|
|
||||||
export const INFISICAL_SUPPORT_OPTIONS = [
|
|
||||||
[
|
|
||||||
<FontAwesomeIcon key={1} className="pr-4 text-sm" icon={faSlack} />,
|
|
||||||
"Support Forum",
|
|
||||||
"https://infisical.com/slack"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
<FontAwesomeIcon key={2} className="pr-4 text-sm" icon={faBook} />,
|
|
||||||
"Read Docs",
|
|
||||||
"https://infisical.com/docs/documentation/getting-started/introduction"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
<FontAwesomeIcon key={3} className="pr-4 text-sm" icon={faGithub} />,
|
|
||||||
"GitHub Issues",
|
|
||||||
"https://github.com/Infisical/infisical/issues"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
<FontAwesomeIcon key={4} className="pr-4 text-sm" icon={faEnvelope} />,
|
|
||||||
"Email Support",
|
|
||||||
"mailto:[email protected]"
|
|
||||||
]
|
|
||||||
];
|
|
||||||
|
|
||||||
export const SidebarFooter = () => {
|
|
||||||
const { subscription } = useSubscription();
|
|
||||||
const { currentOrg } = useOrganization();
|
|
||||||
|
|
||||||
const { mutateAsync } = useGetOrgTrialUrl();
|
|
||||||
|
|
||||||
const { user } = useUser();
|
|
||||||
const navigate = useNavigate();
|
|
||||||
const logout = useLogoutUser();
|
|
||||||
const logOutUser = async () => {
|
|
||||||
try {
|
|
||||||
console.log("Logging out...");
|
|
||||||
await logout.mutateAsync();
|
|
||||||
navigate({ to: "/login" });
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div
|
|
||||||
className={`relative mt-10 ${
|
|
||||||
subscription && subscription.slug === "starter" && !subscription.has_used_trial
|
|
||||||
? "mb-2"
|
|
||||||
: "mb-4"
|
|
||||||
} flex w-full cursor-default flex-col items-center px-2 text-sm text-mineshaft-400`}
|
|
||||||
>
|
|
||||||
{(window.location.origin.includes("https://app.infisical.com") ||
|
|
||||||
window.location.origin.includes("https://gamma.infisical.com")) && <WishForm />}
|
|
||||||
<Link
|
|
||||||
to="/organization/access-management"
|
|
||||||
search={{
|
|
||||||
action: "invite"
|
|
||||||
}}
|
|
||||||
className="w-full"
|
|
||||||
>
|
|
||||||
<div className="mb-3 w-full pl-2 duration-200 hover:text-mineshaft-200">
|
|
||||||
<FontAwesomeIcon icon={faPlus} className="mr-3" />
|
|
||||||
Invite people
|
|
||||||
</div>
|
|
||||||
</Link>
|
|
||||||
<DropdownMenu>
|
|
||||||
<DropdownMenuTrigger className="w-full">
|
|
||||||
<div className="mb-4 flex w-full items-center pl-2 duration-200 hover:text-mineshaft-200">
|
|
||||||
<FontAwesomeIcon icon={faQuestion} className="mr-3 px-[0.1rem]" />
|
|
||||||
Help & Support
|
|
||||||
</div>
|
|
||||||
</DropdownMenuTrigger>
|
|
||||||
<DropdownMenuContent align="start" className="p-1">
|
|
||||||
{INFISICAL_SUPPORT_OPTIONS.map(([icon, text, url]) => (
|
|
||||||
<DropdownMenuItem key={url as string}>
|
|
||||||
<a
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
href={String(url)}
|
|
||||||
className="flex w-full items-center rounded-md font-normal text-mineshaft-300 duration-200"
|
|
||||||
>
|
|
||||||
<div className="relative flex w-full cursor-pointer select-none items-center justify-start rounded-md">
|
|
||||||
{icon}
|
|
||||||
<div className="text-sm">{text}</div>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</DropdownMenuItem>
|
|
||||||
))}
|
|
||||||
{envConfig.PLATFORM_VERSION && (
|
|
||||||
<div className="mb-2 mt-2 w-full cursor-default pl-5 text-sm duration-200 hover:text-mineshaft-200">
|
|
||||||
<FontAwesomeIcon icon={faInfo} className="mr-4 px-[0.1rem]" />
|
|
||||||
Version: {envConfig.PLATFORM_VERSION}
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
</DropdownMenuContent>
|
|
||||||
</DropdownMenu>
|
|
||||||
{subscription && subscription.slug === "starter" && !subscription.has_used_trial && (
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
onClick={async () => {
|
|
||||||
if (!subscription || !currentOrg) return;
|
|
||||||
|
|
||||||
// direct user to start pro trial
|
|
||||||
const url = await mutateAsync({
|
|
||||||
orgId: currentOrg.id,
|
|
||||||
success_url: window.location.href
|
|
||||||
});
|
|
||||||
|
|
||||||
window.location.href = url;
|
|
||||||
}}
|
|
||||||
className="mt-1.5 w-full"
|
|
||||||
>
|
|
||||||
<div className="justify-left mb-1.5 mt-1.5 flex w-full items-center rounded-md bg-mineshaft-600 py-1 pl-4 text-mineshaft-300 duration-200 hover:bg-mineshaft-500 hover:text-primary-400">
|
|
||||||
<FontAwesomeIcon icon={faInfinity} className="ml-0.5 mr-3 py-2 text-primary" />
|
|
||||||
Start Free Pro Trial
|
|
||||||
</div>
|
|
||||||
</button>
|
|
||||||
)}
|
|
||||||
<DropdownMenu>
|
|
||||||
<DropdownMenuTrigger asChild className="w-full">
|
|
||||||
<div className="flex w-full cursor-pointer items-center rounded-md border border-mineshaft-600 p-2 px-1">
|
|
||||||
<div className="mr-2 flex h-6 w-6 items-center justify-center rounded-md bg-primary text-sm uppercase">
|
|
||||||
{user?.firstName?.charAt(0)}
|
|
||||||
</div>
|
|
||||||
<div className="max-w-40 flex-grow truncate text-ellipsis text-left text-sm capitalize text-white">
|
|
||||||
{user?.firstName} {user?.lastName}
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<FontAwesomeIcon icon={faUser} className="text-xs text-mineshaft-400" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</DropdownMenuTrigger>
|
|
||||||
<DropdownMenuContent align="start" className="p-1">
|
|
||||||
<div className="px-2 py-1 text-xs text-mineshaft-400">{user?.username}</div>
|
|
||||||
<Link to="/personal-settings">
|
|
||||||
<DropdownMenuItem>Personal Settings</DropdownMenuItem>
|
|
||||||
</Link>
|
|
||||||
<a
|
|
||||||
href="https://infisical.com/docs/documentation/getting-started/introduction"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
className="mt-3 w-full text-sm font-normal leading-[1.2rem] text-mineshaft-300 hover:text-mineshaft-100"
|
|
||||||
>
|
|
||||||
<DropdownMenuItem>
|
|
||||||
Documentation
|
|
||||||
<FontAwesomeIcon
|
|
||||||
icon={faArrowUpRightFromSquare}
|
|
||||||
className="mb-[0.06rem] pl-1.5 text-xxs"
|
|
||||||
/>
|
|
||||||
</DropdownMenuItem>
|
|
||||||
</a>
|
|
||||||
<a
|
|
||||||
href="https://infisical.com/slack"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
className="mt-3 w-full text-sm font-normal leading-[1.2rem] text-mineshaft-300 hover:text-mineshaft-100"
|
|
||||||
>
|
|
||||||
<DropdownMenuItem>
|
|
||||||
Join Slack Community
|
|
||||||
<FontAwesomeIcon
|
|
||||||
icon={faArrowUpRightFromSquare}
|
|
||||||
className="mb-[0.06rem] pl-1.5 text-xxs"
|
|
||||||
/>
|
|
||||||
</DropdownMenuItem>
|
|
||||||
</a>
|
|
||||||
{user?.superAdmin && (
|
|
||||||
<Link to="/admin">
|
|
||||||
<DropdownMenuItem className="mt-1 border-t border-mineshaft-600">
|
|
||||||
Server Admin Console
|
|
||||||
</DropdownMenuItem>
|
|
||||||
</Link>
|
|
||||||
)}
|
|
||||||
<Link to="/organization/admin">
|
|
||||||
<DropdownMenuItem className="mt-1 border-t border-mineshaft-600">
|
|
||||||
Organization Admin Console
|
|
||||||
</DropdownMenuItem>
|
|
||||||
</Link>
|
|
||||||
<div className="mt-1 h-1 border-t border-mineshaft-600" />
|
|
||||||
<button type="button" onClick={logOutUser} className="w-full">
|
|
||||||
<DropdownMenuItem>Log Out</DropdownMenuItem>
|
|
||||||
</button>
|
|
||||||
</DropdownMenuContent>
|
|
||||||
</DropdownMenu>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
export { SidebarFooter } from "./SidebarFooter";
|
|
||||||
+11
-95
@@ -1,22 +1,5 @@
|
|||||||
import { faCheck, faSignOut, faSort } from "@fortawesome/free-solid-svg-icons";
|
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
||||||
import { useNavigate } from "@tanstack/react-router";
|
|
||||||
|
|
||||||
import {
|
|
||||||
Button,
|
|
||||||
DropdownMenu,
|
|
||||||
DropdownMenuContent,
|
|
||||||
DropdownMenuItem,
|
|
||||||
DropdownMenuTrigger
|
|
||||||
} from "@app/components/v2";
|
|
||||||
import { useOrganization, useSubscription } from "@app/context";
|
import { useOrganization, useSubscription } from "@app/context";
|
||||||
import { useGetOrganizations, useLogoutUser } from "@app/hooks/api";
|
|
||||||
import { SubscriptionPlan } from "@app/hooks/api/types";
|
import { SubscriptionPlan } from "@app/hooks/api/types";
|
||||||
import { AuthMethod } from "@app/hooks/api/users/types";
|
|
||||||
|
|
||||||
type Prop = {
|
|
||||||
onChangeOrg: (orgId: string) => void;
|
|
||||||
};
|
|
||||||
|
|
||||||
const getPlan = (subscription: SubscriptionPlan) => {
|
const getPlan = (subscription: SubscriptionPlan) => {
|
||||||
if (subscription.dynamicSecret) return "Enterprise Plan";
|
if (subscription.dynamicSecret) return "Enterprise Plan";
|
||||||
@@ -24,88 +7,21 @@ const getPlan = (subscription: SubscriptionPlan) => {
|
|||||||
return "Free Plan";
|
return "Free Plan";
|
||||||
};
|
};
|
||||||
|
|
||||||
export const SidebarHeader = ({ onChangeOrg }: Prop) => {
|
export const SidebarHeader = () => {
|
||||||
const { currentOrg } = useOrganization();
|
const { currentOrg } = useOrganization();
|
||||||
const navigate = useNavigate();
|
|
||||||
const { data: orgs } = useGetOrganizations();
|
|
||||||
const { subscription } = useSubscription();
|
const { subscription } = useSubscription();
|
||||||
|
|
||||||
const logout = useLogoutUser();
|
|
||||||
const logOutUser = async () => {
|
|
||||||
try {
|
|
||||||
console.log("Logging out...");
|
|
||||||
await logout.mutateAsync();
|
|
||||||
navigate({ to: "/login" });
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex cursor-pointer items-center p-2 pt-4">
|
<div className="flex w-full items-center justify-center rounded-md border border-mineshaft-600 p-1 transition-all duration-150 hover:bg-mineshaft-700">
|
||||||
<DropdownMenu>
|
<div className="mr-2 flex h-8 w-8 items-center justify-center rounded-md bg-primary">
|
||||||
<DropdownMenuTrigger asChild>
|
{currentOrg?.name.charAt(0)}
|
||||||
<div className="flex w-full items-center justify-center rounded-md border border-mineshaft-600 p-1 transition-all duration-150 hover:bg-mineshaft-700">
|
</div>
|
||||||
<div className="mr-2 flex h-8 w-8 items-center justify-center rounded-md bg-primary">
|
<div className="flex flex-grow flex-col text-white">
|
||||||
{currentOrg?.name.charAt(0)}
|
<div className="max-w-36 truncate text-ellipsis text-sm font-medium capitalize">
|
||||||
</div>
|
{currentOrg?.name}
|
||||||
<div className="flex flex-grow flex-col text-white">
|
</div>
|
||||||
<div className="max-w-36 truncate text-ellipsis text-sm font-medium capitalize">
|
<div className="text-xs text-mineshaft-400">{getPlan(subscription)}</div>
|
||||||
{currentOrg?.name}
|
</div>
|
||||||
</div>
|
|
||||||
<div className="text-xs text-mineshaft-400">{getPlan(subscription)}</div>
|
|
||||||
</div>
|
|
||||||
<FontAwesomeIcon icon={faSort} className="text-xs text-mineshaft-400" />
|
|
||||||
</div>
|
|
||||||
</DropdownMenuTrigger>
|
|
||||||
<DropdownMenuContent align="start" className="p-1">
|
|
||||||
<div className="px-2 py-1 text-xs capitalize text-mineshaft-400">organizations</div>
|
|
||||||
{orgs?.map((org) => {
|
|
||||||
return (
|
|
||||||
<DropdownMenuItem key={org.id}>
|
|
||||||
<Button
|
|
||||||
onClick={async () => {
|
|
||||||
if (currentOrg?.id === org.id) return;
|
|
||||||
|
|
||||||
if (org.authEnforced) {
|
|
||||||
// org has an org-level auth method enabled (e.g. SAML)
|
|
||||||
// -> logout + redirect to SAML SSO
|
|
||||||
|
|
||||||
await logout.mutateAsync();
|
|
||||||
if (org.orgAuthMethod === AuthMethod.OIDC) {
|
|
||||||
window.open(`/api/v1/sso/oidc/login?orgSlug=${org.slug}`);
|
|
||||||
} else {
|
|
||||||
window.open(`/api/v1/sso/redirect/saml2/organizations/${org.slug}`);
|
|
||||||
}
|
|
||||||
window.close();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
onChangeOrg(org?.id);
|
|
||||||
}}
|
|
||||||
variant="plain"
|
|
||||||
colorSchema="secondary"
|
|
||||||
size="xs"
|
|
||||||
className="flex w-full items-center justify-start p-0 font-normal"
|
|
||||||
leftIcon={
|
|
||||||
currentOrg?.id === org.id && (
|
|
||||||
<FontAwesomeIcon icon={faCheck} className="mr-3 text-primary" />
|
|
||||||
)
|
|
||||||
}
|
|
||||||
>
|
|
||||||
<div className="flex w-full max-w-[150px] items-center justify-between truncate">
|
|
||||||
{org.name}
|
|
||||||
</div>
|
|
||||||
</Button>
|
|
||||||
</DropdownMenuItem>
|
|
||||||
);
|
|
||||||
})}
|
|
||||||
<div className="mt-1 h-1 border-t border-mineshaft-600" />
|
|
||||||
<DropdownMenuItem onClick={logOutUser} icon={<FontAwesomeIcon icon={faSignOut} />}>
|
|
||||||
Log Out
|
|
||||||
</DropdownMenuItem>
|
|
||||||
</DropdownMenuContent>
|
|
||||||
</DropdownMenu>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import { envConfig } from "@app/config/env";
|
|||||||
import { ProjectType } from "@app/hooks/api/workspace/types";
|
import { ProjectType } from "@app/hooks/api/workspace/types";
|
||||||
|
|
||||||
import { InsecureConnectionBanner } from "../OrganizationLayout/components/InsecureConnectionBanner";
|
import { InsecureConnectionBanner } from "../OrganizationLayout/components/InsecureConnectionBanner";
|
||||||
import { INFISICAL_SUPPORT_OPTIONS } from "../OrganizationLayout/components/SidebarFooter/SidebarFooter";
|
import { INFISICAL_SUPPORT_OPTIONS } from "../OrganizationLayout/components/MinimizedOrgSidebar/MinimizedOrgSidebar";
|
||||||
|
|
||||||
export const PersonalSettingsLayout = () => {
|
export const PersonalSettingsLayout = () => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { useTranslation } from "react-i18next";
|
|||||||
import { faMobile } from "@fortawesome/free-solid-svg-icons";
|
import { faMobile } from "@fortawesome/free-solid-svg-icons";
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
import { Link, Outlet, useRouterState } from "@tanstack/react-router";
|
import { Link, Outlet, useRouterState } from "@tanstack/react-router";
|
||||||
|
import { motion } from "framer-motion";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
BreadcrumbContainer,
|
BreadcrumbContainer,
|
||||||
@@ -14,8 +15,6 @@ import { useWorkspace } from "@app/context";
|
|||||||
import { useGetAccessRequestsCount, useGetSecretApprovalRequestCount } from "@app/hooks/api";
|
import { useGetAccessRequestsCount, useGetSecretApprovalRequestCount } from "@app/hooks/api";
|
||||||
import { ProjectType } from "@app/hooks/api/workspace/types";
|
import { ProjectType } from "@app/hooks/api/workspace/types";
|
||||||
|
|
||||||
import { InsecureConnectionBanner } from "../OrganizationLayout/components/InsecureConnectionBanner";
|
|
||||||
import { MinimizedOrgSidebar } from "./components/MinimizedOrgSidebar";
|
|
||||||
import { ProjectSelect } from "./components/ProjectSelect";
|
import { ProjectSelect } from "./components/ProjectSelect";
|
||||||
|
|
||||||
// This is a generic layout shared by all types of projects.
|
// This is a generic layout shared by all types of projects.
|
||||||
@@ -49,10 +48,15 @@ export const ProjectLayout = () => {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className="dark hidden h-screen w-full flex-col overflow-x-hidden md:flex">
|
<div className="dark hidden h-screen w-full flex-col overflow-x-hidden md:flex">
|
||||||
{!window.isSecureContext && <InsecureConnectionBanner />}
|
|
||||||
<div className="flex flex-grow flex-col overflow-y-hidden md:flex-row">
|
<div className="flex flex-grow flex-col overflow-y-hidden md:flex-row">
|
||||||
<MinimizedOrgSidebar />
|
<motion.div
|
||||||
<aside 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">
|
key="menu-project-items"
|
||||||
|
initial={{ x: -150 }}
|
||||||
|
animate={{ x: 0 }}
|
||||||
|
exit={{ x: -150 }}
|
||||||
|
transition={{ duration: 0.2 }}
|
||||||
|
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"
|
||||||
|
>
|
||||||
<nav className="items-between flex h-full flex-col justify-between overflow-y-auto dark:[color-scheme:dark]">
|
<nav className="items-between flex h-full flex-col justify-between overflow-y-auto dark:[color-scheme:dark]">
|
||||||
<div>
|
<div>
|
||||||
<ProjectSelect />
|
<ProjectSelect />
|
||||||
@@ -196,13 +200,13 @@ export const ProjectLayout = () => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
</aside>
|
</motion.div>
|
||||||
<main className="flex-1 overflow-y-auto overflow-x-hidden bg-bunker-800 px-4 pb-4 dark:[color-scheme:dark]">
|
<div className="flex-1 overflow-y-auto overflow-x-hidden bg-bunker-800 px-4 pb-4 dark:[color-scheme:dark]">
|
||||||
{breadcrumbs ? (
|
{breadcrumbs ? (
|
||||||
<BreadcrumbContainer breadcrumbs={breadcrumbs as TBreadcrumbFormat[]} />
|
<BreadcrumbContainer breadcrumbs={breadcrumbs as TBreadcrumbFormat[]} />
|
||||||
) : null}
|
) : null}
|
||||||
<Outlet />
|
<Outlet />
|
||||||
</main>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="z-[200] flex h-screen w-screen flex-col items-center justify-center bg-bunker-800 md:hidden">
|
<div className="z-[200] flex h-screen w-screen flex-col items-center justify-center bg-bunker-800 md:hidden">
|
||||||
|
|||||||
@@ -1,59 +0,0 @@
|
|||||||
import { useState } from "react";
|
|
||||||
import { faExternalLink, faSearch } from "@fortawesome/free-solid-svg-icons";
|
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
||||||
import { Link } from "@tanstack/react-router";
|
|
||||||
|
|
||||||
import { DropdownMenuItem, EmptyState, Input } from "@app/components/v2";
|
|
||||||
import { getProjectTitle } from "@app/helpers/project";
|
|
||||||
import { useGetUserWorkspaces } from "@app/hooks/api";
|
|
||||||
import { ProjectType } from "@app/hooks/api/workspace/types";
|
|
||||||
|
|
||||||
type Props = {
|
|
||||||
type: ProjectType;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const ProjectSwitcher = ({ type }: Props) => {
|
|
||||||
const { data: workspaces, isPending } = useGetUserWorkspaces({ type });
|
|
||||||
const [search, setSearch] = useState("");
|
|
||||||
|
|
||||||
const filteredWorkspaces = workspaces?.filter((el) =>
|
|
||||||
el.name.toLowerCase().includes(search.toLowerCase())
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<Link to={`/organization/${type}/overview` as const}>
|
|
||||||
<div className="py-2 text-xs capitalize text-bunker-300">
|
|
||||||
{getProjectTitle(type)} projects
|
|
||||||
<FontAwesomeIcon icon={faExternalLink} size="xs" className="ml-1" />
|
|
||||||
</div>
|
|
||||||
</Link>
|
|
||||||
<div className="w-full pb-2">
|
|
||||||
<Input
|
|
||||||
leftIcon={<FontAwesomeIcon icon={faSearch} />}
|
|
||||||
value={search}
|
|
||||||
onChange={(evt) => setSearch(evt.target.value)}
|
|
||||||
size="xs"
|
|
||||||
placeholder="Search by name"
|
|
||||||
className=""
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="thin-scrollbar max-h-64 overflow-auto">
|
|
||||||
{filteredWorkspaces?.map((el) => (
|
|
||||||
<Link
|
|
||||||
to={`/${type}/$projectId/overview` as const}
|
|
||||||
params={{ projectId: el.id }}
|
|
||||||
key={el.id}
|
|
||||||
>
|
|
||||||
<DropdownMenuItem>
|
|
||||||
<span className="capitalize">{el.name}</span>
|
|
||||||
</DropdownMenuItem>
|
|
||||||
</Link>
|
|
||||||
))}
|
|
||||||
{!isPending && !filteredWorkspaces?.length && (
|
|
||||||
<EmptyState title="No project found" iconSize="1x" />
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { CertAuthDetailsByIDPage } from "./CertAuthDetailsByIDPage";
|
import { CertAuthDetailsByIDPage } from "./CertAuthDetailsByIDPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/cert-manager/$projectId/_cert-manager-layout/ca/$caId"
|
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/ca/$caId"
|
||||||
)({
|
)({
|
||||||
component: CertAuthDetailsByIDPage,
|
component: CertAuthDetailsByIDPage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute } from "@tanstack/react-router";
|
|||||||
import { CertificatesPage } from "./CertificatesPage";
|
import { CertificatesPage } from "./CertificatesPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/cert-manager/$projectId/_cert-manager-layout/overview"
|
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/overview"
|
||||||
)({
|
)({
|
||||||
component: CertificatesPage
|
component: CertificatesPage
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { PkiCollectionDetailsByIDPage } from "./PkiCollectionDetailsByIDPage";
|
import { PkiCollectionDetailsByIDPage } from "./PkiCollectionDetailsByIDPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/cert-manager/$projectId/_cert-manager-layout/pki-collections/$collectionId"
|
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/pki-collections/$collectionId"
|
||||||
)({
|
)({
|
||||||
component: PkiCollectionDetailsByIDPage,
|
component: PkiCollectionDetailsByIDPage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute } from "@tanstack/react-router";
|
|||||||
import { SettingsPage } from "./SettingsPage";
|
import { SettingsPage } from "./SettingsPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/cert-manager/$projectId/_cert-manager-layout/settings"
|
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/settings"
|
||||||
)({
|
)({
|
||||||
component: SettingsPage,
|
component: SettingsPage,
|
||||||
beforeLoad: ({ context }) => {
|
beforeLoad: ({ context }) => {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { fetchWorkspaceById } from "@app/hooks/api/workspace/queries";
|
|||||||
import { ProjectLayout } from "@app/layouts/ProjectLayout";
|
import { ProjectLayout } from "@app/layouts/ProjectLayout";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/cert-manager/$projectId/_cert-manager-layout"
|
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout"
|
||||||
)({
|
)({
|
||||||
component: ProjectLayout,
|
component: ProjectLayout,
|
||||||
beforeLoad: async ({ params, context }) => {
|
beforeLoad: async ({ params, context }) => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute } from "@tanstack/react-router";
|
|||||||
import { OverviewPage } from "./OverviewPage";
|
import { OverviewPage } from "./OverviewPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/kms/$projectId/_kms-layout/overview"
|
"/_authenticate/_inject-org-details/_org-layout/kms/$projectId/_kms-layout/overview"
|
||||||
)({
|
)({
|
||||||
component: OverviewPage
|
component: OverviewPage
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute } from "@tanstack/react-router";
|
|||||||
import { SettingsPage } from "./SettingsPage";
|
import { SettingsPage } from "./SettingsPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/kms/$projectId/_kms-layout/settings"
|
"/_authenticate/_inject-org-details/_org-layout/kms/$projectId/_kms-layout/settings"
|
||||||
)({
|
)({
|
||||||
component: SettingsPage,
|
component: SettingsPage,
|
||||||
beforeLoad: ({ context }) => {
|
beforeLoad: ({ context }) => {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { fetchWorkspaceById } from "@app/hooks/api/workspace/queries";
|
|||||||
import { ProjectLayout } from "@app/layouts/ProjectLayout";
|
import { ProjectLayout } from "@app/layouts/ProjectLayout";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/kms/$projectId/_kms-layout"
|
"/_authenticate/_inject-org-details/_org-layout/kms/$projectId/_kms-layout"
|
||||||
)({
|
)({
|
||||||
component: ProjectLayout,
|
component: ProjectLayout,
|
||||||
beforeLoad: async ({ params, context }) => {
|
beforeLoad: async ({ params, context }) => {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ const AccessControlPageQuerySchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/access-management"
|
"/_authenticate/_inject-org-details/_org-layout/organization/access-management"
|
||||||
)({
|
)({
|
||||||
component: AccessManagementPage,
|
component: AccessManagementPage,
|
||||||
validateSearch: zodValidator(AccessControlPageQuerySchema),
|
validateSearch: zodValidator(AccessControlPageQuerySchema),
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { AdminPage } from "./AdminPage";
|
import { AdminPage } from "./AdminPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/admin"
|
"/_authenticate/_inject-org-details/_org-layout/organization/admin"
|
||||||
)({
|
)({
|
||||||
component: AdminPage,
|
component: AdminPage,
|
||||||
context: () => ({
|
context: () => ({
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const GitHubOAuthCallbackPageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/app-connections/github/oauth/callback"
|
"/_authenticate/_inject-org-details/_org-layout/organization/app-connections/github/oauth/callback"
|
||||||
)({
|
)({
|
||||||
component: GitHubOAuthCallbackPage,
|
component: GitHubOAuthCallbackPage,
|
||||||
validateSearch: zodValidator(GitHubOAuthCallbackPageQueryParamsSchema),
|
validateSearch: zodValidator(GitHubOAuthCallbackPageQueryParamsSchema),
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { AuditLogsPage } from "./AuditLogsPage";
|
import { AuditLogsPage } from "./AuditLogsPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/audit-logs"
|
"/_authenticate/_inject-org-details/_org-layout/organization/audit-logs"
|
||||||
)({
|
)({
|
||||||
component: AuditLogsPage,
|
component: AuditLogsPage,
|
||||||
context: () => ({
|
context: () => ({
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute } from "@tanstack/react-router";
|
|||||||
import { BillingPage } from "./BillingPage";
|
import { BillingPage } from "./BillingPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/billing"
|
"/_authenticate/_inject-org-details/_org-layout/organization/billing"
|
||||||
)({
|
)({
|
||||||
component: BillingPage
|
component: BillingPage
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { CertManagerOverviewPage } from "./CertManagerOverviewPage";
|
import { CertManagerOverviewPage } from "./CertManagerOverviewPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/cert-manager/overview"
|
"/_authenticate/_inject-org-details/_org-layout/organization/cert-manager/overview"
|
||||||
)({
|
)({
|
||||||
component: CertManagerOverviewPage,
|
component: CertManagerOverviewPage,
|
||||||
context: () => ({
|
context: () => ({
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { GroupDetailsByIDPage } from "./GroupDetailsByIDPage";
|
import { GroupDetailsByIDPage } from "./GroupDetailsByIDPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/groups/$groupId"
|
"/_authenticate/_inject-org-details/_org-layout/organization/groups/$groupId"
|
||||||
)({
|
)({
|
||||||
component: GroupDetailsByIDPage,
|
component: GroupDetailsByIDPage,
|
||||||
context: () => ({
|
context: () => ({
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { IdentityDetailsByIDPage } from "./IdentityDetailsByIDPage";
|
import { IdentityDetailsByIDPage } from "./IdentityDetailsByIDPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/identities/$identityId"
|
"/_authenticate/_inject-org-details/_org-layout/organization/identities/$identityId"
|
||||||
)({
|
)({
|
||||||
component: IdentityDetailsByIDPage,
|
component: IdentityDetailsByIDPage,
|
||||||
context: () => ({
|
context: () => ({
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { KmsOverviewPage } from "./KmsOverviewPage";
|
import { KmsOverviewPage } from "./KmsOverviewPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/kms/overview"
|
"/_authenticate/_inject-org-details/_org-layout/organization/kms/overview"
|
||||||
)({
|
)({
|
||||||
component: KmsOverviewPage,
|
component: KmsOverviewPage,
|
||||||
context: () => ({
|
context: () => ({
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute } from "@tanstack/react-router";
|
|||||||
import { NoOrgPage } from "./NoOrgPage";
|
import { NoOrgPage } from "./NoOrgPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/none"
|
"/_authenticate/_inject-org-details/_org-layout/organization/none"
|
||||||
)({
|
)({
|
||||||
component: NoOrgPage
|
component: NoOrgPage
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { RoleByIDPage } from "./RoleByIDPage";
|
import { RoleByIDPage } from "./RoleByIDPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/roles/$roleId"
|
"/_authenticate/_inject-org-details/_org-layout/organization/roles/$roleId"
|
||||||
)({
|
)({
|
||||||
component: RoleByIDPage,
|
component: RoleByIDPage,
|
||||||
context: () => ({
|
context: () => ({
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { createFileRoute } from "@tanstack/react-router";
|
|||||||
import { SecretManagerOverviewPage } from "./SecretManagerOverviewPage";
|
import { SecretManagerOverviewPage } from "./SecretManagerOverviewPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/secret-manager/overview"
|
"/_authenticate/_inject-org-details/_org-layout/organization/secret-manager/overview"
|
||||||
)({
|
)({
|
||||||
component: SecretManagerOverviewPage,
|
component: SecretManagerOverviewPage,
|
||||||
context: () => ({
|
context: () => ({
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ const SecretScanningQueryParams = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/secret-scanning"
|
"/_authenticate/_inject-org-details/_org-layout/organization/secret-scanning"
|
||||||
)({
|
)({
|
||||||
validateSearch: zodValidator(SecretScanningQueryParams),
|
validateSearch: zodValidator(SecretScanningQueryParams),
|
||||||
component: SecretScanningPage,
|
component: SecretScanningPage,
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { SecretSharingPage } from "./SecretSharingPage";
|
import { SecretSharingPage } from "./SecretSharingPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/secret-sharing"
|
"/_authenticate/_inject-org-details/_org-layout/organization/secret-sharing"
|
||||||
)({
|
)({
|
||||||
component: SecretSharingPage,
|
component: SecretSharingPage,
|
||||||
context: () => ({
|
context: () => ({
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const SettingsPageQueryParams = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/settings"
|
"/_authenticate/_inject-org-details/_org-layout/organization/settings"
|
||||||
)({
|
)({
|
||||||
component: SettingsPage,
|
component: SettingsPage,
|
||||||
validateSearch: zodValidator(SettingsPageQueryParams),
|
validateSearch: zodValidator(SettingsPageQueryParams),
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { SshOverviewPage } from "./SshOverviewPage";
|
import { SshOverviewPage } from "./SshOverviewPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/ssh/overview"
|
"/_authenticate/_inject-org-details/_org-layout/organization/ssh/overview"
|
||||||
)({
|
)({
|
||||||
component: SshOverviewPage,
|
component: SshOverviewPage,
|
||||||
context: () => ({
|
context: () => ({
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { UserDetailsByIDPage } from "./UserDetailsByIDPage";
|
import { UserDetailsByIDPage } from "./UserDetailsByIDPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/organization/_layout/members/$membershipId"
|
"/_authenticate/_inject-org-details/_org-layout/organization/members/$membershipId"
|
||||||
)({
|
)({
|
||||||
component: UserDetailsByIDPage,
|
component: UserDetailsByIDPage,
|
||||||
context: () => ({
|
context: () => ({
|
||||||
|
|||||||
@@ -2,6 +2,6 @@ import { createFileRoute } from "@tanstack/react-router";
|
|||||||
|
|
||||||
import { OrganizationLayout } from "@app/layouts/OrganizationLayout";
|
import { OrganizationLayout } from "@app/layouts/OrganizationLayout";
|
||||||
|
|
||||||
export const Route = createFileRoute("/_authenticate/_inject-org-details/organization/_layout")({
|
export const Route = createFileRoute("/_authenticate/_inject-org-details/_org-layout")({
|
||||||
component: OrganizationLayout
|
component: OrganizationLayout
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const AccessControlPageQuerySchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/cert-manager/$projectId/_cert-manager-layout/access-management"
|
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/access-management"
|
||||||
)({
|
)({
|
||||||
component: AccessControlPage,
|
component: AccessControlPage,
|
||||||
validateSearch: zodValidator(AccessControlPageQuerySchema),
|
validateSearch: zodValidator(AccessControlPageQuerySchema),
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const AccessControlPageQuerySchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/kms/$projectId/_kms-layout/access-management"
|
"/_authenticate/_inject-org-details/_org-layout/kms/$projectId/_kms-layout/access-management"
|
||||||
)({
|
)({
|
||||||
component: AccessControlPage,
|
component: AccessControlPage,
|
||||||
validateSearch: zodValidator(AccessControlPageQuerySchema),
|
validateSearch: zodValidator(AccessControlPageQuerySchema),
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const AccessControlPageQuerySchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/access-management"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/access-management"
|
||||||
)({
|
)({
|
||||||
component: AccessControlPage,
|
component: AccessControlPage,
|
||||||
validateSearch: zodValidator(AccessControlPageQuerySchema),
|
validateSearch: zodValidator(AccessControlPageQuerySchema),
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const AccessControlPageQuerySchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/ssh/$projectId/_ssh-layout/access-management"
|
"/_authenticate/_inject-org-details/_org-layout/ssh/$projectId/_ssh-layout/access-management"
|
||||||
)({
|
)({
|
||||||
component: AccessControlPage,
|
component: AccessControlPage,
|
||||||
validateSearch: zodValidator(AccessControlPageQuerySchema),
|
validateSearch: zodValidator(AccessControlPageQuerySchema),
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { IdentityDetailsByIDPage } from "./IdentityDetailsByIDPage";
|
import { IdentityDetailsByIDPage } from "./IdentityDetailsByIDPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/cert-manager/$projectId/_cert-manager-layout/identities/$identityId"
|
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/identities/$identityId"
|
||||||
)({
|
)({
|
||||||
component: IdentityDetailsByIDPage,
|
component: IdentityDetailsByIDPage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { IdentityDetailsByIDPage } from "./IdentityDetailsByIDPage";
|
import { IdentityDetailsByIDPage } from "./IdentityDetailsByIDPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/kms/$projectId/_kms-layout/identities/$identityId"
|
"/_authenticate/_inject-org-details/_org-layout/kms/$projectId/_kms-layout/identities/$identityId"
|
||||||
)({
|
)({
|
||||||
component: IdentityDetailsByIDPage,
|
component: IdentityDetailsByIDPage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { IdentityDetailsByIDPage } from "./IdentityDetailsByIDPage";
|
import { IdentityDetailsByIDPage } from "./IdentityDetailsByIDPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/identities/$identityId"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/identities/$identityId"
|
||||||
)({
|
)({
|
||||||
component: IdentityDetailsByIDPage,
|
component: IdentityDetailsByIDPage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { IdentityDetailsByIDPage } from "./IdentityDetailsByIDPage";
|
import { IdentityDetailsByIDPage } from "./IdentityDetailsByIDPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/ssh/$projectId/_ssh-layout/identities/$identityId"
|
"/_authenticate/_inject-org-details/_org-layout/ssh/$projectId/_ssh-layout/identities/$identityId"
|
||||||
)({
|
)({
|
||||||
component: IdentityDetailsByIDPage,
|
component: IdentityDetailsByIDPage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { MemberDetailsByIDPage } from "./MemberDetailsByIDPage";
|
import { MemberDetailsByIDPage } from "./MemberDetailsByIDPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/cert-manager/$projectId/_cert-manager-layout/members/$membershipId"
|
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/members/$membershipId"
|
||||||
)({
|
)({
|
||||||
component: MemberDetailsByIDPage,
|
component: MemberDetailsByIDPage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { MemberDetailsByIDPage } from "./MemberDetailsByIDPage";
|
import { MemberDetailsByIDPage } from "./MemberDetailsByIDPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/kms/$projectId/_kms-layout/members/$membershipId"
|
"/_authenticate/_inject-org-details/_org-layout/kms/$projectId/_kms-layout/members/$membershipId"
|
||||||
)({
|
)({
|
||||||
component: MemberDetailsByIDPage,
|
component: MemberDetailsByIDPage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { MemberDetailsByIDPage } from "./MemberDetailsByIDPage";
|
import { MemberDetailsByIDPage } from "./MemberDetailsByIDPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/members/$membershipId"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/members/$membershipId"
|
||||||
)({
|
)({
|
||||||
component: MemberDetailsByIDPage,
|
component: MemberDetailsByIDPage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { MemberDetailsByIDPage } from "./MemberDetailsByIDPage";
|
import { MemberDetailsByIDPage } from "./MemberDetailsByIDPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/ssh/$projectId/_ssh-layout/members/$membershipId"
|
"/_authenticate/_inject-org-details/_org-layout/ssh/$projectId/_ssh-layout/members/$membershipId"
|
||||||
)({
|
)({
|
||||||
component: MemberDetailsByIDPage,
|
component: MemberDetailsByIDPage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { RoleDetailsBySlugPage } from "./RoleDetailsBySlugPage";
|
import { RoleDetailsBySlugPage } from "./RoleDetailsBySlugPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/cert-manager/$projectId/_cert-manager-layout/roles/$roleSlug"
|
"/_authenticate/_inject-org-details/_org-layout/cert-manager/$projectId/_cert-manager-layout/roles/$roleSlug"
|
||||||
)({
|
)({
|
||||||
component: RoleDetailsBySlugPage,
|
component: RoleDetailsBySlugPage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { RoleDetailsBySlugPage } from "./RoleDetailsBySlugPage";
|
import { RoleDetailsBySlugPage } from "./RoleDetailsBySlugPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/kms/$projectId/_kms-layout/roles/$roleSlug"
|
"/_authenticate/_inject-org-details/_org-layout/kms/$projectId/_kms-layout/roles/$roleSlug"
|
||||||
)({
|
)({
|
||||||
component: RoleDetailsBySlugPage,
|
component: RoleDetailsBySlugPage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { RoleDetailsBySlugPage } from "./RoleDetailsBySlugPage";
|
import { RoleDetailsBySlugPage } from "./RoleDetailsBySlugPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/roles/$roleSlug"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/roles/$roleSlug"
|
||||||
)({
|
)({
|
||||||
component: RoleDetailsBySlugPage,
|
component: RoleDetailsBySlugPage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { RoleDetailsBySlugPage } from "./RoleDetailsBySlugPage";
|
import { RoleDetailsBySlugPage } from "./RoleDetailsBySlugPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/ssh/$projectId/_ssh-layout/roles/$roleSlug"
|
"/_authenticate/_inject-org-details/_org-layout/ssh/$projectId/_ssh-layout/roles/$roleSlug"
|
||||||
)({
|
)({
|
||||||
component: RoleDetailsBySlugPage,
|
component: RoleDetailsBySlugPage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute } from "@tanstack/react-router";
|
|||||||
import { IPAllowListPage } from "./IPAllowlistPage";
|
import { IPAllowListPage } from "./IPAllowlistPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/allowlist"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/allowlist"
|
||||||
)({
|
)({
|
||||||
component: () => IPAllowListPage
|
component: () => IPAllowListPage
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { IntegrationDetailsByIDPage } from "./IntegrationsDetailsByIDPage";
|
import { IntegrationDetailsByIDPage } from "./IntegrationsDetailsByIDPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/$integrationId"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/$integrationId"
|
||||||
)({
|
)({
|
||||||
component: IntegrationDetailsByIDPage,
|
component: IntegrationDetailsByIDPage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
@@ -12,7 +12,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Details"
|
label: "Details"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute } from "@tanstack/react-router";
|
|||||||
import { IntegrationsListPage } from "./IntegrationsListPage";
|
import { IntegrationsListPage } from "./IntegrationsListPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/"
|
||||||
)({
|
)({
|
||||||
component: IntegrationsListPage,
|
component: IntegrationsListPage,
|
||||||
beforeLoad: ({ context }) => {
|
beforeLoad: ({ context }) => {
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ const SecretOverviewPageQuerySchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/overview"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/overview"
|
||||||
)({
|
)({
|
||||||
component: OverviewPage,
|
component: OverviewPage,
|
||||||
validateSearch: zodValidator(SecretOverviewPageQuerySchema),
|
validateSearch: zodValidator(SecretOverviewPageQuerySchema),
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ const SecretApprovalPageQueryParams = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/approval"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/approval"
|
||||||
)({
|
)({
|
||||||
component: SecretApprovalsPage,
|
component: SecretApprovalsPage,
|
||||||
validateSearch: zodValidator(SecretApprovalPageQueryParams),
|
validateSearch: zodValidator(SecretApprovalPageQueryParams),
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ const SecretDashboardPageQueryParamsSchema = z.object({
|
|||||||
tags: z.string().catch("")
|
tags: z.string().catch("")
|
||||||
});
|
});
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/secrets/$envSlug"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/secrets/$envSlug"
|
||||||
)({
|
)({
|
||||||
component: SecretDashboardPage,
|
component: SecretDashboardPage,
|
||||||
validateSearch: zodValidator(SecretDashboardPageQueryParamsSchema),
|
validateSearch: zodValidator(SecretDashboardPageQueryParamsSchema),
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute } from "@tanstack/react-router";
|
|||||||
import { SecretRotationPage } from "./SecretRotationPage";
|
import { SecretRotationPage } from "./SecretRotationPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/secret-rotation"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/secret-rotation"
|
||||||
)({
|
)({
|
||||||
component: SecretRotationPage,
|
component: SecretRotationPage,
|
||||||
beforeLoad: ({ context }) => {
|
beforeLoad: ({ context }) => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute } from "@tanstack/react-router";
|
|||||||
import { SettingsPage } from "./SettingsPage";
|
import { SettingsPage } from "./SettingsPage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/settings"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/settings"
|
||||||
)({
|
)({
|
||||||
component: SettingsPage,
|
component: SettingsPage,
|
||||||
beforeLoad: ({ context }) => {
|
beforeLoad: ({ context }) => {
|
||||||
|
|||||||
+5
-2
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { AWSParameterStoreAuthorizeIntegrationPage } from "./AwsParameterStoreAuthorizePage";
|
import { AWSParameterStoreAuthorizeIntegrationPage } from "./AwsParameterStoreAuthorizePage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/aws-parameter-store/authorize"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/aws-parameter-store/authorize"
|
||||||
)({
|
)({
|
||||||
component: AWSParameterStoreAuthorizeIntegrationPage,
|
component: AWSParameterStoreAuthorizeIntegrationPage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
@@ -12,7 +12,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "AWS Parameter Store"
|
label: "AWS Parameter Store"
|
||||||
|
|||||||
+5
-2
@@ -9,7 +9,7 @@ const AwsParameterStoreConfigurePageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/aws-parameter-store/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/aws-parameter-store/create"
|
||||||
)({
|
)({
|
||||||
component: AWSParameterStoreConfigurePage,
|
component: AWSParameterStoreConfigurePage,
|
||||||
validateSearch: zodValidator(AwsParameterStoreConfigurePageQueryParamsSchema),
|
validateSearch: zodValidator(AwsParameterStoreConfigurePageQueryParamsSchema),
|
||||||
@@ -19,7 +19,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "AWS Parameter Store"
|
label: "AWS Parameter Store"
|
||||||
|
|||||||
+5
-2
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { AWSSecretManagerAuthorizePage } from "./AwsSecretManagerAuthorizePage";
|
import { AWSSecretManagerAuthorizePage } from "./AwsSecretManagerAuthorizePage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/aws-secret-manager/authorize"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/aws-secret-manager/authorize"
|
||||||
)({
|
)({
|
||||||
component: AWSSecretManagerAuthorizePage,
|
component: AWSSecretManagerAuthorizePage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
@@ -12,7 +12,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "AWS Secret Manager"
|
label: "AWS Secret Manager"
|
||||||
|
|||||||
+5
-2
@@ -9,7 +9,7 @@ const AwsSecretManagerConfigurePageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/aws-secret-manager/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/aws-secret-manager/create"
|
||||||
)({
|
)({
|
||||||
component: AwsSecretManagerConfigurePage,
|
component: AwsSecretManagerConfigurePage,
|
||||||
validateSearch: zodValidator(AwsSecretManagerConfigurePageQueryParamsSchema),
|
validateSearch: zodValidator(AwsSecretManagerConfigurePageQueryParamsSchema),
|
||||||
@@ -19,7 +19,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "AWS Secret Manager"
|
label: "AWS Secret Manager"
|
||||||
|
|||||||
+5
-2
@@ -9,7 +9,7 @@ const AzureAppConfigurationPageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/azure-app-configuration/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/azure-app-configuration/create"
|
||||||
)({
|
)({
|
||||||
component: AzureAppConfigurationConfigurePage,
|
component: AzureAppConfigurationConfigurePage,
|
||||||
validateSearch: zodValidator(AzureAppConfigurationPageQueryParamsSchema),
|
validateSearch: zodValidator(AzureAppConfigurationPageQueryParamsSchema),
|
||||||
@@ -19,7 +19,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Azure App Configuration"
|
label: "Azure App Configuration"
|
||||||
|
|||||||
+5
-2
@@ -10,7 +10,7 @@ export const AzureAppConfigurationOauthCallbackPageQueryParamsSchema = z.object(
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/azure-app-configuration/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/azure-app-configuration/oauth2/callback"
|
||||||
)({
|
)({
|
||||||
component: AzureAppConfigurationOauthCallbackPage,
|
component: AzureAppConfigurationOauthCallbackPage,
|
||||||
validateSearch: zodValidator(AzureAppConfigurationOauthCallbackPageQueryParamsSchema),
|
validateSearch: zodValidator(AzureAppConfigurationOauthCallbackPageQueryParamsSchema),
|
||||||
@@ -20,7 +20,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Azure App Configuration"
|
label: "Azure App Configuration"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { AzureDevopsAuthorizePage } from "./AzureDevopsAuthorizePage";
|
import { AzureDevopsAuthorizePage } from "./AzureDevopsAuthorizePage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/azure-devops/authorize"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/azure-devops/authorize"
|
||||||
)({
|
)({
|
||||||
component: AzureDevopsAuthorizePage,
|
component: AzureDevopsAuthorizePage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
@@ -12,7 +12,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Azure Devops"
|
label: "Azure Devops"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ const AzureDevopsConfigurePageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/azure-devops/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/azure-devops/create"
|
||||||
)({
|
)({
|
||||||
component: AzureDevopsConfigurePage,
|
component: AzureDevopsConfigurePage,
|
||||||
validateSearch: zodValidator(AzureDevopsConfigurePageQueryParamsSchema),
|
validateSearch: zodValidator(AzureDevopsConfigurePageQueryParamsSchema),
|
||||||
@@ -19,7 +19,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Azure Devops"
|
label: "Azure Devops"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ const PageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/azure-key-vault/authorize"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/azure-key-vault/authorize"
|
||||||
)({
|
)({
|
||||||
component: AzureKeyVaultAuthorizePage,
|
component: AzureKeyVaultAuthorizePage,
|
||||||
validateSearch: PageQueryParamsSchema,
|
validateSearch: PageQueryParamsSchema,
|
||||||
@@ -19,7 +19,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Azure Key Vault"
|
label: "Azure Key Vault"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ const AzureKeyVaultConfigurePageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/azure-key-vault/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/azure-key-vault/create"
|
||||||
)({
|
)({
|
||||||
component: AzureKeyVaultConfigurePage,
|
component: AzureKeyVaultConfigurePage,
|
||||||
validateSearch: zodValidator(AzureKeyVaultConfigurePageQueryParamsSchema),
|
validateSearch: zodValidator(AzureKeyVaultConfigurePageQueryParamsSchema),
|
||||||
@@ -19,7 +19,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Azure Key Vault"
|
label: "Azure Key Vault"
|
||||||
|
|||||||
+5
-2
@@ -10,7 +10,7 @@ export const AzureKeyVaultOauthCallbackQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/azure-key-vault/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/azure-key-vault/oauth2/callback"
|
||||||
)({
|
)({
|
||||||
component: AzureKeyVaultOauthCallbackPage,
|
component: AzureKeyVaultOauthCallbackPage,
|
||||||
validateSearch: zodValidator(AzureKeyVaultOauthCallbackQueryParamsSchema),
|
validateSearch: zodValidator(AzureKeyVaultOauthCallbackQueryParamsSchema),
|
||||||
@@ -20,7 +20,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Azure Key Vault"
|
label: "Azure Key Vault"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ const BitbucketConfigurePageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/bitbucket/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/bitbucket/create"
|
||||||
)({
|
)({
|
||||||
component: BitbucketConfigurePage,
|
component: BitbucketConfigurePage,
|
||||||
validateSearch: zodValidator(BitbucketConfigurePageQueryParamsSchema),
|
validateSearch: zodValidator(BitbucketConfigurePageQueryParamsSchema),
|
||||||
@@ -19,7 +19,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Bitbucket"
|
label: "Bitbucket"
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ export const BitbucketOauthCallbackQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/bitbucket/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/bitbucket/oauth2/callback"
|
||||||
)({
|
)({
|
||||||
component: BitbucketOauthCallbackPage,
|
component: BitbucketOauthCallbackPage,
|
||||||
validateSearch: zodValidator(BitbucketOauthCallbackQueryParamsSchema),
|
validateSearch: zodValidator(BitbucketOauthCallbackQueryParamsSchema),
|
||||||
@@ -20,7 +20,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Bitbucket"
|
label: "Bitbucket"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { ChecklyAuthorizePage } from "./ChecklyAuthorizePage";
|
import { ChecklyAuthorizePage } from "./ChecklyAuthorizePage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/checkly/authorize"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/checkly/authorize"
|
||||||
)({
|
)({
|
||||||
component: ChecklyAuthorizePage,
|
component: ChecklyAuthorizePage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
@@ -12,7 +12,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Checkly"
|
label: "Checkly"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ const ChecklyConfigurePageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/checkly/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/checkly/create"
|
||||||
)({
|
)({
|
||||||
component: ChecklyConfigurePage,
|
component: ChecklyConfigurePage,
|
||||||
validateSearch: zodValidator(ChecklyConfigurePageQueryParamsSchema),
|
validateSearch: zodValidator(ChecklyConfigurePageQueryParamsSchema),
|
||||||
@@ -19,7 +19,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Checkly"
|
label: "Checkly"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { CircleCIAuthorizePage } from "./CircleCIAuthorizePage";
|
import { CircleCIAuthorizePage } from "./CircleCIAuthorizePage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/circleci/authorize"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/circleci/authorize"
|
||||||
)({
|
)({
|
||||||
component: CircleCIAuthorizePage,
|
component: CircleCIAuthorizePage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
@@ -12,7 +12,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Circle CI"
|
label: "Circle CI"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ const CircleCIConfigurePageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/circleci/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/circleci/create"
|
||||||
)({
|
)({
|
||||||
component: CircleCIConfigurePage,
|
component: CircleCIConfigurePage,
|
||||||
validateSearch: zodValidator(CircleCIConfigurePageQueryParamsSchema),
|
validateSearch: zodValidator(CircleCIConfigurePageQueryParamsSchema),
|
||||||
@@ -19,7 +19,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Circle CI"
|
label: "Circle CI"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { Cloud66AuthorizePage } from "./Cloud66AuthorizePage";
|
import { Cloud66AuthorizePage } from "./Cloud66AuthorizePage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/cloud-66/authorize"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/cloud-66/authorize"
|
||||||
)({
|
)({
|
||||||
component: Cloud66AuthorizePage,
|
component: Cloud66AuthorizePage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
@@ -12,7 +12,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Cloud 66"
|
label: "Cloud 66"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ const Cloud66ConfigurePageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/cloud-66/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/cloud-66/create"
|
||||||
)({
|
)({
|
||||||
component: Cloud66ConfigurePage,
|
component: Cloud66ConfigurePage,
|
||||||
validateSearch: zodValidator(Cloud66ConfigurePageQueryParamsSchema),
|
validateSearch: zodValidator(Cloud66ConfigurePageQueryParamsSchema),
|
||||||
@@ -19,7 +19,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Cloud 66"
|
label: "Cloud 66"
|
||||||
|
|||||||
+5
-2
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { CloudflarePagesAuthorizePage } from "./CloudflarePagesAuthorizePage";
|
import { CloudflarePagesAuthorizePage } from "./CloudflarePagesAuthorizePage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/cloudflare-pages/authorize"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/cloudflare-pages/authorize"
|
||||||
)({
|
)({
|
||||||
component: CloudflarePagesAuthorizePage,
|
component: CloudflarePagesAuthorizePage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
@@ -12,7 +12,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Cloudflare Pages"
|
label: "Cloudflare Pages"
|
||||||
|
|||||||
+5
-2
@@ -9,7 +9,7 @@ const CloudflarePagesConfigurePageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/cloudflare-pages/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/cloudflare-pages/create"
|
||||||
)({
|
)({
|
||||||
component: CloudflarePagesConfigurePage,
|
component: CloudflarePagesConfigurePage,
|
||||||
validateSearch: zodValidator(CloudflarePagesConfigurePageQueryParamsSchema),
|
validateSearch: zodValidator(CloudflarePagesConfigurePageQueryParamsSchema),
|
||||||
@@ -19,7 +19,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Cloudflare Pages"
|
label: "Cloudflare Pages"
|
||||||
|
|||||||
+5
-2
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { CloudflareWorkersAuthorizePage } from "./CloudflareWorkersAuthorizePage";
|
import { CloudflareWorkersAuthorizePage } from "./CloudflareWorkersAuthorizePage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/cloudflare-workers/authorize"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/cloudflare-workers/authorize"
|
||||||
)({
|
)({
|
||||||
component: CloudflareWorkersAuthorizePage,
|
component: CloudflareWorkersAuthorizePage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
@@ -12,7 +12,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Cloudflare Workers"
|
label: "Cloudflare Workers"
|
||||||
|
|||||||
+5
-2
@@ -9,7 +9,7 @@ const CloudflareWorkersConfigurePageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/cloudflare-workers/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/cloudflare-workers/create"
|
||||||
)({
|
)({
|
||||||
component: CloudflareWorkersConfigurePage,
|
component: CloudflareWorkersConfigurePage,
|
||||||
validateSearch: zodValidator(CloudflareWorkersConfigurePageQueryParamsSchema),
|
validateSearch: zodValidator(CloudflareWorkersConfigurePageQueryParamsSchema),
|
||||||
@@ -19,7 +19,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Cloudflare Workers"
|
label: "Cloudflare Workers"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { CodefreshAuthorizePage } from "./CodefreshAuthorizePage";
|
import { CodefreshAuthorizePage } from "./CodefreshAuthorizePage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/codefresh/authorize"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/codefresh/authorize"
|
||||||
)({
|
)({
|
||||||
component: CodefreshAuthorizePage,
|
component: CodefreshAuthorizePage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
@@ -12,7 +12,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Codefresh"
|
label: "Codefresh"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ const CodefreshConfigurePageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/codefresh/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/codefresh/create"
|
||||||
)({
|
)({
|
||||||
component: CodefreshConfigurePage,
|
component: CodefreshConfigurePage,
|
||||||
validateSearch: zodValidator(CodefreshConfigurePageQueryParamsSchema),
|
validateSearch: zodValidator(CodefreshConfigurePageQueryParamsSchema),
|
||||||
@@ -19,7 +19,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Codefresh"
|
label: "Codefresh"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { DatabricksAuthorizePage } from "./DatabricksAuthorizePage";
|
import { DatabricksAuthorizePage } from "./DatabricksAuthorizePage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/databricks/authorize"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/databricks/authorize"
|
||||||
)({
|
)({
|
||||||
component: DatabricksAuthorizePage,
|
component: DatabricksAuthorizePage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
@@ -12,7 +12,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Databricks"
|
label: "Databricks"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ const DatabricksConfigurePageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/databricks/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/databricks/create"
|
||||||
)({
|
)({
|
||||||
component: DatabricksConfigurePage,
|
component: DatabricksConfigurePage,
|
||||||
validateSearch: zodValidator(DatabricksConfigurePageQueryParamsSchema),
|
validateSearch: zodValidator(DatabricksConfigurePageQueryParamsSchema),
|
||||||
@@ -19,7 +19,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Databricks"
|
label: "Databricks"
|
||||||
|
|||||||
+5
-2
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { DigitalOceanAppPlatformAuthorizePage } from "./DigitalOceanAppPlatformAuthorizePage";
|
import { DigitalOceanAppPlatformAuthorizePage } from "./DigitalOceanAppPlatformAuthorizePage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/digital-ocean-app-platform/authorize"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/digital-ocean-app-platform/authorize"
|
||||||
)({
|
)({
|
||||||
component: DigitalOceanAppPlatformAuthorizePage,
|
component: DigitalOceanAppPlatformAuthorizePage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
@@ -12,7 +12,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "DigitalOcean App Platform"
|
label: "DigitalOcean App Platform"
|
||||||
|
|||||||
+5
-2
@@ -9,7 +9,7 @@ const DigitalOceanAppPlatformConfigurePageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/digital-ocean-app-platform/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/digital-ocean-app-platform/create"
|
||||||
)({
|
)({
|
||||||
component: DigitalOceanAppPlatformConfigurePage,
|
component: DigitalOceanAppPlatformConfigurePage,
|
||||||
validateSearch: zodValidator(DigitalOceanAppPlatformConfigurePageQueryParamsSchema),
|
validateSearch: zodValidator(DigitalOceanAppPlatformConfigurePageQueryParamsSchema),
|
||||||
@@ -19,7 +19,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "DigitalOcean App Platform"
|
label: "DigitalOcean App Platform"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { FlyioAuthorizePage } from "./FlyioAuthorizePage";
|
import { FlyioAuthorizePage } from "./FlyioAuthorizePage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/flyio/authorize"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/flyio/authorize"
|
||||||
)({
|
)({
|
||||||
component: FlyioAuthorizePage,
|
component: FlyioAuthorizePage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
@@ -12,7 +12,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Fly IO"
|
label: "Fly IO"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ const FlyioConfigurePageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/flyio/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/flyio/create"
|
||||||
)({
|
)({
|
||||||
component: FlyioConfigurePage,
|
component: FlyioConfigurePage,
|
||||||
validateSearch: zodValidator(FlyioConfigurePageQueryParamsSchema),
|
validateSearch: zodValidator(FlyioConfigurePageQueryParamsSchema),
|
||||||
@@ -19,7 +19,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Fly IO"
|
label: "Fly IO"
|
||||||
|
|||||||
+5
-2
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { GcpSecretManagerAuthorizePage } from "./GcpSecretManagerAuthorizePage";
|
import { GcpSecretManagerAuthorizePage } from "./GcpSecretManagerAuthorizePage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/gcp-secret-manager/authorize"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/gcp-secret-manager/authorize"
|
||||||
)({
|
)({
|
||||||
component: GcpSecretManagerAuthorizePage,
|
component: GcpSecretManagerAuthorizePage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
@@ -12,7 +12,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "GCP Secret Manager"
|
label: "GCP Secret Manager"
|
||||||
|
|||||||
+5
-2
@@ -9,7 +9,7 @@ const GcpConfigurePageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/gcp-secret-manager/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/gcp-secret-manager/create"
|
||||||
)({
|
)({
|
||||||
component: GcpSecretManagerConfigurePage,
|
component: GcpSecretManagerConfigurePage,
|
||||||
validateSearch: zodValidator(GcpConfigurePageQueryParamsSchema),
|
validateSearch: zodValidator(GcpConfigurePageQueryParamsSchema),
|
||||||
@@ -19,7 +19,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "GCP Secret Manager"
|
label: "GCP Secret Manager"
|
||||||
|
|||||||
+5
-2
@@ -10,7 +10,7 @@ export const GcpSecretManagerOAuthCallbackPageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/gcp-secret-manager/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/gcp-secret-manager/oauth2/callback"
|
||||||
)({
|
)({
|
||||||
component: GcpSecretManagerOauthCallbackPage,
|
component: GcpSecretManagerOauthCallbackPage,
|
||||||
validateSearch: zodValidator(GcpSecretManagerOAuthCallbackPageQueryParamsSchema),
|
validateSearch: zodValidator(GcpSecretManagerOAuthCallbackPageQueryParamsSchema),
|
||||||
@@ -20,7 +20,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "GCP Secret Manager"
|
label: "GCP Secret Manager"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { createFileRoute, linkOptions } from "@tanstack/react-router";
|
|||||||
import { GithubAuthorizePage } from "./GithubAuthorizePage";
|
import { GithubAuthorizePage } from "./GithubAuthorizePage";
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/github/auth-mode-selection"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/github/auth-mode-selection"
|
||||||
)({
|
)({
|
||||||
component: GithubAuthorizePage,
|
component: GithubAuthorizePage,
|
||||||
beforeLoad: ({ context, params }) => {
|
beforeLoad: ({ context, params }) => {
|
||||||
@@ -12,7 +12,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "GitHub"
|
label: "GitHub"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ const GithubConfigurePageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/github/create"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/github/create"
|
||||||
)({
|
)({
|
||||||
component: GithubConfigurePage,
|
component: GithubConfigurePage,
|
||||||
validateSearch: zodValidator(GithubConfigurePageQueryParamsSchema),
|
validateSearch: zodValidator(GithubConfigurePageQueryParamsSchema),
|
||||||
@@ -19,7 +19,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "GitHub"
|
label: "GitHub"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ export const GithubOAuthCallbackPageQueryParamsSchema = z.object({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const Route = createFileRoute(
|
export const Route = createFileRoute(
|
||||||
"/_authenticate/_inject-org-details/secret-manager/$projectId/_secret-manager-layout/integrations/github/oauth2/callback"
|
"/_authenticate/_inject-org-details/_org-layout/secret-manager/$projectId/_secret-manager-layout/integrations/github/oauth2/callback"
|
||||||
)({
|
)({
|
||||||
component: GithubOauthCallbackPage,
|
component: GithubOauthCallbackPage,
|
||||||
validateSearch: zodValidator(GithubOAuthCallbackPageQueryParamsSchema),
|
validateSearch: zodValidator(GithubOAuthCallbackPageQueryParamsSchema),
|
||||||
@@ -21,7 +21,10 @@ export const Route = createFileRoute(
|
|||||||
...context.breadcrumbs,
|
...context.breadcrumbs,
|
||||||
{
|
{
|
||||||
label: "Integrations",
|
label: "Integrations",
|
||||||
link: linkOptions({ to: "/secret-manager/$projectId/integrations", params })
|
link: linkOptions({
|
||||||
|
to: "/secret-manager/$projectId/integrations",
|
||||||
|
params
|
||||||
|
})
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "GitHub"
|
label: "GitHub"
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user