diff --git a/apps/console-v5/src/routeTree.gen.ts b/apps/console-v5/src/routeTree.gen.ts index d55d428f4d6..12740b23a1e 100644 --- a/apps/console-v5/src/routeTree.gen.ts +++ b/apps/console-v5/src/routeTree.gen.ts @@ -96,7 +96,6 @@ import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnviron import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdVariablesRouteImport } from './routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/variables' import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdServiceLogsRouteImport } from './routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/service-logs' import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdOverviewRouteImport } from './routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/overview' -import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsRouteImport } from './routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments' import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseRouteRouteImport } from './routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/route' import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateSlugRouteRouteImport } from './routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/$slug/route' import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdSettingsRouteRouteImport } from './routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/settings/route' @@ -105,6 +104,7 @@ import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnviron import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateSlugIndexRouteImport } from './routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/$slug/index' import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdSettingsIndexRouteImport } from './routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/settings/index' import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdMonitoringIndexRouteImport } from './routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/index' +import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsIndexRouteImport } from './routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/index' import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseSummaryRouteImport } from './routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/summary' import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseResourcesRouteImport } from './routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/resources' import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseGeneralRouteImport } from './routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/general' @@ -133,6 +133,7 @@ import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnviron import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdSettingsAdvancedSettingsRouteImport } from './routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/settings/advanced-settings' import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdMonitoringDashboardRouteImport } from './routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/dashboard' import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdMonitoringAlertsRouteImport } from './routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/alerts' +import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsLogsExecutionIdRouteImport } from './routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/logs/$executionId' import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdMonitoringAlertsAlertIdEditRouteImport } from './routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/alerts.$alertId.edit' import { Route as AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdMonitoringAlertsCreateMetricMetricRouteImport } from './routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/alerts.create.metric.$metric' @@ -811,14 +812,6 @@ const AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironm getParentRoute: () => AuthenticatedOrganizationOrganizationIdRouteRoute, } as any, ) -const AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsRoute = - AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsRouteImport.update( - { - id: '/project/$projectId/environment/$environmentId/service/$serviceId/deployments', - path: '/project/$projectId/environment/$environmentId/service/$serviceId/deployments', - getParentRoute: () => AuthenticatedOrganizationOrganizationIdRouteRoute, - } as any, - ) const AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseRouteRoute = AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseRouteRouteImport.update( { @@ -887,6 +880,14 @@ const AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironm AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdMonitoringRouteRoute, } as any, ) +const AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsIndexRoute = + AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsIndexRouteImport.update( + { + id: '/project/$projectId/environment/$environmentId/service/$serviceId/deployments/', + path: '/project/$projectId/environment/$environmentId/service/$serviceId/deployments/', + getParentRoute: () => AuthenticatedOrganizationOrganizationIdRouteRoute, + } as any, + ) const AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseSummaryRoute = AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseSummaryRouteImport.update( { @@ -1139,6 +1140,14 @@ const AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironm AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdMonitoringRouteRoute, } as any, ) +const AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsLogsExecutionIdRoute = + AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsLogsExecutionIdRouteImport.update( + { + id: '/project/$projectId/environment/$environmentId/service/$serviceId/deployments/logs/$executionId', + path: '/project/$projectId/environment/$environmentId/service/$serviceId/deployments/logs/$executionId', + getParentRoute: () => AuthenticatedOrganizationOrganizationIdRouteRoute, + } as any, + ) const AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdMonitoringAlertsAlertIdEditRoute = AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdMonitoringAlertsAlertIdEditRouteImport.update( { @@ -1243,7 +1252,6 @@ export interface FileRoutesByFullPath { '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/settings': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdSettingsRouteRouteWithChildren '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/$slug': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateSlugRouteRouteWithChildren '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseRouteRouteWithChildren - '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/overview': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdOverviewRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/service-logs': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdServiceLogsRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/variables': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdVariablesRoute @@ -1278,10 +1286,12 @@ export interface FileRoutesByFullPath { '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/general': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseGeneralRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/resources': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseResourcesRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/summary': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseSummaryRoute + '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsIndexRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdMonitoringIndexRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/settings/': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdSettingsIndexRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/$slug/': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateSlugIndexRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseIndexRoute + '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/logs/$executionId': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsLogsExecutionIdRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/alerts/$alertId/edit': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdMonitoringAlertsAlertIdEditRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/alerts/create/metric/$metric': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdMonitoringAlertsCreateMetricMetricRoute } @@ -1357,7 +1367,6 @@ export interface FileRoutesByTo { '/organization/$organizationId/project/$projectId/environment/$environmentId/settings/preview-environments': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdSettingsPreviewEnvironmentsRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/overview': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdOverviewIndexRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/settings': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdSettingsIndexRoute - '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/overview': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdOverviewRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/service-logs': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdServiceLogsRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/variables': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdVariablesRoute @@ -1392,10 +1401,12 @@ export interface FileRoutesByTo { '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/general': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseGeneralRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/resources': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseResourcesRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/summary': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseSummaryRoute + '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsIndexRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdMonitoringIndexRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/settings': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdSettingsIndexRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/$slug': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateSlugIndexRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseIndexRoute + '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/logs/$executionId': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsLogsExecutionIdRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/alerts/$alertId/edit': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdMonitoringAlertsAlertIdEditRoute '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/alerts/create/metric/$metric': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdMonitoringAlertsCreateMetricMetricRoute } @@ -1486,7 +1497,6 @@ export interface FileRoutesById { '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/settings': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdSettingsRouteRouteWithChildren '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/$slug': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateSlugRouteRouteWithChildren '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseRouteRouteWithChildren - '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsRoute '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/overview': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdOverviewRoute '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/service-logs': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdServiceLogsRoute '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/variables': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdVariablesRoute @@ -1521,10 +1531,12 @@ export interface FileRoutesById { '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/general': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseGeneralRoute '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/resources': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseResourcesRoute '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/summary': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseSummaryRoute + '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsIndexRoute '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdMonitoringIndexRoute '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/settings/': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdSettingsIndexRoute '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/$slug/': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateSlugIndexRoute '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseIndexRoute + '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/logs/$executionId': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsLogsExecutionIdRoute '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/alerts/$alertId/edit': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdMonitoringAlertsAlertIdEditRoute '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/alerts/create/metric/$metric': typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdMonitoringAlertsCreateMetricMetricRoute } @@ -1615,7 +1627,6 @@ export interface FileRouteTypes { | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/settings' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/$slug' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database' - | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/overview' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/service-logs' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/variables' @@ -1650,10 +1661,12 @@ export interface FileRouteTypes { | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/general' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/resources' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/summary' + | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/settings/' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/$slug/' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/' + | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/logs/$executionId' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/alerts/$alertId/edit' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/alerts/create/metric/$metric' fileRoutesByTo: FileRoutesByTo @@ -1729,7 +1742,6 @@ export interface FileRouteTypes { | '/organization/$organizationId/project/$projectId/environment/$environmentId/settings/preview-environments' | '/organization/$organizationId/project/$projectId/environment/$environmentId/overview' | '/organization/$organizationId/project/$projectId/environment/$environmentId/settings' - | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/overview' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/service-logs' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/variables' @@ -1764,10 +1776,12 @@ export interface FileRouteTypes { | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/general' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/resources' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/summary' + | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/settings' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/$slug' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database' + | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/logs/$executionId' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/alerts/$alertId/edit' | '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/alerts/create/metric/$metric' id: @@ -1857,7 +1871,6 @@ export interface FileRouteTypes { | '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/settings' | '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/$slug' | '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database' - | '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments' | '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/overview' | '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/service-logs' | '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/variables' @@ -1892,10 +1905,12 @@ export interface FileRouteTypes { | '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/general' | '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/resources' | '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/summary' + | '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/' | '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/' | '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/settings/' | '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/$slug/' | '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/' + | '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/logs/$executionId' | '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/alerts/$alertId/edit' | '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/alerts/create/metric/$metric' fileRoutesById: FileRoutesById @@ -2518,13 +2533,6 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdOverviewRouteImport parentRoute: typeof AuthenticatedOrganizationOrganizationIdRouteRoute } - '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments': { - id: '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments' - path: '/project/$projectId/environment/$environmentId/service/$serviceId/deployments' - fullPath: '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments' - preLoaderRoute: typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsRouteImport - parentRoute: typeof AuthenticatedOrganizationOrganizationIdRouteRoute - } '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database': { id: '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database' path: '/project/$projectId/environment/$environmentId/service/create/database' @@ -2581,6 +2589,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdMonitoringIndexRouteImport parentRoute: typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdMonitoringRouteRoute } + '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/': { + id: '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/' + path: '/project/$projectId/environment/$environmentId/service/$serviceId/deployments' + fullPath: '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments' + preLoaderRoute: typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsIndexRouteImport + parentRoute: typeof AuthenticatedOrganizationOrganizationIdRouteRoute + } '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/summary': { id: '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/create/database/summary' path: '/summary' @@ -2777,6 +2792,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdMonitoringAlertsRouteImport parentRoute: typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdMonitoringRouteRoute } + '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/logs/$executionId': { + id: '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/logs/$executionId' + path: '/project/$projectId/environment/$environmentId/service/$serviceId/deployments/logs/$executionId' + fullPath: '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/logs/$executionId' + preLoaderRoute: typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsLogsExecutionIdRouteImport + parentRoute: typeof AuthenticatedOrganizationOrganizationIdRouteRoute + } '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/alerts/$alertId/edit': { id: '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring/alerts/$alertId/edit' path: '/$alertId/edit' @@ -3203,13 +3225,14 @@ interface AuthenticatedOrganizationOrganizationIdRouteRouteChildren { AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdSettingsRouteRoute: typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdSettingsRouteRouteWithChildren AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateSlugRouteRoute: typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateSlugRouteRouteWithChildren AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseRouteRoute: typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseRouteRouteWithChildren - AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsRoute: typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsRoute AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdOverviewRoute: typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdOverviewRoute AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdServiceLogsRoute: typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdServiceLogsRoute AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdVariablesRoute: typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdVariablesRoute AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdDeploymentDeploymentIdIndexRoute: typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdDeploymentDeploymentIdIndexRoute AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdIndexRoute: typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdIndexRoute AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateIndexRoute: typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateIndexRoute + AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsIndexRoute: typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsIndexRoute + AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsLogsExecutionIdRoute: typeof AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsLogsExecutionIdRoute } const AuthenticatedOrganizationOrganizationIdRouteRouteChildren: AuthenticatedOrganizationOrganizationIdRouteRouteChildren = @@ -3274,8 +3297,6 @@ const AuthenticatedOrganizationOrganizationIdRouteRouteChildren: AuthenticatedOr AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateSlugRouteRouteWithChildren, AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseRouteRoute: AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateDatabaseRouteRouteWithChildren, - AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsRoute: - AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsRoute, AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdOverviewRoute: AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdOverviewRoute, AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdServiceLogsRoute: @@ -3288,6 +3309,10 @@ const AuthenticatedOrganizationOrganizationIdRouteRouteChildren: AuthenticatedOr AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdIndexRoute, AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateIndexRoute: AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceCreateIndexRoute, + AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsIndexRoute: + AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsIndexRoute, + AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsLogsExecutionIdRoute: + AuthenticatedOrganizationOrganizationIdProjectProjectIdEnvironmentEnvironmentIdServiceServiceIdDeploymentsLogsExecutionIdRoute, } const AuthenticatedOrganizationOrganizationIdRouteRouteWithChildren = diff --git a/apps/console-v5/src/routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments.tsx b/apps/console-v5/src/routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/index.tsx similarity index 95% rename from apps/console-v5/src/routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments.tsx rename to apps/console-v5/src/routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/index.tsx index 0e07dd4d62e..d33669ef1ad 100644 --- a/apps/console-v5/src/routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments.tsx +++ b/apps/console-v5/src/routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/index.tsx @@ -5,7 +5,7 @@ import { ServiceDeploymentList, ServiceDeploymentListSkeleton } from '@qovery/do import { Heading, Section } from '@qovery/shared/ui' export const Route = createFileRoute( - '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments' + '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/' )({ component: RouteComponent, }) diff --git a/apps/console-v5/src/routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/logs/$executionId.tsx b/apps/console-v5/src/routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/logs/$executionId.tsx new file mode 100644 index 00000000000..c4406c25f7b --- /dev/null +++ b/apps/console-v5/src/routes/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/logs/$executionId.tsx @@ -0,0 +1,12 @@ +import { createFileRoute } from '@tanstack/react-router' +import { DeploymentLogs } from '@qovery/domains/service-logs/feature' + +export const Route = createFileRoute( + '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/logs/$executionId' +)({ + component: RouteComponent, +}) + +function RouteComponent() { + return +} diff --git a/apps/console-v5/src/routes/_authenticated/organization/route.tsx b/apps/console-v5/src/routes/_authenticated/organization/route.tsx index c87574c1c87..5e8a65ee175 100644 --- a/apps/console-v5/src/routes/_authenticated/organization/route.tsx +++ b/apps/console-v5/src/routes/_authenticated/organization/route.tsx @@ -379,6 +379,7 @@ const fullWidthRouteIds: FileRouteTypes['id'][] = [ '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/monitoring', '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/settings', '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/service-logs', + '/_authenticated/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/logs/$executionId', ] function useFullWidthLayout(): boolean { diff --git a/libs/domains/environment-logs/feature/src/lib/environment-pipeline/environment-pipeline.tsx b/libs/domains/environment-logs/feature/src/lib/environment-pipeline/environment-pipeline.tsx index bcf7571d802..34eaeea788c 100644 --- a/libs/domains/environment-logs/feature/src/lib/environment-pipeline/environment-pipeline.tsx +++ b/libs/domains/environment-logs/feature/src/lib/environment-pipeline/environment-pipeline.tsx @@ -11,7 +11,6 @@ import { match } from 'ts-pattern' import { useDeploymentHistoryExecutionId, useEnvironment } from '@qovery/domains/environments/feature' import { type AnyService } from '@qovery/domains/services/data-access' import { ServiceAvatar, useServices } from '@qovery/domains/services/feature' -import { DEPLOYMENT_LOGS_VERSION_URL, ENVIRONMENT_LOGS_URL } from '@qovery/shared/routes' import { Icon, Indicator, @@ -172,16 +171,14 @@ function PipelineContent({ return ( { - const props: DeploymentLogsFeatureProps = { + const props: DeploymentLogsContentProps = { environment: environmentFactoryMock(1)[0], statusStages: services, } diff --git a/libs/pages/logs/environment/src/lib/feature/deployment-logs-feature/deployment-logs-feature.tsx b/libs/domains/service-logs/feature/src/lib/deployment-logs/deployment-logs-content/deployment-logs-content.tsx similarity index 70% rename from libs/pages/logs/environment/src/lib/feature/deployment-logs-feature/deployment-logs-feature.tsx rename to libs/domains/service-logs/feature/src/lib/deployment-logs/deployment-logs-content/deployment-logs-content.tsx index 7a218a65e83..a3bb467001f 100644 --- a/libs/pages/logs/environment/src/lib/feature/deployment-logs-feature/deployment-logs-feature.tsx +++ b/libs/domains/service-logs/feature/src/lib/deployment-logs/deployment-logs-content/deployment-logs-content.tsx @@ -1,3 +1,4 @@ +import { useNavigate, useParams } from '@tanstack/react-router' import { type DeploymentStageWithServicesStatuses, type Environment, @@ -6,21 +7,14 @@ import { type Stage, type Status, } from 'qovery-typescript-axios' -import { memo } from 'react' -import { useNavigate, useParams } from 'react-router-dom' import { match } from 'ts-pattern' import { useDeploymentHistory } from '@qovery/domains/environments/feature' -import { ListDeploymentLogs, SidebarPodStatuses } from '@qovery/domains/service-logs/feature' import { useService } from '@qovery/domains/services/feature' -import { DEPLOYMENT_LOGS_VERSION_URL, ENVIRONMENT_LOGS_URL } from '@qovery/shared/routes' import { Banner } from '@qovery/shared/ui' import { useDocumentTitle } from '@qovery/shared/util-hooks' -import { MetricsWebSocketListener } from '@qovery/shared/util-web-sockets' +import { ListDeploymentLogs } from '../../list-deployment-logs/list-deployment-logs' -// XXX: Prevent web-socket invalidations when re-rendering -const WebSocketListenerMemo = memo(MetricsWebSocketListener) - -export interface DeploymentLogsFeatureProps { +export interface DeploymentLogsContentProps { environment: Environment deploymentStages?: DeploymentStageWithServicesStatuses[] environmentStatus?: EnvironmentStatus @@ -105,17 +99,24 @@ export function getStageFromServiceId( return undefined } -export function DeploymentLogsFeature({ +export function DeploymentLogsContent({ environment, environmentStatus, deploymentStages, preCheckStage, -}: DeploymentLogsFeatureProps) { - const { serviceId = '', versionId } = useParams() +}: DeploymentLogsContentProps) { + const { serviceId = '', executionId = '' } = useParams({ strict: false }) const navigate = useNavigate() - const { data: service, isFetched: isFetchedService } = useService({ environmentId: environment.id, serviceId }) - const { data: environmentDeploymentHistory = [] } = useDeploymentHistory({ environmentId: environment.id }) + const { data: service, isFetched: isFetchedService } = useService({ + environmentId: environment.id, + serviceId, + suspense: true, + }) + const { data: environmentDeploymentHistory = [] } = useDeploymentHistory({ + environmentId: environment.id, + suspense: true, + }) useDocumentTitle(`Deployment logs - ${service?.name ?? 'Loading...'}`) @@ -139,7 +140,7 @@ export function DeploymentLogsFeature({ const lastDeploymentExecutionId = latestDeployment?.identifier?.execution_id ?? '' const showBannerNew = - versionId !== lastDeploymentExecutionId && + executionId !== lastDeploymentExecutionId && match(lastDeploymentStatus) .with( 'DEPLOYING', @@ -163,42 +164,31 @@ export function DeploymentLogsFeature({ buttonLabel="See latest" buttonIconRight="arrow-right" onClickButton={() => - navigate( - ENVIRONMENT_LOGS_URL(environment.organization.id, environment.project.id, environment.id) + - DEPLOYMENT_LOGS_VERSION_URL(serviceId, lastDeploymentExecutionId) - ) + navigate({ + to: '/organization/$organizationId/project/$projectId/environment/$environmentId/service/$serviceId/deployments/logs/$executionId', + params: { + organizationId: environment.organization.id, + projectId: environment.project.id, + environmentId: environment.id, + serviceId, + executionId: lastDeploymentExecutionId, + }, + replace: true, + }) } > A new deployment has been initiated )} -
- - - - {service && environment && ( - - )} -
+ ) } -export default DeploymentLogsFeature +export default DeploymentLogsContent diff --git a/libs/domains/service-logs/feature/src/lib/deployment-logs-placeholder/deployment-logs-placeholder.spec.tsx b/libs/domains/service-logs/feature/src/lib/deployment-logs/deployment-logs-placeholder/deployment-logs-placeholder.spec.tsx similarity index 100% rename from libs/domains/service-logs/feature/src/lib/deployment-logs-placeholder/deployment-logs-placeholder.spec.tsx rename to libs/domains/service-logs/feature/src/lib/deployment-logs/deployment-logs-placeholder/deployment-logs-placeholder.spec.tsx diff --git a/libs/domains/service-logs/feature/src/lib/deployment-logs-placeholder/deployment-logs-placeholder.tsx b/libs/domains/service-logs/feature/src/lib/deployment-logs/deployment-logs-placeholder/deployment-logs-placeholder.tsx similarity index 95% rename from libs/domains/service-logs/feature/src/lib/deployment-logs-placeholder/deployment-logs-placeholder.tsx rename to libs/domains/service-logs/feature/src/lib/deployment-logs/deployment-logs-placeholder/deployment-logs-placeholder.tsx index 2ab16491afd..f00a38430a7 100644 --- a/libs/domains/service-logs/feature/src/lib/deployment-logs-placeholder/deployment-logs-placeholder.tsx +++ b/libs/domains/service-logs/feature/src/lib/deployment-logs/deployment-logs-placeholder/deployment-logs-placeholder.tsx @@ -52,8 +52,8 @@ export function LoaderPlaceholder({
-

{title}

- {description} +

{title}

+ {description}
) @@ -213,8 +213,8 @@ export function DeploymentLogsPlaceholder({
-

Deployment has been canceled.

- No logs to display. +

Deployment has been canceled.

+ No logs to display.
) @@ -225,7 +225,7 @@ export function DeploymentLogsPlaceholder({ return (
- An error occurred during the precheck step. + An error occurred during the precheck step. {/* TODO new-nav : Route not yet created */} {/* - An error occurred during deployment of another service. + An error occurred during deployment of another service. {/* TODO new-nav : Route not yet created */} {/* +
+ + + + +
+ +
+
+ +
+
+
+ ) +} + +function DeploymentLogsWrapper({ + environment, + deploymentStages, + environmentStatus, + preCheckStage, +}: { + environment?: Environment + deploymentStages?: DeploymentStageWithServicesStatuses[] + environmentStatus?: EnvironmentStatus + preCheckStage?: EnvironmentStatusesWithStagesPreCheckStage +}) { + if (!environment || !environmentStatus) { + return + } + + return ( + + ) +} + +export function DeploymentLogs() { + const { + organizationId, + projectId, + environmentId = '', + serviceId = '', + executionId = '', + } = useParams({ strict: false }) + const { data: service } = useService({ + environmentId, + serviceId, + suspense: true, + }) + const { data: environment } = useEnvironment({ environmentId, suspense: true }) + const [deploymentStages, setDeploymentStages] = useState() + const [environmentStatus, setEnvironmentStatus] = useState() + const [preCheckStage, setPreCheckStage] = useState() + + const messageHandler = useCallback( + ( + _: QueryClient, + { + stages, + environment, + pre_check_stage, + }: { + stages: DeploymentStageWithServicesStatuses[] + environment: EnvironmentStatus + pre_check_stage: EnvironmentStatusesWithStagesPreCheckStage + } + ) => { + setDeploymentStages(stages) + setEnvironmentStatus(environment) + setPreCheckStage(pre_check_stage) + }, + [setDeploymentStages] + ) + + const enabled = + Boolean(organizationId) && Boolean(environment?.cluster_id) && Boolean(projectId) && Boolean(environmentId) + + useReactQueryWsSubscription({ + url: QOVERY_WS + '/deployment/status', + urlSearchParams: { + organization: organizationId, + cluster: environment?.cluster_id, + project: projectId, + environment: environmentId, + version: executionId, + }, + enabled, + onMessage: messageHandler, + }) + + useEffect(() => { + // Reset local state when URL parameters change + setDeploymentStages(undefined) + setEnvironmentStatus(undefined) + setPreCheckStage(undefined) + }, [organizationId, projectId, environmentId, executionId]) + + return ( +
+ + + + {service && environment && ( + + )} + +
+ ) +} diff --git a/libs/domains/service-logs/feature/src/lib/header-logs/header-logs.spec.tsx b/libs/domains/service-logs/feature/src/lib/header-logs/header-logs.spec.tsx index 84963a57cb1..5af56475ef8 100644 --- a/libs/domains/service-logs/feature/src/lib/header-logs/header-logs.spec.tsx +++ b/libs/domains/service-logs/feature/src/lib/header-logs/header-logs.spec.tsx @@ -71,14 +71,12 @@ describe('HeaderLogs', () => { }) it('renders correctly for deployment type', async () => { - renderWithProviders() + renderWithProviders() expect(screen.getByText('Test Service')).toBeInTheDocument() - expect(screen.getByText('2m : 5s')).toBeInTheDocument() expect(screen.getByTestId('service-avatar')).toBeInTheDocument() - const linksButton = screen.getByRole('button', { name: /link/ }) - expect(within(linksButton).getByText('1 link')).toBeInTheDocument() + expect(screen.getByText('Link')).toBeInTheDocument() }) it('renders correctly for service type', () => { @@ -89,13 +87,13 @@ describe('HeaderLogs', () => { }) it('displays correct number of links', () => { - renderWithProviders() - expect(screen.getByText('1 link')).toBeInTheDocument() + renderWithProviders() + expect(screen.getByText('Link')).toBeInTheDocument() }) it('renders children content', () => { renderWithProviders( - +
Child Content
) diff --git a/libs/domains/service-logs/feature/src/lib/header-logs/header-logs.tsx b/libs/domains/service-logs/feature/src/lib/header-logs/header-logs.tsx index 2facb43140e..91da6cedaf1 100644 --- a/libs/domains/service-logs/feature/src/lib/header-logs/header-logs.tsx +++ b/libs/domains/service-logs/feature/src/lib/header-logs/header-logs.tsx @@ -1,4 +1,4 @@ -import { useSearch } from '@tanstack/react-router' +import { useParams, useRouter, useSearch } from '@tanstack/react-router' import { DatabaseModeEnum, type DeploymentHistoryEnvironmentV2, @@ -7,6 +7,7 @@ import { type Status, } from 'qovery-typescript-axios' import { type PropsWithChildren, useMemo } from 'react' +import { match } from 'ts-pattern' import { ServiceActions, ServiceAvatar, @@ -14,9 +15,9 @@ import { useLinks, useService, } from '@qovery/domains/services/feature' -import { ActionTriggerStatusChip, Button, Icon, Tooltip } from '@qovery/shared/ui' +import { Button, DeploymentAction, Icon, StatusChip, Tooltip } from '@qovery/shared/ui' import { dateUTCString } from '@qovery/shared/util-dates' -import { pluralize, upperCaseFirstLetter } from '@qovery/shared/util-js' +import { pluralize } from '@qovery/shared/util-js' import { PodHealthChips } from '../pod-health-chips/pod-health-chips' export interface HeaderLogsProps extends PropsWithChildren { @@ -34,9 +35,11 @@ export function HeaderLogs({ serviceId, environmentStatus, serviceStatus, - deploymentHistory, children, }: HeaderLogsProps) { + const router = useRouter() + const onBack = () => router.history.back() + const { executionId } = useParams({ strict: false }) const queryParams = useSearch({ strict: false }) const { data: service } = useService({ environmentId: environment.id, serviceId, suspense: true }) const { data: links = [] } = useLinks({ serviceId: serviceId, serviceType: service?.serviceType, suspense: true }) @@ -62,99 +65,120 @@ export function HeaderLogs({ return (
- - - - {service.name} - - Execution id: {environmentStatus?.last_deployment_id}}> - - - - - - {type === 'DEPLOYMENT' && ( - <> - - {deploymentHistory?.trigger_action && ( - <> + {match(type) + .with('DEPLOYMENT', () => { + const subAction = serviceStatus.status_details?.sub_action + const triggerAction = subAction !== 'NONE' ? subAction : serviceStatus.status_details?.action + const actionStatus = serviceStatus.status_details?.status + + return ( +
+
+ +
+ + +
+
- + - - Action: {upperCaseFirstLetter(serviceStatus?.state)}
Status:{' '} - {upperCaseFirstLetter(deploymentHistory.trigger_action).replace(/_/g, ' ')} - - } - side="bottom" - > - - - -
- - )} - - - - - - {Math.floor(totalDurationSec / 60)}m : {totalDurationSec % 60}s - - - )} - {!isNotDeployedOrStopped && !isManagedDatabase && filteredLinks.length > 0 && ( - <> - {filteredLinks.length > 0 && ( - <> +
+ + {!isNotDeployedOrStopped && !isManagedDatabase && filteredLinks.length > 0 && ( + + + + )} +
- - - - - )} - {type === 'SERVICE' && !isHistoricalServiceLogs && ( - <> + + {Math.floor(totalDurationSec / 60)}m : {totalDurationSec % 60}s + - - - )} - - )} + + + {executionId} + +
+ ) + }) + .with('SERVICE', () => ( + <> + + + {service.name} + + Execution id: {environmentStatus?.last_deployment_id}}> + + + + + {!isNotDeployedOrStopped && !isManagedDatabase && filteredLinks.length > 0 && ( + <> + {filteredLinks.length > 0 && ( + + + + )} + {!isHistoricalServiceLogs && ( + <> + + + + + + )} + + )} + + )) + .exhaustive()}
{children} diff --git a/libs/domains/service-logs/feature/src/lib/hooks/use-deployment-logs/use-deployment-logs.ts b/libs/domains/service-logs/feature/src/lib/hooks/use-deployment-logs/use-deployment-logs.ts index 161a758de60..abcdc5548e4 100644 --- a/libs/domains/service-logs/feature/src/lib/hooks/use-deployment-logs/use-deployment-logs.ts +++ b/libs/domains/service-logs/feature/src/lib/hooks/use-deployment-logs/use-deployment-logs.ts @@ -1,7 +1,7 @@ import { type QueryClient } from '@tanstack/react-query' +import { useLocation } from '@tanstack/react-router' import { type EnvironmentLogs } from 'qovery-typescript-axios' import { useCallback, useContext, useEffect, useMemo, useState } from 'react' -import { useLocation } from 'react-router-dom' import { useEnvironment } from '@qovery/domains/environments/feature' import { QOVERY_WS } from '@qovery/shared/util-node-env' import { useReactQueryWsSubscription } from '@qovery/state/util-queries' @@ -13,7 +13,7 @@ export interface UseDeploymentLogsProps { projectId?: string environmentId?: string serviceId?: string - versionId?: string + executionId?: string } export interface EnvironmentLogIds extends EnvironmentLogs { @@ -29,7 +29,7 @@ export function useDeploymentLogs({ projectId, environmentId, serviceId, - versionId, + executionId, }: UseDeploymentLogsProps) { const { hash } = useLocation() const { data: deploymentHistory = [] } = useDeploymentHistory({ environmentId: environmentId ?? '', suspense: true }) @@ -63,7 +63,7 @@ export function useDeploymentLogs({ ) // XXX: If we don't have a version, it works like WS otherwise, it works like a REST API - const isLatestVersion = deploymentHistory[0]?.identifier.execution_id === versionId + const isLatestVersion = deploymentHistory[0]?.identifier.execution_id === executionId useReactQueryWsSubscription({ url: QOVERY_WS + '/deployment/logs', @@ -72,7 +72,7 @@ export function useDeploymentLogs({ cluster: environment?.cluster_id, project: projectId, environment: environmentId, - version: isLatestVersion ? undefined : versionId, + version: isLatestVersion ? undefined : executionId, }, enabled: Boolean(organizationId) && Boolean(environment?.cluster_id) && Boolean(projectId) && Boolean(environmentId), diff --git a/libs/domains/service-logs/feature/src/lib/list-deployment-logs/filters-stage-step/filters-stage-step.spec.tsx b/libs/domains/service-logs/feature/src/lib/list-deployment-logs/filters-stage-step/filters-stage-step.spec.tsx index 883d4abc3b9..f0ab9a5d7e0 100644 --- a/libs/domains/service-logs/feature/src/lib/list-deployment-logs/filters-stage-step/filters-stage-step.spec.tsx +++ b/libs/domains/service-logs/feature/src/lib/list-deployment-logs/filters-stage-step/filters-stage-step.spec.tsx @@ -20,6 +20,10 @@ const defaultProps: FiltersStageStepProps = { isFilterActive: mockIsFilterActive, } +jest.mock('@tanstack/react-router', () => ({ + useLocation: () => ({ pathname: '/', hash: '' }), +})) + describe('FiltersStageStep', () => { beforeEach(() => { jest.clearAllMocks() @@ -61,32 +65,4 @@ describe('FiltersStageStep', () => { expect(screen.getByText('1m : 0s')).toBeInTheDocument() // BUILD duration expect(screen.getByText('2m : 0s')).toBeInTheDocument() // DEPLOY duration }) - - it('applies correct classes based on status and isFilterActive', () => { - mockIsFilterActive.mockImplementation((type) => type === 'BUILD') - renderWithProviders() - - const buildButton = screen.getByText('Build').closest('button') - const deployButton = screen.getByText('Deploy').closest('button') - - expect(buildButton).toHaveClass('border-brand-500', 'bg-neutral-500') - expect(deployButton).not.toHaveClass('border-neutral-300', 'bg-neutral-500') - }) - - it('handles different states correctly', () => { - const props = { - ...defaultProps, - serviceStatus: { - ...defaultProps.serviceStatus, - state: StateEnum.BUILDING, - }, - } - renderWithProviders() - - const buildButton = screen.getByText('Build').closest('button') - const deployButton = screen.getByText('Deploy').closest('button') - - expect(buildButton).toHaveClass('border-neutral-500', 'bg-neutral-650') - expect(deployButton).not.toHaveClass('border-brand-500', 'bg-neutral-500') - }) }) diff --git a/libs/domains/service-logs/feature/src/lib/list-deployment-logs/filters-stage-step/filters-stage-step.tsx b/libs/domains/service-logs/feature/src/lib/list-deployment-logs/filters-stage-step/filters-stage-step.tsx index 5f429d87f69..c4e8433495b 100644 --- a/libs/domains/service-logs/feature/src/lib/list-deployment-logs/filters-stage-step/filters-stage-step.tsx +++ b/libs/domains/service-logs/feature/src/lib/list-deployment-logs/filters-stage-step/filters-stage-step.tsx @@ -1,7 +1,7 @@ +import { useLocation } from '@tanstack/react-router' import clsx from 'clsx' import { type ServiceStepMetric, type StateEnum, type Status } from 'qovery-typescript-axios' import { useEffect, useState } from 'react' -import { useLocation } from 'react-router-dom' import { P, match } from 'ts-pattern' import { type AnyService } from '@qovery/domains/services/data-access' import { isHelmRepositorySource, isJobContainerSource } from '@qovery/shared/enums' @@ -64,14 +64,12 @@ function StageStep({ type, state, steps, toggleColumnFilter, isFilterActive }: S (type === 'BUILD' && status === 'BUILDING') || (type === 'DEPLOY' && status === 'DEPLOYING') const buttonClasses = clsx( - 'flex items-center gap-1.5 rounded-lg border border-neutral-500 bg-neutral-650 px-2.5 py-1 text-sm font-medium text-neutral-300 transition hover:border-neutral-300 hover:bg-neutral-500', + 'hover:border-neutral-subtle flex h-8 items-center gap-1.5 rounded-lg border border-neutral bg-surface-neutral px-2.5 text-sm font-medium text-neutral-subtle transition hover:bg-surface-neutral-component', { - 'text-white hover:border-green-500': status === 'SUCCESS', - 'text-white hover:border-red-500': status === 'ERROR', - 'text-white hover:border-brand-500': isBuildingOrDeploying, - 'border-brand-500 bg-neutral-500': isBuildingOrDeploying && isFilterActive(type), - 'border-green-500': status === 'SUCCESS' && isFilterActive(type), - 'border-red-500 bg-neutral-500': status === 'ERROR' && isFilterActive(type), + 'border-neutral-strong bg-surface-neutral-subtle text-neutral': isFilterActive(type), + 'border-brand-component bg-surface-brand-subtle': isBuildingOrDeploying && isFilterActive(type), + 'border-positive-strong bg-surface-positive-subtle': status === 'SUCCESS' && isFilterActive(type), + 'border-negative-strong bg-surface-negative-subtle': status === 'ERROR' && isFilterActive(type), } ) @@ -113,7 +111,7 @@ function StageStep({ type, state, steps, toggleColumnFilter, isFilterActive }: S side="bottom" > - + @@ -195,9 +193,9 @@ export function FiltersStageStep({ const Separator = () => { return ( - - - + + + ) } diff --git a/libs/domains/service-logs/feature/src/lib/list-deployment-logs/list-deployment-logs.spec.tsx b/libs/domains/service-logs/feature/src/lib/list-deployment-logs/list-deployment-logs.spec.tsx index 92c7482f61d..e9b02acb3c6 100644 --- a/libs/domains/service-logs/feature/src/lib/list-deployment-logs/list-deployment-logs.spec.tsx +++ b/libs/domains/service-logs/feature/src/lib/list-deployment-logs/list-deployment-logs.spec.tsx @@ -16,7 +16,7 @@ jest.mock('@tanstack/react-router', () => ({ useSearch: () => ({}), useNavigate: () => jest.fn(), useParams: () => ({ organizationId: '1' }), - useLocation: () => ({ pathname: '/', search: '' }), + useLocation: () => ({ pathname: '/', search: '', hash: '' }), useRouter: () => ({ buildLocation: () => ({ href: '/' }), }), @@ -35,6 +35,9 @@ jest.mock('../hooks/use-deployment-history/use-deployment-history', () => ({ identifier: { execution_id: '4', }, + auditing_data: { + created_at: '2024-09-18T07:03:29.819774Z', + }, }, ], }), diff --git a/libs/domains/service-logs/feature/src/lib/list-deployment-logs/list-deployment-logs.tsx b/libs/domains/service-logs/feature/src/lib/list-deployment-logs/list-deployment-logs.tsx index 487178de99d..7ae5e58585d 100644 --- a/libs/domains/service-logs/feature/src/lib/list-deployment-logs/list-deployment-logs.tsx +++ b/libs/domains/service-logs/feature/src/lib/list-deployment-logs/list-deployment-logs.tsx @@ -1,3 +1,4 @@ +import { Link, useLocation, useParams } from '@tanstack/react-router' import { type ColumnFiltersState, type FilterFn, @@ -6,6 +7,7 @@ import { getFilteredRowModel, useReactTable, } from '@tanstack/react-table' +import clsx from 'clsx' import download from 'downloadjs' import { type Environment, @@ -15,13 +17,12 @@ import { type Status, } from 'qovery-typescript-axios' import { memo, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react' -import { useLocation, useNavigate, useParams } from 'react-router-dom' import { match } from 'ts-pattern' -import { ServiceStateChip, useDeploymentStatus, useService } from '@qovery/domains/services/feature' -import { ENVIRONMENT_LOGS_URL, ENVIRONMENT_STAGES_URL, SERVICE_LOGS_URL } from '@qovery/shared/routes' -import { Button, Icon, Indicator, Link, TablePrimitives } from '@qovery/shared/ui' +import { useDeploymentStatus, useService } from '@qovery/domains/services/feature' +import { Button, DropdownMenu, Icon, StatusChip, TablePrimitives, Tooltip } from '@qovery/shared/ui' import { dateYearMonthDayHourMinuteSecond } from '@qovery/shared/util-dates' -import { DeploymentLogsPlaceholder } from '../deployment-logs-placeholder/deployment-logs-placeholder' +import { trimId } from '@qovery/shared/util-js' +import { DeploymentLogsPlaceholder } from '../deployment-logs/deployment-logs-placeholder/deployment-logs-placeholder' import HeaderLogs from '../header-logs/header-logs' import { useDeploymentHistory } from '../hooks/use-deployment-history/use-deployment-history' import { type EnvironmentLogIds, useDeploymentLogs } from '../hooks/use-deployment-logs/use-deployment-logs' @@ -146,7 +147,7 @@ export function ListDeploymentLogs({ preCheckStage, }: ListDeploymentLogsProps) { const { hash } = useLocation() - const { organizationId, projectId, serviceId, versionId } = useParams() + const { organizationId = '', projectId = '', serviceId = '', executionId = '' } = useParams({ strict: false }) const refScrollSection = useRef(null) const { updateStageId } = useContext(ServiceStageIdsContext) @@ -173,7 +174,7 @@ export function ListDeploymentLogs({ projectId, environmentId: environment.id, serviceId, - versionId, + executionId, }) // `useEffect` used to scroll to the bottom of the logs when new logs are added or when the pauseLogs state changes @@ -282,7 +283,7 @@ export function ListDeploymentLogs({ [columnFilters] ) - const isLastVersion = environmentDeploymentHistory?.[0]?.identifier.execution_id === versionId || !versionId + const isLastVersion = environmentDeploymentHistory?.[0]?.identifier.execution_id === executionId || !executionId const isDeploymentProgressing = isLastVersion ? match(deploymentStatus?.state) .with( @@ -302,9 +303,9 @@ export function ListDeploymentLogs({ .otherwise(() => false) : false - const lastLogTimestamp = logs.length > 0 ? logs[logs.length - 1]?.timestamp : undefined - function HeaderLogsComponent() { + const currentDeploymentHistory = environmentDeploymentHistory.find((d) => d.identifier.execution_id === executionId) + return ( d.identifier.execution_id === versionId) - : environmentDeploymentHistory[0] - } + deploymentHistory={executionId ? currentDeploymentHistory : environmentDeploymentHistory[0]} >
- - - - - - ) - } - > - {/* TODO new-nav : Route not yet created */} - {/* - Go to pipeline - - */} - - - {match(service) - .with({ serviceType: 'DATABASE' }, (db) => db.mode === 'CONTAINER') - .otherwise(() => true) ? ( - - ) : null} - Go to service logs - - + + + + + + {environmentDeploymentHistory.map((deployment) => ( + + + + {trimId(deployment.identifier.execution_id ?? '')} + + + {dateYearMonthDayHourMinuteSecond(new Date(deployment.auditing_data.created_at))} + + + + + ))} + +
) @@ -385,10 +368,10 @@ export function ListDeploymentLogs({ if (!logs || logs.length === 0 || !serviceStatus.is_part_last_deployment) { return ( -
-
+
+
-
+
) } + return ( -
-
+
+
-
+
{ if ( @@ -447,7 +430,10 @@ export function ListDeploymentLogs({ setPauseLogs={setPauseLogs} /> )} - + {table.getRowModel().rows.map((row) => ( diff --git a/libs/domains/service-logs/feature/src/lib/list-deployment-logs/row-deployment-logs/row-deployment-logs.spec.tsx b/libs/domains/service-logs/feature/src/lib/list-deployment-logs/row-deployment-logs/row-deployment-logs.spec.tsx index d7c7b114e83..f9996df8b8a 100644 --- a/libs/domains/service-logs/feature/src/lib/list-deployment-logs/row-deployment-logs/row-deployment-logs.spec.tsx +++ b/libs/domains/service-logs/feature/src/lib/list-deployment-logs/row-deployment-logs/row-deployment-logs.spec.tsx @@ -1,6 +1,11 @@ import { renderWithProviders, screen } from '@qovery/shared/util-tests' import { RowDeploymentLogs } from './row-deployment-logs' +jest.mock('@tanstack/react-router', () => ({ + useLocation: () => ({ pathname: '/', hash: '' }), + useNavigate: jest.fn(), +})) + describe('RowDeploymentLogs', () => { const mockProps = { index: 0, diff --git a/libs/domains/service-logs/feature/src/lib/list-deployment-logs/row-deployment-logs/row-deployment-logs.tsx b/libs/domains/service-logs/feature/src/lib/list-deployment-logs/row-deployment-logs/row-deployment-logs.tsx index 727afd7f336..6350bc2a8a0 100644 --- a/libs/domains/service-logs/feature/src/lib/list-deployment-logs/row-deployment-logs/row-deployment-logs.tsx +++ b/libs/domains/service-logs/feature/src/lib/list-deployment-logs/row-deployment-logs/row-deployment-logs.tsx @@ -1,8 +1,8 @@ import { type IconName } from '@fortawesome/fontawesome-common-types' +import { useLocation, useNavigate } from '@tanstack/react-router' import { type Row } from '@tanstack/react-table' import clsx from 'clsx' import { useEffect, useState } from 'react' -import { useLocation, useNavigate } from 'react-router-dom' import { LogsType } from '@qovery/shared/enums' import { Ansi, Icon, TablePrimitives, Tooltip } from '@qovery/shared/ui' import { dateFullFormat, dateUTCString } from '@qovery/shared/util-dates' @@ -41,27 +41,26 @@ export function RowDeploymentLogs({ original }: RowDeploymentLogsProps) { - + {original.id}
) diff --git a/libs/domains/services/feature/src/lib/service-links-popover/__snapshots__/service-links-popover.spec.tsx.snap b/libs/domains/services/feature/src/lib/service-links-popover/__snapshots__/service-links-popover.spec.tsx.snap index 7c0d3cb311a..fe70090b33b 100644 --- a/libs/domains/services/feature/src/lib/service-links-popover/__snapshots__/service-links-popover.spec.tsx.snap +++ b/libs/domains/services/feature/src/lib/service-links-popover/__snapshots__/service-links-popover.spec.tsx.snap @@ -29,7 +29,7 @@ exports[`ServiceLinksPopover should match snapshot 1`] = ` style="position: fixed; left: 0px; top: 0px; transform: translate(0px, 8px); min-width: max-content; --radix-popper-available-width: -20px; --radix-popper-available-height: -18px; --radix-popper-anchor-width: 0px; --radix-popper-anchor-height: 0px; --radix-popper-transform-origin: 100% 0px;" >
{children} - +

{filteredLinks?.length ?? 0} {pluralize(filteredLinks?.length ?? 0, 'link')} attached diff --git a/libs/pages/logs/environment/src/lib/feature/pod-logs-feature/pod-logs-feature.tsx b/libs/pages/logs/environment/src/lib/feature/pod-logs-feature/pod-logs-feature.tsx index 7709d127664..05f99862e6b 100644 --- a/libs/pages/logs/environment/src/lib/feature/pod-logs-feature/pod-logs-feature.tsx +++ b/libs/pages/logs/environment/src/lib/feature/pod-logs-feature/pod-logs-feature.tsx @@ -7,11 +7,10 @@ import { } from 'qovery-typescript-axios' import { memo } from 'react' import { useCluster } from '@qovery/domains/clusters/feature' -import { ListServiceLogs } from '@qovery/domains/service-logs/feature' +import { ListServiceLogs, getServiceStatusesById } from '@qovery/domains/service-logs/feature' import { useService } from '@qovery/domains/services/feature' import { useDocumentTitle } from '@qovery/shared/util-hooks' import { MetricsWebSocketListener } from '@qovery/shared/util-web-sockets' -import { getServiceStatusesById } from '../deployment-logs-feature/deployment-logs-feature' // XXX: Prevent web-socket invalidations when re-rendering const WebSocketListenerMemo = memo(MetricsWebSocketListener) diff --git a/libs/pages/logs/environment/src/lib/page-environment-logs.tsx b/libs/pages/logs/environment/src/lib/page-environment-logs.tsx index 75e37cdb109..a62f4b46daa 100644 --- a/libs/pages/logs/environment/src/lib/page-environment-logs.tsx +++ b/libs/pages/logs/environment/src/lib/page-environment-logs.tsx @@ -7,7 +7,7 @@ import { import { useCallback, useEffect, useMemo, useState } from 'react' import { Link, Navigate, Route, Routes, matchPath, useLocation, useNavigate, useParams } from 'react-router-dom' import { useDeploymentHistory, useEnvironment } from '@qovery/domains/environments/feature' -import { ServiceStageIdsProvider } from '@qovery/domains/service-logs/feature' +import { DeploymentLogsContent, ServiceStageIdsProvider } from '@qovery/domains/service-logs/feature' import { DEPLOYMENT_LOGS_VERSION_URL, ENVIRONMENT_LOGS_URL, @@ -21,7 +21,6 @@ import { useDocumentTitle } from '@qovery/shared/util-hooks' import { trimId } from '@qovery/shared/util-js' import { QOVERY_WS } from '@qovery/shared/util-node-env' import { useReactQueryWsSubscription } from '@qovery/state/util-queries' -import DeploymentLogsFeature from './feature/deployment-logs-feature/deployment-logs-feature' import EnvironmentStagesFeature from './feature/environment-stages-feature/environment-stages-feature' import PodLogsFeature from './feature/pod-logs-feature/pod-logs-feature' import PreCheckLogsFeature from './feature/pre-check-logs-feature/pre-check-logs-feature' @@ -262,7 +261,7 @@ export function PageEnvironmentLogs() { +

{type === 'infra' && (
{!loadingStatus || loadingStatus === 'not loaded' ? ( ) : ( -

No logs available (yet).

+

No logs available (yet).

)}
)} diff --git a/libs/shared/ui/src/lib/components/deployment-action/deployment-action.tsx b/libs/shared/ui/src/lib/components/deployment-action/deployment-action.tsx index d79a5682b15..347a876ee54 100644 --- a/libs/shared/ui/src/lib/components/deployment-action/deployment-action.tsx +++ b/libs/shared/ui/src/lib/components/deployment-action/deployment-action.tsx @@ -111,10 +111,12 @@ export const DeploymentAction = ({ status, className, iconClassName, + textClassName, }: { status: StateEnum | ServiceActionStatusEnum | DeploymentHistoryTriggerAction | ServiceSubActionEnum | undefined className?: string iconClassName?: string + textClassName?: string }) => { const action = getDeploymentAction(status) if (!status || !action) return null @@ -122,7 +124,7 @@ export const DeploymentAction = ({ return (
{action.icon} - {action.status} + {action.status}
) } diff --git a/libs/shared/ui/src/lib/components/icon/icons-status/skip.tsx b/libs/shared/ui/src/lib/components/icon/icons-status/skip.tsx index 1b62662bff5..d60f078c9a5 100644 --- a/libs/shared/ui/src/lib/components/icon/icons-status/skip.tsx +++ b/libs/shared/ui/src/lib/components/icon/icons-status/skip.tsx @@ -1,28 +1,12 @@ import { forwardRef } from 'react' import { twMerge } from '@qovery/shared/util-js' -import { type IconSVGProps } from '../icon' +import { Icon, type IconSVGProps } from '../icon' -export const SkipIcon = forwardRef(function SkipIcon( - { className = '', ...props }, - forwardedRef -) { +export const SkipIcon = forwardRef(function SkipIcon({ className = '' }) { return ( - - - - - +
+ +
) })