import React, { useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Link } from 'react-router-dom'; import { ListPageHeader } from '@/components/ListPageHeader'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Skeleton } from '@/components/ui/skeleton'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { useAutomodHits, useResolveAutomodHit } from '@/hooks/useAutomod'; import type { AutomodHit, AutomodHitStatus } from '@/api/automodApi'; import { formatDateTime } from '@/utils/datetime'; import { notify } from '@/lib/notify'; function entityLink(hit: AutomodHit): string { if (hit.entity_type === 'event') return `/events/${hit.entity_id}`; if (hit.entity_type === 'calendar') return `/calendars/${hit.entity_id}`; return `/reviews/${hit.entity_id}`; } const AutomodInboxPage: React.FC = () => { const { t } = useTranslation(); const [status, setStatus] = useState('open'); const params = useMemo( () => (status === 'all' ? undefined : { status }), [status] ); const { data, isLoading } = useAutomodHits(params); const resolve = useResolveAutomodHit(); const rows = data ?? []; const onResolve = (id: string, next: 'approved' | 'rejected') => { resolve.mutate( { id, status: next }, { onSuccess: () => notify.success(t('automodInbox.resolved')), onError: () => notify.error(t('automodInbox.resolveFailed')), } ); }; return (
{isLoading ? ( ) : (
{t('automodInbox.createdAt')} {t('automodInbox.trigger')} {t('automodInbox.entity')} {t('automodInbox.words')} {t('automodInbox.action')} {t('automodInbox.status')} {t('automodInbox.actions')} {rows.length === 0 ? ( {t('common.noData')} ) : ( rows.map((hit) => ( {formatDateTime(hit.created_at)} {hit.trigger} {hit.entity_type}:{hit.entity_id.slice(0, 8)} {hit.matched_words.join(', ') || '—'} {hit.action_taken} {hit.status} {hit.status === 'open' ? (
) : ( '—' )}
)) )}
)}
); }; export default AutomodInboxPage;