feat(ui): add Books and Audiobooks navigation sections (#121)

Add navigation sidebar entries for Books and Audiobooks with:
- New BOOK and AUDIOBOOK icons in props
- Books/Audiobooks sections in PageSidebar with Add New/Import children
- Routes for /books and /audiobooks paths
- Placeholder index pages for both media types
- Translation strings for Books/Audiobooks

Part of Phase 3 UI work for Issue #7.

Co-authored-by: admin <admin@ardentleatherworks.com>
This commit is contained in:
Cody Kickertz 2025-12-21 19:51:31 -06:00 committed by GitHub
parent 82f3d2da51
commit b4009132d1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 92 additions and 0 deletions

View file

@ -5,6 +5,8 @@ import History from 'Activity/History/History';
import Queue from 'Activity/Queue/Queue';
import AddNewMovieConnector from 'AddMovie/AddNewMovie/AddNewMovieConnector';
import ImportMovies from 'AddMovie/ImportMovie/ImportMovies';
import AudiobookIndex from 'Audiobook/Index/AudiobookIndex';
import BookIndex from 'Book/Index/BookIndex';
import CalendarPage from 'Calendar/CalendarPage';
import CollectionConnector from 'Collection/CollectionConnector';
import NotFound from 'Components/NotFound';
@ -69,6 +71,18 @@ function AppRoutes() {
<Route path="/movie/:titleSlug" component={MovieDetailsPage} />
{/*
Books
*/}
<Route exact={true} path="/books" component={BookIndex} />
{/*
Audiobooks
*/}
<Route exact={true} path="/audiobooks" component={AudiobookIndex} />
{/*
Calendar
*/}

View file

@ -0,0 +1,20 @@
import React from 'react';
import PageContent from 'Components/Page/PageContent';
import PageContentBody from 'Components/Page/PageContentBody';
import translate from 'Utilities/String/translate';
function AudiobookIndex() {
return (
<PageContent title={translate('Audiobooks')}>
<PageContentBody>
<div style={{ padding: '20px', textAlign: 'center' }}>
<h1>{translate('Audiobooks')}</h1>
<p>Audiobook management coming soon.</p>
<p>This feature is part of Phase 3 development.</p>
</div>
</PageContentBody>
</PageContent>
);
}
export default AudiobookIndex;

View file

@ -0,0 +1,20 @@
import React from 'react';
import PageContent from 'Components/Page/PageContent';
import PageContentBody from 'Components/Page/PageContentBody';
import translate from 'Utilities/String/translate';
function BookIndex() {
return (
<PageContent title={translate('Books')}>
<PageContentBody>
<div style={{ padding: '20px', textAlign: 'center' }}>
<h1>{translate('Books')}</h1>
<p>Book management coming soon.</p>
<p>This feature is part of Phase 3 development.</p>
</div>
</PageContentBody>
</PageContent>
);
}
export default BookIndex;

View file

@ -69,6 +69,38 @@ const LINKS: SidebarItem[] = [
],
},
{
iconName: icons.BOOK,
title: () => translate('Books'),
to: '/books',
children: [
{
title: () => translate('AddNew'),
to: '/books/add/new',
},
{
title: () => translate('ImportLibrary'),
to: '/books/add/import',
},
],
},
{
iconName: icons.AUDIOBOOK,
title: () => translate('Audiobooks'),
to: '/audiobooks',
children: [
{
title: () => translate('AddNew'),
to: '/audiobooks/add/new',
},
{
title: () => translate('ImportLibrary'),
to: '/audiobooks/add/import',
},
],
},
{
iconName: icons.CALENDAR,
title: () => translate('Calendar'),

View file

@ -32,6 +32,7 @@ import {
faBan as fasBan,
faBars as fasBars,
faBolt as fasBolt,
faBook as fasBook,
faBookmark as fasBookmark,
faBookReader as fasBookReader,
faBroadcastTower as fasBroadcastTower,
@ -73,6 +74,7 @@ import {
faFolderOpen as fasFolderOpen,
faFolderTree as farFolderTree,
faForward as fasForward,
faHeadphones as fasHeadphones,
faHeart as fasHeart,
faHistory as fasHistory,
faHome as fasHome,
@ -129,6 +131,7 @@ export const ACTIVITY = farClock;
export const ADD = fasPlus;
export const ALTERNATE_TITLES = farClone;
export const ADVANCED_SETTINGS = fasCog;
export const AUDIOBOOK = fasHeadphones;
export const ANNOUNCED = fasBullhorn;
export const ARROW_LEFT = fasArrowCircleLeft;
export const ARROW_RIGHT = fasArrowCircleRight;
@ -252,3 +255,4 @@ export const VIEW = fasEye;
export const WARNING = fasExclamationTriangle;
export const WIKI = fasBookReader;
export const BLOCKLIST = fasBan;
export const BOOK = fasBook;

View file

@ -98,6 +98,7 @@
"AudioInfo": "Audio Info",
"AudioLanguages": "Audio Languages",
"Audiobook": "Audiobook",
"Audiobooks": "Audiobooks",
"AuthBasic": "Basic (Browser Popup)",
"AuthForm": "Forms (Login Page)",
"Authentication": "Authentication",
@ -165,6 +166,7 @@
"Blocklisted": "Blocklisted",
"BlocklistedAt": "Blocklisted at {date}",
"Book": "Book",
"Books": "Books",
"Branch": "Branch",
"BranchUpdate": "Branch to use to update {appName}",
"BranchUpdateMechanism": "Branch used by external update mechanism",