UNPKG

@openshift-assisted/ui-lib

Version:

React component library for the Assisted Installer UI

89 lines 7.63 kB
"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