Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import './UserPreferenceForm.scss';
type UserPreferenceFormProps = { items: ResolvedUserPreferenceItem[] };

const UserPreferenceForm: React.FC<UserPreferenceFormProps> = ({ items }) =>
items?.length > 0 ? (
items && items.length > 0 ? (
<Form onSubmit={(event) => event.preventDefault()} className="co-user-preference__form">
{items.map((item) => (
<UserPreferenceField key={item.id} item={item} />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import * as React from 'react';
import { useState } from 'react';
import {
Tabs,
Tab,
Expand Down Expand Up @@ -57,8 +58,9 @@ const UserPreferencePage: React.FC = () => {
const { group: groupIdFromUrl } = useParams();
const initialTabId =
sortedUserPreferenceGroups.find((extension) => extension.id === groupIdFromUrl)?.id ||
sortedUserPreferenceGroups[0]?.id;
const [activeTabId, setActiveTabId] = React.useState<string>(initialTabId);
sortedUserPreferenceGroups[0]?.id ||
'general';
const [activeTabId, setActiveTabId] = useState<string>(initialTabId);

const [userPreferenceTabs, userPreferenceTabContents] = React.useMemo<
[React.ReactElement<TabProps>[], React.ReactElement<TabContentProps>[]]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ const { editYaml, events } = navFactory;

const Details: React.FC<DetailsProps> = ({ obj }) => {
const { t } = useTranslation();
const { deletionPolicy, driver } = obj?.spec;
const deletionPolicy = obj?.spec?.deletionPolicy || '';
const driver = obj?.spec?.driver || '';
const { volumeHandle, snapshotHandle } = obj?.spec?.source || {};
const { name: snapshotName, namespace: snapshotNamespace } = obj?.spec?.volumeSnapshotRef || {};
const size = obj.status?.restoreSize;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,10 @@ export const tableColumnInfo = [
];

const Row: React.FC<RowProps<VolumeSnapshotContentKind>> = ({ obj }) => {
const { name, creationTimestamp } = obj?.metadata || {};
const { name: snapshotName, namespace: snapshotNamespace } = obj?.spec?.volumeSnapshotRef || {};
const name = obj?.metadata?.name || '';
const creationTimestamp = obj?.metadata?.creationTimestamp || '';
const snapshotName = obj?.spec?.volumeSnapshotRef?.name || '';
const snapshotNamespace = obj?.spec?.volumeSnapshotRef?.namespace || '';
const size = obj.status?.restoreSize;
const sizeMetrics = size ? humanizeBinaryBytes(size).string : '-';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ const { editYaml, events } = navFactory;

const Details: React.FC<DetailsProps> = ({ obj }) => {
const { t } = useTranslation();
const { namespace } = obj.metadata || {};
const namespace = obj?.metadata?.namespace || '';
const sourceModel = obj?.spec?.source?.persistentVolumeClaimName
? PersistentVolumeClaimModel
: VolumeSnapshotContentModel;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,9 @@ const Row: React.FC<RowProps<VolumeSnapshotKind, VolumeSnapshotRowProsCustomData
obj,
rowData: { customData },
}) => {
const { name, namespace, creationTimestamp } = obj?.metadata || {};
const name = obj?.metadata?.name || '';
const namespace = obj?.metadata?.namespace || '';
const creationTimestamp = obj?.metadata?.creationTimestamp || '';
const size = obj?.status?.restoreSize;
const sizeBase = convertToBaseValue(size);
const sizeMetrics = size ? humanizeBinaryBytes(sizeBase).string : '-';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// This file will be removed as part of https://issues.redhat.com//browse/CONSOLE-4668
export type ExtensionCatalogDatabaseContextValues = {
done: boolean;
error: Error;
error: Error | null;
};
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ts-ingore, will be removed as part of https://issues.redhat.com//browse/CONSOLE-4668

Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { useState, useRef, useEffect } from 'react';
// This file will be removed as part of https://issues.redhat.com//browse/CONSOLE-4668
import { useEffect, useRef, useState } from 'react';
import * as _ from 'lodash';
import { K8sResourceCommon } from '@console/dynamic-plugin-sdk/src';
import { useK8sWatchResource } from '@console/dynamic-plugin-sdk/src/api/core-api';
Expand All @@ -13,7 +14,7 @@ export const useExtensionCatalogDatabaseContextValues: UseExtensionCatalogDataba
isList: true,
});
const [done, setDone] = useState(false);
const [error, setError] = useState<Error>();
const [error, setError] = useState<Error | null>(null);
const refresh = useRef(
_.debounce((newCatalogs: K8sResourceCommon[]) => {
setDone(false);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// This file will be removed as part of https://issues.redhat.com//browse/CONSOLE-4668
/* eslint-disable no-console */
import { K8sResourceCommon } from '@console/dynamic-plugin-sdk/src/lib-core';
import { bundleHasProperty } from '../fbc/bundles';
Expand All @@ -22,7 +23,7 @@ const streamFBCObjectsToIndexedDB = (
): Promise<number> =>
reader.read().then(async ({ done, value }) => {
if (done) {
return count;
return count ?? 0;
}
if (
isFileBasedCatalogBundle(value) &&
Expand All @@ -43,13 +44,13 @@ const injestClusterCatalog = async (
db: IDBDatabase,
catalog: K8sResourceCommon,
): Promise<number> => {
const catalogName = catalog.metadata.name;
const catalogName = catalog.metadata?.name;
console.log('[Extension Catalog Database] Injesting FBC from ClusterCatalog', catalogName);
return fetchAndProcessJSONLines<FileBasedCatalogObject>(
`/api/catalogd/catalogs/${catalogName}/api/v1/all`,
{ 'Content-Type': 'application/jsonl' },
)
.then((reader) => streamFBCObjectsToIndexedDB(db, catalogName, reader))
.then((reader) => streamFBCObjectsToIndexedDB(db, catalogName || '', reader))
.then((count) => {
console.log(
'[Extension Catalog Database] Successfully injested',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ export const parseJSONLines = <ObjectType>() =>
},
});

// This file will be removed as part of https://issues.redhat.com//browse/CONSOLE-4668
// ObjectType is the expected shape of each JSON object (defaults to any).
// HandlerResult is the expected value the handler will resolve when called with ObjectType as an argument
export const fetchAndProcessJSONLines = <ObjectType = any>(
Expand All @@ -41,6 +42,9 @@ export const fetchAndProcessJSONLines = <ObjectType = any>(
if (!response.ok) {
throw new Error(`Failed to fetch ${url}: ${response.statusText}`);
}
if (!response.body) {
throw new Error(`Response body is null for ${url}`);
}
return response.body
.pipeThrough(new TextDecoderStream())
.pipeThrough<ObjectType>(parseJSONLines<ObjectType>())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// This file will be removed as part of https://issues.redhat.com//browse/CONSOLE-4668
import { InfrastructureFeature } from '@console/operator-lifecycle-manager/src/components/operator-hub';

export enum FileBasedCatalogSchema {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// This file will be removed as part of https://issues.redhat.com//browse/CONSOLE-4668
import * as SemVer from 'semver';
import { getIndexedItems } from '../database/indexeddb';
import { getBundleMetadata } from './metadata';
Expand All @@ -15,7 +16,7 @@ const getBundleVersion = (bundle: FileBasedCatalogBundle): SemVer.SemVer => {
const versionString =
getBundleProperty<PackagePropertyValue>(bundle, FileBasedCatalogPropertyType.Package)
?.version || '';
return SemVer.parse(versionString);
return SemVer.parse(versionString) ?? new SemVer.SemVer('0.0.0');
};

export const compareBundleVersions = (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// This file will be removed as part of https://issues.redhat.com//browse/CONSOLE-4668
import { CatalogItem } from '@console/dynamic-plugin-sdk/src';
import { SyncMarkdownView } from '@console/internal/components/markdown-view';
import { CapabilityLevel } from '@console/operator-lifecycle-manager/src/components/operator-hub/operator-hub-item-details';
Expand Down Expand Up @@ -29,7 +30,7 @@ export const normalizeExtensionCatalogItem: NormalizeExtensionCatalogItem = (pkg
createdAt,
} = pkg;
const [validSubscriptions, validSubscriptionFilters] = validSubscriptionReducer(
validSubscription,
validSubscription ?? [],
);
return {
attributes: {
Expand All @@ -50,7 +51,7 @@ export const normalizeExtensionCatalogItem: NormalizeExtensionCatalogItem = (pkg
properties: [
{
label: 'Capability level',
value: <CapabilityLevel capability={capabilities} />,
value: <CapabilityLevel capability={capabilities ?? ''} />,
},
{ label: 'Source', value: source || '-' },
{ label: 'Provider', value: provider || '-' },
Expand All @@ -77,7 +78,7 @@ export const normalizeExtensionCatalogItem: NormalizeExtensionCatalogItem = (pkg
descriptions: [{ value: <SyncMarkdownView content={longDescription} /> }],
},
displayName,
icon: icon ? { url: `data:${icon.mediatype};base64,${icon.base64data}` } : null,
icon: icon ? { url: `data:${icon.mediatype};base64,${icon.base64data}` } : undefined,
name: displayName || name,
supportUrl: support,
provider,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// This file will be removed as part of https://issues.redhat.com//browse/CONSOLE-4668
/* eslint-disable no-console */
import * as _ from 'lodash';
import {
Expand Down Expand Up @@ -139,7 +140,7 @@ const aggregateMetadata = (
csvMetadata: CSVMetadata,
packageMetadata?: PackageMetadata,
): PackageMetadata => {
if (!csvMetadata) return packageMetadata;
if (!csvMetadata) return packageMetadata ?? {};
return Object.keys(csvMetadata)
.sort() // ensure annotations are handled first
.reduce((acc, key) => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// This file will be removed as part of https://issues.redhat.com//browse/CONSOLE-4668
/* eslint-disable no-console */
import { defaultClusterCatalogSourceMap } from '@console/operator-lifecycle-manager/src/components/operator-hub/operator-hub-utils';
import { PackageSource } from '@console/operator-lifecycle-manager/src/const';
Expand Down Expand Up @@ -40,7 +41,7 @@ export const addPackagesToExtensionCatalog = (
pkg.name,
e.toString(),
);
return null;
throw e;
}),
),
);
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// This file will be removed as part of https://issues.redhat.com//browse/CONSOLE-4668
import {
InfrastructureFeature,
OLMAnnotation,
Expand Down
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ts-ingore, will be removed as part of https://issues.redhat.com//browse/CONSOLE-4668

Original file line number Diff line number Diff line change
@@ -1,12 +1,22 @@
// This file will be removed as part of https://issues.redhat.com//browse/CONSOLE-4668
import * as React from 'react';
import { CatalogCategory } from '@console/dynamic-plugin-sdk/src';
import { usePoll } from '@console/internal/components/utils';
import { ExtensionCatalogDatabaseContext } from '../contexts/ExtensionCatalogDatabaseContext';
import { getUniqueIndexKeys, openDatabase } from '../database/indexeddb';

export const useExtensionCatalogCategories = (): CatalogCategory[] => {
export const useExtensionCatalogCategories = (): [CatalogCategory[], boolean, string] => {
const { done: initDone, error: initError } = React.useContext(ExtensionCatalogDatabaseContext);
const [categories, setCategories] = React.useState([]);
const [categories, setCategories] = React.useState<IDBValidKey[]>([]);
const [loading, setLoading] = React.useState(!initDone);
const [error, setError] = React.useState(initError.toString() || '');

React.useEffect(() => {
if (!initDone || initError) {
setLoading(!initDone);
setError(initError.toString() || '');
}
}, [initDone, initError]);

const tick = React.useCallback(() => {
if (initDone && !initError) {
Expand All @@ -24,10 +34,10 @@ export const useExtensionCatalogCategories = (): CatalogCategory[] => {
// Poll IndexedDB (IDB) every 10 seconds
usePoll(tick, 10000);
const catalogCategories = React.useMemo<CatalogCategory[]>(
() => categories.map((c) => ({ id: c, label: c, tags: [c] })),
() => categories.map((c) => ({ id: c as string, label: c as string, tags: [c as string] })),
[categories],
);
return catalogCategories;
return [catalogCategories, loading, error];
};

export default useExtensionCatalogCategories;
Original file line number Diff line number Diff line change
@@ -1,26 +1,27 @@
import { useContext, useState, useEffect, useCallback, useMemo } from 'react';
// This file will be removed as part of https://issues.redhat.com//browse/CONSOLE-4668
import * as React from 'react';
import { CatalogItem } from '@console/dynamic-plugin-sdk/src';
import { usePoll } from '@console/internal/components/utils';
import { ExtensionCatalogDatabaseContext } from '../contexts/ExtensionCatalogDatabaseContext';
import { getItems, openDatabase } from '../database/indexeddb';
import { normalizeExtensionCatalogItem } from '../fbc/catalog-item';
import { ExtensionCatalogItem } from '../fbc/types';

type UseExtensionCatalogItems = () => [CatalogItem[], boolean, Error];
type UseExtensionCatalogItems = () => [CatalogItem[], boolean, Error | null];
export const useExtensionCatalogItems: UseExtensionCatalogItems = () => {
const { done: initDone, error: initError } = useContext(ExtensionCatalogDatabaseContext);
const [items, setItems] = useState<ExtensionCatalogItem[]>([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<Error>();
const { done: initDone, error: initError } = React.useContext(ExtensionCatalogDatabaseContext);
const [items, setItems] = React.useState<ExtensionCatalogItem[]>([]);
const [loading, setLoading] = React.useState(true);
const [error, setError] = React.useState<Error | null>(null);

useEffect(() => {
React.useEffect(() => {
if (!initDone || initError) {
setLoading(!initDone);
setError(initError);
}
}, [initDone, initError]);

const tick = useCallback(() => {
const tick = React.useCallback(() => {
if (initDone && !initError) {
openDatabase('olm')
.then((database) => getItems<ExtensionCatalogItem>(database, 'extension-catalog'))
Expand All @@ -40,9 +41,10 @@ export const useExtensionCatalogItems: UseExtensionCatalogItems = () => {
// Poll IndexedDB (IDB) every 10 seconds
usePoll(tick, 10000);

const normalizedItems = useMemo<CatalogItem[]>(() => items.map(normalizeExtensionCatalogItem), [
items,
]);
const normalizedItems = React.useMemo<CatalogItem[]>(
() => items.map(normalizeExtensionCatalogItem),
[items],
);

return [normalizedItems, loading, error];
};
Expand Down
Loading