+ {attribute.value({ admin })}
+
+ ))}
+
+ )
+}
+
+const useStyles = makeStyles(() => ({
+ truncate: {
+ overflow: 'hidden',
+ textOverflow: 'ellipsis',
+ whiteSpace: 'nowrap',
+ minWidth: 0,
+ flex: 1,
+ },
+}))
diff --git a/frontend/src/pages/AdminAdminsPage/AdminAdminsListPage.tsx b/frontend/src/pages/AdminAdminsPage/AdminAdminsListPage.tsx
new file mode 100644
index 000000000..82fa647b3
--- /dev/null
+++ b/frontend/src/pages/AdminAdminsPage/AdminAdminsListPage.tsx
@@ -0,0 +1,223 @@
+import { Box, Button, Stack, TextField, ToggleButton, ToggleButtonGroup, Typography } from '@mui/material'
+import React, { useEffect, useState, useCallback, useRef } from 'react'
+import { useSelector } from 'react-redux'
+import { useHistory, useLocation } from 'react-router-dom'
+import { Container } from '../../components/Container'
+import { GridList } from '../../components/GridList'
+import { Gutters } from '../../components/Gutters'
+import { Icon } from '../../components/Icon'
+import { IconButton } from '../../buttons/IconButton'
+import { LoadingMessage } from '../../components/LoadingMessage'
+import { removeObject } from '../../helpers/utilHelper'
+import { State } from '../../store'
+import { AdminAdminListItem } from './AdminAdminListItem'
+import { AddAdminDialog } from '../AdminUsersPage/AddAdminDialog'
+import { adminAdminAttributes, AdminAdminRow } from './adminAdminAttributes'
+import { graphQLAdminUsers } from '../../services/graphQLRequest'
+
+const PAGE_SIZE = 50
+
+type SearchType = 'all' | 'email' | 'userId'
+
+export const AdminAdminsListPage: React.FC = () => {
+ const history = useHistory()
+ const location = useLocation()
+ const columnWidths = useSelector((state: State) => state.ui.columnWidths)
+ const [required, attributes] = removeObject(adminAdminAttributes, a => a.required === true)
+
+ const [admins, setAdmins] = useState