@openshift-assisted/ui-lib
Version:
React component library for the Assisted Installer UI
112 lines • 7.64 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.HostsClusterDetailTabContent = void 0;
const tslib_1 = require("tslib");
const react_1 = tslib_1.__importDefault(require("react"));
const hooks_1 = require("../../../common/hooks");
const common_1 = require("../../../common");
const hooks_2 = require("../../hooks");
const react_core_1 = require("@patternfly/react-core");
const Day2ClusterService_1 = tslib_1.__importStar(require("../../services/Day2ClusterService"));
const api_1 = require("../../../common/api");
const utils_1 = require("../../../common/api/utils");
const AddHosts_1 = require("../AddHosts");
const featureSupportLevels_1 = require("../featureSupportLevels");
const HostsClusterDetailTabContentErrors_1 = require("./HostsClusterDetailTabContentErrors");
const useInfraEnv_1 = tslib_1.__importDefault(require("../../hooks/useInfraEnv"));
const CpuArchitectureService_1 = require("../../services/CpuArchitectureService");
const OpenShiftVersionsContext_1 = require("../clusterWizard/OpenShiftVersionsContext");
const HostsClusterDetailTabContent = ({ cluster: ocmCluster, isVisible, }) => {
var _a, _b;
const [error, setError] = react_1.default.useState();
const [day2Cluster, setDay2Cluster] = (0, hooks_1.useStateSafely)(null);
const pullSecret = (0, hooks_2.usePullSecret)();
// eslint-disable-next-line react-hooks/exhaustive-deps
const ocmClusterMemo = react_1.default.useMemo(() => ocmCluster, []);
const handleClickTryAgainLink = react_1.default.useCallback(() => {
setError(undefined);
setDay2Cluster(null);
}, [setDay2Cluster]);
const { infraEnv } = (0, useInfraEnv_1.default)(ocmCluster.id || '', (0, CpuArchitectureService_1.mapOcmArchToCpuArchitecture)(ocmCluster.cpu_architecture) ||
common_1.CpuArchitecture.USE_DAY1_ARCHITECTURE, ocmCluster.name, pullSecret, ocmCluster.openshift_version);
react_1.default.useEffect(() => {
var _a, _b, _c, _d;
if (!isVisible) {
// the tab is not visible, stop polling
setDay2Cluster(null);
return;
}
const day1ClusterHostCount = ((_b = (_a = ocmClusterMemo === null || ocmClusterMemo === void 0 ? void 0 : ocmClusterMemo.metrics) === null || _a === void 0 ? void 0 : _a.nodes) === null || _b === void 0 ? void 0 : _b.total) || 0;
const openshiftClusterId = Day2ClusterService_1.default.getOpenshiftClusterId(ocmClusterMemo);
if (day1ClusterHostCount === 0 || !openshiftClusterId) {
setError(react_1.default.createElement(HostsClusterDetailTabContentErrors_1.UnableToAddHostsError, { onTryAgain: handleClickTryAgainLink }));
}
if (!day2Cluster && pullSecret) {
const { apiVipDnsname, errorType } = (0, Day2ClusterService_1.getApiVipDnsName)(ocmClusterMemo);
if (errorType) {
const wrongUrlMessage = errorType === 'console'
? `Cluster Console URL is not valid (${((_c = ocmClusterMemo.console) === null || _c === void 0 ? void 0 : _c.url) || ''})`
: `Cluster API URL is not valid (${((_d = ocmClusterMemo.api) === null || _d === void 0 ? void 0 : _d.url) || ''})`;
setError(react_1.default.createElement(react_1.default.Fragment, null,
wrongUrlMessage,
", you can",
' ',
react_1.default.createElement(react_core_1.Button, { variant: 'link', isInline: true, onClick: handleClickTryAgainLink }, "try again"),
"."));
return;
}
if (!apiVipDnsname) {
setError(react_1.default.createElement(react_1.default.Fragment, null, "Neither API nor Console URL has been reported by the cluster yet."));
return;
}
const loadDay2Cluster = () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
var _e, _f;
try {
const day2Cluster = yield Day2ClusterService_1.default.fetchCluster(ocmClusterMemo, pullSecret);
const aiCluster = Day2ClusterService_1.default.completeAiClusterWithOcmCluster(day2Cluster, ocmClusterMemo);
setDay2Cluster(aiCluster !== null && aiCluster !== void 0 ? aiCluster : null);
}
catch (e) {
(0, api_1.handleApiError)(e);
if ((0, utils_1.isApiError)(e)) {
const isImport = (_f = (_e = e.config) === null || _e === void 0 ? void 0 : _e.url) === null || _f === void 0 ? void 0 : _f.includes('/import');
setError(react_1.default.createElement(HostsClusterDetailTabContentErrors_1.AddHostsApiError, { isImport: isImport || false, onTryAgain: handleClickTryAgainLink }));
}
}
});
void loadDay2Cluster();
}
}, [pullSecret, day2Cluster, setDay2Cluster, isVisible, handleClickTryAgainLink, ocmClusterMemo]);
const refreshCluster = react_1.default.useCallback(() => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
if (!(day2Cluster === null || day2Cluster === void 0 ? void 0 : day2Cluster.id)) {
return;
}
try {
const updatedDay2Cluster = yield Day2ClusterService_1.default.fetchClusterById(day2Cluster.id);
const aiCluster = Day2ClusterService_1.default.completeAiClusterWithOcmCluster(updatedDay2Cluster, ocmCluster);
setDay2Cluster(aiCluster !== null && aiCluster !== void 0 ? aiCluster : null);
}
catch (e) {
(0, api_1.handleApiError)(e);
setError(react_1.default.createElement(HostsClusterDetailTabContentErrors_1.ReloadFailedError, { onTryAgain: handleClickTryAgainLink }));
}
}), [day2Cluster === null || day2Cluster === void 0 ? void 0 : day2Cluster.id, handleClickTryAgainLink, ocmCluster, setDay2Cluster]);
react_1.default.useEffect(() => {
const id = setInterval(() => {
void refreshCluster();
}, common_1.DEFAULT_POLLING_INTERVAL);
return () => clearInterval(id);
}, [refreshCluster]);
if (error) {
return (react_1.default.createElement(common_1.ErrorState, { variant: react_core_1.EmptyStateVariant.lg, content: error, title: "Failed to prepare the cluster for adding hosts." }));
}
if (!day2Cluster) {
return react_1.default.createElement(common_1.LoadingState, { content: "Preparing cluster for adding hosts..." });
}
return (react_1.default.createElement(common_1.AddHostsContextProvider, { cluster: day2Cluster, resetCluster: refreshCluster, ocpConsoleUrl: (_a = ocmCluster === null || ocmCluster === void 0 ? void 0 : ocmCluster.console) === null || _a === void 0 ? void 0 : _a.url, canEdit: ocmCluster.canEdit },
react_1.default.createElement(OpenShiftVersionsContext_1.OpenShiftVersionsContextProvider, null,
react_1.default.createElement(featureSupportLevels_1.NewFeatureSupportLevelProvider, { loadingUi: react_1.default.createElement(common_1.LoadingState, null), cluster: day2Cluster, cpuArchitecture: infraEnv === null || infraEnv === void 0 ? void 0 : infraEnv.cpuArchitecture, openshiftVersion: day2Cluster.openshiftVersion, platformType: (_b = day2Cluster.platform) === null || _b === void 0 ? void 0 : _b.type },
react_1.default.createElement(AddHosts_1.AddHosts, null)))));
};
exports.HostsClusterDetailTabContent = HostsClusterDetailTabContent;
//# sourceMappingURL=HostsClusterDetailTabContent.js.map