mirror of
https://github.com/documenso/documenso.git
synced 2025-11-12 07:43:16 +10:00
## Description Refactor the current date formatting system to utilize Lingui. ## Changes Made - Remove redundant `LocaleData` component with Lingui dates ## Important notes For the internal pages for certificates, default to en-US to format any dates. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enhanced internationalization support across various components by utilizing the `i18n` object for date formatting. - Streamlined locale management by removing cookie-based language handling and adopting a more centralized approach. - **Bug Fixes** - Improved date formatting consistency by replacing the `LocaleDate` component with direct calls to `i18n.date()` in multiple components. - **Documentation** - Updated localization strings in the `web.po` files to reflect recent changes in the source code structure. - **Chores** - Minor formatting adjustments and code organization improvements across various files to enhance readability and maintainability. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: github-actions <github-actions@documenso.com>
91 lines
2.5 KiB
TypeScript
91 lines
2.5 KiB
TypeScript
'use client';
|
|
|
|
import { DateTime } from 'luxon';
|
|
import type { DateTimeFormatOptions } from 'luxon';
|
|
import { UAParser } from 'ua-parser-js';
|
|
|
|
import { APP_I18N_OPTIONS } from '@documenso/lib/constants/i18n';
|
|
import type { TDocumentAuditLog } from '@documenso/lib/types/document-audit-logs';
|
|
import { formatDocumentAuditLogAction } from '@documenso/lib/utils/document-audit-logs';
|
|
import {
|
|
Table,
|
|
TableBody,
|
|
TableCell,
|
|
TableHead,
|
|
TableHeader,
|
|
TableRow,
|
|
} from '@documenso/ui/primitives/table';
|
|
|
|
export type AuditLogDataTableProps = {
|
|
logs: TDocumentAuditLog[];
|
|
};
|
|
|
|
const dateFormat: DateTimeFormatOptions = {
|
|
...DateTime.DATETIME_SHORT,
|
|
hourCycle: 'h12',
|
|
};
|
|
|
|
export const AuditLogDataTable = ({ logs }: AuditLogDataTableProps) => {
|
|
const parser = new UAParser();
|
|
|
|
const uppercaseFistLetter = (text: string) => {
|
|
return text.charAt(0).toUpperCase() + text.slice(1);
|
|
};
|
|
|
|
return (
|
|
<Table overflowHidden>
|
|
<TableHeader>
|
|
<TableRow>
|
|
<TableHead>Time</TableHead>
|
|
<TableHead>User</TableHead>
|
|
<TableHead>Action</TableHead>
|
|
<TableHead>IP Address</TableHead>
|
|
<TableHead>Browser</TableHead>
|
|
</TableRow>
|
|
</TableHeader>
|
|
|
|
<TableBody className="print:text-xs">
|
|
{logs.map((log, i) => (
|
|
<TableRow className="break-inside-avoid" key={i}>
|
|
<TableCell>
|
|
{DateTime.fromJSDate(log.createdAt)
|
|
.setLocale(APP_I18N_OPTIONS.defaultLocale)
|
|
.toLocaleString(dateFormat)}
|
|
</TableCell>
|
|
|
|
<TableCell>
|
|
{log.name || log.email ? (
|
|
<div>
|
|
{log.name && (
|
|
<p className="break-all" title={log.name}>
|
|
{log.name}
|
|
</p>
|
|
)}
|
|
|
|
{log.email && (
|
|
<p className="text-muted-foreground break-all" title={log.email}>
|
|
{log.email}
|
|
</p>
|
|
)}
|
|
</div>
|
|
) : (
|
|
<p>N/A</p>
|
|
)}
|
|
</TableCell>
|
|
|
|
<TableCell>
|
|
{uppercaseFistLetter(formatDocumentAuditLogAction(log).description)}
|
|
</TableCell>
|
|
|
|
<TableCell>{log.ipAddress}</TableCell>
|
|
|
|
<TableCell>
|
|
{log.userAgent ? parser.setUA(log.userAgent).getBrowser().name : 'N/A'}
|
|
</TableCell>
|
|
</TableRow>
|
|
))}
|
|
</TableBody>
|
|
</Table>
|
|
);
|
|
};
|