import React, { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useDispatch } from 'react-redux'; import { useModule, useUserPoints } from '../../lib/react-utils'; import { modules } from '../../store/api/reducer'; import { DataTable } from '../components/DataTable'; import { Button, Field, InputBox, PageContainer, PageHeader, PageTitle, TabButton, TabContainer, TabContent, TabList, TextBlock, } from '../theme'; import { TableCell, TableRow } from '../theme/table'; interface UserSortingOrder { key: 'user' | 'points'; order: 'asc' | 'desc'; } function RewardQueue() { const { t } = useTranslation(); const [queue, setQueue] = useModule(modules.loyaltyRedeemQueue); const dispatch = useDispatch(); // Big hack but this is required or refunds break useUserPoints(); return <>; } function UserList() { const { t } = useTranslation(); const users = useUserPoints(); const dispatch = useDispatch(); const [config] = useModule(modules.loyaltyConfig); const [usernameFilter, setUsernameFilter] = useState(''); const filtered = Object.entries(users ?? []) .filter(([user]) => user.includes(usernameFilter)) .map(([username, data]) => ({ username, ...data, })); type UserEntry = typeof filtered[0]; type SortFn = (a: UserEntry, b: UserEntry) => number; const sortfn = (key: keyof UserEntry): SortFn => { switch (key) { case 'username': { return (a, b) => a.username.localeCompare(b.username); } case 'points': { return (a: UserEntry, b: UserEntry) => a.points - b.points; } } }; return ( <> setUsernameFilter(e.target.value)} /> ( {username} {points} )} /> ); } export default function LoyaltyQueuePage(): React.ReactElement { const { t } = useTranslation(); return ( {t('pages.loyalty-queue.title')} {t('pages.loyalty-queue.subtitle')} {t('pages.loyalty-queue.queue-tab')} {t('pages.loyalty-queue.users-tab')} ); }