mirror of
https://github.com/Radarr/Radarr
synced 2026-01-26 09:23:39 +01:00
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:
parent
82f3d2da51
commit
b4009132d1
6 changed files with 92 additions and 0 deletions
|
|
@ -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
|
||||
*/}
|
||||
|
|
|
|||
20
frontend/src/Audiobook/Index/AudiobookIndex.tsx
Normal file
20
frontend/src/Audiobook/Index/AudiobookIndex.tsx
Normal 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;
|
||||
20
frontend/src/Book/Index/BookIndex.tsx
Normal file
20
frontend/src/Book/Index/BookIndex.tsx
Normal 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;
|
||||
|
|
@ -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'),
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
Loading…
Reference in a new issue