blob: c53b6e6d1f420f7df74134b918262051b38254a9 [file] [log] [blame]
// Licensed to the Software Freedom Conservancy (SFC) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The SFC licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
import React, { useState } from 'react'
import {
Button,
Dialog,
DialogActions,
DialogContent,
DialogContentText,
DialogTitle,
FormControl,
Input,
InputAdornment,
InputLabel
} from '@mui/material'
import IconButton from '@mui/material/IconButton'
import { Visibility, VisibilityOff } from '@mui/icons-material'
interface State {
amount: string
password: string
weight: string
weightRange: string
showPassword: boolean
}
const PasswordDialog = (props) => {
const { title, children, open, openDialog, onConfirm, onCancel } = props
const [values, setValues] = useState<State>({
amount: '',
password: '',
weight: '',
weightRange: '',
showPassword: false
})
const handleChange = (prop: keyof State) => (event: React.ChangeEvent<HTMLInputElement>) => {
setValues({ ...values, [prop]: event.target.value })
}
const handleClickShowPassword = () => {
setValues({ ...values, showPassword: !values.showPassword })
}
const handleMouseDownPassword = (event: React.MouseEvent<HTMLButtonElement>) => {
event.preventDefault()
}
const handleKeyDown = (event: React.KeyboardEvent): void => {
if (event.key === 'Enter') {
event.preventDefault()
onConfirm(values.password)
}
};
return (
<Dialog
open={open}
onClose={() => openDialog(false)}
aria-labelledby='password-dialog'
>
<DialogTitle id='password-dialog'>{title}</DialogTitle>
<DialogContent>
<DialogContentText>
{children}
</DialogContentText>
<FormControl
sx={{ margin: 1, width: '25ch' }}
variant='standard'
>
<InputLabel
htmlFor='standard-adornment-password'
>
Password
</InputLabel>
<Input
id='standard-adornment-password'
autoFocus
margin='dense'
type={values.showPassword ? 'text' : 'password'}
value={values.password}
inputProps={{
onKeyDown: handleKeyDown
}}
fullWidth
onChange={handleChange('password')}
endAdornment={
<InputAdornment position='end'>
<IconButton
aria-label='toggle password visibility'
onClick={handleClickShowPassword}
onMouseDown={handleMouseDownPassword}
size='large'
>
{values.showPassword ? <Visibility /> : <VisibilityOff />}
</IconButton>
</InputAdornment>
}
/>
</FormControl>
</DialogContent>
<DialogActions>
<Button
variant='contained'
onClick={() => {
openDialog(false)
onCancel()
}}
color='secondary'
>
Cancel
</Button>
<Button
variant='contained'
onClick={() => {
// setOpen(false)
onConfirm(values.password)
}}
color='primary'
>
Accept
</Button>
</DialogActions>
</Dialog>
)
}
export default PasswordDialog