Skip to content

Commit b2765ed

Browse files
committed
apply generic model resolution approach
Signed-off-by: Atif Ali <atali@redhat.com>
1 parent 8f3760a commit b2765ed

File tree

1 file changed

+45
-18
lines changed

1 file changed

+45
-18
lines changed

src/gitops/utils/components/OwnerReferences/owner-references.tsx

Lines changed: 45 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,68 @@
11
import * as React from 'react';
22
import * as _ from 'lodash-es';
33

4+
import { ApplicationModel } from '@gitops/models/ApplicationModel';
5+
import { ApplicationSetModel } from '@gitops/models/ApplicationSetModel';
46
import {
7+
K8sModel,
58
K8sResourceKind,
69
OwnerReference,
710
ResourceLink,
811
} from '@openshift-console/dynamic-plugin-sdk';
12+
import { getK8sModel } from '@openshift-console/dynamic-plugin-sdk/lib/utils/k8s/hooks/useK8sModel';
913
import { Tooltip } from '@patternfly/react-core';
1014

1115
import { useGitOpsTranslation } from '../../hooks/useGitOpsTranslation';
1216

17+
const getModel = (ownerRef: OwnerReference): K8sModel | null => {
18+
// Try to get the model from the console's registry first
19+
const model = getK8sModel(ownerRef.apiVersion);
20+
if (model) {
21+
return model;
22+
}
23+
24+
// Fallback for Argo CD resources
25+
const argoApiGroup = 'argoproj.io';
26+
if (ownerRef.apiVersion.includes(argoApiGroup)) {
27+
if (ownerRef.kind === 'ApplicationSet') {
28+
return ApplicationSetModel;
29+
} else if (ownerRef.kind === 'Application') {
30+
return ApplicationModel;
31+
}
32+
}
33+
34+
return null;
35+
};
36+
1337
export const OwnerReferences: React.FC<OwnerReferencesProps> = ({ resource }) => {
1438
const { t } = useGitOpsTranslation();
1539
const owners = (_.get(resource.metadata, 'ownerReferences') || []).map((o: OwnerReference) => {
16-
if (o.kind === 'ApplicationSet') {
40+
const model = getModel(o);
41+
42+
if (!model) {
43+
// Fallback to simple ResourceLink for unknown types
1744
return (
18-
<Tooltip key={o.uid} content={<div>View ApplicationSet</div>} position="top">
19-
<ResourceLink
20-
namespace={resource.metadata.namespace}
21-
groupVersionKind={{
22-
group: 'argoproj.io',
23-
version: 'v1alpha1',
24-
kind: 'ApplicationSet',
25-
}}
26-
name={o.name}
27-
/>
28-
</Tooltip>
45+
<ResourceLink
46+
key={o.uid}
47+
kind={o.kind}
48+
name={o.name}
49+
namespace={resource.metadata.namespace}
50+
/>
2951
);
3052
}
3153

3254
return (
33-
<ResourceLink
34-
key={o.uid}
35-
kind={o.kind}
36-
name={o.name}
37-
namespace={resource.metadata.namespace}
38-
/>
55+
<Tooltip key={o.uid} content={<div>View {model.kind}</div>} position="top">
56+
<ResourceLink
57+
namespace={resource.metadata.namespace}
58+
groupVersionKind={{
59+
group: model.apiGroup,
60+
version: model.apiVersion,
61+
kind: model.kind,
62+
}}
63+
name={o.name}
64+
/>
65+
</Tooltip>
3966
);
4067
});
4168
return owners.length ? (

0 commit comments

Comments
 (0)