import { FC, useContext, useState } from 'react'; import { Button, IconButton, Box } from '@mui/material'; import SaveIcon from '@mui/icons-material/Save'; import DeleteIcon from '@mui/icons-material/Delete'; import PersonAddIcon from '@mui/icons-material/PersonAdd'; import EditIcon from '@mui/icons-material/Edit'; import CheckIcon from '@mui/icons-material/Check'; import CloseIcon from '@mui/icons-material/Close'; import VpnKeyIcon from '@mui/icons-material/VpnKey'; import { Table } from '@table-library/react-table-library/table'; import { useTheme } from '@table-library/react-table-library/theme'; import { Header, HeaderRow, HeaderCell, Body, Row, Cell } from '@table-library/react-table-library/table'; import * as SecurityApi from '../../api/security'; import { SecuritySettings, User } from '../../types'; import { ButtonRow, FormLoader, MessageBox, SectionContent } from '../../components'; import { createUserValidator } from '../../validators'; import { useRest } from '../../utils'; import { AuthenticatedContext } from '../../contexts/authentication'; import GenerateToken from './GenerateToken'; import UserForm from './UserForm'; const ManageUsersForm: FC = () => { const { loadData, saving, data, setData, saveData, errorMessage } = useRest({ read: SecurityApi.readSecuritySettings, update: SecurityApi.updateSecuritySettings }); const [user, setUser] = useState(); const [creating, setCreating] = useState(false); const [generatingToken, setGeneratingToken] = useState(); const authenticatedContext = useContext(AuthenticatedContext); const table_theme = useTheme({ Table: ` --data-table-library_grid-template-columns: repeat(1, minmax(0, 1fr)) 90px 120px; `, BaseRow: ` font-size: 14px; `, HeaderRow: ` text-transform: uppercase; background-color: black; color: #90CAF9; .th { padding: 8px; height: 42px; font-weight: 500; border-bottom: 1px solid #565656; } `, Row: ` .td { padding: 8px; border-top: 1px solid #565656; border-bottom: 1px solid #565656; } &:nth-of-type(odd) .td { background-color: #303030; } &:nth-of-type(even) .td { background-color: #1e1e1e; } `, BaseCell: ` &:nth-of-type(2) { text-align: center; } &:last-of-type { text-align: right; } ` }); const content = () => { if (!data) { return ; } const noAdminConfigured = () => !data.users.find((u) => u.admin); const removeUser = (toRemove: User) => { const users = data.users.filter((u) => u.username !== toRemove.username); setData({ ...data, users }); }; const createUser = () => { setCreating(true); setUser({ username: '', password: '', admin: true }); }; const editUser = (toEdit: User) => { setCreating(false); setUser({ ...toEdit }); }; const cancelEditingUser = () => { setUser(undefined); }; const doneEditingUser = () => { if (user) { const users = [...data.users.filter((u) => u.username !== user.username), user]; setData({ ...data, users }); setUser(undefined); } }; const closeGenerateToken = () => { setGeneratingToken(undefined); }; const generateToken = (username: string) => { setGeneratingToken(username); }; const onSubmit = async () => { await saveData(); authenticatedContext.refresh(); }; const user_table = data.users.map((u) => ({ ...u, id: u.username })); return ( <> {(tableList: any) => ( <>
USERNAME IS ADMIN
{tableList.map((u: any) => ( {u.username} {u.admin ? : } generateToken(u.username)} > removeUser(u)}> editUser(u)}> ))} )}
{noAdminConfigured() && ( )} ); }; return ( {content()} ); }; export default ManageUsersForm;