mirror of
https://github.com/fleetdm/fleet
synced 2026-05-04 13:59:01 +00:00
## Addresses #10913 - Fixes the bug(s) outlined in the issue - Improves look and feel of the tabbing experience throughout the setup flow: https://www.loom.com/share/c482317d18314e629b7e5ebab7fd2840 ## Checklist for submitter - [x] Changes file added for user-visible changes in `changes/` - [x] Manual QA for all new/changed functionality --------- Co-authored-by: Jacob Shandling <jacob@fleetdm.com>
76 lines
2.2 KiB
JavaScript
76 lines
2.2 KiB
JavaScript
import React, { Component } from "react";
|
|
import PropTypes from "prop-types";
|
|
|
|
import Form from "components/forms/Form";
|
|
import formFieldInterface from "interfaces/form_field";
|
|
import Button from "components/buttons/Button";
|
|
import helpers from "components/forms/RegistrationForm/OrgDetails/helpers";
|
|
import InputField from "components/forms/fields/InputField";
|
|
|
|
const formFields = ["org_name", "org_logo_url"];
|
|
const { validate } = helpers;
|
|
|
|
class OrgDetails extends Component {
|
|
static propTypes = {
|
|
className: PropTypes.string,
|
|
currentPage: PropTypes.bool,
|
|
fields: PropTypes.shape({
|
|
org_name: formFieldInterface.isRequired,
|
|
org_logo_url: formFieldInterface.isRequired,
|
|
}).isRequired,
|
|
handleSubmit: PropTypes.func.isRequired,
|
|
};
|
|
|
|
componentDidUpdate(prevProps) {
|
|
if (
|
|
this.props.currentPage &&
|
|
this.props.currentPage !== prevProps.currentPage
|
|
) {
|
|
// Component has a transition duration of 300ms set in
|
|
// RegistrationForm/_styles.scss. We need to wait 300ms before
|
|
// calling .focus() to preserve smooth transition.
|
|
setTimeout(() => {
|
|
this.firstInput.input.focus();
|
|
}, 300);
|
|
}
|
|
}
|
|
|
|
render() {
|
|
const { className, currentPage, fields, handleSubmit } = this.props;
|
|
const tabIndex = currentPage ? 0 : -1;
|
|
|
|
return (
|
|
<form onSubmit={handleSubmit} className={className} autoComplete="off">
|
|
<div className="registration-fields">
|
|
<InputField
|
|
{...fields.org_name}
|
|
label="Organization name"
|
|
tabIndex={tabIndex}
|
|
ref={(input) => {
|
|
this.firstInput = input;
|
|
}}
|
|
/>
|
|
<InputField
|
|
{...fields.org_logo_url}
|
|
label="Organization logo URL (optional)"
|
|
tabIndex={tabIndex}
|
|
hint="Personalize Fleet with your brand. For best results, use a square image at least 150px wide, like https://fleetdm.com/logo.png."
|
|
/>
|
|
</div>
|
|
<Button
|
|
type="submit"
|
|
tabIndex={tabIndex}
|
|
disabled={!currentPage}
|
|
variant="brand"
|
|
>
|
|
Next
|
|
</Button>
|
|
</form>
|
|
);
|
|
}
|
|
}
|
|
|
|
export default Form(OrgDetails, {
|
|
fields: formFields,
|
|
validate,
|
|
});
|