diff --git a/src/routes/Library/Library.js b/src/routes/Library/Library.js
index 9ea48e5ff..abbb0b136 100644
--- a/src/routes/Library/Library.js
+++ b/src/routes/Library/Library.js
@@ -1,4 +1,5 @@
const React = require('react');
+const UrlUtils = require('url');
const classnames = require('classnames');
const { Button, Multiselect, MainNavBar, MetaItem } = require('stremio/common');
const useUser = require('stremio/common/useUser');
@@ -8,11 +9,25 @@ const styles = require('./styles');
const Library = ({ urlParams, queryParams }) => {
const user = useUser();
- const [metaItems, selectTypeInput, error] = useLibrary(urlParams);
+ const [selectedType, typeNames, libItems] = useLibrary(urlParams);
const [selectSortInput, sortFunction] = useSort(urlParams, queryParams);
const loginButtonOnClick = React.useCallback(() => {
window.location.replace('#/intro');
}, []);
+ const selectTypeInput = React.useMemo(() => {
+ return {
+ selected: [selectedType],
+ options: typeNames
+ .map((type) => ({
+ label: type === '' ? '"Empty"' : type,
+ value: type
+ })),
+ onSelect: (event) => {
+ const { search } = UrlUtils.parse(window.location.hash.slice(1));
+ window.location.replace(`#/library/${event.value}${search !== null ? search : ''}`);
+ }
+ }
+ }, [selectedType, typeNames]);
return (
@@ -36,27 +51,26 @@ const Library = ({ urlParams, queryParams }) => {
:
- error !== null ?
-
- {error}
-
- :
- Array.isArray(metaItems) ?
+ selectedType !== null ?
+ libItems.length > 0 ?
- {
- metaItems
- .sort(sortFunction)
- .map(({ removed, temp, ...metaItem }, index) => (
-
- ))}
+ {libItems
+ .sort(sortFunction)
+ .map(({ removed, temp, ...libItem }, index) => (
+
+ ))}
:
- Loading
+ Empty library
+ :
+
+ Loading
+
}
diff --git a/src/routes/Library/useLibrary.js b/src/routes/Library/useLibrary.js
index 8642cf25a..be70a145a 100644
--- a/src/routes/Library/useLibrary.js
+++ b/src/routes/Library/useLibrary.js
@@ -1,10 +1,9 @@
const React = require('react');
-const UrlUtils = require('url');
const { useServices } = require('stremio/services');
const useLibrary = (urlParams) => {
const { core } = useServices();
- const [library, setLibrary] = React.useState([[], null, null]);
+ const [library, setLibrary] = React.useState([null, [], []]);
React.useEffect(() => {
const onNewState = () => {
const state = core.getState();
@@ -20,20 +19,7 @@ const useLibrary = (urlParams) => {
});
return;
}
- const selectInput = {
- selected: [state.library.selected.type_name],
- options: state.library.type_names
- .map((type) => ({
- label: type === '' ? '"Empty"' : type,
- value: type
- })),
- onSelect: (event) => {
- const { search } = UrlUtils.parse(window.location.hash.slice(1));
- window.location.replace(`#/library/${event.value}${search !== null ? search : ''}`);
- }
- };
- const error = state.library.library_state.type !== 'Ready' ? state.library.library_state.type : null;
- setLibrary([state.library.lib_items, selectInput, error]);
+ setLibrary([state.library.selected.type_name, state.library.type_names, state.library.lib_items]);
};
core.on('NewModel', onNewState);
const state = core.getState();