import React, { useMemo } from 'react'; import { useQuery } from '@tanstack/react-query'; import DataTable, { TableColumn } from 'react-data-table-component'; import { __ } from '@wordpress/i18n'; import FieldWrapper from '@/components/Fields/FieldWrapper'; import EmptyDataTable from '@/components/Statistics/EmptyDataTable'; import {formatDateAndTime, formatUnixToDateTime} from '@/utils/formatting'; import { OverflowTooltip } from '@/components/Common/OverflowTooltip'; import { getReportLogsData } from '@/api/getReportLogsData'; import { ReportLogEntry, ReportLogBatch, ReportLogSeverity } from '@/store/reports/types'; import Icon from '@/utils/Icon'; import { useReportConfigStore } from '@/store/reports/useReportConfigStore'; export const ReportLogsField = ({ field, fieldState, help, context, ...props }: any ) => { // eslint-disable-line @typescript-eslint/no-explicit-any const inputId = props.id || field.name; const reportLogStatusConfig = useReportConfigStore( ( state ) => state.reportLogStatusConfig ); const statusSeverityClasses = useReportConfigStore( ( state ) => state.statusSeverityClasses ); const { data = [], isFetching } = useQuery({ queryKey: [ 'report-logs' ], queryFn: async() => await getReportLogsData(), refetchOnMount: 'always' }); const columns: TableColumn[] = useMemo( () => [ { name: __( 'Status', 'burst-statistics' ), cell: ( row ) => { const severity = reportLogStatusConfig?.[row.status]?.severity ?? 'info'; return ( { row.message } ); }, grow: 0 }, { name: __( 'Report', 'burst-statistics' ), cell: ( row ) => ( { row.report_name } ), grow: 1 }, { name: __( 'Date', 'burst-statistics' ), cell: ( row ) => formatDateAndTime( new Date( row.time * 1000 ) ), sortable: true, grow: 2 }, { name: __( 'Queue', 'burst-statistics' ), cell: ( row ) => ( { row.queue_id } ), right: true, grow: 1 }, { name: __( 'Message', 'burst-statistics' ), cell: ( row ) => row.message ? ( { row.message } ) : ( ), right: true, grow: 1 } ], [ reportLogStatusConfig, statusSeverityClasses ] ); return ( } className="burst-data-table no-custom-burst-style" pagination columns={ columns } data={ data } sortIcon={ } progressComponent={ } expandableRows expandableRowsComponent={ ExpandedComponent } /> ); }; const ExpandedComponent = ({ data }: { data: ReportLogEntry }) => { const reportLogStatusConfig = useReportConfigStore( ( state ) => state.reportLogStatusConfig ); const statusSeverityClasses = useReportConfigStore( ( state ) => state.statusSeverityClasses ); return (

{__( 'Batch details', 'burst-statistics' )}

); }; ExpandedComponent.displayName = 'ExpandedComponent'; ReportLogsField.displayName = 'ReportLogsField';