2020-04-15 09:49:20 -05:00
|
|
|
import React, { FC, useState } from 'react';
|
2018-10-03 02:43:10 -05:00
|
|
|
import { OrgUser } from 'app/types';
|
2020-04-15 09:49:20 -05:00
|
|
|
import { OrgRolePicker } from '../admin/OrgRolePicker';
|
|
|
|
import { Button, ConfirmModal } from '@grafana/ui';
|
|
|
|
import { OrgRole } from '@grafana/data';
|
2018-10-03 02:43:10 -05:00
|
|
|
|
|
|
|
export interface Props {
|
|
|
|
users: OrgUser[];
|
2020-04-15 09:49:20 -05:00
|
|
|
onRoleChange: (role: OrgRole, user: OrgUser) => void;
|
2018-10-03 02:43:10 -05:00
|
|
|
onRemoveUser: (user: OrgUser) => void;
|
|
|
|
}
|
|
|
|
|
2019-01-17 02:27:43 -06:00
|
|
|
const UsersTable: FC<Props> = props => {
|
2018-10-03 02:43:10 -05:00
|
|
|
const { users, onRoleChange, onRemoveUser } = props;
|
|
|
|
|
2020-04-15 09:49:20 -05:00
|
|
|
const [showRemoveModal, setShowRemoveModal] = useState<string | boolean>(false);
|
2018-10-03 02:43:10 -05:00
|
|
|
return (
|
|
|
|
<table className="filter-table form-inline">
|
|
|
|
<thead>
|
|
|
|
<tr>
|
|
|
|
<th />
|
|
|
|
<th>Login</th>
|
|
|
|
<th>Email</th>
|
2019-11-21 04:44:46 -06:00
|
|
|
<th>Name</th>
|
2018-10-03 02:43:10 -05:00
|
|
|
<th>Seen</th>
|
|
|
|
<th>Role</th>
|
|
|
|
<th style={{ width: '34px' }} />
|
|
|
|
</tr>
|
|
|
|
</thead>
|
|
|
|
<tbody>
|
|
|
|
{users.map((user, index) => {
|
|
|
|
return (
|
|
|
|
<tr key={`${user.userId}-${index}`}>
|
|
|
|
<td className="width-4 text-center">
|
|
|
|
<img className="filter-table__avatar" src={user.avatarUrl} />
|
|
|
|
</td>
|
|
|
|
<td>{user.login}</td>
|
2020-04-15 09:49:20 -05:00
|
|
|
|
2018-10-03 02:43:10 -05:00
|
|
|
<td>
|
|
|
|
<span className="ellipsis">{user.email}</span>
|
|
|
|
</td>
|
2019-11-21 04:44:46 -06:00
|
|
|
<td>{user.name}</td>
|
2018-10-03 02:43:10 -05:00
|
|
|
<td>{user.lastSeenAtAge}</td>
|
2020-04-15 09:49:20 -05:00
|
|
|
|
|
|
|
<td className="width-8">
|
|
|
|
<OrgRolePicker value={user.role} onChange={newRole => onRoleChange(newRole, user)} />
|
2018-10-03 02:43:10 -05:00
|
|
|
</td>
|
2020-04-15 09:49:20 -05:00
|
|
|
|
2018-10-03 02:43:10 -05:00
|
|
|
<td>
|
2020-04-15 09:49:20 -05:00
|
|
|
<Button size="sm" variant="destructive" onClick={() => setShowRemoveModal(user.login)} icon="times" />
|
|
|
|
<ConfirmModal
|
|
|
|
body={`Are you sure you want to delete user ${user.login}?`}
|
|
|
|
confirmText="Delete"
|
|
|
|
title="Delete"
|
|
|
|
onDismiss={() => setShowRemoveModal(false)}
|
|
|
|
isOpen={user.login === showRemoveModal}
|
|
|
|
onConfirm={() => {
|
|
|
|
onRemoveUser(user);
|
|
|
|
}}
|
|
|
|
/>
|
2018-10-03 02:43:10 -05:00
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
);
|
|
|
|
})}
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
export default UsersTable;
|