@openshift-assisted/ui-lib
Version:
React component library for the Assisted Installer UI
49 lines • 3.42 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.AvailableSubnetsControl = void 0;
const tslib_1 = require("tslib");
const react_1 = tslib_1.__importStar(require("react"));
const react_redux_1 = require("react-redux");
const react_core_1 = require("@patternfly/react-core");
const formik_1 = require("formik");
const ip_address_1 = require("ip-address");
const common_1 = require("../../../../common");
const selectors_1 = require("../../../store/slices/current-cluster/selectors");
const SubnetsDropdown_1 = require("./SubnetsDropdown");
const subnetSort = (subA, subB) => subA.humanized.localeCompare(subB.humanized);
const useAutoSelectSingleAvailableSubnet = (autoSelectNetwork, setFieldValue, cidr, clusterId) => {
(0, react_1.useEffect)(() => {
if (autoSelectNetwork) {
setFieldValue('machineNetworks', [{ cidr, clusterId }], true);
}
}, [autoSelectNetwork, cidr, clusterId, setFieldValue]);
};
const AvailableSubnetsControl = ({ clusterId, hostSubnets, isRequired = false, isDisabled, }) => {
var _a;
const { values, errors, setFieldValue } = (0, formik_1.useFormikContext)();
const isDualStack = values.stackType === common_1.DUAL_STACK;
const { isViewerMode } = (0, react_redux_1.useSelector)(selectors_1.selectCurrentClusterPermissionsState);
const IPv4Subnets = hostSubnets
.filter((subnet) => ip_address_1.Address4.isValid(subnet.subnet))
.sort(subnetSort);
const IPv6Subnets = hostSubnets
.filter((subnet) => ip_address_1.Address6.isValid(subnet.subnet))
.sort(subnetSort);
const cidr = IPv4Subnets.length >= 1 ? IPv4Subnets[0].subnet : common_1.NO_SUBNET_SET;
const hasEmptySelection = ((_a = values.machineNetworks) !== null && _a !== void 0 ? _a : []).length === 0;
const autoSelectNetwork = !isViewerMode && hasEmptySelection;
useAutoSelectSingleAvailableSubnet(autoSelectNetwork, setFieldValue, cidr, clusterId);
return (react_1.default.createElement(react_core_1.FormGroup, { label: "Machine network", labelInfo: isDualStack && 'Primary', fieldId: "machine-networks", isRequired: isRequired },
react_1.default.createElement(formik_1.FieldArray, { name: "machineNetworks" }, () => {
var _a;
return (react_1.default.createElement(react_core_1.Stack, null, isDualStack ? ((_a = values.machineNetworks) === null || _a === void 0 ? void 0 : _a.map((_machineNetwork, index) => {
const machineSubnets = index === 1 ? IPv6Subnets : IPv4Subnets;
return (react_1.default.createElement(react_core_1.StackItem, { key: index },
react_1.default.createElement(SubnetsDropdown_1.SubnetsDropdown, { name: `machineNetworks.${index}.cidr`, machineSubnets: machineSubnets, isDisabled: isDisabled })));
})) : (react_1.default.createElement(react_core_1.StackItem, null,
react_1.default.createElement(SubnetsDropdown_1.SubnetsDropdown, { name: `machineNetworks.0.cidr`, machineSubnets: IPv4Subnets, isDisabled: isDisabled })))));
}),
typeof errors.machineNetworks === 'string' && (react_1.default.createElement(react_core_1.Alert, { variant: react_core_1.AlertVariant.warning, title: errors.machineNetworks, isInline: true }))));
};
exports.AvailableSubnetsControl = AvailableSubnetsControl;
//# sourceMappingURL=AvailableSubnetsControl.js.map