import {Role} from '../../../auth/role'; import {ColumnConfig} from '../../../datatable/column-config'; import {User} from '../../../auth/user'; import {Trans} from '../../../i18n/trans'; import {NameWithAvatar} from '../../../datatable/column-templates/name-with-avatar'; import {FormattedDate} from '../../../i18n/formatted-date'; import React from 'react'; import teamSvg from '../team.svg'; import {DialogTrigger} from '../../../ui/overlays/dialog/dialog-trigger'; import {Button} from '../../../ui/buttons/button'; import {SelectUserDialog} from '../../../users/select-user-dialog'; import {queryClient} from '../../../http/query-client'; import {DatatableDataQueryKey} from '../../../datatable/requests/paginated-resources'; import {DataTableEmptyStateMessage} from '../../../datatable/page/data-table-emty-state-message'; import {useDataTable} from '../../../datatable/page/data-table-context'; import {ConfirmationDialog} from '../../../ui/overlays/dialog/confirmation-dialog'; import {useRemoveUsersFromRole} from '../requests/use-remove-users-from-role'; import {useAddUsersToRole} from '../requests/use-add-users-to-role'; import {DataTable} from '../../../datatable/data-table'; import {useIsMobileMediaQuery} from '../../../utils/hooks/is-mobile-media-query'; const userColumn: ColumnConfig = { key: 'name', allowsSorting: true, sortingKey: 'email', header: () => , body: user => ( ), width: 'col-w-3', }; const desktopColumns: ColumnConfig[] = [ userColumn, { key: 'first_name', allowsSorting: true, header: () => , body: user => user.first_name, }, { key: 'last_name', allowsSorting: true, header: () => , body: user => user.last_name, }, { key: 'created_at', allowsSorting: true, header: () => , body: user => , }, ]; const mobileColumns: ColumnConfig[] = [userColumn]; interface CrupdateRolePageUsersPanelProps { role: Role; } export function EditRolePageUsersPanel({ role, }: CrupdateRolePageUsersPanelProps) { const isMobile = useIsMobileMediaQuery(); if (role.guests || role.type === 'workspace') { return (
} />
); } return ( } selectedActions={} emptyStateMessage={ } filteringTitle={} /> } /> ); } interface AssignUserActionProps { role: Role; } function AssignUserAction({role}: AssignUserActionProps) { const addUsers = useAddUsersToRole(role); return ( { addUsers.mutate( {userIds: [user.id as number]}, { onSuccess: () => { queryClient.invalidateQueries({ queryKey: DatatableDataQueryKey('users', { roleId: `${role.id}`, }), }); }, }, ); }} /> ); } type RemoveUsersActionProps = { role: Role; }; export function RemoveUsersAction({role}: RemoveUsersActionProps) { const removeUsers = useRemoveUsersFromRole(role); const {selectedRows} = useDataTable(); return ( { if (isConfirmed) { removeUsers.mutate( {userIds: selectedRows as number[]}, { onSuccess: () => { queryClient.invalidateQueries({ queryKey: DatatableDataQueryKey('users', { roleId: `${role.id}`, }), }); }, }, ); } }} > } body={} confirm={} isDanger /> ); }