@mui/material#FormHelperText JavaScript Examples
The following examples show how to use
@mui/material#FormHelperText.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: FormGroupCheckbox.jsx From matx-react with MIT License | 5 votes |
export default function FormGroupCheckbox() {
const [state, setState] = React.useState({
gilad: true,
jason: false,
antoine: false,
});
const handleChange = (name) => (event) => {
setState({ ...state, [name]: event.target.checked });
};
const { gilad, jason, antoine } = state;
const error = [gilad, jason, antoine].filter((v) => v).length !== 2;
return (
<AppButtonRoot>
<FormControl component="fieldset" className="formControl">
<FormLabel component="legend">Assign responsibility</FormLabel>
<FormGroup>
<FormControlLabel
control={<Checkbox checked={gilad} onChange={handleChange('gilad')} value="gilad" />}
label="Gilad Gray"
/>
<FormControlLabel
control={<Checkbox checked={jason} onChange={handleChange('jason')} value="jason" />}
label="Jason Killian"
/>
<FormControlLabel
control={
<Checkbox checked={antoine} onChange={handleChange('antoine')} value="antoine" />
}
label="Antoine Llorca"
/>
</FormGroup>
<FormHelperText>Be careful</FormHelperText>
</FormControl>
<FormControl required error={error} component="fieldset" className="formControl">
<FormLabel component="legend">Pick two</FormLabel>
<FormGroup>
<FormControlLabel
control={<Checkbox checked={gilad} onChange={handleChange('gilad')} value="gilad" />}
label="Gilad Gray"
/>
<FormControlLabel
control={<Checkbox checked={jason} onChange={handleChange('jason')} value="jason" />}
label="Jason Killian"
/>
<FormControlLabel
control={
<Checkbox checked={antoine} onChange={handleChange('antoine')} value="antoine" />
}
label="Antoine Llorca"
/>
</FormGroup>
<FormHelperText>You can display an error</FormHelperText>
</FormControl>
</AppButtonRoot>
);
}
Example #2
Source File: RegisterDialog.js From react-saas-template with MIT License | 4 votes |
function RegisterDialog(props) {
const { setStatus, theme, onClose, openTermsDialog, status, classes } = props;
const [isLoading, setIsLoading] = useState(false);
const [hasTermsOfServiceError, setHasTermsOfServiceError] = useState(false);
const [isPasswordVisible, setIsPasswordVisible] = useState(false);
const registerTermsCheckbox = useRef();
const registerPassword = useRef();
const registerPasswordRepeat = useRef();
const register = useCallback(() => {
if (!registerTermsCheckbox.current.checked) {
setHasTermsOfServiceError(true);
return;
}
if (
registerPassword.current.value !== registerPasswordRepeat.current.value
) {
setStatus("passwordsDontMatch");
return;
}
setStatus(null);
setIsLoading(true);
setTimeout(() => {
setIsLoading(false);
}, 1500);
}, [
setIsLoading,
setStatus,
setHasTermsOfServiceError,
registerPassword,
registerPasswordRepeat,
registerTermsCheckbox,
]);
return (
<FormDialog
loading={isLoading}
onClose={onClose}
open
headline="Register"
onFormSubmit={(e) => {
e.preventDefault();
register();
}}
hideBackdrop
hasCloseIcon
content={
<Fragment>
<TextField
variant="outlined"
margin="normal"
required
fullWidth
error={status === "invalidEmail"}
label="Email Address"
autoFocus
autoComplete="off"
type="email"
onChange={() => {
if (status === "invalidEmail") {
setStatus(null);
}
}}
FormHelperTextProps={{ error: true }}
/>
<VisibilityPasswordTextField
variant="outlined"
margin="normal"
required
fullWidth
error={
status === "passwordTooShort" || status === "passwordsDontMatch"
}
label="Password"
inputRef={registerPassword}
autoComplete="off"
onChange={() => {
if (
status === "passwordTooShort" ||
status === "passwordsDontMatch"
) {
setStatus(null);
}
}}
helperText={(() => {
if (status === "passwordTooShort") {
return "Create a password at least 6 characters long.";
}
if (status === "passwordsDontMatch") {
return "Your passwords dont match.";
}
return null;
})()}
FormHelperTextProps={{ error: true }}
isVisible={isPasswordVisible}
onVisibilityChange={setIsPasswordVisible}
/>
<VisibilityPasswordTextField
variant="outlined"
margin="normal"
required
fullWidth
error={
status === "passwordTooShort" || status === "passwordsDontMatch"
}
label="Repeat Password"
inputRef={registerPasswordRepeat}
autoComplete="off"
onChange={() => {
if (
status === "passwordTooShort" ||
status === "passwordsDontMatch"
) {
setStatus(null);
}
}}
helperText={(() => {
if (status === "passwordTooShort") {
return "Create a password at least 6 characters long.";
}
if (status === "passwordsDontMatch") {
return "Your passwords dont match.";
}
})()}
FormHelperTextProps={{ error: true }}
isVisible={isPasswordVisible}
onVisibilityChange={setIsPasswordVisible}
/>
<FormControlLabel
style={{ marginRight: 0 }}
control={
<Checkbox
color="primary"
inputRef={registerTermsCheckbox}
onChange={() => {
setHasTermsOfServiceError(false);
}}
/>
}
label={
<Typography variant="body1">
I agree to the
<span
className={classes.link}
onClick={isLoading ? null : openTermsDialog}
tabIndex={0}
role="button"
onKeyDown={(event) => {
// For screenreaders listen to space and enter events
if (
(!isLoading && event.keyCode === 13) ||
event.keyCode === 32
) {
openTermsDialog();
}
}}
>
{" "}
terms of service
</span>
</Typography>
}
/>
{hasTermsOfServiceError && (
<FormHelperText
error
style={{
display: "block",
marginTop: theme.spacing(-1),
}}
>
In order to create an account, you have to accept our terms of
service.
</FormHelperText>
)}
{status === "accountCreated" ? (
<HighlightedInformation>
We have created your account. Please click on the link in the
email we have sent to you before logging in.
</HighlightedInformation>
) : (
<HighlightedInformation>
Registration is disabled until we go live.
</HighlightedInformation>
)}
</Fragment>
}
actions={
<Button
type="submit"
fullWidth
variant="contained"
size="large"
color="secondary"
disabled={isLoading}
>
Register
{isLoading && <ButtonCircularProgress />}
</Button>
}
/>
);
}
Example #3
Source File: EmojiTextArea.js From react-saas-template with MIT License | 4 votes |
function EmojiTextarea(props) {
const {
theme,
classes,
rightContent,
placeholder,
maxCharacters,
emojiSet,
inputClassName,
onChange
} = props;
const [open, setOpen] = useState(false);
const [value, setValue] = useState("");
const [characters, setCharacters] = useState(0);
const onSelectEmoji = useCallback(
emoji => {
let _characters;
let _value = value + emoji.native;
if (maxCharacters) {
_characters = countWithEmojis(_value);
if (_characters > maxCharacters) {
return;
}
}
if (onChange) {
onChange(_value, _characters);
}
setValue(_value);
setCharacters(_characters);
},
[value, setValue, setCharacters, maxCharacters, onChange]
);
const handleTextFieldChange = useCallback(
event => {
const { target } = event;
const { value } = target;
let characters;
if (maxCharacters) {
characters = countWithEmojis(value);
if (characters > maxCharacters) {
return;
}
}
if (onChange) {
onChange(value, characters);
}
setValue(value);
setCharacters(characters);
},
[maxCharacters, onChange, setValue, setCharacters]
);
const toggleOpen = useCallback(() => {
setOpen(!open);
}, [open, setOpen]);
return (
<Fragment>
<Grid spacing={0} container>
<Grid
item
xs={rightContent ? 8 : 12}
sm={rightContent ? 9 : 12}
lg={rightContent ? 10 : 12}
className={classes.relative}
>
<TextField
fullWidth
multiline
variant="outlined"
rows={6}
onInput={handleTextFieldChange}
value={value}
placeholder={placeholder}
InputProps={{
classes: {
notchedOutline: inputClassName ? inputClassName : null
}
}}
/>
<div className={classes.floatButtonWrapper}>
<IconButton onClick={toggleOpen} size="large">
{open ? (
<CloseIcon color="primary" />
) : (
<EmojiEmotionsIcon color="primary" />
)}
</IconButton>
</div>
</Grid>
{rightContent && (
<Grid item xs={4} sm={3} lg={2}>
{rightContent}
</Grid>
)}
</Grid>
{maxCharacters && (
<FormHelperText error={characters >= maxCharacters}>
{`${characters}/${maxCharacters} characters`}
</FormHelperText>
)}
<Collapse in={open}>
<Box mt={1}>
<Picker
set={emojiSet}
color={theme.palette.primary.main}
style={{ width: "100%" }}
onSelect={onSelectEmoji}
emojisToShowFilter={emojisToShowFilter}
/>
</Box>
</Collapse>
</Fragment>
);
}