2021-10-29 20:11:23 +02:00
/ *
* Copyright ( C ) Contributors to the Suwayomi project
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License , v . 2.0 . If a copy of the MPL was not distributed with this
* file , You can obtain one at https : //mozilla.org/MPL/2.0/.
* /
import React from 'react' ;
import FilterListIcon from '@mui/icons-material/FilterList' ;
2022-02-24 06:16:21 +00:00
import SortIcon from '@mui/icons-material/Sort' ;
2021-10-29 20:11:23 +02:00
import { Drawer , FormControlLabel , IconButton } from '@mui/material' ;
2021-10-30 16:10:34 +03:30
import useLibraryOptions from 'util/useLibraryOptions' ;
import ThreeStateCheckbox from 'components/util/ThreeStateCheckbox' ;
2022-02-24 06:16:21 +00:00
import Switch from '@mui/material/Switch' ;
import Radio from '@mui/material/Radio' ;
2021-11-15 19:33:04 +03:30
import { Box } from '@mui/system' ;
2021-10-29 20:11:23 +02:00
function Options() {
2021-11-07 15:59:48 +05:30
const {
downloaded , setDownloaded , unread , setUnread ,
} = useLibraryOptions ( ) ;
2021-10-29 20:11:23 +02:00
return (
2021-11-15 19:33:04 +03:30
< Box sx = { { display : 'flex' , flexDirection : 'column' } } >
2021-10-29 20:11:23 +02:00
< FormControlLabel control = { < ThreeStateCheckbox name = "Unread" checked = { unread } onChange = { setUnread } / > } label = "Unread" / >
2021-11-07 15:59:48 +05:30
< FormControlLabel control = { < ThreeStateCheckbox name = "Downloaded" checked = { downloaded } onChange = { setDownloaded } / > } label = "Downloaded" / >
2021-11-15 19:33:04 +03:30
< / Box >
2021-10-29 20:11:23 +02:00
) ;
}
2022-02-24 06:16:21 +00:00
function SortOptions() {
const {
sorts , setSorts , sortDesc , setSortDesc ,
} = useLibraryOptions ( ) ;
const handleSortChange = ( name : string ) = > ( event : { target : { checked : boolean ; } ; } ) = > {
setSorts ( event . target . checked ? name : undefined ) ;
} ;
const handleOrderChange = ( ) = > ( event : { target : { checked : boolean ; } ; } ) = > {
setSortDesc ( event . target . checked ) ;
} ;
return (
< Box sx = { { display : 'flex' , flexDirection : 'column' } } >
< FormControlLabel control = { < Switch name = "sortDesc" checked = { sortDesc === true } onChange = { handleOrderChange ( ) } color = "default" / > } label = "Asc/Desc" / >
< FormControlLabel control = { < Radio name = "sortToRead" checked = { sorts === 'sortToRead' } onChange = { handleSortChange ( 'sortToRead' ) } / > } label = "Sort by left to read" / >
< FormControlLabel control = { < Radio name = "sortAlph" checked = { sorts === 'sortAlph' } onChange = { handleSortChange ( 'sortAlph' ) } / > } label = "Sort alphbetical" / >
< FormControlLabel control = { < Radio name = "sortID" checked = { sorts === 'sortID' || sorts === undefined } onChange = { handleSortChange ( 'sortID' ) } / > } label = "Sort by ID" / >
< / Box >
) ;
}
2021-10-29 20:11:23 +02:00
export default function LibraryOptions() {
const [ filtersOpen , setFiltersOpen ] = React . useState ( false ) ;
2022-02-24 06:16:21 +00:00
const [ sortsOpen , setSortsOpen ] = React . useState ( false ) ;
2021-10-29 20:11:23 +02:00
const { active } = useLibraryOptions ( ) ;
return (
< >
< IconButton
onClick = { ( ) = > setFiltersOpen ( ! filtersOpen ) }
color = { active ? 'warning' : 'default' }
>
< FilterListIcon / >
< / IconButton >
< Drawer
anchor = "bottom"
open = { filtersOpen }
onClose = { ( ) = > setFiltersOpen ( false ) }
PaperProps = { {
style : {
maxWidth : 600 , padding : '1em' , marginLeft : 'auto' , marginRight : 'auto' ,
} ,
} }
>
< Options / >
< / Drawer >
2022-02-24 06:16:21 +00:00
< IconButton
onClick = { ( ) = > setSortsOpen ( ! filtersOpen ) }
color = { active ? 'warning' : 'default' }
>
< SortIcon / >
< / IconButton >
< Drawer
anchor = "bottom"
open = { sortsOpen }
onClose = { ( ) = > setSortsOpen ( false ) }
PaperProps = { {
style : {
maxWidth : 600 , padding : '1em' , marginLeft : 'auto' , marginRight : 'auto' ,
} ,
} }
>
< SortOptions / >
< / Drawer >
2021-10-29 20:11:23 +02:00
< / >
) ;
}