import TimeRangePicker from '@/components/originui/time-range-picker';
import { PageHeader } from '@/components/page-header';
import {
Breadcrumb,
BreadcrumbItem,
BreadcrumbLink,
BreadcrumbList,
BreadcrumbPage,
BreadcrumbSeparator,
} from '@/components/ui/breadcrumb';
import { SearchInput } from '@/components/ui/input';
import { RAGFlowPagination } from '@/components/ui/ragflow-pagination';
import { Spin } from '@/components/ui/spin';
import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks';
import { useFetchAgentLog } from '@/hooks/use-agent-request';
import {
IAgentLogMessage,
IAgentLogResponse,
} from '@/interfaces/database/agent';
import { IReferenceObject } from '@/interfaces/database/chat';
import { useQueryClient } from '@tanstack/react-query';
import React, { useEffect, useState } from 'react';
import { useParams } from 'umi';
import { DateRange } from '../../components/originui/calendar/index';
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow,
} from '../../components/ui/table';
import { useFetchDataOnMount } from '../agent/hooks/use-fetch-data';
import { AgentLogDetailModal } from './agent-log-detail-modal';
const getStartOfToday = (): Date => {
const today = new Date();
today.setHours(0, 0, 0, 0);
return today;
};
const getEndOfToday = (): Date => {
const today = new Date();
today.setHours(23, 59, 59, 999);
return today;
};
const AgentLogPage: React.FC = () => {
const { navigateToAgentList, navigateToAgent } = useNavigatePage();
const { flowDetail: agentDetail } = useFetchDataOnMount();
const { id: canvasId } = useParams();
const queryClient = useQueryClient();
const init = {
keywords: '',
from_date: getStartOfToday(),
to_date: getEndOfToday(),
orderby: 'create_time',
desc: false,
page: 1,
page_size: 10,
};
const [searchParams, setSearchParams] = useState(init);
const columns = [
{
title: 'ID',
dataIndex: 'id',
key: 'id',
},
{
title: 'Title',
dataIndex: 'title',
key: 'title',
render: (text, record: IAgentLogResponse) => (
{record?.message?.length ? record?.message[0]?.content : ''}
),
},
{
title: 'State',
dataIndex: 'state',
key: 'state',
render: (text, record: IAgentLogResponse) => (
),
},
{
title: 'Number',
dataIndex: 'round',
key: 'round',
},
{
title: 'Latest Date',
dataIndex: 'update_date',
key: 'update_date',
sortable: true,
},
{
title: 'Create Date',
dataIndex: 'create_date',
key: 'create_date',
sortable: true,
},
];
const { data: logData, loading } = useFetchAgentLog(searchParams);
const { sessions: data, total } = logData || {};
const [currentDate, setCurrentDate] = useState({
from: searchParams.from_date,
to: searchParams.to_date,
});
const [keywords, setKeywords] = useState(searchParams.keywords);
const handleDateRangeChange = ({
from: startDate,
to: endDate,
}: DateRange) => {
setCurrentDate({ from: startDate, to: endDate });
};
const [pagination, setPagination] = useState<{
current: number;
pageSize: number;
total: number;
}>({
current: 1,
pageSize: 10,
total: total,
});
useEffect(() => {
setPagination((pre) => {
return {
...pre,
total: total,
};
});
}, [total]);
const [sortConfig, setSortConfig] = useState<{
orderby: string;
desc: boolean;
} | null>({ orderby: init.orderby, desc: init.desc ? true : false });
const handlePageChange = (current?: number, pageSize?: number) => {
console.log('current', current, 'pageSize', pageSize);
setPagination((pre) => {
return {
...pre,
current: current ?? pre.current,
pageSize: pageSize ?? pre.pageSize,
};
});
};
const handleSearch = () => {
setSearchParams((pre) => {
return {
...pre,
from_date: currentDate.from as Date,
to_date: currentDate.to as Date,
page: pagination.current,
page_size: pagination.pageSize,
orderby: sortConfig?.orderby || '',
desc: sortConfig?.desc as boolean,
keywords: keywords,
};
});
};
const handleClickSearch = () => {
setPagination({ ...pagination, current: 1 });
handleSearch();
queryClient.invalidateQueries({
queryKey: ['fetchAgentLog'],
});
};
useEffect(() => {
handleSearch();
}, [pagination.current, pagination.pageSize, sortConfig]);
// handle sort
const handleSort = (key: string) => {
let desc = false;
if (sortConfig && sortConfig.orderby === key) {
desc = !sortConfig.desc;
}
setSortConfig({ orderby: key, desc });
};
const handleReset = () => {
setSearchParams(init);
setKeywords(init.keywords);
setCurrentDate({ from: init.from_date, to: init.to_date });
};
const [openModal, setOpenModal] = useState(false);
const [modalData, setModalData] = useState();
const showLogDetail = (item: IAgentLogResponse) => {
setModalData(item);
setOpenModal(true);
};
return (
Agent
{agentDetail.title}
Log
Log
ID/Title
{
setKeywords(e.target.value);
}}
className="w-32"
>
Latest Date
{/*
*/}
{columns.map((column) => (
handleSort(column.dataIndex)
: undefined
}
className={
column.sortable ? 'cursor-pointer hover:bg-muted/50' : ''
}
>
{column.title}
{column.sortable &&
sortConfig?.orderby === column.dataIndex && (
{sortConfig.desc ? '↓' : '↑'}
)}
))}
{loading && (
Loading...
)}
{!loading &&
data?.map((item) => (
{
showLogDetail(item);
}}
>
{columns.map((column) => (
{column.render
? column.render(item[column.dataIndex], item)
: item[column.dataIndex]}
))}
))}
{!loading && (!data || data.length === 0) && (
No data
)}
{/*
*/}
{
handlePageChange(page, pageSize);
}}
>
setOpenModal(false)}
/>
);
};
export default AgentLogPage;