hazo_connect 2.3.2 → 2.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,411 @@
1
+ "use strict";
2
+ "use client";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.default = SqliteAdminClient;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * Purpose: SQLite Admin Client UI Component
8
+ *
9
+ * A full-featured database management interface for SQLite databases.
10
+ * Provides table browsing, data viewing/editing, schema inspection,
11
+ * filtering, pagination, and CRUD operations.
12
+ *
13
+ * This component is exported from hazo_connect/ui for use in consuming apps.
14
+ */
15
+ const react_1 = require("react");
16
+ const lucide_react_1 = require("lucide-react");
17
+ const sonner_1 = require("sonner");
18
+ const DEFAULT_LIMIT = 20;
19
+ const DEFAULT_API_PATH = "/hazo_connect/api/sqlite";
20
+ const filterOperators = [
21
+ { label: "Equals", value: "eq" },
22
+ { label: "Not equal", value: "neq" },
23
+ { label: "Greater than", value: "gt" },
24
+ { label: "Greater or equal", value: "gte" },
25
+ { label: "Less than", value: "lt" },
26
+ { label: "Less or equal", value: "lte" },
27
+ { label: "Contains", value: "like" },
28
+ { label: "Contains (case-insensitive)", value: "ilike" },
29
+ { label: "Is / Is Not", value: "is" }
30
+ ];
31
+ function SqliteAdminClient({ initialTables, baseApiPath = DEFAULT_API_PATH }) {
32
+ const [tables, setTables] = (0, react_1.useState)(initialTables);
33
+ const [selectedTable, setSelectedTable] = (0, react_1.useState)(initialTables[0] ?? null);
34
+ const [schema, setSchema] = (0, react_1.useState)(null);
35
+ const [rows, setRows] = (0, react_1.useState)([]);
36
+ const [totalRows, setTotalRows] = (0, react_1.useState)(0);
37
+ const [limit, setLimit] = (0, react_1.useState)(DEFAULT_LIMIT);
38
+ const [offset, setOffset] = (0, react_1.useState)(0);
39
+ const [orderBy, setOrderBy] = (0, react_1.useState)();
40
+ const [orderDirection, setOrderDirection] = (0, react_1.useState)("asc");
41
+ const [filterState, setFilterState] = (0, react_1.useState)({
42
+ operator: "eq",
43
+ value: ""
44
+ });
45
+ const [isLoadingSchema, setIsLoadingSchema] = (0, react_1.useState)(false);
46
+ const [isLoadingData, setIsLoadingData] = (0, react_1.useState)(false);
47
+ const [isRefreshingTables, setIsRefreshingTables] = (0, react_1.useState)(false);
48
+ const [isCreateOpen, setIsCreateOpen] = (0, react_1.useState)(false);
49
+ const [editingRow, setEditingRow] = (0, react_1.useState)(null);
50
+ const columns = (0, react_1.useMemo)(() => schema?.columns ?? [], [schema]);
51
+ const filterColumns = (0, react_1.useMemo)(() => columns.filter(column => identifierIsFilterable(column.name)), [columns]);
52
+ (0, react_1.useEffect)(() => {
53
+ if (!selectedTable) {
54
+ return;
55
+ }
56
+ void loadSchemaAndData(selectedTable.name);
57
+ // eslint-disable-next-line react-hooks/exhaustive-deps
58
+ }, [selectedTable?.name]);
59
+ async function loadSchemaAndData(tableName) {
60
+ setIsLoadingSchema(true);
61
+ try {
62
+ const schemaResponse = await fetch(`${baseApiPath}/schema?table=${encodeURIComponent(tableName)}`);
63
+ if (!schemaResponse.ok) {
64
+ throw new Error(await schemaResponse.text());
65
+ }
66
+ const schemaJson = await schemaResponse.json();
67
+ setSchema(schemaJson.data);
68
+ const preferredFilterColumn = filterState.column && schemaJson.data?.columns?.some((col) => col.name === filterState.column)
69
+ ? filterState.column
70
+ : schemaJson.data?.columns?.[0]?.name;
71
+ setFilterState(current => ({
72
+ ...current,
73
+ column: preferredFilterColumn
74
+ }));
75
+ setLimit(DEFAULT_LIMIT);
76
+ setOffset(0);
77
+ setOrderBy(undefined);
78
+ setOrderDirection("asc");
79
+ await loadData(tableName, {
80
+ limit: DEFAULT_LIMIT,
81
+ offset: 0,
82
+ orderBy: undefined,
83
+ orderDirection: "asc",
84
+ filterOverride: {
85
+ ...filterState,
86
+ column: preferredFilterColumn
87
+ }
88
+ });
89
+ }
90
+ catch (error) {
91
+ sonner_1.toast.error(error instanceof Error
92
+ ? error.message
93
+ : `Failed to load schema for table '${tableName}'`);
94
+ }
95
+ finally {
96
+ setIsLoadingSchema(false);
97
+ }
98
+ }
99
+ async function loadData(tableName, overrides) {
100
+ setIsLoadingData(true);
101
+ const nextLimit = overrides?.limit ?? limit;
102
+ const nextOffset = overrides?.offset ?? offset;
103
+ const nextOrderBy = overrides?.orderBy ?? orderBy;
104
+ const nextOrderDirection = overrides?.orderDirection ?? orderDirection;
105
+ const nextFilter = overrides?.filterOverride ?? filterState;
106
+ try {
107
+ const params = new URLSearchParams({
108
+ table: tableName,
109
+ limit: String(nextLimit),
110
+ offset: String(nextOffset)
111
+ });
112
+ if (nextOrderBy) {
113
+ params.set("orderBy", nextOrderBy);
114
+ params.set("orderDirection", nextOrderDirection);
115
+ }
116
+ if (nextFilter.column && nextFilter.value.trim().length) {
117
+ const key = nextFilter.operator === "eq"
118
+ ? `filter[${nextFilter.column}]`
119
+ : `filter[${nextFilter.column}][${nextFilter.operator}]`;
120
+ params.set(key, nextFilter.value);
121
+ }
122
+ else if (nextFilter.operator === "is" && nextFilter.column) {
123
+ const key = `filter[${nextFilter.column}][is]`;
124
+ params.set(key, nextFilter.value || "null");
125
+ }
126
+ const response = await fetch(`${baseApiPath}/data?${params.toString()}`);
127
+ if (!response.ok) {
128
+ throw new Error(await response.text());
129
+ }
130
+ const json = (await response.json());
131
+ setRows(json.data ?? []);
132
+ setTotalRows(json.total ?? 0);
133
+ setLimit(nextLimit);
134
+ setOffset(nextOffset);
135
+ setOrderBy(nextOrderBy);
136
+ setOrderDirection(nextOrderDirection);
137
+ setFilterState(nextFilter);
138
+ }
139
+ catch (error) {
140
+ sonner_1.toast.error(error instanceof Error
141
+ ? error.message
142
+ : `Failed to load data for table '${tableName}'`);
143
+ }
144
+ finally {
145
+ setIsLoadingData(false);
146
+ }
147
+ }
148
+ async function refreshTables() {
149
+ setIsRefreshingTables(true);
150
+ try {
151
+ const response = await fetch(`${baseApiPath}/tables`);
152
+ if (!response.ok) {
153
+ throw new Error(await response.text());
154
+ }
155
+ const json = await response.json();
156
+ setTables(json.data ?? []);
157
+ sonner_1.toast.success("Tables refreshed");
158
+ }
159
+ catch (error) {
160
+ sonner_1.toast.error(error instanceof Error ? error.message : "Failed to refresh tables");
161
+ }
162
+ finally {
163
+ setIsRefreshingTables(false);
164
+ }
165
+ }
166
+ function handleSelectTable(table) {
167
+ setSelectedTable(table);
168
+ }
169
+ function handleChangePage(nextOffset) {
170
+ if (!selectedTable) {
171
+ return;
172
+ }
173
+ void loadData(selectedTable.name, { offset: Math.max(0, nextOffset) });
174
+ }
175
+ function handleChangeLimit(nextLimit) {
176
+ if (!selectedTable) {
177
+ return;
178
+ }
179
+ void loadData(selectedTable.name, { limit: nextLimit, offset: 0 });
180
+ }
181
+ function handleChangeOrder(column) {
182
+ if (!selectedTable) {
183
+ return;
184
+ }
185
+ const nextDirection = orderBy === column
186
+ ? orderDirection === "asc"
187
+ ? "desc"
188
+ : "asc"
189
+ : "asc";
190
+ void loadData(selectedTable.name, {
191
+ orderBy: column,
192
+ orderDirection: nextDirection
193
+ });
194
+ }
195
+ function handleApplyFilter() {
196
+ if (!selectedTable) {
197
+ return;
198
+ }
199
+ void loadData(selectedTable.name, { offset: 0 });
200
+ }
201
+ async function handleInsertRow(data) {
202
+ if (!selectedTable) {
203
+ return;
204
+ }
205
+ try {
206
+ const response = await fetch(`${baseApiPath}/data`, {
207
+ method: "POST",
208
+ headers: {
209
+ "Content-Type": "application/json"
210
+ },
211
+ body: JSON.stringify({ table: selectedTable.name, data })
212
+ });
213
+ if (!response.ok) {
214
+ throw new Error(await response.text());
215
+ }
216
+ sonner_1.toast.success("Row inserted");
217
+ setIsCreateOpen(false);
218
+ await Promise.all([
219
+ refreshTables(),
220
+ loadData(selectedTable.name, { offset: 0 })
221
+ ]);
222
+ }
223
+ catch (error) {
224
+ sonner_1.toast.error(error instanceof Error ? error.message : "Insert failed");
225
+ }
226
+ }
227
+ async function handleUpdateRow(row, data) {
228
+ if (!selectedTable || !schema) {
229
+ return;
230
+ }
231
+ const criteria = buildCriteriaFromRow(row, schema.columns);
232
+ try {
233
+ const response = await fetch(`${baseApiPath}/data`, {
234
+ method: "PATCH",
235
+ headers: {
236
+ "Content-Type": "application/json"
237
+ },
238
+ body: JSON.stringify({
239
+ table: selectedTable.name,
240
+ data,
241
+ criteria
242
+ })
243
+ });
244
+ if (!response.ok) {
245
+ throw new Error(await response.text());
246
+ }
247
+ sonner_1.toast.success("Row updated");
248
+ setEditingRow(null);
249
+ await loadData(selectedTable.name);
250
+ }
251
+ catch (error) {
252
+ sonner_1.toast.error(error instanceof Error ? error.message : "Update failed");
253
+ }
254
+ }
255
+ async function handleDeleteRow(row) {
256
+ if (!selectedTable || !schema) {
257
+ return;
258
+ }
259
+ const criteria = buildCriteriaFromRow(row, schema.columns);
260
+ if (!Object.keys(criteria).length) {
261
+ sonner_1.toast.error("Unable to determine primary key for row deletion");
262
+ return;
263
+ }
264
+ if (!window.confirm("Delete this row? This action cannot be undone.")) {
265
+ return;
266
+ }
267
+ try {
268
+ const response = await fetch(`${baseApiPath}/data`, {
269
+ method: "DELETE",
270
+ headers: {
271
+ "Content-Type": "application/json"
272
+ },
273
+ body: JSON.stringify({
274
+ table: selectedTable.name,
275
+ criteria
276
+ })
277
+ });
278
+ if (!response.ok) {
279
+ throw new Error(await response.text());
280
+ }
281
+ sonner_1.toast.success("Row deleted");
282
+ await loadData(selectedTable.name, { offset: 0 });
283
+ await refreshTables();
284
+ }
285
+ catch (error) {
286
+ sonner_1.toast.error(error instanceof Error ? error.message : "Delete failed");
287
+ }
288
+ }
289
+ const totalPages = Math.max(1, Math.ceil(totalRows / limit));
290
+ const currentPage = Math.min(totalPages, Math.floor(offset / limit) + 1);
291
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(sonner_1.Toaster, { position: "top-right", richColors: true }), (0, jsx_runtime_1.jsxs)("div", { className: "flex min-h-[calc(100vh-4rem)] flex-col gap-4 p-6 lg:flex-row", children: [(0, jsx_runtime_1.jsxs)("aside", { className: "w-full max-w-xs rounded-lg border border-slate-200 bg-white shadow-sm lg:sticky lg:top-6 lg:h-[calc(100vh-6rem)]", children: [(0, jsx_runtime_1.jsxs)("header", { className: "flex items-center justify-between border-b border-slate-100 px-4 py-3", children: [(0, jsx_runtime_1.jsx)("h2", { className: "text-sm font-medium text-slate-700", children: "Tables" }), (0, jsx_runtime_1.jsxs)("button", { type: "button", onClick: refreshTables, disabled: isRefreshingTables, className: "inline-flex items-center gap-1 rounded-md border border-slate-200 bg-white px-2 py-1 text-xs font-medium text-slate-600 transition hover:bg-slate-50 disabled:cursor-not-allowed disabled:opacity-50", children: [isRefreshingTables ? ((0, jsx_runtime_1.jsx)(lucide_react_1.Loader2, { className: "h-3 w-3 animate-spin" })) : ((0, jsx_runtime_1.jsx)(lucide_react_1.RefreshCw, { className: "h-3 w-3" })), "Refresh"] })] }), (0, jsx_runtime_1.jsx)("nav", { className: "max-h-[calc(100vh-9rem)] overflow-auto px-2 py-3 text-sm", children: tables.length === 0 ? ((0, jsx_runtime_1.jsx)("p", { className: "rounded-md bg-slate-50 p-3 text-slate-500", children: "No tables detected." })) : ((0, jsx_runtime_1.jsx)("ul", { className: "space-y-1", children: tables.map(table => {
292
+ const isActive = selectedTable?.name === table.name;
293
+ return ((0, jsx_runtime_1.jsx)("li", { children: (0, jsx_runtime_1.jsxs)("button", { type: "button", onClick: () => handleSelectTable(table), className: [
294
+ "flex w-full items-center justify-between rounded-md px-3 py-2 text-left transition",
295
+ isActive
296
+ ? "bg-slate-900 text-white shadow-sm"
297
+ : "bg-white text-slate-700 hover:bg-slate-100"
298
+ ].join(" "), children: [(0, jsx_runtime_1.jsx)("span", { className: "truncate font-medium", children: table.name }), typeof table.row_count === "number" && ((0, jsx_runtime_1.jsx)("span", { className: [
299
+ "ml-2 inline-flex min-w-[2rem] items-center justify-center rounded-full px-2 text-xs",
300
+ isActive
301
+ ? "bg-slate-800 text-slate-100"
302
+ : "bg-slate-100 text-slate-600"
303
+ ].join(" "), children: table.row_count }))] }) }, table.name));
304
+ }) })) })] }), (0, jsx_runtime_1.jsxs)("section", { className: "flex-1 space-y-6", children: [(0, jsx_runtime_1.jsxs)("header", { className: "flex flex-col gap-3 rounded-lg border border-slate-200 bg-white p-4 shadow-sm", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h1", { className: "text-xl font-semibold text-slate-900", children: "SQLite Admin" }), (0, jsx_runtime_1.jsx)("p", { className: "text-sm text-slate-500", children: "Browse tables, inspect schema, and edit data safely." })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsxs)("button", { type: "button", onClick: () => selectedTable && loadSchemaAndData(selectedTable.name), disabled: isLoadingSchema || isLoadingData, className: "inline-flex items-center gap-1 rounded-md border border-slate-200 bg-white px-3 py-2 text-sm font-medium text-slate-600 transition hover:bg-slate-100 disabled:cursor-not-allowed disabled:opacity-50", children: [isLoadingSchema || isLoadingData ? ((0, jsx_runtime_1.jsx)(lucide_react_1.Loader2, { className: "h-4 w-4 animate-spin" })) : ((0, jsx_runtime_1.jsx)(lucide_react_1.RefreshCw, { className: "h-4 w-4" })), "Refresh"] }), (0, jsx_runtime_1.jsxs)("button", { type: "button", onClick: () => setIsCreateOpen(true), disabled: !selectedTable || !schema, className: "inline-flex items-center gap-1 rounded-md bg-slate-900 px-3 py-2 text-sm font-medium text-white transition hover:bg-slate-800 disabled:cursor-not-allowed disabled:bg-slate-400", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { className: "h-4 w-4" }), "Add Row"] })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-wrap items-center gap-3 rounded-md bg-slate-50 p-3 text-sm text-slate-600", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Filter, { className: "h-4 w-4 text-slate-500" }), (0, jsx_runtime_1.jsx)("select", { className: "rounded-md border border-slate-200 bg-white px-2 py-1 text-sm", value: filterState.column ?? "", onChange: event => setFilterState(current => ({
305
+ ...current,
306
+ column: event.target.value || undefined
307
+ })), children: filterColumns.length === 0 ? ((0, jsx_runtime_1.jsx)("option", { value: "", children: "No filterable columns" })) : (filterColumns.map(column => ((0, jsx_runtime_1.jsx)("option", { value: column.name, children: column.name }, column.name)))) }), (0, jsx_runtime_1.jsx)("select", { className: "rounded-md border border-slate-200 bg-white px-2 py-1 text-sm", value: filterState.operator, onChange: event => setFilterState(current => ({
308
+ ...current,
309
+ operator: event.target.value
310
+ })), children: filterOperators.map(operator => ((0, jsx_runtime_1.jsx)("option", { value: operator.value, children: operator.label }, operator.value))) }), filterState.operator === "is" ? ((0, jsx_runtime_1.jsxs)("select", { className: "rounded-md border border-slate-200 bg-white px-2 py-1 text-sm", value: filterState.value, onChange: event => setFilterState(current => ({
311
+ ...current,
312
+ value: event.target.value
313
+ })), children: [(0, jsx_runtime_1.jsx)("option", { value: "null", children: "NULL" }), (0, jsx_runtime_1.jsx)("option", { value: "not.null", children: "NOT NULL" })] })) : ((0, jsx_runtime_1.jsx)("input", { type: "text", className: "flex-1 rounded-md border border-slate-200 bg-white px-2 py-1 text-sm focus:border-slate-400 focus:outline-none", placeholder: "Filter value...", value: filterState.value, onChange: event => setFilterState(current => ({
314
+ ...current,
315
+ value: event.target.value
316
+ })) })), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: handleApplyFilter, disabled: !selectedTable || !schema, className: "inline-flex items-center gap-1 rounded-md border border-slate-200 bg-white px-3 py-1.5 text-sm font-medium text-slate-600 transition hover:bg-slate-100 disabled:cursor-not-allowed disabled:opacity-50", children: "Apply" })] })] }), selectedTable ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("section", { className: "rounded-lg border border-slate-200 bg-white shadow-sm", children: [(0, jsx_runtime_1.jsxs)("header", { className: "flex items-center justify-between border-b border-slate-100 px-4 py-3", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h2", { className: "text-base font-semibold text-slate-800", children: selectedTable.name }), (0, jsx_runtime_1.jsxs)("p", { className: "text-xs text-slate-500", children: [schema?.columns.length ?? 0, " columns"] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsxs)("label", { className: "flex items-center gap-1 text-xs text-slate-500", children: ["Rows per page", (0, jsx_runtime_1.jsx)("select", { value: limit, onChange: event => handleChangeLimit(Number.parseInt(event.target.value, 10)), className: "rounded-md border border-slate-200 bg-white px-2 py-1 text-xs shadow-sm", children: [10, 20, 50, 100].map(option => ((0, jsx_runtime_1.jsx)("option", { value: option, children: option }, option))) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "inline-flex items-center gap-1 rounded-md border border-slate-200 bg-white px-2 py-1 text-xs text-slate-600 shadow-sm", children: [(0, jsx_runtime_1.jsxs)("button", { type: "button", onClick: () => handleChangeOrder(orderBy), className: "inline-flex items-center gap-1", disabled: !schema, children: ["Order:", " ", orderBy ? `${orderBy} - ${orderDirection}` : "not set"] }), schema && schema.columns.length > 0 && ((0, jsx_runtime_1.jsxs)("select", { value: orderBy ?? "", onChange: event => handleChangeOrder(event.target.value || undefined), className: "rounded border border-slate-200 bg-white px-1 py-0.5 text-xs", children: [(0, jsx_runtime_1.jsx)("option", { value: "", children: "None" }), schema.columns.map(column => ((0, jsx_runtime_1.jsx)("option", { value: column.name, children: column.name }, column.name)))] }))] })] })] }), (0, jsx_runtime_1.jsx)("div", { className: "overflow-auto", children: (0, jsx_runtime_1.jsxs)("table", { className: "min-w-full divide-y divide-slate-200 text-sm", children: [(0, jsx_runtime_1.jsx)("thead", { className: "bg-slate-50 text-xs uppercase tracking-wide text-slate-500", children: (0, jsx_runtime_1.jsxs)("tr", { children: [columns.map(column => ((0, jsx_runtime_1.jsx)("th", { className: "px-3 py-2 text-left", children: column.name }, column.name))), (0, jsx_runtime_1.jsx)("th", { className: "px-3 py-2 text-right text-slate-400", children: "Actions" })] }) }), (0, jsx_runtime_1.jsx)("tbody", { className: "divide-y divide-slate-100 bg-white text-sm text-slate-700", children: isLoadingData ? ((0, jsx_runtime_1.jsx)("tr", { children: (0, jsx_runtime_1.jsx)("td", { colSpan: columns.length + 1, className: "px-3 py-8 text-center", children: (0, jsx_runtime_1.jsxs)("div", { className: "inline-flex items-center gap-2 text-slate-500", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Loader2, { className: "h-4 w-4 animate-spin" }), "Loading data..."] }) }) })) : rows.length === 0 ? ((0, jsx_runtime_1.jsx)("tr", { children: (0, jsx_runtime_1.jsx)("td", { colSpan: columns.length + 1, className: "px-3 py-8 text-center text-slate-400", children: "No rows to display." }) })) : (rows.map((row, index) => ((0, jsx_runtime_1.jsxs)("tr", { className: "hover:bg-slate-50/60", children: [columns.map(column => ((0, jsx_runtime_1.jsx)("td", { className: "max-w-[200px] truncate px-3 py-2", children: formatCellValue(row[column.name]) }, column.name))), (0, jsx_runtime_1.jsx)("td", { className: "px-3 py-2 text-right", children: (0, jsx_runtime_1.jsxs)("div", { className: "inline-flex items-center gap-1", children: [(0, jsx_runtime_1.jsxs)("button", { type: "button", onClick: () => setEditingRow(row), className: "inline-flex items-center gap-1 rounded-md border border-slate-200 px-2 py-1 text-xs font-medium text-slate-600 transition hover:bg-slate-100", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Pencil, { className: "h-3 w-3" }), "Edit"] }), (0, jsx_runtime_1.jsxs)("button", { type: "button", onClick: () => handleDeleteRow(row), className: "inline-flex items-center gap-1 rounded-md border border-red-200 px-2 py-1 text-xs font-medium text-red-600 transition hover:bg-red-50", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Trash2, { className: "h-3 w-3" }), "Delete"] })] }) })] }, index)))) })] }) }), (0, jsx_runtime_1.jsxs)("footer", { className: "flex flex-wrap items-center justify-between gap-3 border-t border-slate-100 px-4 py-3 text-xs text-slate-500", children: [(0, jsx_runtime_1.jsxs)("span", { children: ["Page ", currentPage, " of ", totalPages, " - ", totalRows, " rows"] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [(0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => handleChangePage(Math.max(0, offset - limit)), disabled: offset === 0 || isLoadingData, className: "inline-flex items-center gap-1 rounded-md border border-slate-200 bg-white px-2 py-1 text-xs font-medium text-slate-600 transition hover:bg-slate-100 disabled:cursor-not-allowed disabled:opacity-50", children: "Prev" }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => handleChangePage(offset + limit), disabled: offset + limit >= totalRows || isLoadingData, className: "inline-flex items-center gap-1 rounded-md border border-slate-200 bg-white px-2 py-1 text-xs font-medium text-slate-600 transition hover:bg-slate-100 disabled:cursor-not-allowed disabled:opacity-50", children: "Next" })] })] })] }), (0, jsx_runtime_1.jsxs)("section", { className: "rounded-lg border border-slate-200 bg-white shadow-sm", children: [(0, jsx_runtime_1.jsx)("header", { className: "border-b border-slate-100 px-4 py-3", children: (0, jsx_runtime_1.jsx)("h3", { className: "text-sm font-semibold text-slate-700", children: "Schema" }) }), (0, jsx_runtime_1.jsx)("div", { className: "overflow-auto", children: (0, jsx_runtime_1.jsxs)("table", { className: "min-w-full divide-y divide-slate-200 text-sm", children: [(0, jsx_runtime_1.jsx)("thead", { className: "bg-slate-50 text-xs uppercase tracking-wide text-slate-500", children: (0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("th", { className: "px-3 py-2 text-left", children: "Column" }), (0, jsx_runtime_1.jsx)("th", { className: "px-3 py-2 text-left", children: "Type" }), (0, jsx_runtime_1.jsx)("th", { className: "px-3 py-2 text-left", children: "Not null" }), (0, jsx_runtime_1.jsx)("th", { className: "px-3 py-2 text-left", children: "Default" }), (0, jsx_runtime_1.jsx)("th", { className: "px-3 py-2 text-left", children: "Primary key" })] }) }), (0, jsx_runtime_1.jsx)("tbody", { className: "divide-y divide-slate-100 bg-white text-sm text-slate-700", children: columns.map(column => ((0, jsx_runtime_1.jsxs)("tr", { children: [(0, jsx_runtime_1.jsx)("td", { className: "px-3 py-2 font-medium", children: column.name }), (0, jsx_runtime_1.jsx)("td", { className: "px-3 py-2", children: column.type || "TEXT" }), (0, jsx_runtime_1.jsx)("td", { className: "px-3 py-2", children: column.notnull ? "Yes" : "No" }), (0, jsx_runtime_1.jsx)("td", { className: "px-3 py-2", children: column.default_value === null
317
+ ? "NULL"
318
+ : String(column.default_value) }), (0, jsx_runtime_1.jsx)("td", { className: "px-3 py-2", children: column.primary_key_position
319
+ ? `Yes (#${column.primary_key_position})`
320
+ : "No" })] }, column.name))) })] }) })] })] })) : ((0, jsx_runtime_1.jsx)("p", { className: "rounded-lg border border-dashed border-slate-300 bg-white p-6 text-center text-sm text-slate-500", children: "Select a table to begin." }))] })] }), schema && selectedTable && ((0, jsx_runtime_1.jsx)(RowModal, { title: `Insert into ${selectedTable.name}`, open: isCreateOpen, columns: schema.columns, onClose: () => setIsCreateOpen(false), onSubmit: handleInsertRow })), schema && selectedTable && editingRow && ((0, jsx_runtime_1.jsx)(RowModal, { title: `Edit row in ${selectedTable.name}`, open: Boolean(editingRow), columns: schema.columns, initialValues: editingRow, onClose: () => setEditingRow(null), onSubmit: data => handleUpdateRow(editingRow, data), primaryKeys: schema.columns.filter(column => column.primary_key_position > 0) }))] }));
321
+ }
322
+ // Internal modal component for row editing/creation
323
+ function RowModal({ title, open, columns, primaryKeys, initialValues, onClose, onSubmit }) {
324
+ const [formValues, setFormValues] = (0, react_1.useState)({});
325
+ (0, react_1.useEffect)(() => {
326
+ if (open) {
327
+ const nextValues = {};
328
+ columns.forEach(column => {
329
+ const rawValue = initialValues?.[column.name];
330
+ nextValues[column.name] =
331
+ rawValue === null || rawValue === undefined ? "" : String(rawValue);
332
+ });
333
+ setFormValues(nextValues);
334
+ }
335
+ }, [open, columns, initialValues]);
336
+ if (!open) {
337
+ return null;
338
+ }
339
+ function handleChange(column, value) {
340
+ setFormValues(current => ({
341
+ ...current,
342
+ [column]: value
343
+ }));
344
+ }
345
+ function handleSubmit(event) {
346
+ event.preventDefault();
347
+ const payload = {};
348
+ for (const column of columns) {
349
+ const value = formValues[column.name];
350
+ payload[column.name] = coerceValue(column, value);
351
+ }
352
+ onSubmit(payload);
353
+ }
354
+ return ((0, jsx_runtime_1.jsx)("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-slate-900/30 backdrop-blur", children: (0, jsx_runtime_1.jsxs)("div", { className: "relative w-full max-w-2xl rounded-lg border border-slate-200 bg-white p-6 shadow-xl", children: [(0, jsx_runtime_1.jsxs)("header", { className: "mb-4 flex items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h2", { className: "text-lg font-semibold text-slate-900", children: title }), primaryKeys && primaryKeys.length === 0 && ((0, jsx_runtime_1.jsx)("p", { className: "mt-1 text-xs text-amber-600", children: "Warning: table has no primary key defined. Updates/deletes rely on full row matching." }))] }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: onClose, className: "rounded-full border border-slate-200 p-1 text-slate-500 transition hover:bg-slate-100", children: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { className: "h-4 w-4" }) })] }), (0, jsx_runtime_1.jsxs)("form", { onSubmit: handleSubmit, className: "space-y-4", children: [(0, jsx_runtime_1.jsx)("div", { className: "grid max-h-[50vh] grid-cols-1 gap-4 overflow-auto pr-2 sm:grid-cols-2", children: columns.map(column => ((0, jsx_runtime_1.jsxs)("label", { className: "flex flex-col gap-1 text-sm", children: [(0, jsx_runtime_1.jsxs)("span", { className: "font-medium text-slate-700", children: [column.name, column.notnull && ((0, jsx_runtime_1.jsx)("sup", { className: "ml-1 text-amber-600", title: "Required", children: "*" }))] }), (0, jsx_runtime_1.jsx)("input", { type: "text", value: formValues[column.name] ?? "", onChange: event => handleChange(column.name, event.target.value), className: "rounded-md border border-slate-200 px-3 py-2 text-sm text-slate-700 shadow-sm focus:border-slate-400 focus:outline-none", placeholder: column.default_value === null
355
+ ? column.type || "TEXT"
356
+ : String(column.default_value) }), (0, jsx_runtime_1.jsxs)("span", { className: "text-xs text-slate-400", children: [column.type || "TEXT", column.primary_key_position ? " - Primary key" : ""] })] }, column.name))) }), (0, jsx_runtime_1.jsxs)("footer", { className: "flex items-center justify-end gap-2", children: [(0, jsx_runtime_1.jsx)("button", { type: "button", onClick: onClose, className: "inline-flex items-center gap-1 rounded-md border border-slate-200 bg-white px-3 py-2 text-sm font-medium text-slate-600 transition hover:bg-slate-100", children: "Cancel" }), (0, jsx_runtime_1.jsxs)("button", { type: "submit", className: "inline-flex items-center gap-1 rounded-md bg-slate-900 px-3 py-2 text-sm font-medium text-white transition hover:bg-slate-800", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Save, { className: "h-4 w-4" }), "Save"] })] })] })] }) }));
357
+ }
358
+ // Helper functions
359
+ function buildCriteriaFromRow(row, columns) {
360
+ const criteria = {};
361
+ const primaryKeys = columns.filter(column => column.primary_key_position > 0);
362
+ if (primaryKeys.length) {
363
+ for (const primary of primaryKeys) {
364
+ criteria[primary.name] = row[primary.name];
365
+ }
366
+ return criteria;
367
+ }
368
+ for (const column of columns) {
369
+ criteria[column.name] = row[column.name];
370
+ }
371
+ return criteria;
372
+ }
373
+ function coerceValue(column, rawValue) {
374
+ if (rawValue === "") {
375
+ return column.notnull ? "" : null;
376
+ }
377
+ const normalisedType = (column.type ?? "").toLowerCase();
378
+ if (normalisedType.includes("int")) {
379
+ const parsed = Number.parseInt(rawValue, 10);
380
+ return Number.isNaN(parsed) ? rawValue : parsed;
381
+ }
382
+ if (normalisedType.includes("real") ||
383
+ normalisedType.includes("double") ||
384
+ normalisedType.includes("float") ||
385
+ normalisedType.includes("numeric")) {
386
+ const parsed = Number.parseFloat(rawValue);
387
+ return Number.isNaN(parsed) ? rawValue : parsed;
388
+ }
389
+ if (normalisedType.includes("bool")) {
390
+ return rawValue === "true" || rawValue === "1" ? 1 : 0;
391
+ }
392
+ return rawValue;
393
+ }
394
+ function formatCellValue(value) {
395
+ if (value === null || value === undefined) {
396
+ return "NULL";
397
+ }
398
+ if (typeof value === "object") {
399
+ try {
400
+ return JSON.stringify(value);
401
+ }
402
+ catch {
403
+ return String(value);
404
+ }
405
+ }
406
+ return String(value);
407
+ }
408
+ function identifierIsFilterable(name) {
409
+ return /^[A-Za-z_][A-Za-z0-9_]*$/.test(name);
410
+ }
411
+ //# sourceMappingURL=sqlite-admin-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-admin-client.js","sourceRoot":"","sources":["../../../src/lib/ui/components/sqlite-admin-client.tsx"],"names":[],"mappings":"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"}
@@ -1,10 +1,12 @@
1
1
  /**
2
2
  * Purpose: UI-safe entry point for Hazo Connect
3
3
  *
4
- * This file exports only types and interfaces that are safe to use in client components.
5
- * No runtime code that requires Node.js APIs is exported.
4
+ * This file exports types, interfaces, and React components that are safe to use
5
+ * in client components. Server-only functionality is NOT exported here.
6
6
  */
7
- export type { SqliteTableType, TableSummary, TableSchema, TableColumn, TableForeignKey, RowPage, RowQueryOptions, SqliteWhereFilter, SqliteFilterOperator } from '../sqlite/admin-service';
8
- export type { Logger, ConnectionType, HazoConnectConfig, HazoConnectAdapter, QueryOperator, WhereCondition, OrderDirection, JoinType, NestedSelect, HazoConnectError } from '../types';
9
- export type { ErrorCode } from '../types';
7
+ export type { SqliteTableType, TableSummary, TableSchema, TableColumn, TableForeignKey, RowPage, RowQueryOptions, SqliteWhereFilter, SqliteFilterOperator } from '../sqlite/admin-service.js';
8
+ export type { Logger, ConnectionType, HazoConnectConfig, HazoConnectAdapter, QueryOperator, WhereCondition, OrderDirection, JoinType, NestedSelect, HazoConnectError } from '../types.js';
9
+ export type { ErrorCode } from '../types.js';
10
+ export { default as SqliteAdminClient } from './components/sqlite-admin-client.js';
11
+ export type { SqliteAdminClientProps } from './components/sqlite-admin-client.js';
10
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,eAAe,EACf,YAAY,EACZ,WAAW,EACX,WAAW,EACX,eAAe,EACf,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,yBAAyB,CAAA;AAGhC,YAAY,EACV,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,gBAAgB,EACjB,MAAM,UAAU,CAAA;AAEjB,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,eAAe,EACf,YAAY,EACZ,WAAW,EACX,WAAW,EACX,eAAe,EACf,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,4BAA4B,CAAA;AAGnC,YAAY,EACV,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,gBAAgB,EACjB,MAAM,aAAa,CAAA;AAEpB,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAG5C,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAClF,YAAY,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAA"}
package/dist/ui/index.js CHANGED
@@ -2,8 +2,15 @@
2
2
  /**
3
3
  * Purpose: UI-safe entry point for Hazo Connect
4
4
  *
5
- * This file exports only types and interfaces that are safe to use in client components.
6
- * No runtime code that requires Node.js APIs is exported.
5
+ * This file exports types, interfaces, and React components that are safe to use
6
+ * in client components. Server-only functionality is NOT exported here.
7
7
  */
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
8
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.SqliteAdminClient = void 0;
13
+ // Export React components for SQLite Admin UI
14
+ var sqlite_admin_client_js_1 = require("./components/sqlite-admin-client.js");
15
+ Object.defineProperty(exports, "SqliteAdminClient", { enumerable: true, get: function () { return __importDefault(sqlite_admin_client_js_1).default; } });
9
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/ui/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/ui/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;AA+BH,8CAA8C;AAC9C,8EAAkF;AAAzE,4IAAA,OAAO,OAAqB"}
@@ -22,6 +22,16 @@ export interface SqliteWhereFilter {
22
22
  * @returns WHERE clause SQL and parameter array
23
23
  */
24
24
  export declare function buildWhereClause(filters: SqliteWhereFilter[] | WhereCondition[], quoteField?: (field: string) => string): WhereClauseResult;
25
+ /**
26
+ * Translate a single condition to SQL
27
+ * @param condition - Condition to translate
28
+ * @param quoteField - Function to quote field names
29
+ * @returns SQL clause and parameters
30
+ */
31
+ export declare function translateWhereCondition(condition: SqliteWhereFilter | WhereCondition, quoteField: (field: string) => string): {
32
+ clause: string;
33
+ params: unknown[];
34
+ };
25
35
  /**
26
36
  * Build filters from a criteria object (for admin service)
27
37
  * @param criteria - Object with column names as keys and values
@@ -1 +1 @@
1
- {"version":3,"file":"where-builder.d.ts","sourceRoot":"","sources":["../../src/lib/utils/where-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,UAAU,CAAA;AAG7D,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,OAAO,EAAE,CAAA;CAClB;AAED,MAAM,MAAM,oBAAoB,GAC5B,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,KAAK,GACL,MAAM,GACN,OAAO,GACP,IAAI,GACJ,IAAI,CAAA;AAER,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,oBAAoB,CAAA;IAC9B,KAAK,EAAE,OAAO,CAAA;CACf;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,iBAAiB,EAAE,GAAG,cAAc,EAAE,EAC/C,UAAU,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAwB,GACtD,iBAAiB,CAgBnB;AA0ED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,iBAAiB,EAAE,CAMrB"}
1
+ {"version":3,"file":"where-builder.d.ts","sourceRoot":"","sources":["../../src/lib/utils/where-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,UAAU,CAAA;AAG7D,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,OAAO,EAAE,CAAA;CAClB;AAED,MAAM,MAAM,oBAAoB,GAC5B,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,KAAK,GACL,MAAM,GACN,OAAO,GACP,IAAI,GACJ,IAAI,CAAA;AAER,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,oBAAoB,CAAA;IAC9B,KAAK,EAAE,OAAO,CAAA;CACf;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,iBAAiB,EAAE,GAAG,cAAc,EAAE,EAC/C,UAAU,GAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAwB,GACtD,iBAAiB,CAgBnB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,iBAAiB,GAAG,cAAc,EAC7C,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GACpC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,EAAE,CAAA;CAAE,CA6DvC;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,iBAAiB,EAAE,CAMrB"}
@@ -7,6 +7,7 @@
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.buildWhereClause = buildWhereClause;
10
+ exports.translateWhereCondition = translateWhereCondition;
10
11
  exports.buildFiltersFromCriteria = buildFiltersFromCriteria;
11
12
  const sqlite_utils_1 = require("./sqlite-utils");
12
13
  /**
@@ -22,7 +23,7 @@ function buildWhereClause(filters, quoteField = sqlite_utils_1.quoteIdentifier)
22
23
  const clauses = [];
23
24
  const params = [];
24
25
  for (const filter of filters) {
25
- const condition = translateCondition(filter, quoteField);
26
+ const condition = translateWhereCondition(filter, quoteField);
26
27
  clauses.push(condition.clause);
27
28
  params.push(...condition.params);
28
29
  }
@@ -35,7 +36,7 @@ function buildWhereClause(filters, quoteField = sqlite_utils_1.quoteIdentifier)
35
36
  * @param quoteField - Function to quote field names
36
37
  * @returns SQL clause and parameters
37
38
  */
38
- function translateCondition(condition, quoteField) {
39
+ function translateWhereCondition(condition, quoteField) {
39
40
  const operator = condition.operator;
40
41
  // Handle both WhereCondition (has 'field') and SqliteWhereFilter (has 'column')
41
42
  const fieldName = 'field' in condition ? condition.field : condition.column;
@@ -1 +1 @@
1
- {"version":3,"file":"where-builder.js","sourceRoot":"","sources":["../../src/lib/utils/where-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"where-builder.js","sourceRoot":"","sources":["../../src/lib/utils/where-builder.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hazo_connect",
3
- "version": "2.3.2",
3
+ "version": "2.3.4",
4
4
  "description": "Module to connect to the data store (postgres via postgrest, supabase, etc)",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",