mirror of
https://github.com/ToolJet/ToolJet
synced 2026-04-29 09:27:32 +00:00
* adding colors
* feat :: add button
* feat :: added typography
* feat: init storybook
* removes browserlist
* feat :: adding button styles and button component
* feat :: added sass addon
* stories update
* feat :: replacing with radix colors
* danger variants
* updates buttin story
* fix :: removing default items
* cleanup
* fix icons update
* feat :: folder list component
* fix :: naming
* icon and split button :: init
* intermediate save :: app card component
* renaming
* updates
* update for module imports
* updates icon
* update :: homepage design updates
* design changes dashboard
* updates :: apps section
* workspace stting new design upate
* updates dasboard design
* style :: fixes
* feat :: added context for sidebar nav breadcrumb
* added all solid icons
* intermediate update
* change: conditions for fetching users
* sorybook updates
* design updates :: workspace settings page
* manage users page
* lint fixes
* fix :: styling
* stle fixes :: workspace settings
* homepage redesign
* fix :: all drawer colors and position ,teplate page revamp , database page header fixes
* imported all bulk icons
* svg to jsx : bulk icons
* minor :: cleanup
* fix :: manage users drawer
* fix :: searchboxes , userspage fixes
* fix :: all inputs and minor ui fixes
* database page ui fixes
* fix :: database and folder search functionality and iconlist in homecard
* fixed some db functionality and edge cases for longer texts
* fix :: user addition manage user page
* self review cleanup and change in bulk icon fill state
* fix :: homepage seacbar
* merging develop and resolving conflicts
* remove unwanted stories
* reverting merge with develop
* Revert "reverting merge with develop"
This reverts commit 2150c8ec0c.
* clearing out warnings
* lint fixes
* feat :: added org modal in database page
* fix :: sso loader theme
* fix :: broken styles select
* fixed icon warning and select ui
* fix :: upload bulk and user select dark mode
* merge styles with develop
* feat :: integrated new ui for database
* removing storybook files
* fix :: all bugs related to users dropdown and cleanup
* fix: user search api for organization page
* cleanup and splitting dropzone component
* fix :: overflow issue in app card time
* fix for scrollbars in homepage
* PR review fixes
* updates :: fix d=global datasource design issues , homepage responsiveness
* tj db operations
* breadcrumb bug fixes
* lint fixes
* removing logs , removed fade in in datasource and database page
* marketplace page ui fix
* removing inital users table fetch
* Pr :: review changes
* remove logs
* fix :: popover bug
* minot style fix
* fix :: remove arrow from all popovers
* fix :: for loading states
* ux :: sidebar items reorder
* style :: fix
* style fix :: templates
* fix :: qa bugs
* fix :: Qa reported bugs
* removes :: folder fetch bug
* share link and datsource bg color fix
* fixes :: rename group ,
* removed logs
* pages popover background fix
* fix :: tj db table addition ui bug
* fix :: ui bug confirm modal password disable
* modal , revert name capitalize in lists, typos fix
* typos , users page route bugfix
* users page header bugfix
* workspace archive btn , datasources form style for select
* groups updated , delete, create flow updated
* avatar bug in profile page fix
* revert styles
* fix :: for create new table nav breadcrumb not being updated
* click state bug fix in avatar
* fix bug with appcard popover
* fix :: text capitalize issue
* fix :: lints and updated icon for filter delete
* fix warnings
---------
Co-authored-by: gandharv <gandharvkumargarg@gmail.com>
Co-authored-by: Vijaykant Yadav <vjy239@gmail.com>
167 lines
6.9 KiB
JavaScript
167 lines
6.9 KiB
JavaScript
import React from 'react';
|
|
import { CopyToClipboard } from 'react-copy-to-clipboard';
|
|
import Avatar from '@/_ui/Avatar';
|
|
import Skeleton from 'react-loading-skeleton';
|
|
import cx from 'classnames';
|
|
import { Pagination } from '@/_components';
|
|
import { ButtonSolid } from '@/_ui/AppButton/AppButton';
|
|
import SolidIcon from '@/_ui/Icon/SolidIcons';
|
|
import { Tooltip } from 'react-tooltip';
|
|
|
|
const UsersTable = ({
|
|
isLoading,
|
|
users,
|
|
archivingUser,
|
|
unarchivingUser,
|
|
generateInvitationURL,
|
|
invitationLinkCopyHandler,
|
|
unarchiveOrgUser,
|
|
archiveOrgUser,
|
|
meta,
|
|
pageChanged,
|
|
darkMode,
|
|
translator,
|
|
}) => {
|
|
return (
|
|
<div className="workspace-settings-table-wrap mb-4">
|
|
<div className="tj-user-table-wrapper">
|
|
<div className="card-table fixedHeader table-responsive ">
|
|
<table data-testid="usersTable" className="users-table table table-vcenter h-100">
|
|
<thead>
|
|
<tr>
|
|
<th data-cy="name-title">{translator('header.organization.menus.manageUsers.name', 'Name')}</th>
|
|
<th data-cy="email-title">{translator('header.organization.menus.manageUsers.email', 'Email')}</th>
|
|
{users && users[0]?.status ? (
|
|
<th data-cy="status-title">{translator('header.organization.menus.manageUsers.status', 'Status')}</th>
|
|
) : (
|
|
<th className="w-1"></th>
|
|
)}
|
|
<th className="w-1"></th>
|
|
<th className="w-1"></th>
|
|
<th className="w-1"></th>
|
|
</tr>
|
|
</thead>
|
|
{isLoading ? (
|
|
<tbody className="w-100 h-auto">
|
|
{Array.from(Array(4)).map((_item, index) => (
|
|
<tr key={index}>
|
|
<td className="col-2 p-3">
|
|
<div className="d-flex align-items-center">
|
|
<Skeleton circle="15%" className="col-auto" style={{ width: '35px', height: '35px' }} />
|
|
<Skeleton className="mx-3" width={100} />
|
|
</div>
|
|
</td>
|
|
<td className="col-4 p-3">
|
|
<Skeleton />
|
|
</td>
|
|
{users && users[0]?.status && (
|
|
<td className="col-2 p-3">
|
|
<Skeleton />
|
|
</td>
|
|
)}
|
|
<td className="text-muted col-auto col-1 pt-3">
|
|
<Skeleton />
|
|
</td>
|
|
<td className="text-muted col-auto col-1 pt-3">
|
|
<Skeleton />
|
|
</td>
|
|
</tr>
|
|
))}
|
|
</tbody>
|
|
) : (
|
|
<tbody>
|
|
{Array.isArray(users) &&
|
|
users.length > 0 &&
|
|
users.map((user) => (
|
|
<tr key={user.id}>
|
|
<td>
|
|
<Avatar
|
|
avatarId={user.avatar_id}
|
|
text={`${user.first_name ? user.first_name[0] : ''}${
|
|
user.last_name ? user.last_name[0] : ''
|
|
}`}
|
|
/>
|
|
<span className="mx-3 tj-text-sm" data-cy="user-name">
|
|
{user.name}
|
|
</span>
|
|
</td>
|
|
<td className="text-muted">
|
|
<a className="text-reset user-email tj-text-sm" data-cy="user-email">
|
|
{user.email}
|
|
</a>
|
|
</td>
|
|
{user.status && (
|
|
<td className="text-muted">
|
|
<span
|
|
className={cx('badge', {
|
|
'tj-invited': user.status === 'invited',
|
|
'tj-archive': user.status === 'archived',
|
|
'tj-active': user.status === 'active',
|
|
})}
|
|
data-cy="status-badge"
|
|
></span>
|
|
<small className="workspace-user-status tj-text-sm text-capitalize" data-cy="user-status">
|
|
{user.status}
|
|
</small>
|
|
{user.status === 'invited' && 'invitation_token' in user ? (
|
|
<div className="workspace-clipboard-wrap">
|
|
<CopyToClipboard text={generateInvitationURL(user)} onCopy={invitationLinkCopyHandler}>
|
|
<span>
|
|
<SolidIcon
|
|
data-tooltip-id="tooltip-for-copy-invitation-link"
|
|
data-tooltip-content="Copy invitation link"
|
|
width="12"
|
|
fill="#889096"
|
|
data-cy="copy-invitation-link"
|
|
name="copy"
|
|
/>
|
|
<p className="tj-text-xsm">Copy link</p>
|
|
</span>
|
|
</CopyToClipboard>
|
|
<Tooltip id="tooltip-for-copy-invitation-link" className="tooltip" />
|
|
</div>
|
|
) : (
|
|
''
|
|
)}
|
|
</td>
|
|
)}
|
|
<td>
|
|
<ButtonSolid
|
|
variant="dangerSecondary"
|
|
style={{ minWidth: '100px' }}
|
|
className="workspace-user-archive-btn tj-text-xsm"
|
|
disabled={unarchivingUser === user.id || archivingUser === user.id}
|
|
leftIcon="archive"
|
|
fill="#E54D2E"
|
|
iconWidth="12"
|
|
onClick={() => {
|
|
user.status === 'archived' ? unarchiveOrgUser(user.id) : archiveOrgUser(user.id);
|
|
}}
|
|
data-cy="user-state"
|
|
>
|
|
{user.status === 'archived'
|
|
? translator('header.organization.menus.manageUsers.unarchive', 'Unarchive')
|
|
: translator('header.organization.menus.manageUsers.archive', 'Archive')}
|
|
</ButtonSolid>
|
|
</td>
|
|
</tr>
|
|
))}
|
|
</tbody>
|
|
)}
|
|
</table>
|
|
</div>
|
|
{meta.total_count > 10 && (
|
|
<Pagination
|
|
currentPage={meta.current_page}
|
|
count={meta.total_count}
|
|
pageChanged={pageChanged}
|
|
itemsPerPage={10}
|
|
darkMode={darkMode}
|
|
/>
|
|
)}
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default UsersTable;
|