feat(assistant): #94-#97 historique permanent, sidebar IA, panneau + et bouton rond
This commit is contained in:
+76
-1
@@ -147,6 +147,73 @@ function initRecentTab() {
|
||||
_recentTimestampTimer = setInterval(_refreshRecentTimestamps, 60000);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// AI history sidebar tab (#96)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
function _formatAIDate(ts) {
|
||||
if (!ts) return "";
|
||||
try {
|
||||
return new Date(ts).toLocaleString();
|
||||
} catch {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
export async function loadAISessionList() {
|
||||
const listEl = document.getElementById("ai-history-list");
|
||||
const emptyEl = document.getElementById("ai-history-empty");
|
||||
if (!listEl) return;
|
||||
let sessions = [];
|
||||
try {
|
||||
const data = await api("/api/ai/bookslm/history");
|
||||
sessions = data.sessions || [];
|
||||
} catch (err) {
|
||||
console.error("Failed to load AI history:", err);
|
||||
}
|
||||
renderAIHistoryList(sessions);
|
||||
}
|
||||
|
||||
function renderAIHistoryList(sessions) {
|
||||
const listEl = document.getElementById("ai-history-list");
|
||||
const emptyEl = document.getElementById("ai-history-empty");
|
||||
if (!listEl) return;
|
||||
listEl.innerHTML = "";
|
||||
|
||||
if (!sessions || sessions.length === 0) {
|
||||
if (emptyEl) {
|
||||
emptyEl.classList.remove("hidden");
|
||||
safeCreateIcons();
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (emptyEl) emptyEl.classList.add("hidden");
|
||||
|
||||
sessions.forEach((s) => {
|
||||
const item = el("div", { class: "recent-item", "data-session-id": s.id });
|
||||
const header = el("div", { class: "recent-item-header" });
|
||||
const timeSpan = el("span", { class: "recent-time" }, [icon("clock", 11), document.createTextNode(_formatAIDate(s.updatedAt))]);
|
||||
header.appendChild(timeSpan);
|
||||
header.appendChild(el("span", { class: "recent-vault-badge" }, [document.createTextNode(t("bookslm.mode_" + (s.mode || "general"))) ]));
|
||||
item.appendChild(header);
|
||||
|
||||
const titleEl = el("div", { class: "recent-item-title" }, [document.createTextNode(s.title || t("bookslm.untitled"))]);
|
||||
item.appendChild(titleEl);
|
||||
|
||||
if (s.preview) {
|
||||
item.appendChild(el("div", { class: "recent-item-preview" }, [document.createTextNode(s.preview)]));
|
||||
}
|
||||
|
||||
item.addEventListener("click", () => {
|
||||
closeMobileSidebar();
|
||||
import("./bookslm.js").then((m) => m.default.openWithSession(s.id)).catch((e) => console.error(e));
|
||||
});
|
||||
|
||||
listEl.appendChild(item);
|
||||
});
|
||||
safeCreateIcons();
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Sidebar tabs
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -154,6 +221,10 @@ function initSidebarTabs() {
|
||||
document.querySelectorAll(".sidebar-tab").forEach((tab) => {
|
||||
tab.addEventListener("click", () => switchSidebarTab(tab.dataset.tab));
|
||||
});
|
||||
// #96 — Refresh the sidebar AI history list whenever a conversation changes.
|
||||
window.addEventListener("bookslm:history-updated", () => {
|
||||
if (state.activeSidebarTab === "ai") loadAISessionList();
|
||||
});
|
||||
}
|
||||
|
||||
function switchSidebarTab(tab) {
|
||||
@@ -169,7 +240,7 @@ function switchSidebarTab(tab) {
|
||||
});
|
||||
const filterInput = document.getElementById("sidebar-filter-input");
|
||||
if (filterInput) {
|
||||
const placeholders = { vaults: "Filtrer fichiers...", tags: "Filtrer tags...", recent: "" };
|
||||
const placeholders = { vaults: "Filtrer fichiers...", tags: "Filtrer tags...", recent: "", ai: "" };
|
||||
filterInput.placeholder = placeholders[tab] || "";
|
||||
}
|
||||
const query = filterInput ? (state.sidebarFilterCaseSensitive ? filterInput.value.trim() : filterInput.value.trim().toLowerCase()) : "";
|
||||
@@ -183,6 +254,10 @@ function switchSidebarTab(tab) {
|
||||
const vaultFilter = document.getElementById("recent-vault-filter");
|
||||
loadRecentFiles(vaultFilter ? vaultFilter.value || null : null);
|
||||
}
|
||||
// #96 — Auto-load the AI conversation history when entering its tab.
|
||||
if (tab === "ai") {
|
||||
loadAISessionList();
|
||||
}
|
||||
}
|
||||
|
||||
function initHelpModal() {
|
||||
|
||||
Reference in New Issue
Block a user