ViewerTable.tsx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { Table } from 'antd';
  2. import { SortOrder } from 'antd/lib/table/interface';
  3. import { formatDistanceToNow } from 'date-fns';
  4. import { FC } from 'react';
  5. import { User } from '../../types/chat';
  6. import { formatUAstring } from '../../utils/format';
  7. export type ViewerTableProps = {
  8. data: User[];
  9. };
  10. export const ViewerTable: FC<ViewerTableProps> = ({ data }) => {
  11. const columns = [
  12. {
  13. title: 'User Agent',
  14. dataIndex: 'userAgent',
  15. key: 'userAgent',
  16. render: (ua: string) => formatUAstring(ua),
  17. },
  18. {
  19. title: 'Location',
  20. dataIndex: 'geo',
  21. key: 'geo',
  22. render: geo => (geo ? `${geo.regionName}, ${geo.countryCode}` : '-'),
  23. },
  24. {
  25. title: 'Watch Time',
  26. dataIndex: 'firstSeen',
  27. key: 'firstSeen',
  28. defaultSortOrder: 'ascend' as SortOrder,
  29. render: (time: Date) => formatDistanceToNow(new Date(time)),
  30. sorter: (a: any, b: any) => new Date(a.firstSeen).getTime() - new Date(b.firstSeen).getTime(),
  31. sortDirections: ['descend', 'ascend'] as SortOrder[],
  32. },
  33. ];
  34. return (
  35. <Table
  36. pagination={{ hideOnSinglePage: true }}
  37. className="table-container"
  38. columns={columns}
  39. dataSource={data}
  40. size="small"
  41. rowKey="id"
  42. />
  43. );
  44. };