diff --git a/apps/client/src/components/entrypoints.ts b/apps/client/src/components/entrypoints.ts
index 2e55a9b9d..6f8aefc24 100644
--- a/apps/client/src/components/entrypoints.ts
+++ b/apps/client/src/components/entrypoints.ts
@@ -11,21 +11,7 @@ import froca from "../services/froca.js";
import linkService from "../services/link.js";
import { t } from "../services/i18n.js";
import type FNote from "../entities/fnote.js";
-
-// TODO: Move somewhere else nicer.
-export type SqlExecuteResults = string[][][];
-
-// TODO: Deduplicate with server.
-interface SqlExecuteResponse {
- success: boolean;
- error?: string;
- results: SqlExecuteResults;
-}
-
-// TODO: Deduplicate with server.
-interface CreateChildrenResponse {
- note: FNote;
-}
+import { CreateChildrenResponse, SqlExecuteResponse } from "@triliumnext/commons";
export default class Entrypoints extends Component {
constructor() {
diff --git a/apps/client/src/layouts/desktop_layout.tsx b/apps/client/src/layouts/desktop_layout.tsx
index 1ad839b1a..96d7c09ee 100644
--- a/apps/client/src/layouts/desktop_layout.tsx
+++ b/apps/client/src/layouts/desktop_layout.tsx
@@ -42,6 +42,7 @@ import FloatingButtons from "../widgets/FloatingButtons.jsx";
import { DESKTOP_FLOATING_BUTTONS } from "../widgets/FloatingButtonsDefinitions.jsx";
import SearchResult from "../widgets/search_result.jsx";
import GlobalMenu from "../widgets/buttons/global_menu.jsx";
+import SqlResults from "../widgets/sql_result.js";
export default class DesktopLayout {
@@ -140,7 +141,7 @@ export default class DesktopLayout {
.child(new NoteDetailWidget())
.child(new NoteListWidget(false))
.child(
").text(JSON.stringify(rows, null, "\t"))); - - continue; - } - - if (!rows.length) { - continue; - } - - const $table = $('
").text(key)); - } - - $table.append($row); - - for (const result of rows) { - const $row = $(" | ||
---|---|---|
").text(result[key]));
- }
-
- $table.append($row);
- }
- }
- }
-}
diff --git a/apps/client/src/widgets/sql_result.tsx b/apps/client/src/widgets/sql_result.tsx
new file mode 100644
index 000000000..760651774
--- /dev/null
+++ b/apps/client/src/widgets/sql_result.tsx
@@ -0,0 +1,62 @@
+import { SqlExecuteResults } from "@triliumnext/commons";
+import { useNoteContext, useTriliumEvent } from "./react/hooks";
+import "./sql_result.css";
+import { useState } from "preact/hooks";
+import Alert from "./react/Alert";
+import { t } from "../services/i18n";
+
+export default function SqlResults() {
+ const { note, ntxId } = useNoteContext();
+ const [ results, setResults ] = useState
+ {note?.mime === "text/x-sqlite;schema=trilium" && (
+ results?.length === 1 && Array.isArray(results[0]) && results[0].length === 0 ? (
+
+ )
+}
+
+function SqlResultTable({ rows }: { rows: object[] }) {
+ if (!rows.length) return;
+
+ return (
+
+ {results?.map(rows => {
+ // inserts, updates
+ if (typeof rows === "object" && !Array.isArray(rows)) {
+ return
+ )
+ )}
+ {JSON.stringify(rows, null, "\t")}+ } + + // selects + return
|