@openshift-assisted/ui-lib
Version:
React component library for the Assisted Installer UI
92 lines • 5.78 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const react_1 = tslib_1.__importStar(require("react"));
const formik_1 = require("formik");
const react_core_1 = require("@patternfly/react-core");
const AdvancedNetworkFields_1 = tslib_1.__importDefault(require("../../../common/components/clusterConfiguration/AdvancedNetworkFields"));
const ip_address_1 = require("ip-address");
const networkingSteps_1 = require("../../../common/components/clusterWizard/networkingSteps");
const common_1 = require("../../../common");
const use_translation_wrapper_1 = require("../../../common/hooks/use-translation-wrapper");
const NetworkTypeControlGroup_1 = require("../../../common/components/clusterWizard/networkingSteps/NetworkTypeControlGroup");
const NetworkConfiguration = ({ cluster, hostSubnets, isVipDhcpAllocationDisabled, defaultNetworkSettings, hideManagedNetworking, }) => {
var _a;
const { t } = (0, use_translation_wrapper_1.useTranslation)();
const { setFieldValue, values, touched, validateField } = (0, formik_1.useFormikContext)();
const isMultiNodeCluster = !(0, common_1.isSNO)(cluster);
const isClusterCIDRIPv6 = ip_address_1.Address6.isValid(values.clusterNetworkCidr || '');
const { isIPv6, isSDNSelectable } = react_1.default.useMemo(() => {
const isIPv6 = (0, common_1.isSubnetInIPv6)({
machineNetworkCidr: cluster.machineNetworkCidr,
clusterNetworkCidr: values.clusterNetworkCidr,
serviceNetworkCidr: values.serviceNetworkCidr,
});
return {
isIPv6,
isSDNSelectable: (0, common_1.canSelectNetworkTypeSDN)(!isMultiNodeCluster, isIPv6),
};
}, [
isMultiNodeCluster,
values.clusterNetworkCidr,
cluster.machineNetworkCidr,
values.serviceNetworkCidr,
]);
const [isAdvanced, setAdvanced] = react_1.default.useState((0, common_1.isAdvNetworkConf)(cluster, defaultNetworkSettings));
const toggleAdvConfiguration = (checked) => {
setAdvanced(checked);
if (!checked) {
setFieldValue('clusterNetworkCidr', defaultNetworkSettings.clusterNetworkCidr);
setFieldValue('serviceNetworkCidr', defaultNetworkSettings.serviceNetworkCidr);
setFieldValue('clusterNetworkHostPrefix', defaultNetworkSettings.clusterNetworkHostPrefix);
}
};
const isUserManagedNetworking = values.managedNetworkingType === 'userManaged';
const firstSubnet = (_a = hostSubnets[0]) === null || _a === void 0 ? void 0 : _a.subnet;
(0, react_1.useEffect)(() => {
if (isUserManagedNetworking && isMultiNodeCluster) {
values.hostSubnet !== common_1.NO_SUBNET_SET && setFieldValue('hostSubnet', common_1.NO_SUBNET_SET, false);
}
else if (values.hostSubnet === common_1.NO_SUBNET_SET && firstSubnet) {
setFieldValue('hostSubnet', firstSubnet, false);
}
}, [isUserManagedNetworking, isMultiNodeCluster, values.hostSubnet, setFieldValue, firstSubnet]);
(0, react_1.useEffect)(() => {
if (!cluster.networkType) {
setFieldValue('networkType', common_1.NETWORK_TYPE_OVN);
}
// Skipping "cluster.networkType" as it's ultimately the value we are setting in the form
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [isIPv6, isMultiNodeCluster, setFieldValue]);
(0, react_1.useEffect)(() => {
if (isUserManagedNetworking) {
const shouldValidate = !!touched.hostSubnet;
// We need to reset these fields' values in order to align with the values the server sends
setFieldValue('vipDhcpAllocation', false);
setFieldValue('ingressVips', [], shouldValidate);
setFieldValue('apiVips', [], shouldValidate);
}
else {
if (!values.vipDhcpAllocation) {
validateField('ingressVips');
validateField('apiVips');
}
}
}, [
touched.hostSubnet,
isMultiNodeCluster,
isUserManagedNetworking,
setFieldValue,
values.vipDhcpAllocation,
validateField,
]);
return (react_1.default.createElement(react_core_1.Grid, { hasGutter: true },
!hideManagedNetworking && react_1.default.createElement(networkingSteps_1.ManagedNetworkingControlGroup, null),
isUserManagedNetworking && (react_1.default.createElement(networkingSteps_1.UserManagedNetworkingTextContent, { shouldDisplayLoadBalancersBullet: isMultiNodeCluster, docVersion: cluster.openshiftVersion })),
react_1.default.createElement(NetworkTypeControlGroup_1.NetworkTypeControlGroup, { isSDNSelectable: isSDNSelectable }),
!(isMultiNodeCluster && isUserManagedNetworking) && (react_1.default.createElement(networkingSteps_1.AvailableSubnetsControl, { hostSubnets: hostSubnets, hosts: cluster.hosts || [], isRequired: !isUserManagedNetworking, isMultiNodeCluster: isMultiNodeCluster })),
!isUserManagedNetworking && (react_1.default.createElement(networkingSteps_1.VirtualIPControlGroup, { cluster: cluster, hostSubnets: hostSubnets, isVipDhcpAllocationDisabled: isVipDhcpAllocationDisabled })),
react_1.default.createElement(react_core_1.Checkbox, { id: "useAdvancedNetworking", label: t('ai:Use advanced networking'), description: t('ai:Configure advanced networking properties (e.g. CIDR ranges).'), isChecked: isAdvanced, onChange: (_event, checked) => toggleAdvConfiguration(checked), body: isAdvanced && react_1.default.createElement(AdvancedNetworkFields_1.default, { isClusterCIDRIPv6: isClusterCIDRIPv6 }) })));
};
exports.default = NetworkConfiguration;
//# sourceMappingURL=NetworkConfiguration.js.map