Options panels refactoring (#196)
* Refactor library options to match chapter options using shared component * Disable some eslint rules * Cleanup SourceOptions layout to use same components as other panels
This commit is contained in:
@@ -5,44 +5,22 @@
|
||||
* 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 LibraryOptionsContext, { DefaultLibraryOptions } from 'components/context/LibraryOptionsContext';
|
||||
import React from 'react';
|
||||
import useLocalStorage from 'util/useLocalStorage';
|
||||
|
||||
interface IProps {
|
||||
children: React.ReactNode;
|
||||
}
|
||||
|
||||
export default function LibraryOptionsContextProvider({ children }: IProps) {
|
||||
const LibraryOptionsContextProvider: React.FC<IProps> = ({ children }) => {
|
||||
const [options, setOptions] = useLocalStorage<LibraryOptions>('libraryOptions', DefaultLibraryOptions);
|
||||
|
||||
function setOption<Name extends keyof LibraryOptions>(
|
||||
option: Name,
|
||||
value: React.SetStateAction<LibraryOptions[Name]>,
|
||||
) {
|
||||
setOptions((opts) => ({
|
||||
...opts,
|
||||
[option]: typeof value === 'function' ? value(opts[option]) : value,
|
||||
}));
|
||||
}
|
||||
|
||||
// TODO remove these fields when we have a better way to handle them
|
||||
// eslint-disable-next-line eqeqeq
|
||||
const active = !(options.unread == undefined) || !(options.downloaded == undefined);
|
||||
// eslint-disable-next-line eqeqeq
|
||||
const activeSort = (options.sortDesc != undefined) || (options.sorts != undefined);
|
||||
|
||||
return (
|
||||
<LibraryOptionsContext.Provider
|
||||
value={{
|
||||
options,
|
||||
setOption,
|
||||
setOptions,
|
||||
active,
|
||||
activeSort,
|
||||
}}
|
||||
>
|
||||
<LibraryOptionsContext.Provider value={{ options, setOptions }}>
|
||||
{children}
|
||||
</LibraryOptionsContext.Provider>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
export default LibraryOptionsContextProvider;
|
||||
|
||||
Reference in New Issue
Block a user