@@ -3,32 +3,57 @@ import React, { type FC, useCallback, useState } from 'react';
33import './BookOsd.scss' ;
44import IconButton from '../../../elements/emby-button/IconButton' ;
55import globalize from 'lib/globalize' ;
6+ import * as userSettings from '../../../scripts/settings/userSettings' ;
7+ import type { BaseItemDto } from '@jellyfin/sdk/lib/generated-client' ;
68
79interface BookOsdProps {
8- title : string ;
10+ item : BaseItemDto ;
911 onExit : ( ) => void ;
1012 onPrevious : ( ) => void ;
1113 onNext : ( ) => void ;
1214 onOpenTableOfContents ?: ( ) => void ;
1315 onRotateTheme ?: ( ) => void ;
1416 onDecreaseFontSize ?: ( ) => void ;
1517 onIncreaseFontSize ?: ( ) => void ;
18+ onToggleDirection ?: ( ) => void ;
19+ onToggleLayout ?: ( ) => void ;
1620 onToggleFullscreen ?: ( ) => void ;
1721}
1822
23+ interface ComicsPlayerSettings {
24+ langDir ?: string ;
25+ pagesPerView ?: number ;
26+ }
27+
1928const BookOsd : FC < BookOsdProps > = ( {
20- title ,
29+ item ,
2130 onExit,
2231 onPrevious,
2332 onNext,
2433 onOpenTableOfContents,
2534 onRotateTheme,
2635 onDecreaseFontSize,
2736 onIncreaseFontSize,
37+ onToggleDirection,
38+ onToggleLayout,
2839 onToggleFullscreen
2940} ) => {
41+ const settings = userSettings . getComicsPlayerSettings ( item . Id ! ) as ComicsPlayerSettings ;
42+
43+ const [ direction , setDirection ] = useState ( settings . langDir === 'rtl' ) ;
44+ const [ layout , setLayout ] = useState ( settings . pagesPerView === 2 ) ;
3045 const [ fullscreen , setFullscreen ] = useState ( false ) ;
3146
47+ const onClickDirection = useCallback ( ( ) => {
48+ onToggleDirection ?.( ) ;
49+ setDirection ( state => ! state ) ;
50+ } , [ onToggleDirection ] ) ;
51+
52+ const onClickLayout = useCallback ( ( ) => {
53+ onToggleLayout ?.( ) ;
54+ setLayout ( state => ! state ) ;
55+ } , [ onToggleLayout ] ) ;
56+
3257 const onClickFullscreen = useCallback ( ( ) => {
3358 onToggleFullscreen ?.( ) ;
3459 setFullscreen ( state => ! state ) ;
@@ -38,19 +63,19 @@ const BookOsd: FC<BookOsdProps> = ({
3863 < div className = 'bookOsd' >
3964 < div className = 'bookOsdRow bookOsdTop' >
4065 < IconButton onClick = { onExit } icon = 'arrow_back' title = { globalize . translate ( 'ButtonBack' ) } />
41- < span className = 'bookOsdTitle' > { title } </ span >
66+ < span className = 'bookOsdTitle' > { item . Name } </ span >
4267 </ div >
4368
4469 < div className = 'bookOsdRow bookOsdBottom' >
4570 < IconButton onClick = { onPrevious } icon = 'navigate_before' title = { globalize . translate ( 'Previous' ) } />
4671 < IconButton onClick = { onNext } icon = 'navigate_next' title = { globalize . translate ( 'Next' ) } />
72+ < div className = 'bookOsdSpacer' />
4773
4874 { onOpenTableOfContents && (
4975 < IconButton
5076 onClick = { onOpenTableOfContents }
5177 icon = 'toc'
5278 title = { globalize . translate ( 'TableOfContents' ) }
53- className = 'bookOsdMargin'
5479 />
5580 ) }
5681
@@ -78,6 +103,22 @@ const BookOsd: FC<BookOsdProps> = ({
78103 />
79104 ) }
80105
106+ { onToggleDirection && (
107+ < IconButton
108+ onClick = { onClickDirection }
109+ icon = { direction ? 'arrow_circle_left' : 'arrow_circle_right' }
110+ title = { globalize . translate ( direction ? 'ViewRightToLeft' : 'ViewLeftToRight' ) }
111+ />
112+ ) }
113+
114+ { onToggleLayout && (
115+ < IconButton
116+ onClick = { onClickLayout }
117+ icon = { layout ? 'import_contacts' : 'devices_fold' }
118+ title = { globalize . translate ( layout ? 'ViewDoublePage' : 'ViewSinglePage' ) }
119+ />
120+ ) }
121+
81122 { onToggleFullscreen && (
82123 < IconButton
83124 onClick = { onClickFullscreen }
0 commit comments