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;