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"
+ />
+
+
+