mirror of
https://github.com/fleetdm/fleet
synced 2026-04-21 13:37:30 +00:00
94 lines
2.5 KiB
TypeScript
94 lines
2.5 KiB
TypeScript
import React, { useState } from "react";
|
|
|
|
import Button from "components/buttons/Button";
|
|
// @ts-ignore
|
|
import InputField from "components/forms/fields/InputField";
|
|
import validUrl from "components/forms/validators/valid_url";
|
|
import SectionHeader from "components/SectionHeader";
|
|
|
|
import {
|
|
IAppConfigFormProps,
|
|
IFormField,
|
|
IAppConfigFormErrors,
|
|
} from "../constants";
|
|
|
|
const baseClass = "app-config-form";
|
|
|
|
const WebAddress = ({
|
|
appConfig,
|
|
handleSubmit,
|
|
isUpdatingSettings,
|
|
}: IAppConfigFormProps): JSX.Element => {
|
|
const [formData, setFormData] = useState<any>({
|
|
serverURL: appConfig.server_settings.server_url || "",
|
|
});
|
|
|
|
const { serverURL } = formData;
|
|
|
|
const [formErrors, setFormErrors] = useState<IAppConfigFormErrors>({});
|
|
|
|
const handleInputChange = ({ name, value }: IFormField) => {
|
|
setFormData({ ...formData, [name]: value });
|
|
setFormErrors({});
|
|
};
|
|
|
|
const validateForm = () => {
|
|
const errors: IAppConfigFormErrors = {};
|
|
if (!serverURL) {
|
|
errors.server_url = "Fleet server URL must be present";
|
|
} else if (!validUrl({ url: serverURL, protocols: ["http", "https"] })) {
|
|
errors.server_url = `${serverURL} is not a valid URL`;
|
|
}
|
|
|
|
setFormErrors(errors);
|
|
};
|
|
|
|
const onFormSubmit = (evt: React.MouseEvent<HTMLFormElement>) => {
|
|
evt.preventDefault();
|
|
|
|
// Formatting of API not UI
|
|
const formDataToSubmit = {
|
|
server_settings: {
|
|
server_url: serverURL,
|
|
},
|
|
};
|
|
|
|
handleSubmit(formDataToSubmit);
|
|
};
|
|
|
|
return (
|
|
<div className={baseClass}>
|
|
<div className={`${baseClass}__section`}>
|
|
<SectionHeader title="Fleet web address" />
|
|
<form onSubmit={onFormSubmit} autoComplete="off">
|
|
<InputField
|
|
label="Fleet app URL"
|
|
helpText={
|
|
<>
|
|
Include base path only (eg. no <code>/latest</code>)
|
|
</>
|
|
}
|
|
onChange={handleInputChange}
|
|
name="serverURL"
|
|
value={serverURL}
|
|
parseTarget
|
|
onBlur={validateForm}
|
|
error={formErrors.server_url}
|
|
tooltip="The base URL of this instance for use in Fleet links."
|
|
/>
|
|
<Button
|
|
type="submit"
|
|
variant="brand"
|
|
disabled={Object.keys(formErrors).length > 0}
|
|
className="button-wrap"
|
|
isLoading={isUpdatingSettings}
|
|
>
|
|
Save
|
|
</Button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default WebAddress;
|