Skip to content

Commit c6881d1

Browse files
Merge pull request #15738 from logonoff/CONSOLE-3769-s2e22-casino-night
CONSOLE-3769: More openshift/dynamic-plugin-sdk prep work
2 parents 229604a + 86835a7 commit c6881d1

File tree

19 files changed

+93
-129
lines changed

19 files changed

+93
-129
lines changed

frontend/packages/console-app/src/components/console-operator/ConsoleOperatorConfig.tsx

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import * as React from 'react';
2+
import { PluginInfoEntry } from '@openshift/dynamic-plugin-sdk';
23
import { Alert, Button } from '@patternfly/react-core';
34
import { PencilAltIcon } from '@patternfly/react-icons/dist/esm/icons/pencil-alt-icon';
45
import {
@@ -30,7 +31,7 @@ import { useK8sWatchResource } from '@console/internal/components/utils/k8s-watc
3031
import { KebabAction } from '@console/internal/components/utils/kebab';
3132
import { asAccessReview, RequireCreatePermission } from '@console/internal/components/utils/rbac';
3233
import { ResourceLink } from '@console/internal/components/utils/resource-link';
33-
import { EmptyBox, LoadingBox } from '@console/internal/components/utils/status-box';
34+
import { EmptyBox } from '@console/internal/components/utils/status-box';
3435
import { ConsoleOperatorConfigModel, ConsolePluginModel } from '@console/internal/models';
3536
import {
3637
ConsolePluginKind,
@@ -39,11 +40,6 @@ import {
3940
referenceForModel,
4041
} from '@console/internal/module/k8s';
4142
import { RootState } from '@console/internal/redux';
42-
import {
43-
isLoadedDynamicPluginInfo,
44-
DynamicPluginInfo,
45-
isNotLoadedDynamicPluginInfo,
46-
} from '@console/plugin-sdk/src';
4743
import { usePluginInfo } from '@console/plugin-sdk/src/api/usePluginInfo';
4844
import PaneBody from '@console/shared/src/components/layout/PaneBody';
4945
import { consolePluginModal } from '@console/shared/src/components/modals/ConsolePluginModal';
@@ -94,7 +90,7 @@ export const useConsoleOperatorConfigData = () => {
9490
export const ConsolePluginStatus: React.FC<ConsolePluginStatusProps> = ({
9591
status,
9692
errorMessage,
97-
}) => <Status status={status} title={status === 'Failed' ? errorMessage : undefined} />;
93+
}) => <Status status={status} title={status === 'failed' ? errorMessage : undefined} />;
9894

9995
export const ConsolePluginEnabledStatus: React.FC<ConsolePluginEnabledStatusProps> = ({
10096
pluginName,
@@ -159,7 +155,7 @@ export const ConsolePluginCSPStatus: React.FC<ConsolePluginCSPStatusProps> = ({
159155
);
160156
};
161157

162-
const ConsolePluginsTable: React.FC<ConsolePluginsTableProps> = ({ obj, rows, loaded }) => {
158+
const ConsolePluginsTable: React.FC<ConsolePluginsTableProps> = ({ obj, rows }) => {
163159
const { t } = useTranslation();
164160

165161
const [sortBy, setSortBy] = React.useState<ISortBy>(() => ({
@@ -223,9 +219,7 @@ const ConsolePluginsTable: React.FC<ConsolePluginsTableProps> = ({ obj, rows, lo
223219

224220
const sortedRows = React.useMemo(() => rows.sort(compare), [rows, compare]);
225221

226-
return !loaded ? (
227-
<LoadingBox />
228-
) : (
222+
return (
229223
<PaneBody>
230224
{obj.spec?.managementState === 'Unmanaged' && (
231225
<Alert
@@ -300,30 +294,30 @@ const ConsolePluginsTable: React.FC<ConsolePluginsTableProps> = ({ obj, rows, lo
300294
};
301295

302296
const DevPluginsPage: React.FCC<ConsoleOperatorConfigPageProps> = (props) => {
303-
const [pluginInfo, pluginInfoLoaded] = usePluginInfo();
297+
const pluginInfo = usePluginInfo();
304298
const cspViolations = useSelector<RootState, PluginCSPViolations>(({ UI }) =>
305299
UI.get('pluginCSPViolations'),
306300
);
307301

308302
const rows = React.useMemo<ConsolePluginTableRow[]>(
309303
() =>
310-
!pluginInfoLoaded
311-
? []
312-
: pluginInfo.filter(isLoadedDynamicPluginInfo).map((plugin) => ({
313-
name: plugin.metadata.name,
314-
version: plugin.metadata.version,
315-
description: plugin.metadata?.customProperties?.console?.description,
316-
enabled: plugin.enabled,
317-
status: plugin.status,
318-
hasCSPViolations: cspViolations[plugin.metadata.name] ?? false,
319-
})),
320-
[pluginInfo, pluginInfoLoaded, cspViolations],
304+
pluginInfo
305+
.filter((plugin) => plugin.status === 'loaded')
306+
.map((plugin) => ({
307+
name: plugin.metadata.name,
308+
version: plugin.metadata.version,
309+
description: plugin.metadata?.customProperties?.console?.description,
310+
enabled: plugin.enabled,
311+
status: plugin.status,
312+
hasCSPViolations: cspViolations[plugin.metadata.name] ?? false,
313+
})),
314+
[pluginInfo, cspViolations],
321315
);
322-
return <ConsolePluginsTable {...props} rows={rows} loaded={pluginInfoLoaded} />;
316+
return <ConsolePluginsTable {...props} rows={rows} />;
323317
};
324318

325319
const PluginsPage: React.FC<ConsoleOperatorConfigPageProps> = (props) => {
326-
const [pluginInfo] = usePluginInfo();
320+
const pluginInfo = usePluginInfo();
327321
const [consolePlugins, consolePluginsLoaded] = useK8sWatchResource<ConsolePluginKind[]>({
328322
isList: true,
329323
kind: referenceForModel(ConsolePluginModel),
@@ -342,10 +336,10 @@ const PluginsPage: React.FC<ConsoleOperatorConfigPageProps> = (props) => {
342336
const pluginName = plugin?.metadata?.name;
343337
const enabled = enabledPlugins.includes(pluginName);
344338
const loadedPluginInfo = pluginInfo
345-
.filter(isLoadedDynamicPluginInfo)
339+
.filter((p) => p.status === 'loaded')
346340
.find((i) => i?.metadata?.name === pluginName);
347341
const notLoadedPluginInfo = pluginInfo
348-
.filter(isNotLoadedDynamicPluginInfo)
342+
.filter((p) => p.status !== 'loaded')
349343
.find((i) => i?.pluginName === pluginName);
350344
if (loadedPluginInfo) {
351345
return {
@@ -362,15 +356,15 @@ const PluginsPage: React.FC<ConsoleOperatorConfigPageProps> = (props) => {
362356
enabled,
363357
status: notLoadedPluginInfo?.status,
364358
errorMessage:
365-
notLoadedPluginInfo?.status === 'Failed' ? notLoadedPluginInfo?.errorMessage : undefined,
359+
notLoadedPluginInfo?.status === 'failed' ? notLoadedPluginInfo?.errorMessage : undefined,
366360
errorCause:
367-
notLoadedPluginInfo?.status === 'Failed'
361+
notLoadedPluginInfo?.status === 'failed'
368362
? notLoadedPluginInfo?.errorCause?.toString()
369363
: undefined,
370364
};
371365
});
372366
}, [consolePluginsLoaded, consolePlugins, pluginInfo, enabledPlugins, cspViolations]);
373-
return <ConsolePluginsTable {...props} rows={rows} loaded={consolePluginsLoaded} />;
367+
return <ConsolePluginsTable {...props} rows={rows} />;
374368
};
375369

376370
const ConsoleOperatorConfigPluginsPage: React.FC<ConsoleOperatorConfigPageProps> = developmentMode
@@ -425,7 +419,7 @@ export type ConsolePluginTableRow = {
425419
name: string;
426420
version?: string;
427421
description?: string;
428-
status: DynamicPluginInfo['status'];
422+
status: PluginInfoEntry['status'];
429423
enabled: boolean;
430424
errorMessage?: string;
431425
hasCSPViolations?: boolean;
@@ -439,11 +433,10 @@ type TableColumn = {
439433

440434
type ConsolePluginsTableProps = ConsoleOperatorConfigPageProps & {
441435
rows: ConsolePluginTableRow[];
442-
loaded: boolean;
443436
};
444437

445438
type ConsolePluginStatusProps = {
446-
status: DynamicPluginInfo['status'];
439+
status: PluginInfoEntry['status'];
447440
errorMessage?: string;
448441
};
449442

frontend/packages/console-app/src/components/console-operator/ConsolePluginDescriptionDetail.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,23 @@
11
import * as React from 'react';
22
import { DetailsItemComponentProps } from '@console/dynamic-plugin-sdk/src/extensions/details-item';
3-
import { isLoadedDynamicPluginInfo } from '@console/plugin-sdk/src';
43
import { usePluginInfo } from '@console/plugin-sdk/src/api/usePluginInfo';
54
import { DASH } from '@console/shared/src/constants';
65

76
const ConsolePluginDescriptionDetail: React.FC<DetailsItemComponentProps> = ({ obj }) => {
87
const pluginName = React.useMemo(() => obj?.metadata?.name, [obj?.metadata?.name]);
98

10-
const [pluginInfoEntries] = usePluginInfo();
9+
const pluginInfoEntries = usePluginInfo();
1110
const pluginInfo = React.useMemo(
1211
() =>
1312
pluginInfoEntries.find((entry) =>
14-
isLoadedDynamicPluginInfo(entry)
13+
entry.status === 'loaded'
1514
? entry.metadata.name === pluginName
1615
: entry.pluginName === pluginName,
1716
),
1817
[pluginInfoEntries, pluginName],
1918
);
2019

21-
return isLoadedDynamicPluginInfo(pluginInfo) ? (
20+
return pluginInfo?.status === 'loaded' ? (
2221
<>{pluginInfo.metadata.customProperties?.console?.description || DASH}</>
2322
) : (
2423
<>{DASH}</>

frontend/packages/console-app/src/components/console-operator/ConsolePluginEnabledStatusDetail.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import * as React from 'react';
22
import { DASH } from '@console/dynamic-plugin-sdk/src/app/constants';
33
import { DetailsItemComponentProps } from '@console/dynamic-plugin-sdk/src/extensions/details-item';
4-
import { isLoadedDynamicPluginInfo } from '@console/plugin-sdk/src';
54
import { usePluginInfo } from '@console/plugin-sdk/src/api/usePluginInfo';
65
import {
76
ConsolePluginEnabledStatus,
@@ -10,15 +9,15 @@ import {
109
} from './ConsoleOperatorConfig';
1110

1211
const ConsolePluginEnabledStatusDetail: React.FC<DetailsItemComponentProps> = ({ obj }) => {
13-
const [pluginInfoEntries] = usePluginInfo();
12+
const pluginInfoEntries = usePluginInfo();
1413
const { consoleOperatorConfig, consoleOperatorConfigLoaded } = useConsoleOperatorConfigData();
1514

1615
const pluginName = React.useMemo(() => obj?.metadata?.name, [obj?.metadata?.name]);
1716

1817
const pluginInfo = React.useMemo(
1918
() =>
2019
pluginInfoEntries.find((entry) =>
21-
isLoadedDynamicPluginInfo(entry)
20+
entry.status === 'loaded'
2221
? entry.metadata.name === pluginName
2322
: entry.pluginName === pluginName,
2423
),
@@ -28,12 +27,12 @@ const ConsolePluginEnabledStatusDetail: React.FC<DetailsItemComponentProps> = ({
2827
consoleOperatorConfig?.spec?.plugins,
2928
]);
3029

31-
return consoleOperatorConfigLoaded ? (
30+
return consoleOperatorConfigLoaded && pluginName ? (
3231
<ConsolePluginEnabledStatus
3332
pluginName={pluginName}
3433
enabled={
3534
developmentMode
36-
? (isLoadedDynamicPluginInfo(pluginInfo) && pluginInfo.enabled) ?? false
35+
? (pluginInfo?.status === 'loaded' && pluginInfo.enabled) ?? false
3736
: enabledPlugins.includes(pluginName) ?? false
3837
}
3938
/>

frontend/packages/console-app/src/components/console-operator/ConsolePluginStatusDetail.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
import * as React from 'react';
22
import { DetailsItemComponentProps } from '@console/dynamic-plugin-sdk/src/extensions/details-item';
3-
import { isLoadedDynamicPluginInfo } from '@console/plugin-sdk/src';
43
import { usePluginInfo } from '@console/plugin-sdk/src/api/usePluginInfo';
54
import { DASH } from '@console/shared/src/constants';
65
import { ConsolePluginStatus } from './ConsoleOperatorConfig';
76

87
const ConsolePluginStatusDetail: React.FC<DetailsItemComponentProps> = ({ obj }) => {
9-
const [pluginInfoEntries] = usePluginInfo();
8+
const pluginInfoEntries = usePluginInfo();
109
const pluginName = React.useMemo(() => obj?.metadata?.name, [obj?.metadata?.name]);
1110

1211
const pluginInfo = React.useMemo(
1312
() =>
1413
pluginInfoEntries.find((entry) =>
15-
isLoadedDynamicPluginInfo(entry)
14+
entry.status === 'loaded'
1615
? entry.metadata.name === pluginName
1716
: entry.pluginName === pluginName,
1817
),
@@ -22,7 +21,7 @@ const ConsolePluginStatusDetail: React.FC<DetailsItemComponentProps> = ({ obj })
2221
return pluginInfo ? (
2322
<ConsolePluginStatus
2423
status={pluginInfo.status}
25-
errorMessage={pluginInfo.status === 'Failed' ? pluginInfo.errorMessage : undefined}
24+
errorMessage={pluginInfo.status === 'failed' ? pluginInfo.errorMessage : undefined}
2625
/>
2726
) : (
2827
<>{DASH}</>
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,24 @@
11
import * as React from 'react';
22
import { DetailsItemComponentProps } from '@console/dynamic-plugin-sdk/src/extensions/details-item';
3-
import { isLoadedDynamicPluginInfo } from '@console/plugin-sdk/src';
43
import { usePluginInfo } from '@console/plugin-sdk/src/api/usePluginInfo';
54
import { DASH } from '@console/shared/src/constants';
65

76
const ConsolePluginVersionDetail: React.FC<DetailsItemComponentProps> = ({ obj }) => {
8-
const [pluginInfoEntries] = usePluginInfo();
7+
const pluginInfoEntries = usePluginInfo();
98

109
const pluginName = React.useMemo(() => obj?.metadata?.name, [obj?.metadata?.name]);
1110

1211
const pluginInfo = React.useMemo(
1312
() =>
1413
pluginInfoEntries.find((entry) =>
15-
isLoadedDynamicPluginInfo(entry)
14+
entry.status === 'loaded'
1615
? entry.metadata.name === pluginName
1716
: entry.pluginName === pluginName,
1817
),
1918
[pluginInfoEntries, pluginName],
2019
);
2120

22-
return isLoadedDynamicPluginInfo(pluginInfo) ? <>{pluginInfo.metadata.version}</> : <>{DASH}</>;
21+
return pluginInfo?.status === 'loaded' ? <>{pluginInfo.metadata.version}</> : <>{DASH}</>;
2322
};
2423

2524
export default ConsolePluginVersionDetail;

frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/DynamicPluginsPopover.tsx

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,22 @@ import { PluginCSPViolations } from '@console/internal/actions/ui';
88
import { ConsoleOperatorConfigModel, ConsolePluginModel } from '@console/internal/models';
99
import { ConsolePluginKind, referenceForModel } from '@console/internal/module/k8s';
1010
import { RootState } from '@console/internal/redux';
11-
import { isLoadedDynamicPluginInfo, isNotLoadedDynamicPluginInfo } from '@console/plugin-sdk/src';
1211
import { usePluginInfo } from '@console/plugin-sdk/src/api/usePluginInfo';
1312
import { StatusPopupSection } from '@console/shared/src/components/dashboard/status-card/StatusPopup';
1413
import NotLoadedDynamicPlugins from './NotLoadedDynamicPlugins';
1514

1615
const DynamicPluginsPopover: React.FC<DynamicPluginsPopoverProps> = ({ consolePlugins }) => {
1716
const { t } = useTranslation();
18-
const [pluginInfoEntries] = usePluginInfo();
17+
const pluginInfoEntries = usePluginInfo();
1918
const cspViolations = useSelector<RootState, PluginCSPViolations>(({ UI }) =>
2019
UI.get('pluginCSPViolations'),
2120
);
22-
const notLoadedDynamicPluginInfo = pluginInfoEntries.filter(isNotLoadedDynamicPluginInfo);
23-
const failedPlugins = notLoadedDynamicPluginInfo.filter((plugin) => plugin.status === 'Failed');
24-
const pendingPlugins = notLoadedDynamicPluginInfo.filter((plugin) => plugin.status === 'Pending');
25-
const loadedPlugins = pluginInfoEntries.filter(isLoadedDynamicPluginInfo);
21+
const notLoadedDynamicPluginInfo = pluginInfoEntries.filter(
22+
(plugin) => plugin.status !== 'loaded',
23+
);
24+
const failedPlugins = notLoadedDynamicPluginInfo.filter((plugin) => plugin.status === 'failed');
25+
const pendingPlugins = notLoadedDynamicPluginInfo.filter((plugin) => plugin.status === 'pending');
26+
const loadedPlugins = pluginInfoEntries.filter((plugin) => plugin.status === 'loaded');
2627
const loadedPluginsWithCSPViolations = loadedPlugins.filter(
2728
(plugin) => cspViolations[plugin.metadata.name] ?? false,
2829
);

frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/status.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ import { pluginStore } from '@console/internal/plugins';
33

44
export const getDynamicPluginHealthState = (): SubsystemHealth => {
55
const dynamicPluginInfo = pluginStore.getPluginInfo();
6-
if (dynamicPluginInfo.some((plugin) => plugin.status === 'Failed')) {
6+
if (dynamicPluginInfo.some((plugin) => plugin.status === 'failed')) {
77
return { state: HealthState.ERROR };
88
}
9-
if (dynamicPluginInfo.some((plugin) => plugin.status === 'Pending')) {
9+
if (dynamicPluginInfo.some((plugin) => plugin.status === 'pending')) {
1010
return { state: HealthState.PROGRESS };
1111
}
12-
if (dynamicPluginInfo.every((plugin) => plugin.status === 'Loaded')) {
12+
if (dynamicPluginInfo.every((plugin) => plugin.status === 'loaded')) {
1313
return { state: HealthState.OK };
1414
}
1515
return { state: HealthState.UNKNOWN };

frontend/packages/console-app/src/hooks/useCSPViolationDetector.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { useTranslation } from 'react-i18next';
55
import { useDispatch, useSelector } from 'react-redux';
66
import { setPluginCSPViolations, PluginCSPViolations } from '@console/internal/actions/ui';
77
import { RootState } from '@console/internal/redux';
8-
import { isLoadedDynamicPluginInfo } from '@console/plugin-sdk/src';
98
import { usePluginStore } from '@console/plugin-sdk/src/api/usePluginStore';
109
import { useToast } from '@console/shared/src/components/toast';
1110
import { IS_PRODUCTION } from '@console/shared/src/constants/common';
@@ -104,13 +103,13 @@ export const useCSPViolationDetector = () => {
104103
const pluginInfo = pluginStore
105104
.getPluginInfo()
106105
.find((entry) =>
107-
isLoadedDynamicPluginInfo(entry)
106+
entry.status === 'loaded'
108107
? entry.metadata.name === pluginName
109108
: entry.pluginName === pluginName,
110109
);
111110

112111
const validPlugin = !!pluginInfo;
113-
const pluginIsLoaded = validPlugin && pluginInfo.status === 'Loaded';
112+
const pluginIsLoaded = validPlugin && pluginInfo.status === 'loaded';
114113

115114
// eslint-disable-next-line no-console
116115
console.warn(

frontend/packages/console-dynamic-plugin-sdk/src/runtime/__tests__/plugin-dependencies.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ describe('resolvePluginDependencies', () => {
2828
const getLoadedDynamicPluginInfo = (
2929
manifest: StandardConsolePluginManifest,
3030
): LoadedDynamicPluginInfo => ({
31-
status: 'Loaded',
31+
status: 'loaded',
3232
pluginID: getPluginID(manifest),
3333
metadata: _.omit(manifest, ['extensions', 'loadScripts', 'registrationMethod']),
3434
enabled: true,
@@ -37,14 +37,14 @@ describe('resolvePluginDependencies', () => {
3737
const getPendingDynamicPluginInfo = (
3838
manifest: StandardConsolePluginManifest,
3939
): NotLoadedDynamicPluginInfo => ({
40-
status: 'Pending',
40+
status: 'pending',
4141
pluginName: manifest.name,
4242
});
4343

4444
const getFailedDynamicPluginInfo = (
4545
manifest: StandardConsolePluginManifest,
4646
): NotLoadedDynamicPluginInfo => ({
47-
status: 'Failed',
47+
status: 'failed',
4848
pluginName: manifest.name,
4949
errorMessage: `Test error message for plugin ${manifest.name}`,
5050
});

frontend/packages/console-dynamic-plugin-sdk/src/runtime/plugin-dependencies.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,14 +119,14 @@ export const resolvePluginDependencies = (
119119

120120
const unsubListener = subscribeToDynamicPlugins((entries) => {
121121
const loadedPlugins = entries.reduce<Record<string, string>>((acc, e) => {
122-
if (e.status === 'Loaded' && preloadPluginNames.includes(e.metadata.name)) {
122+
if (e.status === 'loaded' && preloadPluginNames.includes(e.metadata.name)) {
123123
acc[e.metadata.name] = e.metadata.version;
124124
}
125125
return acc;
126126
}, {});
127127

128128
const failedPluginNames = entries.reduce<string[]>((acc, e) => {
129-
if (e.status === 'Failed' && preloadPluginNames.includes(e.pluginName)) {
129+
if (e.status === 'failed' && preloadPluginNames.includes(e.pluginName)) {
130130
acc.push(e.pluginName);
131131
}
132132
return acc;

0 commit comments

Comments
 (0)