diff --git a/astro-app/src/components/ProjectCard.tsx b/astro-app/src/components/ProjectCard.tsx
index db68a6d..dbd9abd 100644
--- a/astro-app/src/components/ProjectCard.tsx
+++ b/astro-app/src/components/ProjectCard.tsx
@@ -66,7 +66,7 @@ export function ProjectCard({ project, onSeenStatusChange }: ProjectCardProps) {
{/* Project Actions */}
- <>
+
{/* Project URL */}
{project.project_url && (
@@ -95,26 +95,24 @@ export function ProjectCard({ project, onSeenStatusChange }: ProjectCardProps) {
)}
- {/* Seen Toggle */}
-
{/* Engagement Stats */}
diff --git a/astro-app/src/components/ProjectsTable.tsx b/astro-app/src/components/ProjectsTable.tsx
index 80aa32d..5b4374b 100644
--- a/astro-app/src/components/ProjectsTable.tsx
+++ b/astro-app/src/components/ProjectsTable.tsx
@@ -68,6 +68,36 @@ export function ProjectsTable({ projects, title, showUrlColumn = true, onSeenSta
};
const columns = useMemo(() => [
+ columnHelper.display({
+ id: 'seen',
+ header: ({ table }) => (
+
+
+
+ ),
+ cell: ({ row }) => {
+ const projectId = row.original.id;
+ const isSeen = seenProjects.has(projectId);
+
+ return (
+
+ toggleSeen(projectId)}
+ />
+
+ );
+ },
+ size: 60,
+ }),
columnHelper.accessor('author_name', {
header: ({ column }) => (
),
- size: 240,
+ size: 200,
}),
columnHelper.accessor('project_description', {
header: ({ column }) => (
@@ -120,7 +150,7 @@ export function ProjectsTable({ projects, title, showUrlColumn = true, onSeenSta
{row.original.project_description}
),
- size: 400,
+ size: 350,
}),
...(showUrlColumn ? [
columnHelper.accessor('project_url', {
@@ -262,38 +292,6 @@ export function ProjectsTable({ projects, title, showUrlColumn = true, onSeenSta
),
size: 140,
}),
- columnHelper.display({
- id: 'actions',
- header: 'Actions',
- cell: ({ row }) => {
- const projectId = row.original.id;
- const isSeen = seenProjects.has(projectId);
-
- return (
-
-
-
- );
- },
- size: 120,
- }),
], [showUrlColumn, seenProjects]);
const table = useReactTable({
@@ -327,7 +325,7 @@ export function ProjectsTable({ projects, title, showUrlColumn = true, onSeenSta
}, [projects]);
// Calculate total width
- const totalWidth = table.getHeaderGroups()[0]?.headers.reduce((acc, header) => acc + header.getSize(), 0) || 1000;
+ const totalWidth = table.getHeaderGroups()[0]?.headers.reduce((acc, header) => acc + header.getSize(), 0) || 800;
return (
@@ -367,36 +365,37 @@ export function ProjectsTable({ projects, title, showUrlColumn = true, onSeenSta
{/* Table Container */}
-
-
+
+
+
{/* Fixed Header */}
-
+
{table.getHeaderGroups().map((headerGroup) => (
-
`${h.getSize()}px`).join(' ') }}>
+
`${h.getSize()}px`).join(' ') }}>
{headerGroup.headers.map((header) => (
-
+ >
{header.isPlaceholder
? null
: flexRender(header.column.columnDef.header, header.getContext())}
-
+
))}
-
+
))}
-
+
- {/* Virtual Scrollable Body */}
-
+ >
- {virtualizer.getVirtualItems().map((virtualRow) => {
+ {virtualizer.getVirtualItems().map((virtualRow) => {
const row = rows[virtualRow.index];
return (
-
`${cell.column.getSize()}px`).join(' ')
}}
- >
+ >
{row.getVisibleCells().map((cell) => (
-
+ >
{flexRender(cell.column.columnDef.cell, cell.getContext())}
-
+
))}
-
+
);
- })}
+ })}
+
+
);
}
\ No newline at end of file