- {!isVirtualEnvironment && (
-
+ {status && (
+
)}
- {isVirtualEnvironment && renderGeneratedManifestDownloadCard()}
{!helmMigratedAppNotTriggered && (
<>
{!loadingResourceTree && (
@@ -278,10 +313,24 @@ export const SourceInfo = ({
setDetailed={setDetailed}
/>
)}
+ {isIsolatedEnv && (
+
+ )}
+ >
+ )}
+ {isVirtualEnvironment && !isIsolatedEnv && renderGeneratedManifestDownloadCard()}
+ {!helmMigratedAppNotTriggered && (
+ <>
diff --git a/src/components/app/details/appDetails/appDetails.scss b/src/components/app/details/appDetails/appDetails.scss
index 7c4e3a5677..87e2b4223f 100644
--- a/src/components/app/details/appDetails/appDetails.scss
+++ b/src/components/app/details/appDetails/appDetails.scss
@@ -1927,11 +1927,6 @@ table.resource-tree {
margin-left: 8px !important;
}
-.app-details-manifest-download-card {
- overflow: hidden;
- box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.2);
-}
-
.app-details-info-card {
align-items: flex-start;
flex-direction: column;
diff --git a/src/components/app/details/appDetails/appDetails.type.ts b/src/components/app/details/appDetails/appDetails.type.ts
index 3cbff3a22b..d0b3871a2e 100644
--- a/src/components/app/details/appDetails/appDetails.type.ts
+++ b/src/components/app/details/appDetails/appDetails.type.ts
@@ -239,7 +239,7 @@ export interface SecurityVulnerabilityCardType {
}
export interface DeployedCommitCardType {
- showCommitInfoDrawer: () => void
+ showCommitInfoDrawer: (e) => void
cardLoading?: boolean
envId: number | string
ciArtifactId: number
diff --git a/src/components/app/types.ts b/src/components/app/types.ts
index ba4ec25695..99f1968224 100644
--- a/src/components/app/types.ts
+++ b/src/components/app/types.ts
@@ -25,6 +25,7 @@ import {
RuntimeParamsListItemType,
RuntimeParamsTriggerPayloadType,
ReleaseMode,
+ HelmReleaseStatus,
} from '@devtron-labs/devtron-fe-common-lib'
import { RouteComponentProps } from 'react-router'
import { AppEnvironment } from '../../services/service.types'
@@ -90,9 +91,14 @@ export interface CDModalProps {
parentEnvironmentName: string
ciPipelineId?: number
isRedirectedFromAppDetails?: boolean
+ deploymentUserActionState?: ACTION_STATE
}
export interface AppDetails extends CDModalProps {
+ appStoreChartId: number
+ appStoreChartName: string
+ appStoreAppVersion: string
+ appStoreAppName: string
appId: number
deploymentAppType?: DeploymentAppTypes
externalCi?: boolean
@@ -187,6 +193,10 @@ interface ResourceTree {
status: string
podMetadata: PodMetadatum[]
conditions?: any
+ releaseStatus?: HelmReleaseStatus
+ // lastSnapshotTime and wfrId are only available for isolated
+ lastSnapshotTime?: string
+ wfrId?: number
}
interface Node {
diff --git a/src/components/charts/util/ChartValueSelect.tsx b/src/components/charts/util/ChartValueSelect.tsx
deleted file mode 100644
index 434d455ce4..0000000000
--- a/src/components/charts/util/ChartValueSelect.tsx
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (c) 2024. Devtron Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import React, { Component } from 'react'
-import { Select } from '../../common'
-import { ChartValuesType } from '../charts.types'
-import { getChartValuesFiltered } from '../charts.helper'
-import { ReactComponent as Add } from '../../../assets/icons/ic-add.svg'
-
-export interface ChartValuesSelectProps {
- redirectToChartValues: (...args) => void
- onChange: (...args) => void
- tabIndex?: number
- chartValues: ChartValuesType
- chartValuesList: ChartValuesType[]
- hideVersionFromLabel?: boolean
- className?: string
- hideCreateNewOption?: boolean
-}
-
-export class ChartValuesSelect extends Component
{
- constructor(props) {
- super(props)
- this.onChange = this.onChange.bind(this)
- this.selectionComparator = this.selectionComparator.bind(this)
- }
-
- onChange(event) {
- this.props.onChange(event.target.value)
- }
-
- selectionComparator(value: ChartValuesType): boolean {
- return this.props.chartValues.id === value.id && this.props.chartValues.kind === value.kind
- }
-
- renderNoResultsOption() {
- return (
-
- )
- }
-
- getChartValueLabel(chartName: string, version: string): string {
- return `${chartName}${this.props.hideVersionFromLabel || !version ? '' : ` (${version})`}`
- }
-
- render() {
- const { chartValuesList } = this.props
- const chartValues = getChartValuesFiltered(this.props.chartValuesList)
- const selectedChartValue = chartValuesList.find(
- (chartValue) =>
- this.props.chartValues.id === chartValue.id && chartValue.kind === this.props.chartValues.kind,
- )
-
- return (
-
- )
- }
-}
diff --git a/src/components/common/ClusterMetaDataBar/ClusterMetaDataBar.tsx b/src/components/common/ClusterMetaDataBar/ClusterMetaDataBar.tsx
index 3833070d0e..120b387fb6 100644
--- a/src/components/common/ClusterMetaDataBar/ClusterMetaDataBar.tsx
+++ b/src/components/common/ClusterMetaDataBar/ClusterMetaDataBar.tsx
@@ -75,7 +75,7 @@ export const ClusterMetaDataBar = ({
>
Cluster: {clusterName}
- Namespace: {namespace}
+ Namespace: {namespace || '-'}
{!isVirtualEnvironment && (
<>
}
if (deploymentAppType === DeploymentAppTypes.GITOPS || appType === AppType.EXTERNAL_ARGO_APP) {
- return
+ return
}
if (appType === AppType.EXTERNAL_FLUX_APP) {
- return
+ return
}
if (deploymentAppType === DeploymentAppTypes.HELM) {
- return
+ return
}
return null
}
diff --git a/src/components/common/Select/select.css b/src/components/common/Select/select.css
index 8317accc0c..b7a063314a 100644
--- a/src/components/common/Select/select.css
+++ b/src/components/common/Select/select.css
@@ -99,15 +99,6 @@
margin-right: 12px;
}
-.option-with-subtitle__subtitle {
- font-size: 10px;
- font-weight: normal;
- font-stretch: normal;
- line-height: 1.33;
- letter-spacing: normal;
- color: #404040;
-}
-
.option-group__label {
padding: 8px 16px;
font-size: 12px;
diff --git a/src/components/v2/appDetails/AppDetails.component.tsx b/src/components/v2/appDetails/AppDetails.component.tsx
index 900904d2ff..54d785aced 100644
--- a/src/components/v2/appDetails/AppDetails.component.tsx
+++ b/src/components/v2/appDetails/AppDetails.component.tsx
@@ -175,6 +175,7 @@ const AppDetailsComponent = ({
externalLinks={externalLinks}
monitoringTools={monitoringTools}
isExternalApp={isExternalApp}
+ isVirtualEnvironment={isVirtualEnv.current}
/>
)
}
diff --git a/src/components/v2/appDetails/NodeTreeDetailTab.tsx b/src/components/v2/appDetails/NodeTreeDetailTab.tsx
index dca2e678bf..d507bf6a83 100644
--- a/src/components/v2/appDetails/NodeTreeDetailTab.tsx
+++ b/src/components/v2/appDetails/NodeTreeDetailTab.tsx
@@ -33,6 +33,7 @@ const NodeTreeDetailTab = ({
isDevtronApp = false,
isExternalApp,
isDeploymentBlocked,
+ isVirtualEnvironment
}: NodeTreeDetailTabProps) => {
const params = useParams<{ appId: string; envId: string; nodeType: string }>()
const { path, url } = useRouteMatch()
@@ -43,8 +44,13 @@ const NodeTreeDetailTab = ({
useEffect(() => {
const _pods = IndexStore.getNodesByKind(NodeType.Pod)
const isLogAnalyserURL = window.location.href.indexOf(URLS.APP_DETAILS_LOG) > 0
- AppDetailsStore.initAppDetailsTabs(url, _pods.length > 0, isLogAnalyserURL, isExternalApp)
- }, [params.appId, params.envId])
+ AppDetailsStore.initAppDetailsTabs(
+ url,
+ _pods.length > 0 && !isVirtualEnvironment,
+ isLogAnalyserURL,
+ isExternalApp,
+ )
+ }, [params.appId, params.envId, isVirtualEnvironment])
const handleFocusTabs = () => {
if (tabRef?.current) {
diff --git a/src/components/v2/appDetails/appDetails.type.ts b/src/components/v2/appDetails/appDetails.type.ts
index fa12ddab8f..23919ac814 100644
--- a/src/components/v2/appDetails/appDetails.type.ts
+++ b/src/components/v2/appDetails/appDetails.type.ts
@@ -500,6 +500,7 @@ export interface NodeTreeDetailTabProps {
isDevtronApp?: boolean
isExternalApp?: boolean
isDeploymentBlocked?: boolean
+ isVirtualEnvironment: boolean
}
export interface K8ResourceComponentProps {
diff --git a/src/components/v2/appDetails/k8Resource/nodeType/Node.component.tsx b/src/components/v2/appDetails/k8Resource/nodeType/Node.component.tsx
index 0bdc026df4..adf506f30a 100644
--- a/src/components/v2/appDetails/k8Resource/nodeType/Node.component.tsx
+++ b/src/components/v2/appDetails/k8Resource/nodeType/Node.component.tsx
@@ -356,7 +356,7 @@ const NodeComponent = ({
/>
)}
-
+
{node.name}
@@ -376,42 +376,46 @@ const NodeComponent = ({
-
- {getNodeDetailTabs(node.kind as NodeType).map((kind, index) => {
- return (
-
- {kind.toLowerCase()}
-
- )
- })}
-
- {node.kind !== NodeType.Containers && (
+ {!appDetails.isVirtualEnvironment && (
<>
-
- {node.kind.toLowerCase() == NodeType.Pod.toLowerCase() && (
+
+ {getNodeDetailTabs(node.kind as NodeType).map((kind, index) => {
+ return (
+
+ {kind.toLowerCase()}
+
+ )
+ })}
+
+ {node.kind !== NodeType.Containers && (
<>
-
+ {node.kind.toLowerCase() == NodeType.Pod.toLowerCase() && (
+ <>
+
+
+ >
+ )}
>
)}
>
@@ -496,7 +500,8 @@ const NodeComponent = ({
)}
)}
- {node?.kind !== NodeType.Containers &&
+ {!appDetails.isVirtualEnvironment &&
+ node?.kind !== NodeType.Containers &&
node?.kind !== 'Endpoints' &&
node?.kind !== 'EndpointSlice' && (
-
+
-
+
-
-
Config apply status
+
+
Config apply status
-
-
+
{releaseStatus.status}
-
+
-
+
-
- {releaseStatus.message}
-
+
+ {releaseStatus.message}
+
) : null
diff --git a/src/components/v2/values/chartValuesDiff/ChartValuesView.component.tsx b/src/components/v2/values/chartValuesDiff/ChartValuesView.component.tsx
index 4f50ecda2e..06acb69809 100644
--- a/src/components/v2/values/chartValuesDiff/ChartValuesView.component.tsx
+++ b/src/components/v2/values/chartValuesDiff/ChartValuesView.component.tsx
@@ -15,6 +15,7 @@
*/
import { useEffect, useState } from 'react'
+import { GroupBase } from 'react-select'
import { useParams } from 'react-router-dom'
import {
Progressing,
@@ -28,15 +29,17 @@ import {
TippyTheme,
GitOpsAuthModeType,
SelectPicker,
+ SelectPickerOptionType,
+ SelectPickerProps,
} from '@devtron-labs/devtron-fe-common-lib'
import Tippy from '@tippyjs/react'
import { ReactComponent as Error } from '../../../../assets/icons/ic-warning.svg'
-import { ChartValuesSelect } from '../../../charts/util/ChartValueSelect'
-import { importComponentFromFELibrary, Select } from '../../../common'
+import { importComponentFromFELibrary } from '../../../common'
import { ReactComponent as Close } from '../../assets/icons/ic-close.svg'
import { ReactComponent as EditIcon } from '../../../../assets/icons/ic-pencil.svg'
import { AUTO_GENERATE_GITOPS_REPO, GITOPS_REPO_REQUIRED, GITOPS_REPO_REQUIRED_FOR_ENV } from './constant'
import './ChartValuesView.scss'
+import { ReactComponent as ICAdd } from '@Icons/ic-add.svg'
import {
ActiveReadmeColumnProps,
@@ -66,6 +69,8 @@ import { ReactComponent as ArgoCD } from '../../../../assets/icons/argo-cd-app.s
import { ReactComponent as Helm } from '../../../../assets/icons/helm-app.svg'
import { DELETE_ACTION, repoType } from '../../../../config'
import UserGitRepo from '../../../gitOps/UserGitRepo'
+import { getChartValuesFiltered } from '@Components/charts/charts.helper'
+import { ChartValuesType } from '@Components/charts/charts.types'
const VirtualEnvSelectionInfoText = importComponentFromFELibrary('VirtualEnvSelectionInfoText')
const VirtualEnvHelpTippy = importComponentFromFELibrary('VirtualEnvHelpTippy')
@@ -77,7 +82,7 @@ export const ChartEnvironmentSelector = ({
selectedEnvironment,
handleEnvironmentSelection,
environments,
- invalidaEnvironment,
+ invalidEnvironment,
isVirtualEnvironmentOnSelector,
isVirtualEnvironment,
}: ChartEnvironmentSelectorType): JSX.Element => {
@@ -86,6 +91,8 @@ export const ChartEnvironmentSelector = ({
if (isVirtualEnvironmentOnSelector && VirtualEnvSelectionInfoText) {
return
}
+
+ return null
}
const renderVirtualTippy = (): JSX.Element => {
@@ -120,20 +127,18 @@ export const ChartEnvironmentSelector = ({
)}
) : (
-
+
- {invalidaEnvironment && renderValidationErrorLabel()}
- {renderVirtualEnvironmentInfoText()}
)
}
@@ -447,60 +452,50 @@ export const ChartProjectSelector = ({
invalidProject,
}: ChartProjectSelectorType): JSX.Element => {
return (
-
+
- {invalidProject && renderValidationErrorLabel()}
)
}
export const ChartVersionSelector = ({
selectedVersion,
- chartVersionObj,
selectedVersionUpdatePage,
handleVersionSelection,
chartVersionsData,
}: ChartVersionSelectorType) => {
+ const selectOptions = chartVersionsData.map(chartVersion => ({
+ value: chartVersion.id,
+ label: chartVersion.version,
+ }))
+
+ const selectedOption = selectOptions.find(
+ (option) => option.value === selectedVersionUpdatePage?.id || option.value === selectedVersion,
+ )
+
return (
-
-
- Chart Version
-
-