import { Trans } from "@lingui/macro"
import { ActionIcon, Box, Code, Container, Group, Table, Text, Title, useMantineTheme } from "@mantine/core"
import { closeAllModals, openConfirmModal, openModal } from "@mantine/modals"
import { client, errorToStrings } from "app/client"
import type { UserModel } from "app/types"
import { Alert } from "components/Alert"
import { Loader } from "components/Loader"
import { RelativeDate } from "components/RelativeDate"
import { UserEdit } from "components/admin/UserEdit"
import type { ReactNode } from "react"
import { useAsync, useAsyncCallback } from "react-async-hook"
import { TbCheck, TbPencil, TbPlus, TbTrash, TbX } from "react-icons/tb"
function BooleanIcon({ value }: { value: boolean }) {
return value ? :
}
export function AdminUsersPage() {
const theme = useMantineTheme()
const query = useAsync(async () => await client.admin.getAllUsers(), [])
const users = query.result?.data.sort((a, b) => a.id - b.id)
const deleteUser = useAsyncCallback(client.admin.deleteUser, {
onSuccess: () => {
query.execute()
closeAllModals()
},
})
const openUserEditModal = (title: ReactNode, user?: UserModel) => {
openModal({
title,
children: (
{
query.execute()
closeAllModals()
}}
/>
),
})
}
const openUserDeleteModal = (user: UserModel) => {
const userName = user.name
openConfirmModal({
title: Delete user,
children: (
Are you sure you want to delete user {userName} ?
),
labels: { confirm: Confirm, cancel: Cancel },
confirmProps: { color: "red" },
onConfirm: async () => await deleteUser.execute({ id: user.id }),
})
}
if (!users) return
return (
Manage users
openUserEditModal(Add user)}>
{deleteUser.error && (
)}
Id
Name
E-mail
Date created
Last login date
Admin
Enabled
Actions
{users.map(u => (
{u.id}
{u.name}
{u.email}
openUserEditModal(Edit user, u)}
>
openUserDeleteModal(u)}
loading={deleteUser.loading}
>
))}
)
}