import { useEffect, useState } from 'react' import { useI18n } from '../i18n' import { Callout } from '../components/ui' import { listActivity, subscribeActivity, type ActivityEvent, type ActivityKind } from '../activity/store' import { formatDateTime } from '../utils/format' const TABS: { key: string; kind?: ActivityKind; label: string }[] = [ { key: 'all', label: 'activity.tab.all' }, { key: 'payments', kind: 'payment', label: 'activity.tab.payments' }, { key: 'confirmations', kind: 'confirmation', label: 'activity.tab.confirmations' }, { key: 'biometrics', kind: 'biometrics', label: 'activity.tab.biometrics' }, { key: 'security', kind: 'security-demo', label: 'activity.tab.security' }, ] const KIND_LABEL: Record = { payment: 'activity.kind.payment', confirmation: 'activity.kind.confirmation', biometrics: 'activity.kind.biometrics', 'security-demo': 'activity.kind.securityDemo', } /** Session-only activity. Explicitly labelled as NOT permanent account history. Never renders * raw biometrics, full IBANs, capabilities, signatures or thresholds. */ export function ActivityPage() { const { t, locale } = useI18n() const [tab, setTab] = useState('all') const [, force] = useState(0) useEffect(() => subscribeActivity(() => force((n) => n + 1)), []) const kind = TABS.find((x) => x.key === tab)?.kind const events: ActivityEvent[] = listActivity(kind) return (

{t('activity.title')}

{t('activity.sessionOnly')}

{t('activity.sessionNote')}

{TABS.map((x) => ( ))}
{events.length === 0 ? ( {t('activity.empty')} ) : ( )}
) }