@openshift-assisted/ui-lib
Version:
React component library for the Assisted Installer UI
194 lines • 10.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const react_1 = tslib_1.__importDefault(require("react"));
const react_router_dom_v5_compat_1 = require("react-router-dom-v5-compat");
const ClusterWizardContext_1 = require("./ClusterWizardContext");
const wizardTransition_1 = require("./wizardTransition");
const services_1 = require("../../services");
const constants_1 = require("./constants");
const dataTypes_1 = require("../clusterConfiguration/staticIp/data/dataTypes");
const fromInfraEnv_1 = require("../clusterConfiguration/staticIp/data/fromInfraEnv");
const common_1 = require("../../../common");
const useSetClusterPermissions_1 = tslib_1.__importDefault(require("../../hooks/useSetClusterPermissions"));
const hooks_1 = require("../../hooks");
const react_core_1 = require("@patternfly/react-core");
const use_feature_1 = require("../../hooks/use-feature");
const addStepToClusterWizard = (wizardStepIds, addAfterStep, itemsToAdd) => {
const stepsIds = [...wizardStepIds];
const referencePosition = stepsIds.findIndex((step) => step === addAfterStep);
const found = wizardStepIds.filter((step) => step === itemsToAdd[0]);
if (referencePosition !== -1 && found.length === 0) {
stepsIds.splice(referencePosition + 1, 0, ...itemsToAdd);
}
return stepsIds;
};
const removeStepFromClusterWizard = (wizardStepIds, itemToRemove, numberItemsToRemove) => {
const stepsIds = [...wizardStepIds];
const position = stepsIds.findIndex((step) => step === itemToRemove);
if (position !== -1) {
stepsIds.splice(position, numberItemsToRemove);
}
return stepsIds;
};
const getWizardStepIds = (wizardStepIds, staticIpView, customManifestsStep, isSingleClusterFeatureEnabled) => {
let stepsCopy = wizardStepIds ? [...wizardStepIds] : [...constants_1.defaultWizardSteps];
if (staticIpView === dataTypes_1.StaticIpView.YAML) {
stepsCopy = removeStepFromClusterWizard(stepsCopy, 'static-ip-network-wide-configurations', 2);
stepsCopy = addStepToClusterWizard(stepsCopy, 'cluster-details', ['static-ip-yaml-view']);
}
else if (staticIpView === dataTypes_1.StaticIpView.FORM) {
stepsCopy = removeStepFromClusterWizard(stepsCopy, 'static-ip-yaml-view', 1);
stepsCopy = addStepToClusterWizard(stepsCopy, 'cluster-details', constants_1.staticIpFormViewSubSteps);
}
else if (staticIpView === 'dhcp-selected') {
stepsCopy = removeStepFromClusterWizard(stepsCopy, 'static-ip-network-wide-configurations', 2);
}
if (customManifestsStep) {
stepsCopy = addStepToClusterWizard(stepsCopy, 'networking', ['custom-manifests']);
}
else {
stepsCopy = removeStepFromClusterWizard(stepsCopy, 'custom-manifests', 1);
}
if (isSingleClusterFeatureEnabled) {
stepsCopy = addStepToClusterWizard(stepsCopy, 'networking', ['credentials-download']);
}
return stepsCopy;
};
const ClusterWizardContextProvider = ({ children, cluster, infraEnv, permissions, }) => {
const isSingleClusterFeatureEnabled = (0, use_feature_1.useFeature)('ASSISTED_INSTALLER_SINGLE_CLUSTER_FEATURE');
const [currentStepId, setCurrentStepId] = react_1.default.useState();
const [connectedWizardStepIds, setWizardStepIds] = react_1.default.useState();
const [wizardPerPage, setWizardPerPage] = react_1.default.useState(10);
const [customManifestsStep, setCustomManifestsStep] = react_1.default.useState(false);
const [installDisconnected, setInstallDisconnected] = react_1.default.useState(false);
const location = (0, react_router_dom_v5_compat_1.useLocation)();
const locationState = location.state;
const { uiSettings, updateUISettings, loading: UISettingsLoading, error: UISettingsError, } = (0, hooks_1.useUISettings)(cluster === null || cluster === void 0 ? void 0 : cluster.id);
const { clearAlerts, addAlert, alerts } = (0, common_1.useAlerts)();
const setClusterPermissions = (0, useSetClusterPermissions_1.default)();
const wizardStepIds = installDisconnected ? wizardTransition_1.disconnectedSteps : connectedWizardStepIds;
react_1.default.useEffect(() => {
if (!UISettingsLoading) {
const staticIpInfo = infraEnv ? (0, fromInfraEnv_1.getStaticIpInfo)(infraEnv) : undefined;
const customManifestsStepEnabled = !!(uiSettings === null || uiSettings === void 0 ? void 0 : uiSettings.addCustomManifests);
const customManifestsStepNeedsToBeFilled = !!((uiSettings === null || uiSettings === void 0 ? void 0 : uiSettings.addCustomManifests) && !(uiSettings === null || uiSettings === void 0 ? void 0 : uiSettings.customManifestsAdded));
const requiredStepId = (0, wizardTransition_1.getClusterWizardFirstStep)(locationState, staticIpInfo, cluster === null || cluster === void 0 ? void 0 : cluster.status, cluster === null || cluster === void 0 ? void 0 : cluster.hosts, customManifestsStepNeedsToBeFilled);
const firstStepIds = getWizardStepIds(wizardStepIds, staticIpInfo === null || staticIpInfo === void 0 ? void 0 : staticIpInfo.view, customManifestsStepEnabled, isSingleClusterFeatureEnabled);
// Only move step if there is still none, or the user is at a forbidden step
if (!currentStepId ||
(customManifestsStepNeedsToBeFilled && (0, wizardTransition_1.isStepAfter)(currentStepId, requiredStepId))) {
setCurrentStepId(requiredStepId);
}
setWizardStepIds(firstStepIds);
setClusterPermissions(cluster, permissions);
setCustomManifestsStep(!!(uiSettings === null || uiSettings === void 0 ? void 0 : uiSettings.addCustomManifests));
}
if (!!UISettingsError &&
!alerts.some((alert) => alert.title === "Couldn't retrieve UI settings")) {
addAlert({
title: "Couldn't retrieve UI settings",
message: UISettingsError,
variant: react_core_1.AlertVariant.warning,
});
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [uiSettings, UISettingsLoading, UISettingsError]);
const contextValue = react_1.default.useMemo(() => {
if (!wizardStepIds || !currentStepId) {
return null;
}
const handleMoveFromStaticIp = () => {
//if static ip view change wasn't persisted, moving from static ip step should change the wizard steps to match the view in the infra env
const staticIpInfo = infraEnv ? (0, fromInfraEnv_1.getStaticIpInfo)(infraEnv) : undefined;
if (!staticIpInfo) {
throw `Wizard step is currently ${currentStepId}, but no static ip info is defined`;
}
const newStepIds = getWizardStepIds(wizardStepIds, staticIpInfo.view, customManifestsStep, isSingleClusterFeatureEnabled);
setWizardStepIds(newStepIds);
};
const onSetCurrentStepId = (stepId) => {
clearAlerts();
if ((0, wizardTransition_1.isStaticIpStep)(currentStepId) && !(0, wizardTransition_1.isStaticIpStep)(stepId)) {
handleMoveFromStaticIp();
}
setCurrentStepId(stepId);
};
const onSetAddCustomManifestsStep = (addCustomManifest) => {
setCustomManifestsStep(addCustomManifest);
setWizardStepIds(getWizardStepIds(wizardStepIds, undefined, addCustomManifest, isSingleClusterFeatureEnabled));
};
return {
moveBack() {
clearAlerts();
const currentStepIdx = wizardStepIds.indexOf(currentStepId);
let nextStepId = wizardStepIds[currentStepIdx - 1];
if (nextStepId === 'static-ip-host-configurations') {
//when moving back to static ip form view, it should go to network wide configurations
nextStepId = 'static-ip-network-wide-configurations';
}
onSetCurrentStepId(nextStepId);
},
moveNext() {
const currentStepIdx = wizardStepIds.indexOf(currentStepId);
onSetCurrentStepId(wizardStepIds[currentStepIdx + 1]);
},
onUpdateStaticIpView(view) {
if (view === dataTypes_1.StaticIpView.YAML) {
setCurrentStepId('static-ip-yaml-view');
}
else {
setCurrentStepId('static-ip-network-wide-configurations');
}
setWizardStepIds(getWizardStepIds(wizardStepIds, view, customManifestsStep, isSingleClusterFeatureEnabled));
},
onUpdateHostNetworkConfigType(type) {
if (type === services_1.HostsNetworkConfigurationType.STATIC) {
setWizardStepIds(getWizardStepIds(wizardStepIds, dataTypes_1.StaticIpView.FORM, customManifestsStep, isSingleClusterFeatureEnabled));
}
else {
setWizardStepIds(getWizardStepIds(wizardStepIds, 'dhcp-selected', customManifestsStep, isSingleClusterFeatureEnabled));
}
},
wizardStepIds: wizardStepIds,
currentStepId,
setCurrentStepId: onSetCurrentStepId,
customManifestsStep,
setCustomManifestsStep: onSetAddCustomManifestsStep,
wizardPerPage,
setWizardPerPage,
uiSettings,
updateUISettings,
installDisconnected,
setInstallDisconnected: (enabled) => {
setInstallDisconnected(enabled);
if (enabled) {
onSetCurrentStepId(wizardTransition_1.disconnectedSteps[0]);
}
else {
(connectedWizardStepIds === null || connectedWizardStepIds === void 0 ? void 0 : connectedWizardStepIds.length) && onSetCurrentStepId(connectedWizardStepIds[0]);
}
},
};
}, [
wizardStepIds,
currentStepId,
infraEnv,
customManifestsStep,
wizardPerPage,
isSingleClusterFeatureEnabled,
clearAlerts,
uiSettings,
updateUISettings,
installDisconnected,
setInstallDisconnected,
connectedWizardStepIds,
]);
if (!contextValue) {
return null;
}
return (react_1.default.createElement(react_1.default.Fragment, null,
react_1.default.createElement(ClusterWizardContext_1.ClusterWizardContext.Provider, { value: contextValue }, children)));
};
exports.default = ClusterWizardContextProvider;
//# sourceMappingURL=ClusterWizardContextProvider.js.map