'use client'; import { getSystemLog } from '@/services/admin/tool'; import { useQuery } from '@tanstack/react-query'; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from '@workspace/ui/components/accordion'; import { Button } from '@workspace/ui/components/button'; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from '@workspace/ui/components/dialog'; import { ScrollArea } from '@workspace/ui/components/scroll-area'; import { Icon } from '@workspace/ui/custom-components/icon'; import { useTranslations } from 'next-intl'; import { useState } from 'react'; const getLogLevelColor = (level: string) => { const colorMap: { [key: string]: string } = { INFO: 'bg-blue-100 text-blue-800 hover:bg-blue-200', WARN: 'bg-yellow-100 text-yellow-800 hover:bg-yellow-200', ERROR: 'bg-red-100 text-red-800 hover:bg-red-200', }; return colorMap[level] || 'bg-gray-100 text-gray-800 hover:bg-gray-200'; }; interface SystemLogsDialogProps { trigger?: React.ReactNode; variant?: 'default' | 'outline' | 'ghost' | 'secondary'; size?: 'sm' | 'default' | 'lg'; } export default function SystemLogsDialog({ trigger, variant = 'outline', size = 'sm', }: SystemLogsDialogProps) { const t = useTranslations('tool'); const [open, setOpen] = useState(false); const { data: logs, refetch, isLoading, } = useQuery({ queryKey: ['getSystemLog'], queryFn: async () => { const { data } = await getSystemLog(); return data.data?.list || []; }, enabled: open, }); const defaultTrigger = ( ); return ( {trigger || defaultTrigger} {t('systemLogs')} {isLoading ? (
) : ( {logs?.map((log: any, index: number) => (
{log.timestamp}
{Object.entries(log).map(([key, value]) => (
{key}: {value as string}
))}
))}
)}
); }