Skip to content

Commit 49bf6fc

Browse files
authored
Merge pull request #11 from rjwats/component-wrapper-example
Add visibility control for password fields
2 parents 22605bf + f2e46d5 commit 49bf6fc

File tree

4 files changed

+46
-3
lines changed

4 files changed

+46
-3
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import React from 'react';
2+
import { TextValidator } from 'react-material-ui-form-validator';
3+
import { InputAdornment } from '@material-ui/core';
4+
import Visibility from '@material-ui/icons/Visibility';
5+
import VisibilityOff from '@material-ui/icons/VisibilityOff';
6+
import IconButton from '@material-ui/core/IconButton';
7+
8+
export default class PasswordValidator extends React.Component {
9+
10+
state = {
11+
showPassword: false
12+
};
13+
14+
toggleShowPassword = () => {
15+
this.setState({
16+
showPassword: !this.state.showPassword
17+
});
18+
}
19+
20+
render() {
21+
return (
22+
<TextValidator
23+
{...this.props}
24+
type={this.state.showPassword ? 'text' : 'password'}
25+
InputProps={{
26+
endAdornment:
27+
<InputAdornment position="end">
28+
<IconButton
29+
aria-label="Toggle password visibility"
30+
onClick={this.toggleShowPassword}
31+
>
32+
{this.state.showPassword ? <Visibility /> : <VisibilityOff />}
33+
</IconButton>
34+
</InputAdornment>
35+
}}
36+
/>
37+
);
38+
}
39+
40+
}

interface/src/forms/APSettingsForm.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import MenuItem from '@material-ui/core/MenuItem';
1010
import { TextValidator, ValidatorForm, SelectValidator } from 'react-material-ui-form-validator';
1111

1212
import {isAPEnabled} from '../constants/WiFiAPModes';
13+
import PasswordValidator from '../components/PasswordValidator';
1314

1415
const styles = theme => ({
1516
loadingSettings: {
@@ -73,7 +74,7 @@ class APSettingsForm extends React.Component {
7374
onChange={handleValueChange('ssid')}
7475
margin="normal"
7576
/>
76-
<TextValidator
77+
<PasswordValidator
7778
validators={['required', 'matchRegexp:^.{0,64}$']}
7879
errorMessages={['Access Point Password is required', 'Access Point Password must be 64 characters or less']}
7980
name="password"

interface/src/forms/OTASettingsForm.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import FormControlLabel from '@material-ui/core/FormControlLabel';
1212
import isIP from '../validators/isIP';
1313
import isHostname from '../validators/isHostname';
1414
import or from '../validators/or';
15+
import PasswordValidator from '../components/PasswordValidator';
1516

1617
const styles = theme => ({
1718
loadingSettings: {
@@ -83,7 +84,7 @@ class OTASettingsForm extends React.Component {
8384
margin="normal"
8485
/>
8586

86-
<TextValidator
87+
<PasswordValidator
8788
validators={['required', 'matchRegexp:^.{0,64}$']}
8889
errorMessages={['OTA Password is required', 'OTA Point Password must be 64 characters or less']}
8990
name="password"

interface/src/forms/WiFiSettingsForm.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import { isNetworkOpen, networkSecurityMode } from '../constants/WiFiSecurityMod
2525
import isIP from '../validators/isIP';
2626
import isHostname from '../validators/isHostname';
2727
import optional from '../validators/optional';
28+
import PasswordValidator from '../components/PasswordValidator';
2829

2930
const styles = theme => ({
3031
loadingSettings: {
@@ -110,7 +111,7 @@ class WiFiSettingsForm extends React.Component {
110111
}
111112
{
112113
!isNetworkOpen(selectedNetwork) &&
113-
<TextValidator
114+
<PasswordValidator
114115
validators={['matchRegexp:^.{0,64}$']}
115116
errorMessages={['Password must be 64 characters or less']}
116117
name="password"

0 commit comments

Comments
 (0)