feat(frontend): integrate shared library switcher into all pages
Wire up the shared library switcher module on dashboard, collections list, collection detail, and collection rules pages. All pages use SSR for initial load and AJAX with fade transitions on library switch. web/src/collections.ts: - Add initCollectionsPage() that auto-detects list vs detail page by checking for #collection-data element - Collections list: onSwitch fetches /api/collections?library_id=X and re-renders the grid with per-library book counts - Collection detail: onSwitch fetches /api/collections/:id?library_id=X and re-renders the books grid - Add renderCollectionsGrid() and renderCollectionBooks() with Alpine.initTree() calls for dynamic content - Collection cards now link with ?library_id= from selected library - Update hidden #collection-data data-library-id on switch web/src/dashboard.ts: - Replace standalone switchLibrary() with initLibrarySwitcher() + switchWithTransition() from shared module - Extract fetchAndRenderSections() helper shared by onSwitch callback, reloadPage(), and saveDashboardSettings() - Remove inline #library-select change listener and switch-library data-action handler (now handled by shared module) - Scan-complete event handler unchanged (independent incremental logic) web/src/collection-rules.ts: - Update backToCollection() to preserve library context by appending ?library_id= from localStorage selectedLibrary key
This commit is contained in:
@@ -37,7 +37,11 @@ function setupEventDelegation(): void {
|
||||
|
||||
function backToCollection(): void {
|
||||
if (!collectionId) return;
|
||||
window.location.href = `/collections/${collectionId}`;
|
||||
const libraryId = localStorage.getItem("selectedLibrary");
|
||||
const url = libraryId
|
||||
? `/collections/${collectionId}?library_id=${libraryId}`
|
||||
: `/collections/${collectionId}`;
|
||||
window.location.href = url;
|
||||
}
|
||||
|
||||
function getFieldLabel(field: string): string {
|
||||
|
||||
Reference in New Issue
Block a user