diff --git a/apps/start/src/components/events/table/index.tsx b/apps/start/src/components/events/table/index.tsx
index 95ed8e2d..c545ee80 100644
--- a/apps/start/src/components/events/table/index.tsx
+++ b/apps/start/src/components/events/table/index.tsx
@@ -1,3 +1,17 @@
+import type { IServiceEvent } from '@openpanel/db';
+import type { UseInfiniteQueryResult } from '@tanstack/react-query';
+import type { Table } from '@tanstack/react-table';
+import { getCoreRowModel, useReactTable } from '@tanstack/react-table';
+import { useWindowVirtualizer } from '@tanstack/react-virtual';
+import type { TRPCInfiniteData } from '@trpc/tanstack-react-query';
+import { format } from 'date-fns';
+import { CalendarIcon, Loader2Icon } from 'lucide-react';
+import { parseAsIsoDateTime, useQueryState } from 'nuqs';
+import { last } from 'ramda';
+import { memo, useCallback, useEffect, useMemo, useRef } from 'react';
+import { useInViewport } from 'react-in-viewport';
+import EventListener from '../event-listener';
+import { useColumns } from './columns';
import { FullPageEmptyState } from '@/components/full-page-empty-state';
import {
OverviewFilterButton,
@@ -12,20 +26,6 @@ import { useAppParams } from '@/hooks/use-app-params';
import { pushModal } from '@/modals';
import type { RouterInputs, RouterOutputs } from '@/trpc/client';
import { cn } from '@/utils/cn';
-import type { IServiceEvent } from '@openpanel/db';
-import type { UseInfiniteQueryResult } from '@tanstack/react-query';
-import type { Table } from '@tanstack/react-table';
-import { getCoreRowModel, useReactTable } from '@tanstack/react-table';
-import { useWindowVirtualizer } from '@tanstack/react-virtual';
-import type { TRPCInfiniteData } from '@trpc/tanstack-react-query';
-import { format } from 'date-fns';
-import { CalendarIcon, FilterIcon, Loader2Icon } from 'lucide-react';
-import { parseAsIsoDateTime, useQueryState } from 'nuqs';
-import { last } from 'ramda';
-import { memo, useEffect, useMemo, useRef } from 'react';
-import { useInViewport } from 'react-in-viewport';
-import EventListener from '../event-listener';
-import { useColumns } from './columns';
type Props = {
query: UseInfiniteQueryResult<
@@ -54,6 +54,7 @@ interface VirtualRowProps {
scrollMargin: number;
isLoading: boolean;
headerColumnsHash: string;
+ onRowClick?: (row: any) => void;
}
const VirtualRow = memo(
@@ -63,12 +64,26 @@ const VirtualRow = memo(
headerColumns,
scrollMargin,
isLoading,
+ onRowClick,
}: VirtualRowProps) {
return (
{
+ if ((e.target as HTMLElement).closest('a, button')) {
+ return;
+ }
+ onRowClick(row);
+ }
+ : undefined
+ }
ref={virtualRow.measureElement}
- className="absolute top-0 left-0 w-full border-b hover:bg-muted/50 transition-colors group/row"
style={{
transform: `translateY(${virtualRow.start - scrollMargin}px)`,
display: 'grid',
@@ -83,8 +98,8 @@ const VirtualRow = memo(
const width = `${cell.column.getSize()}px`;
return (
{
+ onRowClick,
+}: VirtualizedEventsTableProps & { onRowClick?: (row: any) => void }) => {
const parentRef = useRef
(null);
const headerColumns = table.getAllLeafColumns().filter((col) => {
@@ -145,12 +162,12 @@ const VirtualizedEventsTable = ({
const headerColumnsHash = headerColumns.map((col) => col.id).join(',');
return (
{/* Table Header */}
)}
@@ -194,20 +211,23 @@ const VirtualizedEventsTable = ({
>
{virtualRows.map((virtualRow) => {
const row = table.getRowModel().rows[virtualRow.index];
- if (!row) return null;
+ if (!row) {
+ return null;
+ }
return (
);
})}
@@ -220,6 +240,14 @@ export const EventsTable = ({ query, showEventListener = false }: Props) => {
const { isLoading } = query;
const columns = useColumns();
+ const handleRowClick = useCallback((row: any) => {
+ pushModal('EventDetails', {
+ id: row.original.id,
+ createdAt: row.original.createdAt,
+ projectId: row.original.projectId,
+ });
+ }, []);
+
const data = useMemo(() => {
if (isLoading) {
return LOADING_DATA;
@@ -273,13 +301,22 @@ export const EventsTable = ({ query, showEventListener = false }: Props) => {
return (
<>
-
-
-
+
+
+
@@ -301,17 +338,17 @@ function EventsTableToolbar({
const { projectId } = useAppParams();
const [startDate, setStartDate] = useQueryState(
'startDate',
- parseAsIsoDateTime,
+ parseAsIsoDateTime
);
const [endDate, setEndDate] = useQueryState('endDate', parseAsIsoDateTime);
return (
- {showEventListener &&
query.refetch()} />}
+ {showEventListener && (
+ query.refetch()} />
+ )}