UserTable.tsx 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import { Table } from 'antd';
  2. import format from 'date-fns/format';
  3. import { SortOrder } from 'antd/lib/table/interface';
  4. import { FC } from 'react';
  5. import { User } from '../../types/chat';
  6. import { UserPopover } from './UserPopover';
  7. import { BanUserButton } from './BanUserButton';
  8. export function formatDisplayDate(date: string | Date) {
  9. const d = new Date(date);
  10. if (d.getFullYear() !== new Date().getFullYear()) {
  11. return format(new Date(date), 'MMM d, yyyy H:mma');
  12. }
  13. return format(new Date(date), 'MMM d H:mma');
  14. }
  15. export type UserTableProps = {
  16. data: User[];
  17. };
  18. export const UserTable: FC<UserTableProps> = ({ data }) => {
  19. const columns = [
  20. {
  21. title: 'Last Known Display Name',
  22. dataIndex: 'displayName',
  23. key: 'displayName',
  24. // eslint-disable-next-line react/destructuring-assignment
  25. render: (displayName: string, user: User) => (
  26. <UserPopover user={user}>
  27. <span className="display-name">{displayName}</span>
  28. </UserPopover>
  29. ),
  30. },
  31. {
  32. title: 'Created',
  33. dataIndex: 'createdAt',
  34. key: 'createdAt',
  35. render: (date: Date) => formatDisplayDate(date),
  36. sorter: (a: any, b: any) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime(),
  37. sortDirections: ['descend', 'ascend'] as SortOrder[],
  38. },
  39. {
  40. title: 'Disabled at',
  41. dataIndex: 'disabledAt',
  42. key: 'disabledAt',
  43. defaultSortOrder: 'descend' as SortOrder,
  44. render: (date: Date) => (date ? formatDisplayDate(date) : null),
  45. sorter: (a: any, b: any) =>
  46. new Date(a.disabledAt).getTime() - new Date(b.disabledAt).getTime(),
  47. sortDirections: ['descend', 'ascend'] as SortOrder[],
  48. },
  49. {
  50. title: '',
  51. key: 'block',
  52. className: 'actions-col',
  53. render: (_, user) => <BanUserButton user={user} isEnabled={!user.disabledAt} />,
  54. },
  55. ];
  56. return (
  57. <Table
  58. pagination={{ hideOnSinglePage: true }}
  59. className="table-container"
  60. columns={columns}
  61. dataSource={data}
  62. size="small"
  63. rowKey="id"
  64. />
  65. );
  66. };