Skip to content

Commit 49060c9

Browse files
committed
feat: better icons on table header + fix overflowing bug on viewer
1 parent 904f9a4 commit 49060c9

4 files changed

Lines changed: 44 additions & 34 deletions

File tree

resources/js/components/postgres/postgres-table-data.tsx

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,10 @@ import PostgresFilters from "@/components/postgres/postgres-filters";
55
import PostgresSort from "@/components/postgres/postgres-sort";
66
import { Skeleton } from "@/components/ui/skeleton";
77
import { Table, TableBody, TableHead, TableHeader, TableRow } from "@/components/ui/table";
8-
import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
98
import { DatabaseConnection } from "@/types/database";
109
import { TableRecord } from "@/types/postgres";
11-
import { CodeIcon, KeyIcon, TableIcon } from "lucide-react";
12-
import { useState } from "react";
10+
import { CalendarIcon, CheckIcon, CodeIcon, HashIcon, KeyIcon, SigmaIcon, TableIcon, TextIcon } from "lucide-react";
11+
import { ReactElement, useState } from "react";
1312
import DeletePostgresRow from "./delete-postgres-row";
1413
import EditPostgresRow from "./edit-postgres-row";
1514
import PostgresTableRow from "./postgres-table-row";
@@ -102,15 +101,29 @@ const TableDataDisplay = ({
102101
}
103102
};
104103

105-
const PrimaryKeyIcon = ({ isPrimaryKey }: { isPrimaryKey: boolean | undefined }) => {
106-
return isPrimaryKey ? (
107-
<Tooltip>
108-
<TooltipTrigger>
109-
<KeyIcon className="text-primary size-3 rotate-45" />
110-
</TooltipTrigger>
111-
<TooltipContent>Primary Key</TooltipContent>
112-
</Tooltip>
113-
) : null;
104+
const getColumnIcon = (column: ColumnData) => {
105+
const icons: ReactElement[] = [];
106+
if (column.is_primary_key) {
107+
icons.push(<KeyIcon className="text-primary size-3 rotate-45" />);
108+
}
109+
if (/^(text|character|varchar|char|citext)/.test(column.data_type)) {
110+
icons.push(<TextIcon className="text-primary size-3" />);
111+
}
112+
if (/^(integer|bigint|smallint|numeric|decimal|float|double)/.test(column.data_type)) {
113+
icons.push(<SigmaIcon className="text-primary size-3" />);
114+
}
115+
if (/^(boolean|bool)/.test(column.data_type)) {
116+
icons.push(<CheckIcon className="text-primary size-3" />);
117+
}
118+
if (/^(date|time|timestamp|interval)/.test(column.data_type)) {
119+
icons.push(<CalendarIcon className="text-primary size-3" />);
120+
} else if (/^(json|jsonb)/.test(column.data_type)) {
121+
icons.push(<CodeIcon className="text-primary size-3" />);
122+
} else if (/^(uuid|uuid-ossp)/.test(column.data_type)) {
123+
icons.push(<HashIcon className="text-primary size-3" />);
124+
}
125+
126+
return icons;
114127
};
115128

116129
return (
@@ -149,7 +162,7 @@ const TableDataDisplay = ({
149162
{columns.map((column, index) => (
150163
<TableHead key={index} className="h-10">
151164
<div className="flex items-center gap-1 align-middle">
152-
<PrimaryKeyIcon isPrimaryKey={column.is_primary_key} />
165+
{getColumnIcon(column)}
153166
{column.column_name}
154167
<span className="font-mono text-xs text-gray-500">({column.data_type})</span>
155168
</div>

resources/js/components/postgres/postgres-table-row.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const PostgresTableRow = ({ row, columns, rowIndex, onEdit, onDelete }: Postgres
1616
<ContextMenuTrigger className="w-full" asChild>
1717
<TableRow key={rowIndex} className="w-full">
1818
{columns.map((column, colIndex) => (
19-
<TableCell key={colIndex} className="h-10">
19+
<TableCell key={colIndex} className="hover:border-primary/50 h-10 truncate hover:border">
2020
{row[column.column_name] !== null ? String(row[column.column_name]) : <span className="text-gray-400">NULL</span>}
2121
</TableCell>
2222
))}

resources/js/components/postgres/postgres-table-view.tsx

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import TableDataDisplay from "@/components/postgres/postgres-table-data";
22
import { DatabaseConnection } from "@/types/database";
3-
import { ScrollArea } from "../ui/scroll-area";
43

54
/**
65
* Component for displaying table data in regular table view mode
@@ -46,23 +45,21 @@ const TableView = ({
4645
}
4746

4847
return (
49-
<ScrollArea className="max-w-full">
50-
<TableDataDisplay
51-
selectedTable={selectedTable}
52-
loadingTable={loadingTable}
53-
columns={columns}
54-
tableData={tableData}
55-
pagination={pagination}
56-
setPagination={setPagination}
57-
connectionId={connectionId}
58-
database={database}
59-
schema={schema}
60-
onRowAdded={refreshTableData}
61-
connection={connection}
62-
refreshTableData={refreshTableData}
63-
isQueryResult={false}
64-
/>
65-
</ScrollArea>
48+
<TableDataDisplay
49+
selectedTable={selectedTable}
50+
loadingTable={loadingTable}
51+
columns={columns}
52+
tableData={tableData}
53+
pagination={pagination}
54+
setPagination={setPagination}
55+
connectionId={connectionId}
56+
database={database}
57+
schema={schema}
58+
onRowAdded={refreshTableData}
59+
connection={connection}
60+
refreshTableData={refreshTableData}
61+
isQueryResult={false}
62+
/>
6663
);
6764
};
6865

resources/js/layouts/app/app-sidebar-layout.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ export default function AppSidebarLayout({ children, breadcrumbs = [], actions }
1414
return (
1515
<AppShell variant="sidebar">
1616
<AppSidebar />
17-
<AppContent variant="sidebar">
17+
<AppContent variant="sidebar" className="overflow-hidden">
1818
<AppSidebarHeader breadcrumbs={breadcrumbs} actions={actions} />
19-
{children}
19+
<div className="mx-auto flex w-full flex-1 flex-col">{children}</div>
2020
</AppContent>
2121
</AppShell>
2222
);

0 commit comments

Comments
 (0)