From 9b4fe20bd69865c49d7e678566abd8aae3768da2 Mon Sep 17 00:00:00 2001 From: Eshank Vaish <48060426+eshankvaish@users.noreply.github.com> Date: Wed, 29 Jan 2025 17:28:47 +0530 Subject: [PATCH] fix: resource browser breaking due to undefined kind --- .../ResourceList/BaseResourceList.tsx | 28 +++++++++++-------- .../ResourceBrowser/ResourceList/utils.tsx | 14 +++++++--- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/components/ResourceBrowser/ResourceList/BaseResourceList.tsx b/src/components/ResourceBrowser/ResourceList/BaseResourceList.tsx index 3d9fb2f76b..5d0a78e40a 100644 --- a/src/components/ResourceBrowser/ResourceList/BaseResourceList.tsx +++ b/src/components/ResourceBrowser/ResourceList/BaseResourceList.tsx @@ -360,12 +360,23 @@ const BaseResourceListContent = ({ .catch(noop) } + // This should be used only if shouldOverrideSelectedResourceKind is true + // Group and version are not available for Events / shouldOverrideSelectedResourceKind is true + const getSelectedResourceKindOverride = (lowercaseKind: string) => { + const gvkFromRawData: GVKType = + getFirstResourceFromKindResourceMap(lowercaseKindToResourceGroupMap, lowercaseKind)?.gvk ?? ({} as GVKType) + + return { + gvk: { + Group: gvkFromRawData.Group ?? selectedResource.gvk.Group, + Kind: gvkFromRawData.Kind ?? selectedResource.gvk.Kind, + Version: gvkFromRawData.Version ?? selectedResource.gvk.Version, + } as GVKType, + } + } + const renderResourceRow = (resourceData: K8sResourceDetailDataType): JSX.Element => { const lowercaseKind = (resourceData.kind as string)?.toLowerCase() - // This should be used only if shouldOverrideSelectedResourceKind is true - // Group and version are not available for Events / shouldOverrideSelectedResourceKind is true - const gvkFromRawData = - getFirstResourceFromKindResourceMap(lowercaseKindToResourceGroupMap, lowercaseKind)?.gvk ?? ({} as GVKType) // Redirection and actions are not possible for Events since the required data for the same is not available const shouldShowRedirectionAndActions = lowercaseKind !== Nodes.Event.toLowerCase() const isNodeUnschedulable = isNodeListing && !!resourceData.unschedulable @@ -434,13 +445,8 @@ const BaseResourceListContent = ({ getResourceListData={reloadResourceListData as () => Promise} selectedResource={{ ...selectedResource, - ...(shouldOverrideSelectedResourceKind && { - gvk: { - Group: gvkFromRawData.Group ?? selectedResource.gvk.Group, - Kind: gvkFromRawData.Kind ?? selectedResource.gvk.Kind, - Version: gvkFromRawData.Version ?? selectedResource.gvk.Version, - } as GVKType, - }), + ...(shouldOverrideSelectedResourceKind && + getSelectedResourceKindOverride(lowercaseKind)), }} handleResourceClick={handleResourceClick} hideDeleteResource={hideDeleteResource} diff --git a/src/components/ResourceBrowser/ResourceList/utils.tsx b/src/components/ResourceBrowser/ResourceList/utils.tsx index 7551125abd..394301e25a 100644 --- a/src/components/ResourceBrowser/ResourceList/utils.tsx +++ b/src/components/ResourceBrowser/ResourceList/utils.tsx @@ -1,4 +1,4 @@ -import { noop } from '@devtron-labs/devtron-fe-common-lib' +import { logExceptionToSentry, noop } from '@devtron-labs/devtron-fe-common-lib' import { TARGET_K8S_VERSION_SEARCH_KEY, LOCAL_STORAGE_EXISTS, @@ -61,7 +61,13 @@ export const getUpgradeCompatibilityTippyConfig = ({ export const getFirstResourceFromKindResourceMap = ( lowercaseKindToResourceGroupMap: K8SResourceListType['lowercaseKindToResourceGroupMap'], kind: string, -) => - Object.values(lowercaseKindToResourceGroupMap).find( - (resourceGroup) => resourceGroup.gvk.Kind?.toLowerCase() === kind.toLowerCase(), +) => { + // Logging to sentry as kind is expected to be received + if (!kind) { + logExceptionToSentry('Kind is not present in the resource') + } + + return Object.values(lowercaseKindToResourceGroupMap).find( + (resourceGroup) => resourceGroup.gvk.Kind?.toLowerCase() === kind?.toLowerCase(), ) +}