@mui/material#DialogContent JavaScript Examples
The following examples show how to use
@mui/material#DialogContent.
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: ActionPaper.js From react-saas-template with MIT License | 6 votes |
function ActionPaper(props) {
const {
theme,
classes,
title,
content,
maxWidth,
actions,
helpPadding,
fullWidthActions
} = props;
return (
<Box pt={1}>
<Paper style={{ maxWidth: theme.breakpoints.values[maxWidth] }}>
{title && <DialogTitle>{title}</DialogTitle>}
{content && (
<DialogContent
classes={helpPadding ? { root: classes.helpPadding } : null}
>
{content}
</DialogContent>
)}
{actions && (
<Box pb={2} pr={2}>
<DialogActions
classes={{ action: fullWidthActions ? classes.fullWidth : null }}
>
{actions}
</DialogActions>
</Box>
)}
</Paper>
</Box>
);
}
Example #2
Source File: ConfirmationDialog.js From react-saas-template with MIT License | 6 votes |
function ConfirmationDialog(props) {
const { open, onClose, loading, title, content, onConfirm } = props;
return (
<Dialog open={open} onClose={onClose} disableEscapeKeyDown={loading}>
<DialogTitle>{title}</DialogTitle>
<DialogContent>
<DialogContentText>{content}</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={onClose} disabled={loading}>
Close
</Button>
<Button
color="secondary"
onClick={onConfirm}
variant="contained"
disabled={loading}
>
Yes {loading && <ButtonCircularProgress />}
</Button>
</DialogActions>
</Dialog>
);
}
Example #3
Source File: DumpDialog.js From admin-web with GNU Affero General Public License v3.0 | 6 votes |
render() {
const { t, open, dump, onClose } = this.props;
return (
<Dialog
onClose={onClose}
open={open}
maxWidth="lg"
fullWidth
>
<DialogTitle>{t('Raw LDAP data')}</DialogTitle>
<DialogContent style={{ minWidth: 400 }}>
<pre>{dump}</pre>
</DialogContent>
<DialogActions>
<Button
onClick={onClose}
color="secondary"
>
{t('Close')}
</Button>
</DialogActions>
</Dialog>
);
}
Example #4
Source File: ChangeUserPassword.js From admin-web with GNU Affero General Public License v3.0 | 5 votes |
render() {
const { classes, t, changingPw, onClose } = this.props;
const { newPw, checkPw } = this.state;
return (
<Dialog open={changingPw} onClose={onClose}>
<DialogTitle>{t('Change password')}</DialogTitle>
<DialogContent className={classes.content}>
<TextField
className={classes.input}
label={t("New password")}
fullWidth
type="password"
value={newPw}
onChange={({ target }) => this.setState({ newPw: target.value })}
autoFocus
onKeyPress={this.handleKeyPress}
/>
<TextField
className={classes.input}
label={t("Repeat new password")}
fullWidth
type="password"
value={checkPw}
onChange={({ target }) => this.setState({ checkPw: target.value })}
onKeyPress={this.handleKeyPress}
/>
</DialogContent>
<DialogActions>
<Button
color="secondary"
onClick={onClose}
>
{t('Cancel')}
</Button>
<Button
variant="contained"
color="primary"
onClick={this.handlePasswordChange}
disabled={checkPw !== newPw}
>
{t('Save')}
</Button>
</DialogActions>
</Dialog>
);
}
Example #5
Source File: AddServer.js From admin-web with GNU Affero General Public License v3.0 | 5 votes |
render() {
const { classes, t, open, onClose } = this.props;
const { hostname, extname, loading } = this.state;
return (
<Dialog
onClose={onClose}
open={open}
maxWidth="md"
fullWidth
TransitionProps={{
onEnter: this.handleEnter,
}}>
<DialogTitle>{t('addHeadline', { item: 'Server' })}</DialogTitle>
<DialogContent style={{ minWidth: 400 }}>
<FormControl className={classes.form}>
<TextField
className={classes.input}
label={t("Hostname")}
fullWidth
value={hostname || ''}
onChange={this.handleInput('hostname')}
autoFocus
required
/>
<TextField
className={classes.input}
label={t("extname")}
fullWidth
value={extname || ''}
onChange={this.handleInput('extname')}
required
/>
</FormControl>
</DialogContent>
<DialogActions>
<Button
onClick={onClose}
color="secondary"
>
{t('Cancel')}
</Button>
<Button
onClick={this.handleAdd}
variant="contained"
color="primary"
disabled={loading || !hostname || !extname}
>
{loading ? <CircularProgress size={24}/> : t('Add')}
</Button>
</DialogActions>
</Dialog>
);
}
Example #6
Source File: DeleteDomain.js From admin-web with GNU Affero General Public License v3.0 | 5 votes |
render() {
const { t, open, item, onClose, capabilities } = this.props;
const { loading, purge, deleteFiles } = this.state;
const canPurge = capabilities.includes(DOMAIN_PURGE);
return (
<Dialog
onClose={onClose}
open={open}
maxWidth="sm"
fullWidth
>
<DialogTitle>{t('deleteDialog', { item })}?</DialogTitle>
{canPurge && <DialogContent>
<FormControlLabel
control={
<Checkbox
checked={purge}
onChange={this.handlePurge}
name="checked"
color="primary"
/>
}
label="Delete permanently?"
/>
<FormControlLabel
control={
<Checkbox
checked={deleteFiles}
onChange={() => this.setState({ deleteFiles: !deleteFiles })}
name="checked"
color="primary"
disabled={!purge}
/>
}
label="Delete files?"
/>
</DialogContent>}
<DialogActions>
<Button
onClick={onClose}
color="secondary"
>
{t('Cancel')}
</Button>
<Button
onClick={this.handleDelete}
variant="contained"
color="secondary"
>
{loading ? <CircularProgress size={24}/> : t('Confirm')}
</Button>
</DialogActions>
</Dialog>
);
}
Example #7
Source File: AddOwner.js From admin-web with GNU Affero General Public License v3.0 | 5 votes |
render() {
const { classes, t, open, onCancel, Users } = this.props;
const { owners, loading, autocompleteInput } = this.state;
return (
<Dialog
onClose={onCancel}
open={open}
maxWidth="sm"
fullWidth
>
<DialogTitle>{t('addHeadline', { item: 'Owner' })}</DialogTitle>
<DialogContent style={{ minWidth: 400 }}>
<FormControl className={classes.form}>
<MagnitudeAutocomplete
multiple
value={owners || []}
filterAttribute={'username'}
inputValue={autocompleteInput}
onChange={this.handleAutocomplete('owners')}
className={classes.input}
options={Users || []}
onInputChange={this.handleInput('autocompleteInput')}
placeholder={t("Search users") + "..."}
label={t('Owners')}
/>
</FormControl>
</DialogContent>
<DialogActions>
<Button
onClick={onCancel}
color="secondary"
>
{t('Cancel')}
</Button>
<Button
onClick={this.handleAdd}
variant="contained"
color="primary"
disabled={owners.length === 0 || loading}
>
{loading ? <CircularProgress size={24}/> : 'Add'}
</Button>
</DialogActions>
</Dialog>
);
}
Example #8
Source File: AddOrg.js From admin-web with GNU Affero General Public License v3.0 | 5 votes |
render() {
const { classes, t, open, onClose, Domains } = this.props;
const { name, description, domains, autocompleteInput, loading } = this.state;
const nameAcceptable = name.length < 33;
return (
<Dialog
onClose={onClose}
open={open}
maxWidth="md"
fullWidth
TransitionProps={{
onEnter: this.handleEnter,
}}>
<DialogTitle>{t('addHeadline', { item: 'Organization' })}</DialogTitle>
<DialogContent style={{ minWidth: 400 }}>
<FormControl className={classes.form}>
<TextField
className={classes.input}
label={t("Name")}
fullWidth
value={name || ''}
onChange={this.handleInput('name')}
autoFocus
required
error={Boolean(name && !nameAcceptable)}
/>
<TextField
className={classes.input}
label={t("Description")}
fullWidth
value={description || ''}
onChange={this.handleInput('description')}
multiline
rows={4}
variant="outlined"
/>
<MagnitudeAutocomplete
value={domains || []}
filterAttribute={'domainname'}
inputValue={autocompleteInput}
onChange={this.handleAutocomplete('domains')}
className={classes.input}
options={Domains || []}
onInputChange={this.handleInput('autocompleteInput')}
label={t('Domains')}
placeholder={t("Search domains") + "..."}
multiple
autoSelect
/>
</FormControl>
</DialogContent>
<DialogActions>
<Button
onClick={onClose}
color="secondary"
>
{t('Cancel')}
</Button>
<Button
onClick={this.handleAdd}
variant="contained"
color="primary"
disabled={loading || !nameAcceptable}
>
{loading ? <CircularProgress size={24}/> : t('Add')}
</Button>
</DialogActions>
</Dialog>
);
}
Example #9
Source File: DeleteFolder.js From admin-web with GNU Affero General Public License v3.0 | 5 votes |
render() {
const { t, open, item, onClose } = this.props;
const { loading, clear, taskMessage, taskID } = this.state;
return (
<Dialog
onClose={onClose}
open={open}
maxWidth="sm"
fullWidth
>
<DialogTitle>{taskMessage ? taskMessage : `Are you sure you want to delete ${item}?`}</DialogTitle>
<DialogContent>
{!taskMessage && <FormControlLabel
control={<Checkbox onChange={this.handleCheckbox} value={clear} />}
label={t('Clear folder data')}
/>}
</DialogContent>
<DialogActions>
<Button
onClick={this.handleClose}
color="secondary"
>
{t(taskMessage ? 'Close' : 'Cancel')}
</Button>
{!taskMessage && <Button
onClick={this.handleDelete}
variant="contained"
color="secondary"
>
{loading ? <CircularProgress size={24}/> : t('Confirm')}
</Button>}
{taskMessage && taskID > 0 && <Button variant="contained" onClick={this.handleViewTask}>
{t('View task')}
</Button>
}
</DialogActions>
</Dialog>
);
}
Example #10
Source File: DeleteUser.js From admin-web with GNU Affero General Public License v3.0 | 5 votes |
render() {
const { t, open, user, onClose } = this.props;
const { checked, loading } = this.state;
return (
<Dialog
onClose={onClose}
open={open}
maxWidth="sm"
fullWidth
>
<DialogTitle>Are you sure you want to delete {user.username}?</DialogTitle>
<DialogContent style={{ minWidth: 400 }}>
<FormControlLabel
control={
<Checkbox
checked={checked}
onChange={() => this.setState({ checked: !checked })}
name="checked"
color="primary"
/>
}
label="Delete files?"
/>
</DialogContent>
<DialogActions>
<Button
onClick={onClose}
color="secondary"
>
{t('Cancel')}
</Button>
<Button
onClick={this.handleDelete}
variant="contained"
color="secondary"
>
{loading ? <CircularProgress size={24}/> : t('Confirm')}
</Button>
</DialogActions>
</Dialog>
);
}
Example #11
Source File: AddFolder.js From admin-web with GNU Affero General Public License v3.0 | 5 votes |
render() {
const { classes, t, open, onClose, Users } = this.props;
const { displayname, owners, container, comment, loading, autocompleteInput } = this.state;
return (
<Dialog
onClose={onClose}
open={open}
maxWidth="sm"
fullWidth
>
<DialogTitle>{t('addHeadline', { item: 'Folder' })}</DialogTitle>
<DialogContent style={{ minWidth: 400 }}>
<FormControl className={classes.form}>
<TextField
label={t("Folder name")}
value={displayname}
onChange={this.handleInput('displayname')}
className={classes.input}
autoFocus
required
/>
<TextField
select
className={classes.input}
label={t("Container")}
fullWidth
value={container || ''}
onChange={this.handleInput('container')}
>
{this.types.map((type, key) => (
<MenuItem key={key} value={type.ID}>
{type.name}
</MenuItem>
))}
</TextField>
<TextField
className={classes.input}
label={t("Comment")}
fullWidth
multiline
rows={4}
value={comment}
variant="outlined"
onChange={this.handleInput('comment')}
/>
<MagnitudeAutocomplete
multiple
value={owners || []}
filterAttribute={'username'}
inputValue={autocompleteInput}
onChange={this.handleAutocomplete('owners')}
className={classes.input}
options={Users || []}
onInputChange={this.handleInput('autocompleteInput')}
label={t('Owners')}
placeholder={t("Search domains") + "..."}
/>
</FormControl>
</DialogContent>
<DialogActions>
<Button
onClick={onClose}
color="secondary"
>
Cancel
</Button>
<Button
onClick={this.handleAdd}
variant="contained"
color="primary"
disabled={!displayname || loading}
>
{loading ? <CircularProgress size={24}/> : 'Add'}
</Button>
</DialogActions>
</Dialog>
);
}
Example #12
Source File: CreateDbconfFile.js From admin-web with GNU Affero General Public License v3.0 | 5 votes |
render() {
const { classes, t, open, onClose, commands } = this.props;
const { service, data, loading } = this.state;
return (
<Dialog
onClose={onClose}
open={open}
maxWidth="md"
fullWidth
>
<DialogTitle>Configure grommunio-dbconf</DialogTitle>
<DialogContent style={{ minWidth: 400 }}>
<FormControl className={classes.form}>
<TextField
className={classes.input}
label={t("Service name")}
fullWidth
value={service || ''}
onChange={this.handleInput('service')}
autoFocus
required
/>
<Typography variant="h6">Data</Typography>
{data.map((pair, idx) => <Grid key={idx} container alignItems="flex-end">
<Typography className={classes.gridTypo}>
{pair.key}
</Typography>
<TextField
label="value"
value={pair.value}
onChange={this.handleDataInput(idx)}
className={classes.flexTextfield}
select
>
{commands[this.commandKeys[idx]].map((command, idx) =>
<MenuItem key={idx} value={command}>
{command}
</MenuItem>
)}
</TextField>
</Grid>
)}
</FormControl>
</DialogContent>
<DialogActions>
<Button
onClick={onClose}
color="secondary"
>
{t('Cancel')}
</Button>
<Button
onClick={this.handleUpload}
variant="contained"
color="primary"
disabled={loading || !service}
>
{loading ? <CircularProgress size={24}/> : t('Add')}
</Button>
</DialogActions>
</Dialog>
);
}
Example #13
Source File: ImageCropperDialog.js From react-saas-template with MIT License | 5 votes |
function ImageCropperDialog(props) {
const {
ImageCropper,
classes,
onClose,
open,
src,
onCrop,
aspectRatio,
theme,
} = props;
const [crop, setCrop] = useState(null);
const getCropFunctionFromChild = useCallback(
(cropFunction) => {
setCrop(() => cropFunction);
},
[setCrop]
);
return (
<Dialog
open={open}
onEscapeKeyDown={onClose}
classes={{ paper: classes.dialogPaper }}
style={{ overflowX: "visible" }}
>
<DialogContent className={classes.dialogContent}>
<ImageCropper
src={src}
setCropFunction={getCropFunctionFromChild}
onCrop={onCrop}
aspectRatio={aspectRatio}
color={theme.palette.primary.main}
/>
</DialogContent>
<DialogActions>
<Box mr={1}>
<Button onClick={onClose}>Close</Button>
</Box>
<Button variant="contained" color="secondary" onClick={crop}>
Crop
</Button>
</DialogActions>
</Dialog>
);
}
Example #14
Source File: FormDialog.js From react-saas-template with MIT License | 5 votes |
/**
* A Wrapper around the Dialog component to create centered
* Login, Register or other Dialogs.
*/
function FormDialog(props) {
const {
classes,
open,
onClose,
loading,
headline,
onFormSubmit,
content,
actions,
hideBackdrop
} = props;
return (
<Dialog
open={open}
onClose={onClose}
disableEscapeKeyDown={loading}
classes={{
paper: classes.dialogPaper,
paperScrollPaper: classes.dialogPaperScrollPaper
}}
hideBackdrop={hideBackdrop ? hideBackdrop : false}>
<DialogTitleWithCloseIcon
title={headline}
onClose={onClose}
disabled={loading}
/>
<DialogContent className={classes.dialogContent}>
<form onSubmit={onFormSubmit}>
<div>{content}</div>
<Box width="100%" className={classes.actions}>
{actions}
</Box>
</form>
</DialogContent>
</Dialog>
);
}
Example #15
Source File: ImportDialog.js From admin-web with GNU Affero General Public License v3.0 | 5 votes |
render() {
const { t, open, user, onClose } = this.props;
const { loading, force } = this.state;
return (
<Dialog
onClose={onClose}
open={open}
maxWidth="sm"
fullWidth
>
<DialogTitle>Are you sure you want to import {user.name}?</DialogTitle>
<DialogContent>
<FormControlLabel
control={
<Checkbox
checked={force}
onChange={this.handleChange}
color="primary"
/>
}
label="force"
/>
</DialogContent>
<DialogActions>
<Button
onClick={onClose}
color="secondary"
>
{t('Cancel')}
</Button>
<Button
onClick={this.handleImport}
variant="contained"
color="primary"
>
{loading ? <CircularProgress size={24}/> : t('Confirm')}
</Button>
</DialogActions>
</Dialog>
);
}
Example #16
Source File: ChangePasswordDialog.js From react-saas-template with MIT License | 5 votes |
function ChangePassword(props) {
const { onClose, classes, setLoginStatus } = props;
const [isLoading, setIsLoading] = useState(false);
const sendPasswordEmail = useCallback(() => {
setIsLoading(true);
setTimeout(() => {
setLoginStatus("verificationEmailSend");
setIsLoading(false);
onClose();
}, 1500);
}, [setIsLoading, setLoginStatus, onClose]);
return (
<Dialog
open
hideBackdrop
onClose={onClose}
disableEscapeKeyDown={isLoading}
maxWidth="xs">
<form
onSubmit={(e) => {
e.preventDefault();
sendPasswordEmail();
}}
>
<DialogContent className={classes.dialogContent}>
<Typography paragraph>
Enter your email address below and we will send you instructions on
how to reset your password.
</Typography>
<TextField
variant="outlined"
margin="dense"
required
fullWidth
label="Email Address"
autoFocus
type="email"
autoComplete="off"
/>
</DialogContent>
<DialogActions className={classes.dialogActions}>
<Button onClick={onClose} disabled={isLoading}>
Cancel
</Button>
<Button
type="submit"
variant="contained"
color="secondary"
disabled={isLoading}
>
Reset password
{isLoading && <ButtonCircularProgress />}
</Button>
</DialogActions>
</form>
</Dialog>
);
}
Example #17
Source File: PasswordSafetyDialog.js From admin-web with GNU Affero General Public License v3.0 | 5 votes |
render() {
const { classes, t, deviceID, open } = this.props;
const { password } = this.state;
return (
<Dialog
open={open}
onClose={this.handleCancel}
>
<DialogTitle className={classes.iconContainer}>
<Warning
color="warning"
fontSize="large"
/>
</DialogTitle>
<DialogContent className={classes.content}>
<Typography variant="h6" align="center" style={{ marginBottom: 8 }}>
Remote wipe of device {deviceID || '<unknown>'} engaged
</Typography>
<Typography variant="body1">
{t('RemoteWipeExplanation')}
</Typography>
<TextField
style={{ marginTop: 16 }}
label={t('Enter password to confirm')}
value={password}
onChange={this.handleInput}
fullWidth
type="password"
autoComplete="new-password"
/>
</DialogContent>
<DialogActions>
<Button variant="contained" onClick={this.handleCancel}>
{t('Cancel')}
</Button>
<Button
color="error"
onClick={this.handleConfirm(password)}
disabled={!password}
variant="contained"
>
{t('Confirm')}
</Button>
</DialogActions>
</Dialog>
);
}
Example #18
Source File: UploadServiceFile.js From admin-web with GNU Affero General Public License v3.0 | 5 votes |
render() {
const { classes, t, open, onClose } = this.props;
const { service, filename, data, loading } = this.state;
return (
<Dialog
onClose={onClose}
open={open}
maxWidth="md"
fullWidth
>
<DialogTitle>{t('addHeadline', { item: 'File' })}</DialogTitle>
<DialogContent style={{ minWidth: 400 }}>
<FormControl className={classes.form}>
<TextField
className={classes.input}
label={t("Service name")}
fullWidth
value={service || ''}
onChange={this.handleInput('service')}
autoFocus
required
/>
<TextField
className={classes.input}
label={t("File name")}
fullWidth
value={filename || ''}
onChange={this.handleInput('filename')}
required
/>
<Typography>Data</Typography>
{data.map((pair, idx) => <Grid container key={idx}>
<TextField
label="key"
value={pair.key}
onChange={this.handleDataInput('key', idx)}
className={classes.flexTextfield}
/>
<TextField
label="value"
value={pair.value}
onChange={this.handleDataInput('value', idx)}
className={classes.flexTextfield}
/>
<IconButton onClick={this.handleRemoveRow(idx)} size="large">
<Delete color="error"/>
</IconButton>
</Grid>
)}
<Grid container justifyContent="center">
<IconButton onClick={this.handleAddRow} size="large">
<Add color="primary"/>
</IconButton>
</Grid>
</FormControl>
</DialogContent>
<DialogActions>
<Button
onClick={onClose}
color="secondary"
>
{t('Cancel')}
</Button>
<Button
onClick={this.handleUpload}
variant="contained"
color="primary"
disabled={loading || !service}
>
{loading ? <CircularProgress size={24}/> : t('Add')}
</Button>
</DialogActions>
</Dialog>
);
}
Example #19
Source File: CheckLdapDialog.js From admin-web with GNU Affero General Public License v3.0 | 5 votes |
render() {
const { classes, t, open, onClose, Orphaned } = this.props;
return (
<Dialog
onClose={onClose}
open={open}
maxWidth="md"
fullWidth
>
<DialogTitle>{t('Orphaned users')}</DialogTitle>
<DialogContent style={{ minWidth: 400 }}>
{Orphaned.length > 0 ? <List>
{Orphaned.map(user =>
<ListItem key={user.ID}>
<ListItemText
primary={user.username}
/>
</ListItem>
)}
</List> : <Typography>All LDAP users are valid</Typography>}
</DialogContent>
<DialogActions>
<Button
onClick={onClose}
color="secondary"
>
{t('Close')}
</Button>
<Button
className={classes.delete}
onClick={this.handleDelete(true)}
variant="contained"
color="secondary"
disabled={Orphaned.length === 0}
>
{t('Delete with files')}
</Button>
<Button
className={classes.delete}
onClick={this.handleDelete(false)}
variant="contained"
color="secondary"
disabled={Orphaned.length === 0}
>
{t('Delete')}
</Button>
</DialogActions>
</Dialog>
);
}
Example #20
Source File: EditFetchmail.js From admin-web with GNU Affero General Public License v3.0 | 4 votes |
render() {
const { classes, t, open, onClose, username } = this.props;
const { active, srcServer, srcUser, srcPassword, srcFolder, srcAuth, fetchall, keep, protocol,
useSSL, sslCertCheck, sslCertPath, sslFingerprint, extraOptions } = this.state;
const disabled = [srcServer, srcUser, srcPassword, protocol].includes('');
return (
<Dialog
onClose={onClose}
open={open}
maxWidth="md"
fullWidth
TransitionProps={{
onEnter: this.handleEnter,
}}>
<DialogTitle>{t('editEntry', { username: username })}</DialogTitle>
<DialogContent style={{ minWidth: 400 }}>
<FormControl className={classes.form} noValidate autoComplete="off">
<TextField
className={classes.input}
label={t("Source server")}
fullWidth
value={srcServer || ''}
onChange={this.handleInput('srcServer')}
required
autoFocus
/>
<TextField
className={classes.input}
label={t("Source user")}
fullWidth
value={srcUser || ''}
onChange={this.handleInput('srcUser')}
required
/>
<form autoComplete="off" noValidate>
<TextField
className={classes.input}
label={t("Source password")}
fullWidth
value={srcPassword || ''}
onChange={this.handleInput('srcPassword')}
type="password"
required
id="new-password"
name='new-password'
autoComplete="new-password"
/>
</form>
<TextField
className={classes.input}
label={t("Source folder")}
fullWidth
value={srcFolder || ''}
onChange={this.handleInput('srcFolder')}
/>
<TextField
className={classes.input}
label={t("Source auth")}
fullWidth
value={srcAuth || ''}
onChange={this.handleInput('srcAuth')}
select
>
{this.authTypes.map(t =>
<MenuItem key={t} value={t}>{t}</MenuItem>
)}
</TextField>
<TextField
className={classes.input}
label={t("Protocol")}
fullWidth
value={protocol || ''}
onChange={this.handleInput('protocol')}
select
required
>
{this.protocols.map(p =>
<MenuItem key={p} value={p}>{p}</MenuItem>
)}
</TextField>
<TextField
className={classes.input}
label={t("SSL certificate path")}
fullWidth
value={sslCertPath || ''}
onChange={this.handleInput('sslCertPath')}
disabled={!useSSL}
/>
<TextField
className={classes.input}
label={t("SSL fingerprint")}
fullWidth
value={sslFingerprint || ''}
onChange={this.handleInput('sslFingerprint')}
disabled={!useSSL}
/>
<TextField
className={classes.input}
label={t("Extra options")}
fullWidth
value={extraOptions || ''}
onChange={this.handleInput('extraOptions')}
/>
<Grid container>
<FormControlLabel
control={
<Checkbox
checked={active}
onChange={this.handleCheckbox('active')}
color="primary"
/>
}
label="Active"
/>
<FormControlLabel
control={
<Checkbox
checked={useSSL}
onChange={this.handleCheckbox('useSSL')}
color="primary"
/>
}
label="Use SSL"
/>
<FormControlLabel
control={
<Checkbox
checked={fetchall}
onChange={this.handleCheckbox('fetchall')}
color="primary"
/>
}
label="Fetch all"
/>
<FormControlLabel
control={
<Checkbox
checked={keep}
onChange={this.handleCheckbox('keep')}
color="primary"
/>
}
label="Keep"
/>
<FormControlLabel
control={
<Checkbox
checked={sslCertCheck}
onChange={this.handleCheckbox('sslCertCheck')}
color="primary"
disabled={!useSSL}
/>
}
label="SSL certificate check"
/>
</Grid>
</FormControl>
</DialogContent>
<DialogActions>
<Button
onClick={onClose}
color="secondary"
>
{t('Cancel')}
</Button>
<Button
onClick={this.handleAdd}
variant="contained"
color="primary"
disabled={disabled}
>
{t('Confirm')}
</Button>
</DialogActions>
</Dialog>
);
}
Example #21
Source File: DomainDetails.js From admin-web with GNU Affero General Public License v3.0 | 4 votes |
render() {
const { classes, t, orgs, capabilities, servers } = this.props;
const writable = this.context.includes(SYSTEM_ADMIN_WRITE);
const { domainname, domainStatus, orgID, maxUser, title, address, adminName,
tel, syncPolicy, checkPw, newPw, changingPw, snackbar, tab, defaultPolicy,
chat, homeserver, autocompleteInput } = this.state;
return (
<ViewWrapper
topbarTitle={t('Domains')}
snackbar={snackbar}
onSnackbarClose={() => this.setState({ snackbar: '' })}
>
<Paper className={classes.paper} elevation={1}>
<Grid container>
<Typography
color="primary"
variant="h5"
>
{t('editHeadline', { item: 'Domain' })}
</Typography>
</Grid>
<Tabs className={classes.tabs} indicatorColor="primary" onChange={this.handleTab} value={tab}>
<Tab value={0} label={t('Domain')} />
<Tab value={1} label={t('Sync policies')} />
</Tabs>
{tab === 0 && <FormControl className={classes.form}>
<Grid container className={classes.input}>
<TextField
label={t("Domain")}
style={{ flex: 1, marginRight: 8 }}
value={domainname || ''}
autoFocus
disabled
/>
</Grid>
<TextField
select
className={classes.input}
label={t("Status")}
fullWidth
value={domainStatus || 0}
onChange={this.handleInput('domainStatus')}
>
{this.statuses.map((status, key) => (
<MenuItem key={key} value={status.ID}>
{status.name}
</MenuItem>
))}
</TextField>
{capabilities.includes(SYSTEM_ADMIN_READ) && <MagnitudeAutocomplete
value={orgID}
filterAttribute={'name'}
onChange={this.handleAutocomplete('orgID')}
className={classes.input}
options={orgs}
inputValue={autocompleteInput}
onInputChange={this.handleInput('autocompleteInput')}
label={t('Organization')}
/>}
<TextField
className={classes.input}
label={t("Maximum users")}
fullWidth
value={maxUser || ''}
onChange={this.handleInput('maxUser')}
/>
<TextField
className={classes.input}
label={t("Title")}
fullWidth
value={title || ''}
onChange={this.handleInput('title')}
/>
<TextField
className={classes.input}
label={t("Address")}
fullWidth
value={address || ''}
onChange={this.handleInput('address')}
/>
<TextField
className={classes.input}
label={t("Administrator")}
fullWidth
value={adminName || ''}
onChange={this.handleInput('adminName')}
/>
<TextField
className={classes.input}
label={t("Telephone")}
fullWidth
value={tel || ''}
onChange={this.handleInput('tel')}
/>
<MagnitudeAutocomplete
value={homeserver}
filterAttribute={'hostname'}
onChange={this.handleServer}
className={classes.input}
options={servers}
label={t('Homeserver')}
/>
<FormControlLabel
control={
<Checkbox
checked={chat || false}
onChange={this.handleCheckbox('chat')}
color="primary"
/>
}
className={classes.input}
label={t('grommunio-chat Team')}
/>
</FormControl>}
{tab === 1 && <SlimSyncPolicies
syncPolicy={syncPolicy}
defaultPolicy={defaultPolicy}
handleChange={this.handleSyncChange}
handleCheckbox={this.handleSyncCheckboxChange}
handleSlider={this.handleSlider}
/>}
<Button
color="secondary"
onClick={this.handleBack}
style={{ marginRight: 8 }}
>
{t('Back')}
</Button>
<Button
variant="contained"
color="primary"
onClick={this.handleEdit}
disabled={!writable}
>
{t('Save')}
</Button>
</Paper>
<Dialog open={!!changingPw} onClose={() => this.setState({ changingPw: false })}>
<DialogTitle>{t('Change password')}</DialogTitle>
<DialogContent>
<TextField
className={classes.input}
label={t("New password")}
fullWidth
type="password"
value={newPw}
onChange={event => this.setState({ newPw: event.target.value })}
autoFocus
onKeyPress={this.handleKeyPress}
/>
<TextField
className={classes.input}
label={t("Repeat new password")}
fullWidth
type="password"
value={checkPw}
onChange={event => this.setState({ checkPw: event.target.value })}
onKeyPress={this.handleKeyPress}
/>
</DialogContent>
<DialogActions>
<Button
color="secondary"
onClick={() => this.setState({ changingPw: false })}>
{t('Cancel')}
</Button>
<Button
variant="contained"
color="primary"
onClick={this.handlePasswordChange}
disabled={checkPw !== newPw}
>
{t('Save')}
</Button>
</DialogActions>
</Dialog>
</ViewWrapper>
);
}
Example #22
Source File: FolderPermissions.js From admin-web with GNU Affero General Public License v3.0 | 4 votes |
render() {
const { classes, t, open, onCancel, owners, domain, folderID } = this.props;
const { permissions, selected, adding, deleting } = this.state;
return (
<Dialog
onClose={onCancel}
open={open}
maxWidth="sm"
fullWidth
TransitionProps={{
onEnter: this.handleEnter,
}}
>
<DialogTitle>{t('Permissions')}</DialogTitle>
<DialogContent style={{ minWidth: 400 }}>
{owners.length > 0 ? <List className={classes.list}>
{owners.map((user, idx) => <Fragment key={idx}>
<ListItem disablePadding>
<ListItemButton
selected={user.memberID === selected?.memberID}
component="a"
onClick={this.handleUserSelect(user)}
>
<ListItemText primary={user.username}/>
</ListItemButton>
</ListItem>
<Divider />
</Fragment>)}
</List> : <div className={classes.noOwnersContainer}>
<em>{t('No owners')}</em>
</div>}
<div className={classes.addUserRow}>
<Button
onClick={this.handleAdd}
variant="contained"
color="primary"
style={{ marginRight: 8 }}
>
{t('Add')}
</Button>
<Button
onClick={this.handleDelete}
color="secondary"
>
{t('Remove')}
</Button>
</div>
<FormControl fullWidth style={{ marginBottom: 4 }}>
<InputLabel>{t('Profile')}</InputLabel>
<Select
labelId="demo-simple-select-label"
value={permissionProfiles.findIndex(profile => profile.value === permissions) === -1 ? "" : permissions}
label={t('Profile')}
onChange={this.handleProfileSelect}
>
{permissionProfiles.map((profile, idx) =>
<MenuItem key={idx} value={profile.value}>
{profile.name}
</MenuItem>
)}
</Select>
</FormControl>
<Grid container>
<Grid item xs={6}>
<FormControl className={classes.form}>
<FormLabel>Read</FormLabel>
<RadioGroup defaultValue={0} value={permissions & 1} onChange={this.handlePermissions}>
<FormControlLabel
value={0x0}
control={<Radio size="small" className={classes.radio}/>}
label="None"
/>
<FormControlLabel
value={0x1}
control={<Radio size="small" className={classes.radio}/>}
label="Full Details"
/>
</RadioGroup>
</FormControl>
</Grid>
<Grid item xs={6}>
<FormControl className={classes.form}>
<FormLabel>Write</FormLabel>
<FormControlLabel
control={
<Checkbox
value={0x2}
checked={Boolean(permissions & 0x2)}
onChange={this.handlePermissions}
className={classes.radio}
color="primary"
/>
}
label={t('Create items')}
/>
<FormControlLabel
control={
<Checkbox
value={0x80}
checked={Boolean(permissions & 0x80)}
className={classes.radio}
onChange={this.handlePermissions}
color="primary"
/>
}
label={t('Create subfolders')}
/>
<FormControlLabel
control={
<Checkbox
checked={Boolean(permissions & 0x8)}
value={0x8}
className={classes.radio}
onChange={this.handlePermissions}
color="primary"
/>
}
label={t('Edit own')}
/>
<FormControlLabel
control={
<Checkbox
className={classes.radio}
checked={Boolean(permissions & 0x20)}
value={0x20}
onChange={this.handlePermissions}
color="primary"
/>
}
label={t('Edit all')}
/>
</FormControl>
</Grid>
</Grid>
<Grid container style={{ marginTop: 16 }}>
<Grid item xs={6}>
<FormControl className={classes.form}>
<FormLabel>Delete items</FormLabel>
<RadioGroup
value={(permissions & 0x50) || true /* This is a bit janky */}
defaultValue={true}
onChange={this.handleRadioPermissions}
>
<FormControlLabel
value={(permissions & 0x50) === 0} // Has explicit handling
control={<Radio size="small" className={classes.radio}/>}
label="None" />
<FormControlLabel
value={0x10}
control={<Radio size="small" className={classes.radio}/>}
label="Own"
/>
<FormControlLabel
value={0x50}
control={<Radio size="small" className={classes.radio}/>}
label="All"
/>
</RadioGroup>
</FormControl>
</Grid>
<Grid item xs={6}>
<FormControl className={classes.form}>
<FormLabel>Other</FormLabel>
<FormControlLabel
control={
<Checkbox
className={classes.radio}
checked={Boolean(permissions & 0x100)}
value={0x100}
onChange={this.handlePermissions}
color="primary"
/>
}
label={t('Folder owner')}
/>
<FormControlLabel
control={
<Checkbox
className={classes.radio}
checked={Boolean(permissions & 0x200)}
onChange={this.handlePermissions}
color="primary"
value={0x200}
/>
}
label={t('Folder contact')}
/>
<FormControlLabel
control={
<Checkbox
className={classes.radio}
checked={Boolean(permissions & 0x400)}
onChange={this.handlePermissions}
color="primary"
value={0x400}
/>
}
label={t('Folder visible')}
/>
</FormControl>
</Grid>
</Grid>
</DialogContent>
<DialogActions>
<Button
onClick={onCancel}
color="secondary"
>
{t('Close')}
</Button>
<Button
onClick={this.handleSave}
variant="contained"
color="primary"
disabled={owners.length === 0 || !selected}
>
{t('Save')}
</Button>
</DialogActions>
<AddOwner
open={adding}
onSuccess={this.handleAddingSuccess}
onError={this.handleAddingError}
onCancel={this.handleAddingCancel}
domain={domain}
folderID={folderID}
/>
{selected && <RemoveOwner
open={deleting}
onSuccess={this.handleDeleteSuccess}
onError={this.handleDeleteError}
onClose={this.handleDeleteClose}
ownerName={selected.username}
domainID={domain.ID}
folderID={folderID}
memberID={selected.memberID}
/>}
</Dialog>
);
}
Example #23
Source File: CreateSavedFilter.jsx From Edlib with GNU General Public License v3.0 | 4 votes |
CreateSavedFilter = ({
show,
onClose,
savedFilterData,
filters,
onDone,
filterUtils,
}) => {
const { classes } = useStyles();
const { t } = useTranslation();
const { edlibApi } = useConfigurationContext();
const [selected, setSelected] = React.useState('new');
const [newFilterName, setNewFilterName] = React.useState('My filter');
const request = useRequestWithToken();
return (
<Dialog open={show} onClose={() => onClose()} maxWidth="sm" fullWidth>
<DialogTitle>{_.capitalize(t('edit_filter'))}</DialogTitle>
<DialogContent>
<Box pt={1}>
<FormControl
variant="outlined"
fullWidth
className={classes.formControl}
>
<InputLabel>
{_.capitalize(t('choose_filter'))}
</InputLabel>
<Select
value={selected}
onChange={(e) => setSelected(e.target.value)}
label={_.capitalize(t('choose_filter'))}
>
<MenuItem value="new">
<em>{_.capitalize(t('create_new'))}</em>
</MenuItem>
{savedFilterData.map((savedFilter) => (
<MenuItem
key={savedFilter.id}
value={savedFilter.id}
>
{savedFilter.name}
</MenuItem>
))}
</Select>
</FormControl>
{selected === 'new' && (
<TextField
required
label={_.capitalize(t('name'))}
variant="outlined"
className={classes.formControl}
fullWidth
value={newFilterName}
onChange={(e) => setNewFilterName(e.target.value)}
/>
)}
<div className={classes.formControl}>
<FilterChips
chips={filterUtils.getChipsFromFilters(false)}
/>
</div>
</Box>
</DialogContent>
<DialogActions>
<Button
color="primary"
variant="outlined"
onClick={() => onClose()}
>
{t('cancel')}
</Button>
<Button
color="primary"
variant="contained"
style={{ marginLeft: 5 }}
onClick={() => {
let url = edlibApi(`/common/saved-filters`);
if (selected !== 'new') {
url += `/` + selected;
}
request(url, 'POST', {
body: {
name: newFilterName,
choices: [
filters.contentTypes.value.map(
(contentType) => ({
group: 'contentType',
value: contentType.value,
})
),
filters.licenses.value.map(
(contentType) => ({
group: 'license',
value: contentType.value,
})
),
].flat(),
},
}).then((data) => onDone(data));
}}
>
{t('save')}
</Button>
</DialogActions>
</Dialog>
);
}
Example #24
Source File: AddUser.js From admin-web with GNU Affero General Public License v3.0 | 4 votes |
render() {
const { classes, t, domain, open, onClose, servers } = this.props;
const { username, loading, properties, password, repeatPw, usernameError,
status, homeserver, lang, langs, chat, chatAvailable } = this.state;
const { displayname, displaytypeex } = properties;
const addDisabled = usernameError || !username || loading ||
((password !== repeatPw || password.length < 6) && status !== 4);
return (
<Dialog
onClose={onClose}
open={open}
maxWidth="sm"
fullWidth
TransitionProps={{
onEnter: this.handleEnter,
}}
>
<DialogTitle>{t('addHeadline', { item: 'User' })}</DialogTitle>
<DialogContent>
<FormControl className={classes.form}>
<TextField
select
className={classes.input}
label={t("Mode")}
fullWidth
value={status || 0}
onChange={this.handleInput('status')}
>
{this.statuses.map((status, key) => (
<MenuItem key={key} value={status.ID}>
{status.name}
</MenuItem>
))}
</TextField>
<TextField
label={t("Username")}
value={username || ''}
autoFocus
onChange={this.handleUsernameInput}
InputProps={{
endAdornment: <div>@{domain.domainname}</div>,
}}
className={classes.input}
required
error={!!username && usernameError}
/>
{status !== 4 && <TextField
label={t("Password")}
value={password || ''}
onChange={this.handleInput('password')}
className={classes.input}
type="password"
required
FormHelperTextProps={{
error: true,
}}
helperText={(password && password.length < 6) ? t('Password must be at least 6 characters long') : ''}
autoComplete="new-password"
/>}
{status !== 4 && <TextField
label={t("Repeat password")}
value={repeatPw || ''}
onChange={this.handleInput('repeatPw')}
className={classes.input}
type="password"
required
FormHelperTextProps={{
error: true,
}}
helperText={(repeatPw && password !== repeatPw) ? t("Passwords don't match") : ''}
/>}
<TextField
label={t("Display name")}
value={displayname || ''}
onChange={this.handlePropertyChange('displayname')}
className={classes.input}
/>
<TextField
select
className={classes.input}
label={t("Language")}
fullWidth
value={lang || 'en_US'}
onChange={this.handleInput('lang')}
>
{langs.map((l) => (
<MenuItem key={l.code} value={l.code}>
{l.code + ": " + l.name}
</MenuItem>
))}
</TextField>
<TextField
select
className={classes.input}
label={t("Type")}
fullWidth
value={displaytypeex || 0}
onChange={this.handlePropertyChange('displaytypeex')}
>
{this.types.map((type, key) => (
<MenuItem key={key} value={type.ID}>
{type.name}
</MenuItem>
))}
</TextField>
<MagnitudeAutocomplete
value={homeserver}
filterAttribute={'hostname'}
onChange={this.handleAutocomplete('homeserver')}
className={classes.input}
options={servers}
label={t('Homeserver')}
/>
<FormControlLabel
control={
<Checkbox
checked={chat || false}
onChange={this.handleCheckbox('chat')}
color="primary"
/>
}
label={t('Create grommunio-chat User')}
disabled={!chatAvailable}
/>
</FormControl>
</DialogContent>
<DialogActions>
<Button
onClick={onClose}
color="secondary"
>
{t('Cancel')}
</Button>
<Button
onClick={this.handleAddAndEdit}
variant="contained"
color="primary"
disabled={addDisabled}
>
{loading ? <CircularProgress size={24}/> : t('Add and edit')}
</Button>
<Button
onClick={this.handleAdd}
variant="contained"
color="primary"
disabled={addDisabled}
>
{loading ? <CircularProgress size={24}/> : t('Add')}
</Button>
</DialogActions>
</Dialog>
);
}
Example #25
Source File: AddRole.js From admin-web with GNU Affero General Public License v3.0 | 4 votes |
render() {
const { classes, t, open, onClose, Permissions, Users, Domains, Orgs } = this.props;
const { name, permissions, description, loading, users, autocompleteInput } = this.state;
const orgs = [{ ID: '*', name: 'All'}].concat(Orgs);
const domains = [{ ID: '*', domainname: 'All'}].concat(Domains);
return (
<Dialog
onClose={onClose}
open={open}
maxWidth="sm"
fullWidth
>
<DialogTitle>{t('addHeadline', { item: 'Role' })}</DialogTitle>
<DialogContent style={{ minWidth: 400 }}>
<FormControl className={classes.form}>
<TextField
label={t("Name")}
value={name}
onChange={this.handleInput('name')}
className={classes.input}
autoFocus
required
/>
<MagnitudeAutocomplete
multiple
value={users || []}
filterAttribute={'username'}
inputValue={autocompleteInput}
onChange={this.handleAutocomplete('users')}
className={classes.input}
options={Users || []}
onInputChange={this.handleInput('autocompleteInput')}
label={t('Users')}
placeholder={t("Search users") + "..."}
/>
{permissions.map((permission, idx) =>
<div key={idx} className={classes.row}>
<TextField
select
label={t("Permission")}
value={permission.permission || ''}
onChange={this.handleSelectPermission(idx)}
fullWidth
variant="standard"
>
{Permissions.map((name) => (
<MenuItem key={name} value={name}>
{name}
</MenuItem>
))}
</TextField>
{permission.permission.includes('DomainAdmin') /*Read and Write*/ &&
<MagnitudeAutocomplete
value={permission.params}
filterAttribute={'domainname'}
inputValue={permission.autocompleteInput}
onChange={this.handleSetParams(idx)}
className={classes.rowTextfield}
options={domains || []}
onInputChange={this.handleAutocompleteInput(idx)}
label={t('Params')}
placeholder={t('Search domains') + "..."}
variant="standard"
autoSelect
fullWidth
/>}
{permission.permission === ORG_ADMIN /*Read and Write*/ &&
<MagnitudeAutocomplete
value={permission.params}
filterAttribute={'name'}
inputValue={permission.autocompleteInput}
onChange={this.handleSetParams(idx)}
className={classes.rowTextfield}
options={orgs || []}
onInputChange={this.handleAutocompleteInput(idx)}
label={t('Params')}
placeholder={t('Search organizations') + "..."}
variant="standard"
autoSelect
fullWidth
/>}
<IconButton size="small" onClick={this.removeRow(idx)}>
<Delete fontSize="small" color="error" />
</IconButton>
</div>
)}
<Grid container justifyContent="center" className={classes.addButton}>
<Button size="small" onClick={this.handleNewRow}>
<Add color="primary" />
</Button>
</Grid>
<TextField
className={classes.input}
label={t("Description")}
fullWidth
multiline
variant="outlined"
rows={4}
value={description}
onChange={this.handleInput('description')}
/>
</FormControl>
</DialogContent>
<DialogActions>
<Button
onClick={onClose}
color="secondary"
>
{t('Cancel')}
</Button>
<Button
onClick={this.handleAdd}
variant="contained"
color="primary"
disabled={!name || loading || permissions.length === 0 || !permissions[0].permission}
>
{loading ? <CircularProgress size={24}/> : 'Add'}
</Button>
</DialogActions>
</Dialog>
);
}
Example #26
Source File: AddMList.js From admin-web with GNU Affero General Public License v3.0 | 4 votes |
render() {
const { classes, t, open, onClose, _classes } = this.props;
const { listname, listType, listPrivilege, associations, specifieds, loading, class: _class,
autocompleteInput } = this.state;
return (
<Dialog
onClose={onClose}
open={open}
maxWidth="md"
fullWidth
TransitionProps={{
onEnter: this.handleEnter,
}}>
<DialogTitle>{t('addHeadline', { item: 'Mail list' })}</DialogTitle>
<DialogContent style={{ minWidth: 400 }}>
<FormControl className={classes.form}>
<TextField
className={classes.input}
label={t("Mail list name")}
fullWidth
value={listname || ''}
onChange={this.handleInput('listname')}
autoFocus
required
/>
<TextField
select
className={classes.input}
label={t("Type")}
fullWidth
value={listType || 0}
onChange={this.handleTypeChange}
>
{this.listTypes.map((status, key) => (
<MenuItem key={key} value={status.ID}>
{status.name}
</MenuItem>
))}
</TextField>
<TextField
select
className={classes.input}
label={t("Privilege")}
fullWidth
value={listPrivilege || 0}
onChange={this.handlePrivilegeChange}
>
{this.listPrivileges.map((status, key) => (
<MenuItem key={key} value={status.ID}>
{status.name}
</MenuItem>
))}
</TextField>
{listType === 0 && <TextField
className={classes.input}
label={t("Recipients") + " (separated by comma (,)"}
fullWidth
value={associations || ''}
onChange={this.handleInput('associations')}
/>}
{listPrivilege === 3 && <TextField
className={classes.input}
label={t("Senders") + " (separated by comma (,)"}
fullWidth
value={specifieds || ''}
onChange={this.handleInput('specifieds')}
/>}
{listType === 3 && <MagnitudeAutocomplete
value={_class}
filterAttribute={'classname'}
inputValue={autocompleteInput}
onChange={this.handleAutocomplete('class')}
className={classes.input}
options={_classes}
onInputChange={this.handleInput('autocompleteInput')}
label={t('Group')}
/>}
</FormControl>
</DialogContent>
<DialogActions>
<Button
onClick={onClose}
color="secondary"
>
{t('Cancel')}
</Button>
<Button
onClick={this.handleAdd}
variant="contained"
color="primary"
disabled={loading || !listname}
>
{loading ? <CircularProgress size={24}/> : t('Add')}
</Button>
</DialogActions>
</Dialog>
);
}
Example #27
Source File: AddGlobalUser.js From admin-web with GNU Affero General Public License v3.0 | 4 votes |
render() {
const { classes, t, open, onClose, Domains, servers } = this.props;
const { username, loading, properties, password, repeatPw,
usernameError, domain, autocompleteInput, status, homeserver,
lang, langs, chat, chatAvailable } = this.state;
const { displayname, displaytypeex } = properties;
const addDisabled = !domain || usernameError || !username || loading ||
((password !== repeatPw || password.length < 6) && status !== 4);
return (
<Dialog
onClose={onClose}
open={open}
maxWidth="sm"
fullWidth
TransitionProps={{
onEnter: this.handleEnter,
}}
>
<DialogTitle>{t('addHeadline', { item: 'User' })}</DialogTitle>
<DialogContent>
<FormControl className={classes.form}>
<MagnitudeAutocomplete
value={domain}
filterAttribute={'domainname'}
inputValue={autocompleteInput}
onChange={this.handleAutocomplete}
className={classes.input}
options={Domains}
onInputChange={this.handleInput('autocompleteInput')}
label={t('Domain')}
placeholder={t("Search domains") + "..."}
autoFocus
autoSelect
/>
<TextField
select
className={classes.input}
label={t("Mode")}
fullWidth
value={status || 0}
onChange={this.handleInput('status')}
>
{this.statuses.map((status, key) => (
<MenuItem key={key} value={status.ID}>
{status.name}
</MenuItem>
))}
</TextField>
<TextField
label={t("Username")}
value={username || ''}
onChange={this.handleUsernameInput}
fullWidth
InputProps={{
endAdornment: <div>@{domain?.domainname || '<select domain>'}</div>,
className: classes.noWrap,
}}
className={classes.input}
required
error={!!username && usernameError}
/>
{status !== 4 && <TextField
label={t("Password")}
value={password || ''}
onChange={this.handleInput('password')}
className={classes.input}
type="password"
required
FormHelperTextProps={{
error: true,
}}
helperText={(password && password.length < 6) ? t('Password must be at least 6 characters long') : ''}
autoComplete="new-password"
/>}
{status !== 4 && <TextField
label={t("Repeat password")}
value={repeatPw || ''}
onChange={this.handleInput('repeatPw')}
className={classes.input}
type="password"
required
FormHelperTextProps={{
error: true,
}}
autoComplete="off"
helperText={(repeatPw && password !== repeatPw) ? t("Passwords don't match") : ''}
/>}
<TextField
label={t("Display name")}
value={displayname || ''}
onChange={this.handlePropertyChange('displayname')}
className={classes.input}
/>
<TextField
select
className={classes.input}
label={t("Language")}
fullWidth
value={lang || 'en_US'}
onChange={this.handleInput('lang')}
>
{langs.map((l) => (
<MenuItem key={l.code} value={l.code}>
{l.code + ": " + l.name}
</MenuItem>
))}
</TextField>
<TextField
select
className={classes.input}
label={t("Type")}
fullWidth
value={displaytypeex || 0}
onChange={this.handlePropertyChange('displaytypeex')}
>
{this.types.map((type, key) => (
<MenuItem key={key} value={type.ID}>
{type.name}
</MenuItem>
))}
</TextField>
<MagnitudeAutocomplete
value={homeserver}
filterAttribute={'hostname'}
onChange={this.handleServer}
className={classes.input}
options={servers}
label={t('Homeserver')}
/>
<FormControlLabel
control={
<Checkbox
checked={chat || false}
onChange={this.handleCheckbox('chat')}
color="primary"
/>
}
label={t('Create grommunio-chat User')}
disabled={!chatAvailable}
/>
</FormControl>
</DialogContent>
<DialogActions>
<Button
onClick={onClose}
color="secondary"
>
{t('Cancel')}
</Button>
<Button
onClick={this.handleAddAndEdit}
variant="contained"
color="primary"
disabled={addDisabled}
>
{loading ? <CircularProgress size={24}/> : t('Add and edit')}
</Button>
<Button
onClick={this.handleAdd}
variant="contained"
color="primary"
disabled={addDisabled}
>
{loading ? <CircularProgress size={24}/> : t('Add')}
</Button>
</DialogActions>
</Dialog>
);
}
Example #28
Source File: AddFetchmail.js From admin-web with GNU Affero General Public License v3.0 | 4 votes |
render() {
const { classes, t, open, onClose, username } = this.props;
const { active, srcServer, srcUser, srcPassword, srcFolder, srcAuth, fetchall, keep, protocol,
useSSL, sslCertCheck, sslCertPath, sslFingerprint, extraOptions } = this.state;
const disabled = [srcServer, srcUser, srcPassword, protocol].includes('');
return (
<Dialog
onClose={onClose}
open={open}
maxWidth="md"
fullWidth
>
<DialogTitle>{t('addEntry', { username: username })}</DialogTitle>
<DialogContent style={{ minWidth: 400 }}>
<FormControl className={classes.form} autoComplete="off" noValidate>
<TextField
className={classes.input}
label={t("Source server")}
fullWidth
value={srcServer || ''}
onChange={this.handleInput('srcServer')}
autoFocus
required
/>
<TextField
className={classes.input}
label={t("Source user")}
fullWidth
value={srcUser || ''}
onChange={this.handleInput('srcUser')}
required
/>
<form autoComplete="off" noValidate>
<TextField
className={classes.input}
label={t("Source password")}
fullWidth
value={srcPassword || ''}
onChange={this.handleInput('srcPassword')}
type="password"
required
id="new-password"
name='new-password'
autoComplete="new-password"
/>
</form>
<TextField
className={classes.input}
label={t("Source folder")}
fullWidth
value={srcFolder || ''}
onChange={this.handleInput('srcFolder')}
/>
<TextField
className={classes.input}
label={t("Source auth")}
fullWidth
value={srcAuth || ''}
onChange={this.handleInput('srcAuth')}
select
>
{this.authTypes.map(t =>
<MenuItem key={t} value={t}>{t}</MenuItem>
)}
</TextField>
<TextField
className={classes.input}
label={t("Protocol")}
fullWidth
value={protocol || ''}
onChange={this.handleInput('protocol')}
select
required
>
{this.protocols.map(p =>
<MenuItem key={p} value={p}>{p}</MenuItem>
)}
</TextField>
<TextField
className={classes.input}
label={t("SSL certificate path")}
fullWidth
value={sslCertPath || ''}
onChange={this.handleInput('sslCertPath')}
disabled={!useSSL}
/>
<TextField
className={classes.input}
label={t("SSL fingerprint")}
fullWidth
value={sslFingerprint || ''}
onChange={this.handleInput('sslFingerprint')}
disabled={!useSSL}
/>
<TextField
className={classes.input}
label={t("Extra options")}
fullWidth
value={extraOptions || ''}
onChange={this.handleInput('extraOptions')}
/>
<Grid container>
<FormControlLabel
control={
<Checkbox
checked={active}
onChange={this.handleCheckbox('active')}
color="primary"
/>
}
label="Active"
/>
<FormControlLabel
control={
<Checkbox
checked={useSSL}
onChange={this.handleCheckbox('useSSL')}
color="primary"
/>
}
label="Use SSL"
/>
<FormControlLabel
control={
<Checkbox
checked={fetchall}
onChange={this.handleCheckbox('fetchall')}
color="primary"
/>
}
label="Fetch all"
/>
<FormControlLabel
control={
<Checkbox
checked={keep}
onChange={this.handleCheckbox('keep')}
color="primary"
/>
}
label="Keep"
/>
<FormControlLabel
control={
<Checkbox
checked={sslCertCheck}
onChange={this.handleCheckbox('sslCertCheck')}
color="primary"
disabled={!useSSL}
/>
}
label="SSL certificate check"
/>
</Grid>
</FormControl>
</DialogContent>
<DialogActions>
<Button
onClick={onClose}
color="secondary"
>
{t('Cancel')}
</Button>
<Button
onClick={this.handleAdd}
variant="contained"
color="primary"
disabled={disabled}
>
{t('Add')}
</Button>
</DialogActions>
</Dialog>
);
}
Example #29
Source File: AddDomain.js From admin-web with GNU Affero General Public License v3.0 | 4 votes |
render() {
const { classes, t, open, onClose, orgs, servers } = this.props;
const { domainname, domainStatus, orgID, domainError, chat, homeserver,
maxUser, title, address, adminName, tel, loading, createRole, autocompleteInput } = this.state;
return (
<Dialog
onClose={onClose}
open={open}
maxWidth="md"
fullWidth
TransitionProps={{
onEnter: this.handleEnter,
}}>
<DialogTitle>{t('addHeadline', { item: 'Domain' })}</DialogTitle>
<DialogContent style={{ minWidth: 400 }}>
<FormControl className={classes.form}>
<TextField
className={classes.input}
label={t("Domain")}
fullWidth
value={domainname || ''}
onChange={this.handleInput('domainname')}
autoFocus
required
error={!!domainname && domainError}
/>
<TextField
select
className={classes.input}
label={t("Status")}
fullWidth
value={domainStatus || 0}
onChange={this.handleInput('domainStatus')}
>
{this.statuses.map((status, key) => (
<MenuItem key={key} value={status.ID}>
{status.name}
</MenuItem>
))}
</TextField>
<MagnitudeAutocomplete
value={orgID}
filterAttribute={'name'}
inputValue={autocompleteInput}
onChange={this.handleAutocomplete('orgID')}
className={classes.input}
options={orgs}
onInputChange={this.handleInput('autocompleteInput')}
label={t('Organization')}
/>
<TextField
className={classes.input}
label={t("Maximum users")}
fullWidth
value={maxUser || ''}
onChange={this.handleNumberInput('maxUser')}
required
/>
<TextField
className={classes.input}
label={t("Title")}
fullWidth
value={title || ''}
onChange={this.handleInput('title')}
/>
<TextField
className={classes.input}
label={t("Address")}
fullWidth
value={address || ''}
onChange={this.handleInput('address')}
/>
<TextField
className={classes.input}
label={t("Administrator")}
fullWidth
value={adminName || ''}
onChange={this.handleInput('adminName')}
/>
<TextField
className={classes.input}
label={t("Telephone")}
fullWidth
value={tel || ''}
onChange={this.handleInput('tel')}
/>
<MagnitudeAutocomplete
value={homeserver}
filterAttribute={'hostname'}
onChange={this.handleAutocomplete('homeserver')}
className={classes.input}
options={servers}
label={t('Homeserver')}
/>
<FormControlLabel
control={
<Checkbox
checked={createRole}
onChange={this.handleCheckbox('createRole')}
color="primary"
/>
}
label={t('Create domain admin role')}
/>
<FormControlLabel
control={
<Checkbox
checked={chat}
onChange={this.handleCheckbox('chat')}
color="primary"
/>
}
label={t('Create grommunio-chat Team')}
/>
</FormControl>
</DialogContent>
<DialogActions>
<Button
onClick={onClose}
color="secondary"
>
{t('Cancel')}
</Button>
<Button
onClick={this.handleAdd}
variant="contained"
color="primary"
disabled={loading || !domainname || !maxUser || domainError}
>
{loading ? <CircularProgress size={24}/> : t('Add')}
</Button>
</DialogActions>
</Dialog>
);
}