From f162247d80f16f8f9cf3bbbcc2bca408cdd5218c Mon Sep 17 00:00:00 2001 From: shivani170 Date: Thu, 16 Jan 2025 18:21:06 +0530 Subject: [PATCH 1/4] fix: ephemeral error toast handling in resource browser --- .../k8Resource/nodeDetail/EphemeralContainerDrawer.tsx | 4 +++- .../appDetails/k8Resource/nodeDetail/NodeDetail.component.tsx | 4 ++-- .../v2/appDetails/k8Resource/nodeDetail/nodeDetail.type.ts | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/components/v2/appDetails/k8Resource/nodeDetail/EphemeralContainerDrawer.tsx b/src/components/v2/appDetails/k8Resource/nodeDetail/EphemeralContainerDrawer.tsx index d974451cc4..9e789e3730 100644 --- a/src/components/v2/appDetails/k8Resource/nodeDetail/EphemeralContainerDrawer.tsx +++ b/src/components/v2/appDetails/k8Resource/nodeDetail/EphemeralContainerDrawer.tsx @@ -501,7 +501,9 @@ const EphemeralContainerDrawer = ({ setResourceContainers(_containers) setShowEphemeralContainerDrawer(false) switchSelectedContainer(containerName) - handleSuccess() + if (typeof handleSuccess === 'function') { + handleSuccess() + } }) .catch((err) => { showError(err) diff --git a/src/components/v2/appDetails/k8Resource/nodeDetail/NodeDetail.component.tsx b/src/components/v2/appDetails/k8Resource/nodeDetail/NodeDetail.component.tsx index 4f6b67f5d9..a4473ba5f2 100644 --- a/src/components/v2/appDetails/k8Resource/nodeDetail/NodeDetail.component.tsx +++ b/src/components/v2/appDetails/k8Resource/nodeDetail/NodeDetail.component.tsx @@ -254,7 +254,7 @@ const NodeDetailComponent = ({ } } - if (result?.manifestResponse.ephemeralContainers) { + if (result?.manifestResponse?.ephemeralContainers) { _resourceContainers.push( ...result.manifestResponse.ephemeralContainers.map((_container) => ({ name: _container.name, @@ -646,7 +646,7 @@ const NodeDetailComponent = ({ setContainers={setContainers} switchSelectedContainer={switchSelectedContainer} selectedNamespaceByClickingPod={selectedResource?.namespace} - handleSuccess={getContainersFromManifest} + {...isResourceBrowserView ? {handleSuccess: getContainersFromManifest} : {}} /> )} {isResourceBrowserView && showDeleteDialog && ( diff --git a/src/components/v2/appDetails/k8Resource/nodeDetail/nodeDetail.type.ts b/src/components/v2/appDetails/k8Resource/nodeDetail/nodeDetail.type.ts index 7c173d83be..bcd31f8ff4 100644 --- a/src/components/v2/appDetails/k8Resource/nodeDetail/nodeDetail.type.ts +++ b/src/components/v2/appDetails/k8Resource/nodeDetail/nodeDetail.type.ts @@ -75,7 +75,7 @@ export interface EphemeralContainerDrawerType { switchSelectedContainer: (string) => void onClickShowLaunchEphemeral: () => void selectedNamespaceByClickingPod?: string - handleSuccess: () => void + handleSuccess?: () => void } export interface ResponsePayload { From 828e5ac728f3f9ed27f9d95bdefa771c98d8a73e Mon Sep 17 00:00:00 2001 From: shivani170 Date: Thu, 16 Jan 2025 18:33:12 +0530 Subject: [PATCH 2/4] chore: app group check on branch regex ci material click --- src/components/app/details/triggerView/ciMaterial.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/components/app/details/triggerView/ciMaterial.tsx b/src/components/app/details/triggerView/ciMaterial.tsx index fada04cd1d..b3992a4f2e 100644 --- a/src/components/app/details/triggerView/ciMaterial.tsx +++ b/src/components/app/details/triggerView/ciMaterial.tsx @@ -393,6 +393,10 @@ class CIMaterial extends Component { const response = await savePipeline(payload, true) if (response) { await this.props.getWorkflows() + + if(this.props.fromAppGrouping) { + this.context.onClickCIMaterial(this.props.pipelineId.toString(), this.props.pipelineName) + } } } catch (error) { showError(error) From b41a2fbadbab8b10a807c40f0bca42a97b7a7ed3 Mon Sep 17 00:00:00 2001 From: shivani170 Date: Thu, 16 Jan 2025 19:47:24 +0530 Subject: [PATCH 3/4] chore: ga event on reload resource button --- src/components/v2/appDetails/appDetails.type.ts | 2 +- src/components/v2/appDetails/constants.ts | 6 ++++++ .../v2/appDetails/k8Resource/NodeTreeTabList.tsx | 14 ++++++++++++-- 3 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 src/components/v2/appDetails/constants.ts diff --git a/src/components/v2/appDetails/appDetails.type.ts b/src/components/v2/appDetails/appDetails.type.ts index 89753cd650..003cf9b7df 100644 --- a/src/components/v2/appDetails/appDetails.type.ts +++ b/src/components/v2/appDetails/appDetails.type.ts @@ -405,7 +405,7 @@ export interface NodeTreeTabListProps extends LogSearchTermType { isReloadResourceTreeInProgress: boolean handleReloadResourceTree: () => void tabRef?: MutableRefObject - appType?: string + appType?: AppType isExternalApp?: boolean } diff --git a/src/components/v2/appDetails/constants.ts b/src/components/v2/appDetails/constants.ts new file mode 100644 index 0000000000..7f7849744f --- /dev/null +++ b/src/components/v2/appDetails/constants.ts @@ -0,0 +1,6 @@ +export enum ApplicationsGAEvents { + REFRESH_DEVTRON_APP_RESOURCE_TREE = 'REFRESH_DEVTRON_APP_RESOURCE_TREE', + REFRESH_HELM_APP_RESOURCE_TREE = 'REFRESH_HELM_APP_RESOURCE_TREE', + REFRESH_ARGO_APP_RESOURCE_TREE = 'REFRESH_ARGO_APP_RESOURCE_TREE', + REFRESH_FLUX_APP_RESOURCE_TREE = 'REFRESH_FLUX_APP_RESOURCE_TREE', +} diff --git a/src/components/v2/appDetails/k8Resource/NodeTreeTabList.tsx b/src/components/v2/appDetails/k8Resource/NodeTreeTabList.tsx index b8fe89cb1b..676d1cb5e3 100644 --- a/src/components/v2/appDetails/k8Resource/NodeTreeTabList.tsx +++ b/src/components/v2/appDetails/k8Resource/NodeTreeTabList.tsx @@ -14,7 +14,6 @@ * limitations under the License. */ -import React from 'react' import { NavLink, useHistory, useParams } from 'react-router-dom' import ReactGA from 'react-ga4' import { useSharedState } from '../../utils/useSharedState' @@ -36,6 +35,7 @@ import { ButtonComponentType } from '@devtron-labs/devtron-fe-common-lib' import './NodeTreeTabList.scss' +import { getApplicationsGAEvent } from './utils' export default function NodeTreeTabList({ logSearchTerms, @@ -43,6 +43,7 @@ export default function NodeTreeTabList({ tabRef, handleReloadResourceTree, isReloadResourceTreeInProgress, + appType }: NodeTreeTabListProps) { const { nodeType } = useParams<{ nodeType: string }>() const { push } = useHistory() @@ -132,6 +133,15 @@ export default function NodeTreeTabList({ handleCloseTab(e, e.currentTarget.dataset.title) } + + const onClickReloadResourceTree = () => { + handleReloadResourceTree() + ReactGA.event({ + category: getApplicationsGAEvent(appType), + action: getApplicationsGAEvent(appType), + }) + } + return (
} - onClick={handleReloadResourceTree} + onClick={onClickReloadResourceTree} variant={ButtonVariantType.borderLess} size={ComponentSizeType.small} style={ButtonStyleType.neutral} From 559395cffd50d7b4cd5623e886a06a745ae10181 Mon Sep 17 00:00:00 2001 From: shivani170 Date: Thu, 16 Jan 2025 19:50:16 +0530 Subject: [PATCH 4/4] chore: code refactoring --- .../app/details/triggerView/ciMaterial.tsx | 2 +- .../v2/appDetails/k8Resource/utils.tsx | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/components/app/details/triggerView/ciMaterial.tsx b/src/components/app/details/triggerView/ciMaterial.tsx index b3992a4f2e..54b9730f05 100644 --- a/src/components/app/details/triggerView/ciMaterial.tsx +++ b/src/components/app/details/triggerView/ciMaterial.tsx @@ -394,7 +394,7 @@ class CIMaterial extends Component { if (response) { await this.props.getWorkflows() - if(this.props.fromAppGrouping) { + if (this.props.fromAppGrouping) { this.context.onClickCIMaterial(this.props.pipelineId.toString(), this.props.pipelineName) } } diff --git a/src/components/v2/appDetails/k8Resource/utils.tsx b/src/components/v2/appDetails/k8Resource/utils.tsx index 5c8fefa9a5..8017bc1706 100644 --- a/src/components/v2/appDetails/k8Resource/utils.tsx +++ b/src/components/v2/appDetails/k8Resource/utils.tsx @@ -1,4 +1,18 @@ -import { Node, NodeFilters } from '@devtron-labs/devtron-fe-common-lib' +import { AppType, Node, NodeFilters } from '@devtron-labs/devtron-fe-common-lib' +import { ApplicationsGAEvents } from '../constants' export const doesNodeSatisfiesFilter = (node: Node, filter: string) => node.health?.status.toLowerCase() === filter || (filter === NodeFilters.drifted && node.hasDrift) + +export const getApplicationsGAEvent = (appType: AppType) => { + switch (appType) { + case AppType.DEVTRON_HELM_CHART: + return ApplicationsGAEvents.REFRESH_HELM_APP_RESOURCE_TREE + case AppType.EXTERNAL_ARGO_APP: + return ApplicationsGAEvents.REFRESH_ARGO_APP_RESOURCE_TREE + case AppType.EXTERNAL_FLUX_APP: + return ApplicationsGAEvents.REFRESH_FLUX_APP_RESOURCE_TREE + default: + return ApplicationsGAEvents.REFRESH_DEVTRON_APP_RESOURCE_TREE + } +}