import {ColumnConfig} from '@common/datatable/column-config'; import {User} from '@common/auth/user'; import {Trans} from '@common/i18n/trans'; import {NameWithAvatar} from '@common/datatable/column-templates/name-with-avatar'; import {CheckIcon} from '@common/icons/material/Check'; import {CloseIcon} from '@common/icons/material/Close'; import {ChipList} from '@common/ui/forms/input-field/chip-field/chip-list'; import {Chip} from '@common/ui/forms/input-field/chip-field/chip'; import {Link} from 'react-router-dom'; import clsx from 'clsx'; import {FormattedDate} from '@common/i18n/formatted-date'; import {Tooltip} from '@common/ui/tooltip/tooltip'; import {IconButton} from '@common/ui/buttons/icon-button'; import {EditIcon} from '@common/icons/material/Edit'; import {DialogTrigger} from '@common/ui/overlays/dialog/dialog-trigger'; import {PersonOffIcon} from '@common/icons/material/PersonOff'; import {BanUserDialog} from '@common/admin/users/ban-user-dialog'; import React from 'react'; import {useUnbanUser} from '@common/admin/users/requests/use-unban-user'; import {ConfirmationDialog} from '@common/ui/overlays/dialog/confirmation-dialog'; import {useImpersonateUser} from '@common/admin/users/requests/use-impersonate-user'; import {LoginIcon} from '@common/icons/material/Login'; export const userDatatableColumns: ColumnConfig[] = [ { key: 'name', allowsSorting: true, sortingKey: 'email', width: 'flex-3 min-w-200', visibleInMode: 'all', header: () => , body: user => ( ), }, { key: 'subscribed', header: () => , width: 'w-96', body: user => user.subscriptions?.length ? ( ) : ( ), }, { key: 'roles', header: () => , body: user => ( {user?.roles?.map(role => ( ))} ), }, { key: 'firstName', allowsSorting: true, header: () => , body: user => user.first_name, }, { key: 'lastName', allowsSorting: true, header: () => , body: user => user.last_name, }, { key: 'createdAt', allowsSorting: true, width: 'w-96', header: () => , body: user => ( ), }, { key: 'actions', header: () => , width: 'w-128 flex-shrink-0', hideHeader: true, align: 'end', visibleInMode: 'all', body: user => (
}> {user.banned_at ? ( ) : ( }> )}
), }, ]; interface UnbanButtonProps { user: User; } function UnbanButton({user}: UnbanButtonProps) { const unban = useUnbanUser(user.id); return ( { if (confirmed) { unban.mutate(); } }} > }> } body={ } confirm={} /> ); } interface ImpersonateButtonProps { user: User; } function ImpersonateButton({user}: ImpersonateButtonProps) { const impersonate = useImpersonateUser(); return ( }> } isLoading={impersonate.isPending} body={} confirm={} onConfirm={() => { impersonate.mutate({userId: user.id}); }} /> ); }