import type { IRole, IPermission } from '@rocket.chat/core-typings'; import { GenericTableRow, GenericTableCell } from '@rocket.chat/ui-client'; import type { TranslationKey } from '@rocket.chat/ui-contexts'; import type { TFunction } from 'i18next'; import { memo } from 'react'; import { useTranslation } from 'react-i18next'; import RoleCell from './RoleCell'; import { CONSTANTS } from '../../../../../app/authorization/lib'; import { useChangeRole } from '../hooks/useChangeRole'; const getName = (t: TFunction, permission: IPermission): string => { if (permission.level === CONSTANTS.SETTINGS_LEVEL) { let path = ''; if (permission.group) { path = `${t(permission.group as TranslationKey)} > `; } if (permission.section) { path = `${path}${t(permission.section as TranslationKey)} > `; } return `${path}${t(permission.settingId as TranslationKey)}`; } return t(permission._id as TranslationKey); }; export type PermissionRowProps = { permission: IPermission; roleList: IRole[]; onGrant: (permissionId: IPermission['_id'], roleId: IRole['_id']) => Promise; onRemove: (permissionId: IPermission['_id'], roleId: IRole['_id']) => Promise; }; const PermissionRow = ({ permission, roleList, onGrant, onRemove }: PermissionRowProps) => { const { t } = useTranslation(); const { _id: permissionId, roles } = permission; const changeRole = useChangeRole({ onGrant, onRemove, permissionId }); const permissionName = getName(t, permission); return ( {permissionName} {roleList.map(({ _id: roleId, name, description }) => ( ))} ); }; export default memo(PermissionRow);