--- /dev/null
+import React, { useState } from 'react';
+import { Dialog, DialogTitle, DialogContent, DialogActions, Button, TextField, Select, MenuItem } from '@mui/material';
+
+const CreateVPNClientDialog = ( { open, onClose, onCreate }) => {
+ const [clientName, setClientName] = useState('');
+ const [staticIp, setStaticIp] = useState('');
+ const [useStaticIp, setUseStaticIp] = useState(false);
+ // noinspection JSValidateTypes
+ return (
+ <Dialog open={open} onClose={onClose}>
+ <DialogTitle>Create New Client</DialogTitle>
+ <form onSubmit={ e => {
+ onCreate(e, { clientName, staticIp, useStaticIp } );
+ } } className="space-y-4" >
+ <DialogContent>
+ <TextField
+ label="Client Name"
+ value={clientName}
+ onChange={(e) => setClientName(e.target.value)}
+ fullWidth
+ />
+ <Select
+ value={useStaticIp}
+ onChange={(e) => setUseStaticIp(e.target.value)}
+ fullWidth
+ variant='standard'>
+ <MenuItem value={false} >Dynamic IP</MenuItem>
+ <MenuItem value={true} >Static IP</MenuItem>
+ </Select>
+ {useStaticIp && (
+ <TextField
+ label="Static IP"
+ value={staticIp}
+ onChange={(e) => setStaticIp(e.target.value)}
+ fullWidth
+ placeholder="e.g., 10.8.0.x"
+ />
+ )}
+ </DialogContent>
+ <DialogActions>
+ <Button type="submit" variant="contained" color="primary">Create</Button>
+ <Button variant='contained' color='primary' onClick={onClose}>Cancel</Button>
+ </DialogActions>
+ </form>
+ </Dialog>
+ );
+};
+
+export default CreateVPNClientDialog;
\ No newline at end of file
-export * from './VPN/ConfirmRevoke';
\ No newline at end of file
+export * as ConfirmRevoke from './VPN/ConfirmRevoke';
+export * as CreateVPNClientDialog from './VPN/CreateVPNClientDialog';
\ No newline at end of file
+++ /dev/null
-import React, { useState } from 'react';
-import { Dialog, DialogTitle, DialogContent, DialogActions, Button, TextField, Select, MenuItem } from '@mui/material';
-
-const CreateVPNClientDialog = ( { open, onClose, onCreate }) => {
- const [clientName, setClientName] = useState('');
- const [staticIp, setStaticIp] = useState('');
- const [useStaticIp, setUseStaticIp] = useState(false);
- // noinspection JSValidateTypes
- return (
- <Dialog open={open} onClose={onClose}>
- <DialogTitle>Create New Client</DialogTitle>
- <form onSubmit={ e => {
- onCreate(e, { clientName, staticIp, useStaticIp } );
- } } className="space-y-4" >
- <DialogContent>
- <TextField
- label="Client Name"
- value={clientName}
- onChange={(e) => setClientName(e.target.value)}
- fullWidth
- />
- <Select
- value={useStaticIp}
- onChange={(e) => setUseStaticIp(e.target.value)}
- fullWidth
- variant='standard'>
- <MenuItem value={false} >Dynamic IP</MenuItem>
- <MenuItem value={true} >Static IP</MenuItem>
- </Select>
- {useStaticIp && (
- <TextField
- label="Static IP"
- value={staticIp}
- onChange={(e) => setStaticIp(e.target.value)}
- fullWidth
- placeholder="e.g., 10.8.0.x"
- />
- )}
- </DialogContent>
- <DialogActions>
- <Button type="submit" variant="contained" color="primary">Create</Button>
- <Button variant='contained' color='primary' onClick={onClose}>Cancel</Button>
- </DialogActions>
- </form>
- </Dialog>
- );
-};
-
-export default CreateVPNClientDialog;
\ No newline at end of file
import React, { useState, useEffect } from 'react';
-import { Container, Typography, TextField, Button, Select, MenuItem } from '@mui/material';
+import { Container, Typography, Button } from '@mui/material';
import { MaterialReactTable } from 'material-react-table';
/*import axios from 'axios';*/
import 'tailwindcss/tailwind.css';
import { VPNService } from '../../services';
-import CreateVPNClientDialog from './CreateVPNClientDialog';
-import { ConfirmRevoke } from '../components';
+import { ConfirmRevoke, CreateVPNClientDialog } from '../../components';
const VPN = () => {
/*const [token, setToken] = useState('');