diff --git a/src/common/index.js b/src/common/index.js index 82e46f1e1..1ab27a461 100644 --- a/src/common/index.js +++ b/src/common/index.js @@ -32,11 +32,11 @@ const useDeepEqualEffect = require('./useDeepEqualEffect'); const useDeepEqualMemo = require('./useDeepEqualMemo'); const useDeepEqualState = require('./useDeepEqualState'); const useFullscreen = require('./useFullscreen'); -const useInLibrary = require('./useInLibrary'); const useLiveRef = require('./useLiveRef'); const useModelState = require('./useModelState'); const useProfile = require('./useProfile'); const useStreamingServer = require('./useStreamingServer'); +const useToggleInLibrary = require('./useToggleInLibrary'); module.exports = { AddonDetailsModal, @@ -73,9 +73,9 @@ module.exports = { useDeepEqualMemo, useDeepEqualState, useFullscreen, - useInLibrary, useLiveRef, useModelState, useProfile, useStreamingServer, + useToggleInLibrary, }; diff --git a/src/common/useInLibrary.js b/src/common/useInLibrary.js deleted file mode 100644 index ff4107b8e..000000000 --- a/src/common/useInLibrary.js +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (C) 2017-2020 Smart code 203358507 - -const React = require('react'); -const { useServices } = require('stremio/services'); -const useModelState = require('stremio/common/useModelState'); - -const mapLibraryState = (ctx) => { - return ctx.library; -}; - -const useInLibrary = (metaItem) => { - const { core } = useServices(); - const initLibraryState = React.useCallback(() => { - const ctx = core.transport.getState('ctx'); - return mapLibraryState(ctx); - }, []); - const library = useModelState({ - model: 'ctx', - init: initLibraryState, - map: mapLibraryState - }); - const addToLibrary = React.useCallback((metaItem) => { - core.transport.dispatch({ - action: 'Ctx', - args: { - action: 'AddToLibrary', - args: metaItem - } - }); - }, []); - const removeFromLibrary = React.useCallback((metaItem) => { - core.transport.dispatch({ - action: 'Ctx', - args: { - action: 'RemoveFromLibrary', - args: metaItem.id - } - }); - }, []); - const inLibrary = React.useMemo(() => { - return metaItem !== null && metaItem.id in library && !library[metaItem.id].removed; - }, [metaItem, library]); - const toggleInLibrary = React.useMemo(() => { - return metaItem !== null ? - () => inLibrary ? removeFromLibrary(metaItem) : addToLibrary(metaItem) - : - null; - }, [metaItem, inLibrary]); - return [inLibrary, toggleInLibrary]; -}; - -module.exports = useInLibrary; diff --git a/src/common/useToggleInLibrary.js b/src/common/useToggleInLibrary.js new file mode 100644 index 000000000..e1046eebf --- /dev/null +++ b/src/common/useToggleInLibrary.js @@ -0,0 +1,35 @@ +// Copyright (C) 2017-2020 Smart code 203358507 + +const React = require('react'); +const { useServices } = require('stremio/services'); + +const useToggleInLibrary = (metaItem) => { + const { core } = useServices(); + const addToLibrary = React.useCallback(() => { + core.transport.dispatch({ + action: 'Ctx', + args: { + action: 'AddToLibrary', + args: metaItem + } + }); + }, [metaItem]); + const removeFromLibrary = React.useCallback(() => { + core.transport.dispatch({ + action: 'Ctx', + args: { + action: 'RemoveFromLibrary', + args: metaItem.id + } + }); + }, [metaItem]); + return metaItem !== null ? + metaItem.inLibrary ? + removeFromLibrary + : + addToLibrary + : + null; +}; + +module.exports = useToggleInLibrary;