import type { EventData } from "../components/app_context.js";
import { t } from "../services/i18n.js";
import NoteContextAwareWidget from "./note_context_aware_widget.js";
const TPL = /*html*/`
`;
export default class SqlResultWidget extends NoteContextAwareWidget {
private $resultContainer!: JQuery;
private $noRowsAlert!: JQuery;
isEnabled() {
return this.note && this.note.mime === "text/x-sqlite;schema=trilium" && super.isEnabled();
}
doRender() {
this.$widget = $(TPL);
this.$resultContainer = this.$widget.find(".sql-console-result-container");
this.$noRowsAlert = this.$widget.find(".sql-query-no-rows");
}
async sqlQueryResultsEvent({ ntxId, results }: EventData<"sqlQueryResults">) {
if (!this.isNoteContext(ntxId)) {
return;
}
this.$noRowsAlert.toggle(results.length === 1 && results[0].length === 0);
this.$resultContainer.toggle(results.length > 1 || results[0].length > 0);
this.$resultContainer.empty();
for (const rows of results) {
if (typeof rows === "object" && !Array.isArray(rows)) {
// inserts, updates
this.$resultContainer
.empty()
.show()
.append($("").text(JSON.stringify(rows, null, "\t")));
continue;
}
if (!rows.length) {
continue;
}
const $table = $('
');
this.$resultContainer.append($table);
const result = rows[0];
const $row = $("");
for (const key in result) {
$row.append($("").text(key));
}
$table.append($row);
for (const result of rows) {
const $row = $(" |
");
for (const key in result) {
$row.append($("").text(result[key]));
}
$table.append($row);
}
}
}
}
|