UNPKG

@openshift-assisted/ui-lib

Version:

React component library for the Assisted Installer UI

85 lines 4.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ACMFeatureSupportLevelProvider = void 0; const tslib_1 = require("tslib"); const react_1 = tslib_1.__importDefault(require("react")); const common_1 = require("../../../common"); const constants_1 = require("../../config/constants"); const featureStateUtils_1 = require("./featureStateUtils"); const helpers_1 = require("../helpers"); const use_translation_wrapper_1 = require("../../../common/hooks/use-translation-wrapper"); const utils_1 = require("../../../common/utils"); const getFeatureSupportLevelsMap = () => { try { const featureSupportLevelsMap = {}; constants_1.featureSupportLevelsACM.supportLevels.forEach((feature) => { const featureIdParams = {}; const featureProps = feature.features; featureProps.forEach((ops) => { featureIdParams[ops.featureId] = ops.supportLevel; }); featureSupportLevelsMap[feature.openshiftVersion] = featureIdParams; }); return featureSupportLevelsMap; } catch (err) { // console.error(err); return {}; } }; const ACMFeatureSupportLevelProvider = ({ children, clusterImages, isEditClusterFlow = false, }) => { const { t } = (0, use_translation_wrapper_1.useTranslation)(); const supportLevelData = react_1.default.useMemo(() => { return getFeatureSupportLevelsMap(); }, []); const ocpVersions = (0, helpers_1.getOCPVersions)(clusterImages); const getNormalizedVersion = react_1.default.useCallback((versionName) => { var _a, _b; const clusterImage = clusterImages.find((clusterImageSet) => { var _a; return ((_a = clusterImageSet.metadata) === null || _a === void 0 ? void 0 : _a.name) === versionName; }); const version = (0, helpers_1.getVersionFromReleaseImage)((_a = clusterImage === null || clusterImage === void 0 ? void 0 : clusterImage.spec) === null || _a === void 0 ? void 0 : _a.releaseImage) || ((_b = clusterImage === null || clusterImage === void 0 ? void 0 : clusterImage.metadata) === null || _b === void 0 ? void 0 : _b.name) || ''; return (0, utils_1.getMajorMinorVersion)(version); }, [clusterImages]); const getVersionSupportLevelsMap = react_1.default.useCallback((versionName) => { const normalized = getNormalizedVersion(versionName); return normalized ? supportLevelData[normalized] : { /* empty FeatureIdToSupportLevel */ }; }, [supportLevelData, getNormalizedVersion]); // TODO(mlibra): Following callbacks can be reused with the OCM flow, just based on providing an application-specific map const getFeatureSupportLevel = react_1.default.useCallback((versionName, featureId) => { const versionSupportLevelData = getVersionSupportLevelsMap(versionName); return versionSupportLevelData ? versionSupportLevelData[featureId] : undefined; }, [getVersionSupportLevelsMap]); const isFeatureSupportedCallback = react_1.default.useCallback((versionName, featureId) => { const supportLevel = getFeatureSupportLevel(versionName, featureId); return (0, featureStateUtils_1.isFeatureSupported)(supportLevel); }, [getFeatureSupportLevel]); const getDisabledReasonCallback = react_1.default.useCallback((versionName, featureId) => { const isSupported = isFeatureSupportedCallback(versionName, featureId); return (0, featureStateUtils_1.getFeatureDisabledReason)(featureId, isEditClusterFlow, versionName, ocpVersions, isSupported, t); }, [isFeatureSupportedCallback, t, ocpVersions, isEditClusterFlow]); const isFeatureDisabled = react_1.default.useCallback((version, featureId) => !!getDisabledReasonCallback(version, featureId), [getDisabledReasonCallback]); const providerValue = react_1.default.useMemo(() => { return { getVersionSupportLevelsMap, getFeatureSupportLevel, isFeatureDisabled, getFeatureDisabledReason: getDisabledReasonCallback, isFeatureSupported: isFeatureSupportedCallback, }; }, [ getVersionSupportLevelsMap, getFeatureSupportLevel, isFeatureDisabled, getDisabledReasonCallback, isFeatureSupportedCallback, ]); return (react_1.default.createElement(common_1.FeatureSupportLevelContextProvider, { value: providerValue }, children)); }; exports.ACMFeatureSupportLevelProvider = ACMFeatureSupportLevelProvider; exports.default = exports.ACMFeatureSupportLevelProvider; //# sourceMappingURL=ACMFeatureSupportLevelProvider.js.map