@openshift-assisted/ui-lib
Version:
React component library for the Assisted Installer UI
89 lines • 7.63 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.VirtualIPControlGroup = void 0;
const tslib_1 = require("tslib");
const react_1 = tslib_1.__importDefault(require("react"));
const react_redux_1 = require("react-redux");
const formik_1 = require("formik");
const react_core_1 = require("@patternfly/react-core");
const common_1 = require("../../../../common");
const selectors_1 = require("../../../store/slices/current-cluster/selectors");
const OcmFormFields_1 = require("../../ui/OcmFormFields");
const use_translation_wrapper_1 = require("../../../../common/hooks/use-translation-wrapper");
const NewFeatureSupportLevelBadge_1 = tslib_1.__importDefault(require("../../../../common/components/newFeatureSupportLevels/NewFeatureSupportLevelBadge"));
const VipStaticValue = ({ vipValue, cluster, validationErrorMessage, id = 'vip-static', }) => {
const { vipDhcpAllocation } = cluster;
const machineNetworkCidr = (0, common_1.selectMachineNetworkCIDR)(cluster);
if (vipDhcpAllocation && !!vipValue) {
return react_1.default.createElement("span", { id: `${id}-allocated` }, vipValue);
}
if (vipDhcpAllocation && validationErrorMessage) {
return (react_1.default.createElement(react_core_1.Alert, { id: `${id}-alert-allocation-failed`, variant: react_core_1.AlertVariant.danger, title: "The DHCP server failed to allocate the IP", isInline: true }, validationErrorMessage));
}
if (vipDhcpAllocation && machineNetworkCidr) {
return (react_1.default.createElement(react_1.default.Fragment, null,
react_1.default.createElement(react_core_1.Spinner, { size: "md", id: `${id}-allocating` }),
react_1.default.createElement("i", null, " This IP is being allocated by the DHCP server")));
}
return react_1.default.createElement("i", null, "This IP will be allocated by the DHCP server");
};
const VirtualIPControlGroup = ({ cluster, isVipDhcpAllocationDisabled, supportLevel, }) => {
const { values, setFieldValue } = (0, formik_1.useFormikContext)();
const { isViewerMode } = (0, react_redux_1.useSelector)(selectors_1.selectCurrentClusterPermissionsState);
const { t } = (0, use_translation_wrapper_1.useTranslation)();
const ipHelperText = 'Make sure the IP is not used by any other device on your network.';
const ipPopoverContent = 'Provides an endpoint for users, both human and machine, to interact with and configure the platform.';
const { 'api-vips-defined': apiVipFailedValidationMessage, 'ingress-vips-defined': ingressVipFailedValidationMessage, } = react_1.default.useMemo(() => (0, common_1.getVipValidationsById)(t, cluster.validationsInfo), [t, cluster.validationsInfo]);
const enableAllocation = values.networkType === common_1.NETWORK_TYPE_SDN;
react_1.default.useEffect(() => {
if (!isViewerMode && !enableAllocation) {
setFieldValue('vipDhcpAllocation', false);
}
}, [enableAllocation, isViewerMode, setFieldValue]);
const onChangeDhcp = react_1.default.useCallback((hasDhcp) => {
// We need to sync the values back to the form
setFieldValue('apiVips', hasDhcp ? [] : cluster.apiVips, true);
setFieldValue('ingressVips', hasDhcp ? [] : cluster.ingressVips, true);
}, [cluster.apiVips, cluster.ingressVips, setFieldValue]);
const setVipValue = (field, e) => {
setFieldValue(field, [{ ip: e.target.value, clusterId: cluster.id }], true);
};
const ipFieldsSuffix = values.stackType === common_1.DUAL_STACK ? ' (IPv4)' : '';
return (react_1.default.createElement(react_1.default.Fragment, null,
!isVipDhcpAllocationDisabled && (react_1.default.createElement(OcmFormFields_1.OcmCheckboxField, { onChange: onChangeDhcp, label: react_1.default.createElement(react_1.default.Fragment, null,
react_1.default.createElement(react_core_1.Tooltip, { hidden: enableAllocation, content: "A cluster with OVN networking type cannot use 'allocate IPs via DHCP server'" },
react_1.default.createElement("span", null, "Allocate IPs via DHCP server")),
react_1.default.createElement(NewFeatureSupportLevelBadge_1.default, { featureId: "VIP_AUTO_ALLOC", supportLevel: supportLevel })), name: "vipDhcpAllocation", isDisabled: !enableAllocation })),
values.vipDhcpAllocation ? (react_1.default.createElement(react_1.default.Fragment, null,
react_1.default.createElement(common_1.FormikStaticField, { label: react_1.default.createElement(react_1.default.Fragment, null,
react_1.default.createElement("span", null,
"API IP",
ipFieldsSuffix),
" ",
react_1.default.createElement(common_1.PopoverIcon, { bodyContent: ipPopoverContent })), name: "apiVip", helperText: ipHelperText, value: (0, common_1.selectApiVip)(values), isValid: !apiVipFailedValidationMessage, isRequired: true },
react_1.default.createElement(VipStaticValue, { id: "vip-api", vipValue: (0, common_1.selectApiVip)(cluster), cluster: cluster, validationErrorMessage: apiVipFailedValidationMessage })),
react_1.default.createElement(common_1.FormikStaticField, { label: react_1.default.createElement(react_1.default.Fragment, null,
react_1.default.createElement("span", null,
"Ingress IP",
ipFieldsSuffix),
' ',
react_1.default.createElement(common_1.PopoverIcon, { bodyContent: ipPopoverContent })), name: "ingressVip", helperText: ipHelperText, value: (0, common_1.selectIngressVip)(values), isValid: !ingressVipFailedValidationMessage, isRequired: true },
react_1.default.createElement(VipStaticValue, { id: "vip-ingress", vipValue: (0, common_1.selectIngressVip)(cluster), cluster: cluster, validationErrorMessage: ingressVipFailedValidationMessage })))) : (react_1.default.createElement(react_core_1.FormGroup, null,
react_1.default.createElement(formik_1.FieldArray, { name: "vips" }, () => (react_1.default.createElement(react_core_1.Stack, null,
react_1.default.createElement(react_core_1.StackItem, null,
react_1.default.createElement(OcmFormFields_1.OcmInputField, { label: react_1.default.createElement(react_1.default.Fragment, null,
react_1.default.createElement("span", null,
"API IP",
ipFieldsSuffix),
' ',
react_1.default.createElement(common_1.PopoverIcon, { bodyContent: ipPopoverContent })), name: "apiVips.0.ip", helperText: ipHelperText, isRequired: true, onChange: (e) => setVipValue('apiVips', e) })),
react_1.default.createElement(react_core_1.StackItem, null,
react_1.default.createElement(OcmFormFields_1.OcmInputField, { name: "ingressVips.0.ip", label: react_1.default.createElement(react_1.default.Fragment, null,
react_1.default.createElement("span", null,
"Ingress IP",
ipFieldsSuffix),
' ',
react_1.default.createElement(common_1.PopoverIcon, { bodyContent: ipPopoverContent })), helperText: ipHelperText, isRequired: true, onChange: (e) => setVipValue('ingressVips', e) })))))))));
};
exports.VirtualIPControlGroup = VirtualIPControlGroup;
//# sourceMappingURL=VirtualIPControlGroup.js.map