diff --git a/modern/src/resources/l10n/en.json b/modern/src/resources/l10n/en.json index 66d15d4ec3..814bfde0f6 100644 --- a/modern/src/resources/l10n/en.json +++ b/modern/src/resources/l10n/en.json @@ -175,6 +175,7 @@ "userFixedEmail": "No Email Change", "userToken": "Token", "userDeleteAccount": "Delete Account", + "userTemporary": "Temporary", "loginTitle": "Login", "loginLanguage": "Language", "loginReset": "Reset Password", diff --git a/modern/src/settings/UsersPage.jsx b/modern/src/settings/UsersPage.jsx index d04f2a2bcf..e54ecc019a 100644 --- a/modern/src/settings/UsersPage.jsx +++ b/modern/src/settings/UsersPage.jsx @@ -1,7 +1,7 @@ import React, { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { - Table, TableRow, TableCell, TableHead, TableBody, + Table, TableRow, TableCell, TableHead, TableBody, Switch, TableFooter, FormControlLabel, FormControl, FormGroup, Grid, } from '@mui/material'; import LoginIcon from '@mui/icons-material/Login'; import LinkIcon from '@mui/icons-material/Link'; @@ -31,6 +31,7 @@ const UsersPage = () => { const [items, setItems] = useState([]); const [searchKeyword, setSearchKeyword] = useState(''); const [loading, setLoading] = useState(false); + const [temporary, setTemporary] = useState(false); const handleLogin = useCatch(async (userId) => { const response = await fetch(`/api/session/${userId}`); @@ -80,11 +81,11 @@ const UsersPage = () => { {t('userAdmin')} {t('sharedDisabled')} {t('userExpirationTime')} - + - {!loading ? items.filter(filterByKeyword(searchKeyword)).map((item) => ( + {!loading ? items.filter((u) => temporary || !u.temporary).filter(filterByKeyword(searchKeyword)).map((item) => ( {item.name} {item.email} @@ -103,6 +104,23 @@ const UsersPage = () => { )) : ()} + + + + setTemporary(e.target.checked)} + size="small" + /> + } + label={t('userTemporary')} + labelPlacement="start" + /> + + +