From d069939c6bf43c2bc83a4d52e00166570fe19294 Mon Sep 17 00:00:00 2001 From: Andras Schmelczer Date: Sat, 4 Jan 2025 17:04:50 +0000 Subject: [PATCH] Fix logs UX --- plugin/src/database/database.ts | 2 +- plugin/src/styles.scss | 4 +- plugin/src/views/logs-view.ts | 66 +++++++++++++++++++-------------- 3 files changed, 43 insertions(+), 29 deletions(-) diff --git a/plugin/src/database/database.ts b/plugin/src/database/database.ts index e242f41..6e548d9 100644 --- a/plugin/src/database/database.ts +++ b/plugin/src/database/database.ts @@ -88,7 +88,7 @@ export class Database { key: T, value: SyncSettings[T] ): Promise { - let newSettings = { ...this._settings, [key]: value }; + const newSettings = { ...this._settings, [key]: value }; Logger.getInstance().debug( `Setting ${key} to ${value}, new settings: ${JSON.stringify( newSettings, diff --git a/plugin/src/styles.scss b/plugin/src/styles.scss index 2db2e63..4751333 100644 --- a/plugin/src/styles.scss +++ b/plugin/src/styles.scss @@ -86,8 +86,10 @@ } .logs-view { + display: flex; + flex-direction: column; + .logs-container { - max-height: 100%; max-width: 100%; overflow-y: auto; diff --git a/plugin/src/views/logs-view.ts b/plugin/src/views/logs-view.ts index 3671de9..c94e68d 100644 --- a/plugin/src/views/logs-view.ts +++ b/plugin/src/views/logs-view.ts @@ -1,8 +1,8 @@ import type { WorkspaceLeaf } from "obsidian"; import { ItemView } from "obsidian"; import type VaultLinkPlugin from "src/vault-link-plugin"; -import { LogLevel, Logger } from "src/tracing/logger"; -import { Database } from "src/database/database"; +import { Logger } from "src/tracing/logger"; +import type { Database } from "src/database/database"; export class LogsView extends ItemView { public static readonly TYPE = "logs-view"; @@ -43,17 +43,18 @@ export class LogsView extends ItemView { const container = this.containerEl.children[1]; container.addClass("logs-view"); - - const logsContainer = container - .getElementsByClassName("logs-container") - .item(0); - if (logsContainer) { - logsContainer.scrollTop = logsContainer.scrollHeight; - } } private updateView(): void { const container = this.containerEl.children[1]; + + let logsContainer = container + .getElementsByClassName("logs-container") + .item(0); + const scrollPosition = logsContainer?.scrollTop; + + console.log(scrollPosition); + container.empty(); container.createEl("h4", { text: "VaultLink logs" }); @@ -88,23 +89,34 @@ export class LogsView extends ItemView { return; } - container.createDiv({ cls: "logs-container" }, (logsContainer) => { - logs.forEach((message) => - logsContainer.createDiv( - { - cls: ["log-message", message.level], - }, - (messageContainer) => { - messageContainer.createEl("span", { - text: LogsView.formatTimestamp(message.timestamp), - cls: "timestamp", - }); - messageContainer.createEl("span", { - text: message.message, - }); - } - ) - ); - }); + logsContainer = container.createDiv( + { cls: "logs-container" }, + (logsContainer) => { + logs.slice(-100).forEach((message) => + logsContainer.createDiv( + { + cls: ["log-message", message.level], + }, + (messageContainer) => { + messageContainer.createEl("span", { + text: LogsView.formatTimestamp( + message.timestamp + ), + cls: "timestamp", + }); + messageContainer.createEl("span", { + text: message.message, + }); + } + ) + ); + } + ); + + if (scrollPosition) { + logsContainer.scrollTop = scrollPosition; + } else { + logsContainer.scrollTop = logsContainer.scrollHeight; + } } }