import React, {Fragment} from 'react'; import {Link} from 'react-router-dom'; import clsx from 'clsx'; import {CheckIcon} from '../../icons/material/Check'; import {UserIndexFilters} from './user-index-filters'; import {User} from '../../auth/user'; import {NameWithAvatar} from '../../datatable/column-templates/name-with-avatar'; import {DataTablePage} from '../../datatable/page/data-table-page'; import {IconButton} from '../../ui/buttons/icon-button'; import {EditIcon} from '../../icons/material/Edit'; import {CloseIcon} from '../../icons/material/Close'; import {FormattedDate} from '../../i18n/formatted-date'; import {ColumnConfig} from '../../datatable/column-config'; import {Trans} from '../../i18n/trans'; import {DeleteSelectedItemsAction} from '../../datatable/page/delete-selected-items-action'; import {DataTableEmptyStateMessage} from '../../datatable/page/data-table-emty-state-message'; import teamSvg from '../roles/team.svg'; import {DataTableAddItemButton} from '../../datatable/data-table-add-item-button'; import {DataTableExportCsvButton} from '../../datatable/csv-export/data-table-export-csv-button'; import {ChipList} from '../../ui/forms/input-field/chip-field/chip-list'; import {Chip} from '../../ui/forms/input-field/chip-field/chip'; import {useSettings} from '../../core/settings/use-settings'; import {DialogTrigger} from '@common/ui/overlays/dialog/dialog-trigger'; import {BanUserDialog} from '@common/admin/users/ban-user-dialog'; import {PersonOffIcon} from '@common/icons/material/PersonOff'; import {Tooltip} from '@common/ui/tooltip/tooltip'; import {ConfirmationDialog} from '@common/ui/overlays/dialog/confirmation-dialog'; import {useUnbanUser} from '@common/admin/users/requests/use-unban-user'; const columnConfig: 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-84 flex-shrink-0', hideHeader: true, align: 'end', visibleInMode: 'all', body: user => (
}> {user.banned_at ? ( ) : ( }> )}
), }, ]; export function UserIndex() { const {billing} = useSettings(); const filteredColumns = !billing.enable ? columnConfig.filter(c => c.key !== 'subscribed') : columnConfig; return ( } filters={UserIndexFilters} columns={filteredColumns} actions={} queryParams={{with: 'subscriptions,bans'}} selectedActions={} emptyStateMessage={ } filteringTitle={} /> } /> ); } function Actions() { return ( ); } interface UnbanButtonProps { user: User; } function UnbanButton({user}: UnbanButtonProps) { const unban = useUnbanUser(user.id); return ( { if (confirmed) { unban.mutate(); } }} > }> } body={ } confirm={} /> ); }