/* * Copyright (C) 2022 Red Hat, Inc. * SPDX-License-Identifier: LGPL-2.1-or-later */ import cockpit from "cockpit"; import React, { useContext, useEffect, useState } from "react"; import { Button } from "@patternfly/react-core/dist/esm/components/Button/index.js"; import { DescriptionListDescription, DescriptionListGroup, DescriptionListTerm } from "@patternfly/react-core/dist/esm/components/DescriptionList/index.js"; import { Form, FormGroup, FormHelperText } from "@patternfly/react-core/dist/esm/components/Form/index.js"; import { HelperText, HelperTextItem } from "@patternfly/react-core/dist/esm/components/HelperText/index.js"; import { Modal, ModalBody, ModalFooter, ModalHeader } from "@patternfly/react-core/dist/esm/components/Modal/index.js"; import { TextInput } from "@patternfly/react-core/dist/esm/components/TextInput/index.js"; import { Flex, FlexItem } from "@patternfly/react-core/dist/esm/layouts/Flex/index.js"; import { setHostname } from "../../apis/network.js"; import { NetworkContext } from "../../contexts/Common.jsx"; const _ = cockpit.gettext; const SCREEN_ID = "anaconda-screen-review"; const ChangeHostname = ({ initHostname }) => { const [currentHostname, setCurrentHostname] = useState(initHostname); const [error, setError] = useState([]); const [isModalOpen, setIsModalOpen] = useState(false); const validateHostname = (value) => { const validationError = []; if (value.length > 64) { validationError.push(_("Real hostname must be 64 characters or less")); } if (!value.match(/^$|^(?!-)[A-Za-z0-9-]{1,63}(? { validateHostname(value); setCurrentHostname(value); }; const onSubmit = (event) => { setHostname({ hostname: currentHostname }) .then(() => { handleModalToggle(); }) .catch(() => { setError(_("This hostname can't be submitted")); }); if (event) { event.preventDefault(); } return false; }; const handleModalToggle = () => { setIsModalOpen(!isModalOpen); }; const onClose = () => { setCurrentHostname(initHostname); setError([]); handleModalToggle(); }; const disabled = error.length || (initHostname === currentHostname); return ( <>
onHostnameChanged(value)} validated={error.length ? "error" : "default"} /> {error.length > 0 ? ( {error.map((err, i) => {err} )} ) : ( {_("May contain letters, numbers, and dashes.")} {_("If empty, hostname will be transient and set by network information.")} )}
); }; export const HostnameRow = () => { const network = useContext(NetworkContext); const [initHostname, setInitHostname] = useState(network.hostname || ""); useEffect(() => { setInitHostname(network.hostname); }, [network.hostname]); return ( {_("Hostname")} {initHostname !== "" ? initHostname :
{_("transient, will use DHCP")}
}
); };