import React, { FC, useEffect, useState } from 'react'; import { AccessControlAction, OrgUser, Role } from 'app/types'; import { OrgRolePicker } from '../admin/OrgRolePicker'; import { Button, ConfirmModal } from '@grafana/ui'; import { OrgRole } from '@grafana/data'; import { contextSrv } from 'app/core/core'; import { fetchBuiltinRoles, fetchRoleOptions, UserRolePicker } from 'app/core/components/RolePicker/UserRolePicker'; export interface Props { users: OrgUser[]; orgId?: number; onRoleChange: (role: OrgRole, user: OrgUser) => void; onRemoveUser: (user: OrgUser) => void; } const UsersTable: FC = (props) => { const { users, orgId, onRoleChange, onRemoveUser } = props; const canUpdateRole = contextSrv.hasPermission(AccessControlAction.OrgUsersRoleUpdate); const canRemoveFromOrg = contextSrv.hasPermission(AccessControlAction.OrgUsersRemove); const rolePickerDisabled = !canUpdateRole; const [showRemoveModal, setShowRemoveModal] = useState(false); const [roleOptions, setRoleOptions] = useState([]); const [builtinRoles, setBuiltinRoles] = useState<{ [key: string]: Role[] }>({}); useEffect(() => { async function fetchOptions() { try { let options = await fetchRoleOptions(orgId); setRoleOptions(options); const builtInRoles = await fetchBuiltinRoles(orgId); setBuiltinRoles(builtInRoles); } catch (e) { console.error('Error loading options'); } } if (contextSrv.accessControlEnabled()) { fetchOptions(); } }, [orgId]); const getRoleOptions = async () => roleOptions; const getBuiltinRoles = async () => builtinRoles; return ( {users.map((user, index) => { return ( {canRemoveFromOrg && ( )} ); })}
Login Email Name Seen Role
User avatar {user.login} {user.email} {user.name} {user.lastSeenAtAge} {contextSrv.accessControlEnabled() ? ( onRoleChange(newRole, user)} getRoleOptions={getRoleOptions} getBuiltinRoles={getBuiltinRoles} disabled={rolePickerDisabled} /> ) : ( onRoleChange(newRole, user)} /> )}
); }; export default UsersTable;