${selectedLibrary ? getLibraryName(libraries, selectedLibrary) : selectedTag ? `#${selectedTag}` : 'All Documents'}
No documents found
${searchQuery || selectedTag ? 'Try adjusting your filters' : 'Create your first document'}
// Dashboard View
import { api } from '../api.js';
import { renderSidebar } from '../components/sidebar.js';
export async function renderDashboard(app) {
let documents = [];
let libraries = [];
let tags = [];
let searchQuery = '';
let selectedTag = app.state.selectedTag || null;
let selectedLibrary = app.state.selectedLibrary || null;
try {
[documents, libraries, tags] = await Promise.all([
api.getDocuments(),
api.getLibraries(),
api.getTags()
]);
} catch (e) {
app.showToast('Failed to load data', 'error');
}
const appEl = document.getElementById('app');
function render() {
// Store callbacks for sidebar event handlers
const sidebarCallbacks = {
onSelectLibrary: (id) => {
selectedLibrary = id;
selectedTag = null;
app.state.selectedLibrary = id;
app.state.selectedTag = null;
render();
},
onSelectTag: (tag) => {
selectedTag = tag;
selectedLibrary = null;
app.state.selectedTag = tag;
app.state.selectedLibrary = null;
render();
},
onHome: () => {
selectedTag = null;
selectedLibrary = null;
app.state.selectedTag = null;
app.state.selectedLibrary = null;
render();
}
};
window.__sidebarCallbacks = sidebarCallbacks;
let filteredDocs = documents;
if (searchQuery) {
const q = searchQuery.toLowerCase();
filteredDocs = filteredDocs.filter(d =>
d.title.toLowerCase().includes(q) ||
(d.content && d.content.toLowerCase().includes(q))
);
}
if (selectedTag) {
filteredDocs = filteredDocs.filter(d =>
d.tags && d.tags.includes(selectedTag)
);
}
if (selectedLibrary) {
filteredDocs = filteredDocs.filter(d =>
d.libraryId === selectedLibrary
);
}
appEl.innerHTML = `
${searchQuery || selectedTag ? 'Try adjusting your filters' : 'Create your first document'}