import React, { useState, useMemo } from 'react';
import { Box, Table, Button, Icon } from '@rocket.chat/fuselage';
import { useMutableCallback, useDebouncedValue } from '@rocket.chat/fuselage-hooks';
import UserAvatar from '../../../components/avatar/UserAvatar';
import DeleteWarningModal from '../../../components/DeleteWarningModal';
import { useMethod } from '../../../contexts/ServerContext';
import GenericTable from '../../../components/GenericTable';
import { useTranslation } from '../../../contexts/TranslationContext';
import { useToastMessageDispatch } from '../../../contexts/ToastMessagesContext';
import { useSetModal } from '../../../contexts/ModalContext';
import { useEndpointData } from '../../../hooks/useEndpointData';
const UserRow = React.memo(({ _id, username, name, avatarETag, emails, onRemove }) => {
const email = emails?.find(({ address }) => !!address).address;
const handleRemove = useMutableCallback(() => {
onRemove(username);
});
return
{name || username}
{name && {`@${ username }`} }
{email}
;
});
export function UsersInRoleTable({ data, reload, roleName, total, params, setParams, rid }) {
const t = useTranslation();
const dispatchToastMessage = useToastMessageDispatch();
const setModal = useSetModal();
const removeUser = useMethod('authorization:removeUserFromRole');
const closeModal = () => setModal();
const onRemove = useMutableCallback((username) => {
const remove = async () => {
try {
await removeUser(roleName, username, rid);
dispatchToastMessage({ type: 'success', message: t('User_removed') });
} catch (error) {
dispatchToastMessage({ type: 'erroor', message: error });
}
closeModal();
reload();
};
setModal();
});
return
{t('Name')}
{t('Email')}
>}
results={data}
params={params}
setParams={setParams}
total={total}
>
{(props) => }
;
}
const UsersInRoleTableContainer = ({ rid, roleName, reloadRef }) => {
const [params, setParams] = useState({ current: 0, itemsPerPage: 25 });
const debouncedParams = useDebouncedValue(params, 500);
const query = useMemo(() => ({
roomId: rid,
role: roleName,
...debouncedParams.itemsPerPage && { count: debouncedParams.itemsPerPage },
...debouncedParams.current && { offset: debouncedParams.current },
}), [debouncedParams, rid, roleName]);
const { value: data = {}, reload } = useEndpointData('roles.getUsersInRole', query);
reloadRef.current = reload;
const tableData = data?.users || [];
return ;
};
export default UsersInRoleTableContainer;