mirror of
https://github.com/Stremio/stremio-web.git
synced 2026-03-28 17:08:46 +00:00
60 lines
1.7 KiB
JavaScript
60 lines
1.7 KiB
JavaScript
const React = require('react');
|
|
const { useServices } = require('stremio/services');
|
|
const useModelState = require('stremio/common/useModelState');
|
|
|
|
const useInLibrary = (metaItem) => {
|
|
const { core } = useServices();
|
|
const initLibraryItemsState = React.useCallback(() => {
|
|
return core.getState('library_items');
|
|
}, []);
|
|
const libraryItems = useModelState({
|
|
model: 'library_items',
|
|
init: initLibraryItemsState
|
|
});
|
|
const addToLibrary = React.useCallback((metaItem) => {
|
|
core.dispatch({
|
|
action: 'UserOp',
|
|
args: {
|
|
userOp: 'AddToLibrary',
|
|
args: {
|
|
meta_item: metaItem,
|
|
now: new Date()
|
|
}
|
|
}
|
|
});
|
|
}, []);
|
|
const removeFromLibrary = React.useCallback((id) => {
|
|
core.dispatch({
|
|
action: 'UserOp',
|
|
args: {
|
|
userOp: 'RemoveFromLibrary',
|
|
args: {
|
|
id,
|
|
now: new Date()
|
|
}
|
|
}
|
|
});
|
|
}, []);
|
|
const inLibrary = React.useMemo(() => {
|
|
return typeof metaItem === 'object' && metaItem !== null ?
|
|
libraryItems.ids.includes(metaItem.id)
|
|
:
|
|
false;
|
|
}, [metaItem, libraryItems]);
|
|
const toggleInLibrary = React.useMemo(() => {
|
|
if (typeof metaItem !== 'object' || metaItem === null) {
|
|
return null;
|
|
}
|
|
|
|
return () => {
|
|
if (inLibrary) {
|
|
removeFromLibrary(metaItem.id);
|
|
} else {
|
|
addToLibrary(metaItem);
|
|
}
|
|
};
|
|
}, [metaItem, inLibrary]);
|
|
return [inLibrary, toggleInLibrary];
|
|
};
|
|
|
|
module.exports = useInLibrary;
|