forked from redhat-developer/gitops-console-plugin
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathresource-sections.tsx
More file actions
97 lines (85 loc) · 2.7 KB
/
resource-sections.tsx
File metadata and controls
97 lines (85 loc) · 2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import * as React from 'react';
import TechPreviewBadge from 'src/components/import/badges/TechPreviewBadge';
import { t } from '@gitops/utils/hooks/useGitOpsTranslation';
import {
DetailsTabSectionExtensionHook,
K8sResourceKind,
} from '@openshift-console/dynamic-plugin-sdk';
import { TopologyDataObject } from '@openshift-console/dynamic-plugin-sdk/lib/extensions/topology-types';
import { getResource } from '@openshift-console/dynamic-plugin-sdk-internal';
import { GraphElement } from '@patternfly/react-topology';
import { PodOverviewItem } from '../console/PodsOverview';
import { usePodsForRollouts } from '../usePodsForRollouts';
import { SidebarSectionHeading } from './DeploymentSideBarDetails';
type OperatorGroupData = {
csvName: string;
operatorKind: string;
builderImage: string;
apiVersion: string;
rollout: K8sResourceKind;
};
export const ResourceSection: React.FC<{
item: TopologyDataObject<OperatorGroupData>;
}> = ({ item }) => {
const { resource } = item;
const { loaded, loadError, pods } = usePodsForRollouts(
resource,
resource.metadata.uid,
resource.metadata.namespace,
);
// rename to podData
const statusOfPods = React.useMemo(() => {
if (loaded && !loadError) {
const [current, previous] = pods;
const isRollingOut = !!current && !!previous;
return {
obj: resource,
current,
previous,
isRollingOut,
pods: [...(current?.pods || []), ...(previous?.pods || [])],
};
}
return null;
}, [loaded, loadError, pods, resource]);
const podContent = [];
if (statusOfPods) {
if (statusOfPods.pods?.length > 0) {
statusOfPods.pods.forEach((pod) => {
podContent.push(<PodOverviewItem key={pod.metadata.uid} pod={pod} />);
});
}
}
return (
<div className="ocs-sidebar-tabsection">
<div className="co-m-pane__heading-owner">
<span>
<TechPreviewBadge
tooltipContent={t('Rollouts in the Topology View is under tech preview')}
/>
<SidebarSectionHeading text={'Pods'} />
</span>
<div>
{statusOfPods && statusOfPods.pods && (
<div>
<ul className="list-group">
<div>{podContent}</div>
</ul>
</div>
)}
</div>
</div>
</div>
);
};
export const useOperatorBackedPanelResourceSection: DetailsTabSectionExtensionHook = (
element: GraphElement,
) => {
const resource = getResource(element);
element.getData();
if (!resource || resource.kind !== 'Rollout') {
return [undefined, true, undefined];
}
const section = <ResourceSection item={element.getData()} />;
return [section, true, undefined];
};