'use client'; import { useMemo } from 'react'; import { Trans, msg } from '@lingui/macro'; import { useLingui } from '@lingui/react'; import { AlertTriangle, CheckCheckIcon, CheckIcon, Loader, MailOpen } from 'lucide-react'; import { DateTime } from 'luxon'; import { match } from 'ts-pattern'; import { DOCUMENT_AUDIT_LOG_TYPE } from '@documenso/lib/types/document-audit-logs'; import { formatDocumentAuditLogAction } from '@documenso/lib/utils/document-audit-logs'; import { trpc } from '@documenso/trpc/react'; import { AnimateGenericFadeInOut } from '@documenso/ui/components/animate/animate-generic-fade-in-out'; import { cn } from '@documenso/ui/lib/utils'; export type DocumentPageViewRecentActivityProps = { documentId: number; userId: number; }; export const DocumentPageViewRecentActivity = ({ documentId, userId, }: DocumentPageViewRecentActivityProps) => { const { _ } = useLingui(); const { data, isLoading, isLoadingError, refetch, hasNextPage, fetchNextPage, isFetchingNextPage, } = trpc.document.findDocumentAuditLogs.useInfiniteQuery( { documentId, filterForRecentActivity: true, orderBy: { column: 'createdAt', direction: 'asc', }, perPage: 10, }, { getNextPageParam: (lastPage) => lastPage.nextCursor, }, ); const documentAuditLogs = useMemo(() => (data?.pages ?? []).flatMap((page) => page.data), [data]); return (

Recent activity

{/* Can add dropdown menu here for additional options. */}
{isLoading && (
)} {isLoadingError && (

Unable to load document history

)} {data && ( )}
); };