import { useState } from "react"; import { Button, CenteredView, Checkbox, DeleteIcon, IconButton, Table, TableBody, TableCell, TableHeader, TableRow, Tooltip, Typography } from "@firecms/ui"; import { ConfirmationDialog, Role, useTranslation } from "@firecms/core"; import { useUserManagement } from "../../hooks"; import { RoleChip } from "./RoleChip"; import { DEFAULT_ROLES } from "./default_roles"; export function RolesTable({ onRoleClicked, editable }: { onRoleClicked: (role: Role) => void; editable: boolean; }) { const { t } = useTranslation(); const { roles, saveRole, deleteRole, allowDefaultRolesCreation } = useUserManagement(); const [roleToBeDeleted, setRoleToBeDeleted] = useState(undefined); const [deleteInProgress, setDeleteInProgress] = useState(false); return
{t("role")} {t("is_admin")} {t("default_permissions")} {roles && roles.map((role) => { const canCreateAll = role.isAdmin || role.defaultPermissions?.create; const canReadAll = role.isAdmin || role.defaultPermissions?.read; const canUpdateAll = role.isAdmin || role.defaultPermissions?.edit; const canDeleteAll = role.isAdmin || role.defaultPermissions?.delete; return ( { onRoleClicked(role); }} > {!role.isAdmin && { event.stopPropagation(); return setRoleToBeDeleted(role); }}> }
    {canCreateAll &&
  • {t("create")}
  • } {canReadAll &&
  • {t("read")}
  • } {canUpdateAll &&
  • {t("update")}
  • } {canDeleteAll &&
  • {t("delete")}
  • }
); })} {(!roles || roles.length === 0) && {t("no_roles_yet")} {allowDefaultRolesCreation && } }
{ if (roleToBeDeleted) { setDeleteInProgress(true); deleteRole(roleToBeDeleted) .then(() => { setRoleToBeDeleted(undefined); }) .finally(() => { setDeleteInProgress(false); }) } }} onCancel={() => { setRoleToBeDeleted(undefined); }} title={<>{t("delete_confirmation_title")}} body={<>{t("delete_role_confirmation")}}/>
; }