UNPKG

@openshift-assisted/ui-lib

Version:

React component library for the Assisted Installer UI

93 lines 4.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useOpenShiftVersionsContext = exports.OpenShiftVersionsContextProvider = void 0; const tslib_1 = require("tslib"); const react_1 = tslib_1.__importStar(require("react")); const api_1 = require("../../../common/api"); const apis_1 = require("../../services/apis"); const utils_1 = require("../../../common/utils"); const supportedVersionLevels = ['production', 'maintenance']; const OpenShiftVersionsContext = (0, react_1.createContext)(null); const OpenShiftVersionsContextProvider = ({ children }) => { const [allVersions, setAllVersions] = react_1.default.useState([]); const [latestVersions, setLatestVersions] = react_1.default.useState([]); const [error, setError] = react_1.default.useState(); const sortVersions = (versions) => { return versions.sort((version1, version2) => version1.value.localeCompare(version2.value, undefined, { numeric: true })); }; const getVersions = react_1.default.useCallback((latest, setVersions) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { try { const { data } = yield apis_1.SupportedOpenshiftVersionsAPI.list(latest); const versions = (0, utils_1.getKeys)(data).map((key) => { const versionItem = data[key]; const version = versionItem.displayName; return { label: `OpenShift ${version}`, value: key, version, default: Boolean(versionItem.default), supportLevel: versionItem.supportLevel, cpuArchitectures: versionItem.cpuArchitectures, }; }); setVersions(sortVersions(versions)); } catch (e) { (0, api_1.handleApiError)(e, (e) => { setError({ title: 'Failed to retrieve list of supported OpenShift versions.', message: (0, api_1.getApiErrorMessage)(e), }); }); } }), []); react_1.default.useEffect(() => { if (!allVersions.length) { void getVersions(false, setAllVersions); } }, [allVersions, getVersions]); react_1.default.useEffect(() => { if (!latestVersions.length) { void getVersions(true, setLatestVersions); } }, [getVersions, latestVersions]); const findVersionItemByVersion = react_1.default.useCallback((version) => { return allVersions === null || allVersions === void 0 ? void 0 : allVersions.find(({ value: versionKey }) => { // For version 4.10 match 4.10, 4.10.3, not 4.1, 4.1.5 const versionNameMatch = new RegExp(`^${versionKey}(\\..+)?$`); return versionNameMatch.test(version || ''); }); }, [allVersions]); const isSupportedOpenShiftVersion = react_1.default.useCallback((version) => { if ((allVersions === null || allVersions === void 0 ? void 0 : allVersions.length) === 0) { // Till the data are loaded return true; } const selectedVersion = findVersionItemByVersion(version); return supportedVersionLevels.includes((selectedVersion === null || selectedVersion === void 0 ? void 0 : selectedVersion.supportLevel) || ''); }, [findVersionItemByVersion, allVersions]); const getCpuArchitectures = react_1.default.useCallback((version) => { var _a; // TODO (multi-arch) confirm this is correctly retrieving the associated version const matchingVersion = findVersionItemByVersion(version); return (_a = matchingVersion === null || matchingVersion === void 0 ? void 0 : matchingVersion.cpuArchitectures) !== null && _a !== void 0 ? _a : []; }, [findVersionItemByVersion]); return (react_1.default.createElement(OpenShiftVersionsContext.Provider, { value: { allVersions, latestVersions, loading: !error && ((allVersions === null || allVersions === void 0 ? void 0 : allVersions.length) === 0 || (latestVersions === null || latestVersions === void 0 ? void 0 : latestVersions.length) === 0), error, isSupportedOpenShiftVersion, getCpuArchitectures, } }, children)); }; exports.OpenShiftVersionsContextProvider = OpenShiftVersionsContextProvider; const useOpenShiftVersionsContext = () => { const context = react_1.default.useContext(OpenShiftVersionsContext); if (!context) { throw new Error('useOpenShiftVersionsContext must be used within OpenShiftVersionsContext'); } return context; }; exports.useOpenShiftVersionsContext = useOpenShiftVersionsContext; //# sourceMappingURL=OpenShiftVersionsContext.js.map