UNPKG

@openshift-assisted/ui-lib

Version:

React component library for the Assisted Installer UI

410 lines 25.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.categories = exports.getOperatorTitleByFeatureId = exports.useOperatorSpecs = exports.getOperatorSpecs = exports.HighlightedText = exports.highlightMatch = exports.isOCPVersionEqualsOrMore = void 0; const tslib_1 = require("tslib"); const react_1 = tslib_1.__importDefault(require("react")); const constants_1 = require("../../config/constants"); const ui_1 = require("../ui"); const config_1 = require("../../config"); const utils_1 = require("../../utils"); const newFeatureSupportLevels_1 = require("../newFeatureSupportLevels"); const operatorDescriptions_1 = require("./operatorDescriptions"); // TODO check if it's unused and it can be deleted in favor of "isMajorMinorVersionEqualOrGreater" const isOCPVersionEqualsOrMore = (openshiftVersion, ocpVersionToCompare) => { const [majorA, minorA] = (0, utils_1.getMajorMinorVersion)(openshiftVersion).split('.'); const [majorB, minorB] = ocpVersionToCompare.split('.'); return (Number(majorA) > Number(majorB) || (Number(majorA) === Number(majorB) && Number(minorA) >= Number(minorB))); }; exports.isOCPVersionEqualsOrMore = isOCPVersionEqualsOrMore; const highlightMatch = (text, searchTerm) => { if (!searchTerm) return text; try { const escapeSearchTerm = searchTerm.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); const regex = new RegExp(`(${escapeSearchTerm})`, 'gi'); const parts = text.split(regex); return parts.map((part, i) => part.toLowerCase() === searchTerm.toLowerCase() ? react_1.default.createElement("mark", { key: i }, part) : part); } catch (err) { // eslint-disable-next-line no-console console.log('failed to highlight search text', err); return text; } }; exports.highlightMatch = highlightMatch; const HighlightedText = ({ text, searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, (0, exports.highlightMatch)(text, searchTerm))); exports.HighlightedText = HighlightedText; const getOperatorSpecs = (getFeatureSupportLevel, useLVMS) => { return { [exports.categories[Category.STORAGE]]: [ { operatorKey: constants_1.OPERATOR_NAME_LSO, title: 'Local Storage Operator', featureId: 'LSO', descriptionText: operatorDescriptions_1.DESCRIPTION_LSO, Description: ({ openshiftVersion, searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_LSO, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: (0, config_1.getLsoLink)(openshiftVersion) }, "Learn more"))), notStandalone: true, supportLevel: getFeatureSupportLevel('LSO'), }, { operatorKey: constants_1.OPERATOR_NAME_LVM, title: useLVMS ? 'Logical Volume Manager Storage' : 'Logical Volume Manager', featureId: 'LVM', descriptionText: operatorDescriptions_1.DESCRIPTION_LVM, Description: ({ openshiftVersion, searchTerm }) => useLVMS ? (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_LVM, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: (0, config_1.getLvmsDocsLink)(openshiftVersion) }, "Learn more"))) : (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_LVM, searchTerm: searchTerm }), ' ')), supportLevel: getFeatureSupportLevel('LVM'), }, { operatorKey: constants_1.OPERATOR_NAME_ODF, title: 'OpenShift Data Foundation', featureId: 'ODF', descriptionText: operatorDescriptions_1.DESCRIPTION_ODF, Requirements: () => (react_1.default.createElement(ui_1.ExternalLink, { href: config_1.ODF_REQUIREMENTS_LINK }, "Learn more about the requirements for OpenShift Data Foundation")), Description: ({ searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_ODF, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: config_1.ODF_LINK }, "Learn more"))), supportLevel: getFeatureSupportLevel('ODF'), }, { operatorKey: constants_1.OPERATOR_NAME_OADP, title: 'OADP', featureId: 'OADP', descriptionText: operatorDescriptions_1.DESCRIPTION_OADP, Description: ({ openshiftVersion, searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_OADP, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: (0, config_1.getOadpLink)(openshiftVersion) }, "Learn more"))), notStandalone: true, supportLevel: getFeatureSupportLevel('OADP'), }, ], [exports.categories[Category.VIRT]]: [ { operatorKey: constants_1.OPERATOR_NAME_CNV, title: 'OpenShift Virtualization', featureId: 'CNV', descriptionText: operatorDescriptions_1.DESCRIPTION_CNV, Requirements: () => (react_1.default.createElement(react_1.default.Fragment, null, "Enabled CPU virtualization support in BIOS (Intel-VT / AMD-V) on all nodes")), Description: ({ searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_CNV, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: config_1.CNV_LINK }, "Learn more"))), supportLevel: getFeatureSupportLevel('CNV'), }, { operatorKey: constants_1.OPERATOR_NAME_MTV, title: 'Migration Toolkit for Virtualization', featureId: 'MTV', descriptionText: operatorDescriptions_1.DESCRIPTION_MTV, Description: ({ searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_MTV, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: config_1.MTV_LINK }, "Learn more"))), supportLevel: getFeatureSupportLevel('MTV'), }, { operatorKey: constants_1.OPERATOR_NAME_OSC, title: 'OpenShift sandboxed containers', featureId: 'OSC', descriptionText: operatorDescriptions_1.DESCRIPTION_OSC, Requirements: () => (react_1.default.createElement(ui_1.ExternalLink, { href: config_1.OSC_REQUIREMENTS_LINK }, "Learn more about the requirements for OpenShift sandboxed containers")), Description: ({ searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_OSC, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: config_1.OSC_LINK }, "Learn more"))), supportLevel: getFeatureSupportLevel('OSC'), }, ], [exports.categories[Category.AI]]: [ { operatorKey: constants_1.OPERATOR_NAME_OPENSHIFT_AI, title: 'OpenShift AI', featureId: 'OPENSHIFT_AI', descriptionText: operatorDescriptions_1.DESCRIPTION_OPENSHIFT_AI, Requirements: () => (react_1.default.createElement(ui_1.ExternalLink, { href: config_1.OPENSHIFT_AI_REQUIREMENTS_LINK }, "Learn more")), Description: ({ searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_OPENSHIFT_AI, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: config_1.OPENSHIFT_AI_LINK }, "Learn more"))), supportLevel: getFeatureSupportLevel('OPENSHIFT_AI'), }, { operatorKey: constants_1.OPERATOR_NAME_AMD_GPU, title: 'AMD GPU', featureId: 'AMD_GPU', descriptionText: operatorDescriptions_1.DESCRIPTION_AMD_GPU, Requirements: () => react_1.default.createElement(react_1.default.Fragment, null, "Requires at least one supported AMD GPU"), Description: ({ searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, ' ', react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_AMD_GPU, searchTerm: searchTerm }), ' ')), supportLevel: getFeatureSupportLevel('AMD_GPU'), }, { operatorKey: constants_1.OPERATOR_NAME_NVIDIA_GPU, title: 'NVIDIA GPU', featureId: 'NVIDIA_GPU', descriptionText: operatorDescriptions_1.DESCRIPTION_NVIDIA_GPU, Requirements: () => react_1.default.createElement(react_1.default.Fragment, null, "Requires at least one supported NVIDIA GPU"), Description: ({ openshiftVersion, searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_NVIDIA_GPU, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: (0, config_1.getNvidiaGpuLink)(openshiftVersion) }, "Learn more"))), supportLevel: getFeatureSupportLevel('NVIDIA_GPU'), }, ], [exports.categories[Category.NETWORK]]: [ { operatorKey: constants_1.OPERATOR_NAME_NMSTATE, title: 'NMState', featureId: 'NMSTATE', descriptionText: operatorDescriptions_1.DESCRIPTION_NMSTATE, Description: ({ openshiftVersion, searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_NMSTATE, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: (0, config_1.getNmstateLink)(openshiftVersion) }, "Learn more"))), supportLevel: getFeatureSupportLevel('NMSTATE'), }, { operatorKey: constants_1.OPERATOR_NAME_SERVICEMESH, title: 'Service Mesh', featureId: 'SERVICEMESH', descriptionText: operatorDescriptions_1.DESCRIPTION_SERVICEMESH, Description: ({ searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_SERVICEMESH, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: config_1.SERVICE_MESH_OPERATOR_LINK }, "Learn more"))), notStandalone: true, supportLevel: getFeatureSupportLevel('SERVICEMESH'), }, { operatorKey: constants_1.OPERATOR_NAME_METALLB, title: 'MetalLB', featureId: 'METALLB', descriptionText: operatorDescriptions_1.DESCRIPTION_METALLB, Description: ({ openshiftVersion, searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_METALLB, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: (0, config_1.getMetalLbLink)(openshiftVersion) }, "Learn more"))), notStandalone: true, supportLevel: getFeatureSupportLevel('METALLB'), }, ], [exports.categories[Category.REMEDIATION]]: [ { operatorKey: constants_1.OPERATOR_NAME_NODE_HEALTHCHECK, title: 'Node Healthcheck', featureId: 'NODE_HEALTHCHECK', descriptionText: operatorDescriptions_1.DESCRIPTION_NODE_HEALTHCHECK, Description: ({ searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_NODE_HEALTHCHECK, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: config_1.NODE_HEALTHCHECK_LINK }, "Learn more"))), notStandalone: true, supportLevel: getFeatureSupportLevel('NODE_HEALTHCHECK'), }, { operatorKey: constants_1.OPERATOR_NAME_FENCE_AGENTS_REMEDIATION, title: 'Fence Agents Remediation', featureId: 'FENCE_AGENTS_REMEDIATION', descriptionText: operatorDescriptions_1.DESCRIPTION_FENCE_AGENTS_REMEDIATION, Description: ({ searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_FENCE_AGENTS_REMEDIATION, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: config_1.FENCE_AGENTS_REMEDIATION_LINK }, "Learn more"))), notStandalone: true, supportLevel: getFeatureSupportLevel('FENCE_AGENTS_REMEDIATION'), }, ], [exports.categories[Category.SECURITY]]: [ { operatorKey: constants_1.OPERATOR_NAME_AUTHORINO, title: 'Authorino', featureId: 'AUTHORINO', descriptionText: operatorDescriptions_1.DESCRIPTION_AUTHORINO, Description: ({ searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_AUTHORINO, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: config_1.AUTHORINO_OPERATOR_LINK }, "Learn more"))), notStandalone: true, supportLevel: getFeatureSupportLevel('AUTHORINO'), }, { operatorKey: constants_1.OPERATOR_NAME_KMM, title: 'Kernel Module Management', featureId: 'KMM', descriptionText: operatorDescriptions_1.DESCRIPTION_KMM, Description: ({ openshiftVersion, searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_KMM, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: (0, config_1.getKmmDocsLink)(openshiftVersion) }, "Learn more"))), supportLevel: getFeatureSupportLevel('KMM'), }, ], [exports.categories[Category.CI_CD]]: [ { operatorKey: constants_1.OPERATOR_NAME_PIPELINES, title: 'Pipelines', featureId: 'PIPELINES', descriptionText: operatorDescriptions_1.DESCRIPTION_PIPELINES, Description: ({ searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_PIPELINES, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: config_1.PIPELINES_OPERATOR_LINK }, "Learn more"))), notStandalone: true, supportLevel: getFeatureSupportLevel('PIPELINES'), }, { operatorKey: constants_1.OPERATOR_NAME_SERVERLESS, title: 'Serverless', featureId: 'SERVERLESS', descriptionText: operatorDescriptions_1.DESCRIPTION_SERVERLESS, Description: ({ searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_SERVERLESS, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: config_1.SERVERLESS_OPERATOR_LINK }, "Learn more"))), notStandalone: true, supportLevel: getFeatureSupportLevel('SERVERLESS'), }, ], [exports.categories[Category.PLATFORM]]: [ { operatorKey: constants_1.OPERATOR_NAME_MCE, title: 'Multicluster engine', featureId: 'MCE', descriptionText: operatorDescriptions_1.DESCRIPTION_MCE, Description: ({ openshiftVersion, searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_MCE, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: (0, config_1.getMceDocsLink)(openshiftVersion) }, "Learn more"))), supportLevel: getFeatureSupportLevel('MCE'), }, { operatorKey: constants_1.OPERATOR_NAME_NODE_MAINTENANCE, title: 'Node Maintenance', featureId: 'NODE_MAINTENANCE', descriptionText: operatorDescriptions_1.DESCRIPTION_NODE_MAINTENANCE, Description: ({ searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_NODE_MAINTENANCE, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: config_1.NODE_MAINTENANCE_LINK }, "Learn more"))), notStandalone: true, supportLevel: getFeatureSupportLevel('NODE_MAINTENANCE'), }, { operatorKey: constants_1.OPERATOR_NAME_CLUSTER_OBSERVABILITY, title: 'Cluster Observability', featureId: 'CLUSTER_OBSERVABILITY', descriptionText: operatorDescriptions_1.DESCRIPTION_CLUSTER_OBSERVABILITY, Description: ({ openshiftVersion, searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_CLUSTER_OBSERVABILITY, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: (0, config_1.getClusterObservabilityLink)(openshiftVersion) }, "Learn more"))), notStandalone: true, supportLevel: getFeatureSupportLevel('CLUSTER_OBSERVABILITY'), }, ], [exports.categories[Category.SCHEDULING]]: [ { operatorKey: constants_1.OPERATOR_NAME_NODE_FEATURE_DISCOVERY, title: 'Node Feature Discovery', featureId: 'NODE_FEATURE_DISCOVERY', descriptionText: operatorDescriptions_1.DESCRIPTION_NODE_FEATURE_DISCOVERY, Description: ({ openshiftVersion, searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_NODE_FEATURE_DISCOVERY, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: (0, config_1.getNodeFeatureDiscoveryLink)(openshiftVersion) }, "Learn more"))), supportLevel: getFeatureSupportLevel('NODE_FEATURE_DISCOVERY'), }, { operatorKey: constants_1.OPERATOR_NAME_KUBE_DESCHEDULER, title: 'Kube Descheduler', featureId: 'KUBE_DESCHEDULER', descriptionText: operatorDescriptions_1.DESCRIPTION_KUBE_DESCHEDULER, Description: ({ openshiftVersion, searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_KUBE_DESCHEDULER, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: (0, config_1.getKubeDeschedulerLink)(openshiftVersion) }, "Learn more"))), notStandalone: true, supportLevel: getFeatureSupportLevel('KUBE_DESCHEDULER'), }, { operatorKey: constants_1.OPERATOR_NAME_NUMA_RESOURCES, title: 'NUMA Resources', featureId: 'NUMA_RESOURCES', descriptionText: operatorDescriptions_1.DESCRIPTION_NUMA_RESOURCES, Description: ({ openshiftVersion, searchTerm }) => (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.HighlightedText, { text: operatorDescriptions_1.DESCRIPTION_NUMA_RESOURCES, searchTerm: searchTerm }), ' ', react_1.default.createElement(ui_1.ExternalLink, { href: (0, config_1.getNumaResourcesLink)(openshiftVersion) }, "Learn more"))), notStandalone: true, supportLevel: getFeatureSupportLevel('NUMA_RESOURCES'), }, ], }; }; exports.getOperatorSpecs = getOperatorSpecs; const useOperatorSpecs = () => { const { getFeatureSupportLevel } = (0, newFeatureSupportLevels_1.useNewFeatureSupportLevel)(); const useLVMS = getFeatureSupportLevel('LVM') === 'supported'; // Grouped by category const byCategory = react_1.default.useMemo(() => (0, exports.getOperatorSpecs)(getFeatureSupportLevel, useLVMS), [getFeatureSupportLevel, useLVMS]); // Flat map operatorKey -> spec const byKey = react_1.default.useMemo(() => { return Object.values(byCategory).reduce((acc, specs) => { specs.forEach((spec) => { acc[spec.operatorKey] = spec; }); return acc; }, {}); }, [byCategory]); return { byCategory, byKey }; }; exports.useOperatorSpecs = useOperatorSpecs; const getOperatorTitleByFeatureId = (featureId) => { const allSpecs = (0, exports.getOperatorSpecs)(() => undefined); for (const categorySpecs of Object.values(allSpecs)) { const spec = categorySpecs.find((s) => s.featureId === featureId); if (spec) { return spec.title; } } return undefined; }; exports.getOperatorTitleByFeatureId = getOperatorTitleByFeatureId; var Category; (function (Category) { Category[Category["STORAGE"] = 0] = "STORAGE"; Category[Category["VIRT"] = 1] = "VIRT"; Category[Category["AI"] = 2] = "AI"; Category[Category["NETWORK"] = 3] = "NETWORK"; Category[Category["CI_CD"] = 4] = "CI_CD"; Category[Category["PLATFORM"] = 5] = "PLATFORM"; Category[Category["SECURITY"] = 6] = "SECURITY"; Category[Category["SCHEDULING"] = 7] = "SCHEDULING"; Category[Category["REMEDIATION"] = 8] = "REMEDIATION"; Category[Category["OTHER"] = 9] = "OTHER"; })(Category || (Category = {})); exports.categories = { [Category.STORAGE]: 'Storage', [Category.VIRT]: 'Virtualization', [Category.AI]: 'AI', [Category.NETWORK]: 'Network', [Category.SECURITY]: 'Security & Access Control', [Category.CI_CD]: 'CI/CD & Dev Productivity', [Category.PLATFORM]: 'Platform Operations & Lifecycle', [Category.SCHEDULING]: 'Scheduling', [Category.REMEDIATION]: 'Remediation', [Category.OTHER]: 'Other', }; //# sourceMappingURL=operatorSpecs.js.map