import { ActionIcon, Badge, Container, Group, Loader, Pagination, Paper, SegmentedControl, Select, Stack, Table, Text, Title, Tooltip, } from '@mantine/core' import { DatePickerInput, type DatesRangeValue } from '@mantine/dates' import dayjs from 'dayjs' import 'dayjs/locale/id' import { useMemo, useState } from 'react' import { createFileRoute } from '@tanstack/react-router' import { TbHistory, TbRefresh } from 'react-icons/tb' import { DashboardLayout } from '@/frontend/components/DashboardLayout' import useSWR from 'swr' import { API_URLS } from '../config/api' export const Route = createFileRoute('/logs')({ component: GlobalLogsPage, }) const fetcher = (url: string) => fetch(url, { credentials: 'include' }).then((r) => r.json()) const LOG_TYPES = ['all', 'LOGIN', 'LOGOUT', 'CREATE', 'UPDATE', 'DELETE'] as const const LOG_TYPE_LABEL: Record = { all: 'All', LOGIN: 'Login', LOGOUT: 'Logout', CREATE: 'Create', UPDATE: 'Update', DELETE: 'Delete', } const LOG_TYPE_COLOR: Record = { LOGIN: 'teal', LOGOUT: 'gray', CREATE: 'blue', UPDATE: 'yellow', DELETE: 'red', } function GlobalLogsPage() { const [type, setType] = useState('all') const [operatorId, setOperatorId] = useState('all') const [dateRange, setDateRange] = useState([null, null]) const [page, setPage] = useState(1) const { data: operatorsData } = useSWR(API_URLS.getLogOperators(), fetcher) const operatorOptions = useMemo(() => { if (!operatorsData || !Array.isArray(operatorsData)) return [{ value: 'all', label: 'All users' }] return [ { value: 'all', label: 'All users' }, ...operatorsData.map((op: any) => ({ value: op.id, label: op.name })), ] }, [operatorsData]) const dateFrom = dateRange[0] ? dayjs(dateRange[0]).format('YYYY-MM-DD') : undefined const dateTo = dateRange[1] ? dayjs(dateRange[1]).format('YYYY-MM-DD') : undefined const { data, isLoading, mutate } = useSWR( API_URLS.getGlobalLogs(page, '', type, operatorId, dateFrom, dateTo), fetcher, { refreshInterval: 10_000 }, ) const logs: any[] = data?.data ?? [] const totalPages: number = data?.totalPages ?? 1 return ( Activity Logs Track all user actions and system events across the platform. mutate()} loading={isLoading} >