Skip to content

Commit f04a0f6

Browse files
Fetch resource from manager
1 parent e09af82 commit f04a0f6

File tree

2 files changed

+98
-4
lines changed

2 files changed

+98
-4
lines changed

src/components/KymaModules/components/ModulesListRows.tsx

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ import {
44
findModuleTemplate,
55
KymaResourceType,
66
ModuleTemplateListType,
7+
ModuleTemplateStatus,
78
ModuleTemplateType,
9+
resolveInstallationStateName,
10+
useGetManagerStatus,
811
} from '../support';
912
import { EMPTY_TEXT_PLACEHOLDER } from 'shared/constants';
1013
import { useTranslation } from 'react-i18next';
@@ -74,6 +77,10 @@ export const ModulesListRows = ({
7477
resource?.version,
7578
);
7679

80+
const { data: managerResourceState } = useGetManagerStatus(
81+
currentModuleTemplate?.spec?.manager,
82+
);
83+
7784
if (
7885
moduleStatus &&
7986
!moduleStatus.resource &&
@@ -99,7 +106,7 @@ export const ModulesListRows = ({
99106

100107
const currentModuleReleaseMeta = findModuleReleaseMeta(resource.name);
101108

102-
const isChannelOverriden =
109+
const isChannelOverridden =
103110
kymaResource?.spec?.modules?.[moduleIndex]?.channel !== undefined;
104111

105112
return [
@@ -122,6 +129,16 @@ export const ModulesListRows = ({
122129
{t('kyma-modules.beta')}
123130
</Tag>
124131
) : null}
132+
{moduleStatus?.state === ModuleTemplateStatus.Unmanaged && (
133+
<Tag
134+
className="sap-margin-begin-tiny"
135+
hideStateIcon
136+
colorScheme="3"
137+
design="Neutral"
138+
>
139+
{moduleStatus.state}
140+
</Tag>
141+
)}
125142
</>,
126143
// Namespace
127144
moduleStatus?.resource?.metadata?.namespace || EMPTY_TEXT_PLACEHOLDER,
@@ -131,7 +148,7 @@ export const ModulesListRows = ({
131148
? moduleStatus?.channel
132149
: kymaResource?.spec?.modules?.[moduleIndex]?.channel ||
133150
kymaResource?.spec?.channel}
134-
{isChannelOverriden ? (
151+
{isChannelOverridden ? (
135152
<Tag
136153
hideStateIcon
137154
design="Set2"
@@ -155,7 +172,11 @@ export const ModulesListRows = ({
155172
type={resolveType(moduleStatus?.state ?? '')}
156173
tooltipContent={moduleStatus?.message}
157174
>
158-
{moduleStatus?.state || 'Unknown'}
175+
{resolveInstallationStateName(
176+
moduleStatus?.state,
177+
!!currentModuleTemplate?.spec?.manager,
178+
managerResourceState,
179+
)}
159180
</StatusBadge>,
160181
// Documentation
161182
moduleDocs ? (

src/components/KymaModules/support.ts

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@ import React, { useEffect, useState } from 'react';
44
import { useFetch } from 'shared/hooks/BackendAPI/useFetch';
55
import { ColumnLayoutState } from 'state/columnLayoutAtom';
66

7+
export const enum ModuleTemplateStatus {
8+
Ready = 'Ready',
9+
Processing = 'Processing',
10+
Deleting = 'Deleting',
11+
Unknown = 'Unknown',
12+
Unmanaged = 'Unmanaged',
13+
Warning = 'Warning',
14+
Error = 'Error',
15+
}
16+
717
export type KymaResourceSpecModuleType = {
818
name: string;
919
channel?: string;
@@ -105,7 +115,7 @@ export function useGetAllModulesStatuses(modules: any[]) {
105115
const status = (await response.json())?.status;
106116
return {
107117
key: resource?.metadata?.name ?? resource?.name,
108-
status: status?.state || 'Unknown',
118+
status: status?.state || ModuleTemplateStatus.Unknown,
109119
};
110120
} catch (e) {
111121
return {
@@ -152,6 +162,14 @@ export const findModuleSpec = (
152162
);
153163
};
154164

165+
type ModuleManagerType = {
166+
name: string;
167+
namespace: string;
168+
group: string;
169+
version: string;
170+
kind: string;
171+
};
172+
155173
export type ModuleTemplateType = {
156174
metadata: {
157175
name: string;
@@ -167,6 +185,7 @@ export type ModuleTemplateType = {
167185
info?: {
168186
documentation?: string;
169187
};
188+
manager: ModuleManagerType;
170189
};
171190
};
172191

@@ -244,3 +263,57 @@ export const checkSelectedModule = (
244263
}
245264
return false;
246265
};
266+
267+
export function useGetManagerStatus(manager?: ModuleManagerType) {
268+
const fetch = useFetch();
269+
const [data, setData] = useState<any>(ModuleTemplateStatus.Unknown);
270+
const [error, setError] = useState<Error | null>(null);
271+
272+
useEffect(() => {
273+
if (manager) {
274+
const path = getResourcePath({
275+
apiVersion: `${manager?.group}/${manager?.version}`,
276+
kind: manager?.kind,
277+
metadata: {
278+
name: manager?.name,
279+
namespace: manager?.namespace,
280+
},
281+
} as KymaResourceType);
282+
async function fetchModule() {
283+
try {
284+
const response = await fetch({ relativeUrl: path });
285+
const status = (await response.json())?.status;
286+
setData(status?.conditions?.[0]?.type);
287+
} catch (error) {
288+
if (error instanceof Error) {
289+
setError(error);
290+
}
291+
}
292+
}
293+
294+
fetchModule();
295+
}
296+
// eslint-disable-next-line react-hooks/exhaustive-deps
297+
}, [manager]);
298+
299+
return { data, error };
300+
}
301+
302+
export const resolveInstallationStateName = (
303+
state?: string,
304+
managerExists?: boolean,
305+
managerResourceState?: string,
306+
) => {
307+
if (state === ModuleTemplateStatus.Unmanaged && !managerExists) {
308+
return 'Not installed';
309+
}
310+
311+
if (state === ModuleTemplateStatus.Unmanaged && managerExists) {
312+
if (state !== managerResourceState) {
313+
return ModuleTemplateStatus.Processing;
314+
}
315+
return managerResourceState || ModuleTemplateStatus.Unknown;
316+
}
317+
318+
return state || ModuleTemplateStatus.Unknown;
319+
};

0 commit comments

Comments
 (0)