UNPKG

@selfcommunity/react-core

Version:

React Core Components useful for integrating UI Community components (react-ui).

77 lines (76 loc) 3.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const api_services_1 = require("@selfcommunity/api-services"); const utils_1 = require("@selfcommunity/utils"); const react_1 = require("react"); const use_deep_compare_effect_1 = require("use-deep-compare-effect"); const SCUserProvider_1 = require("../components/provider/SCUserProvider"); const Cache_1 = require("../constants/Cache"); const Errors_1 = require("../constants/Errors"); /** :::info This custom hook is used to fetch an liveStream object. ::: * @param object * @param object.id * @param object.liveStream * @param object.cacheStrategy */ function useSCFetchLiveStream({ id = null, liveStream = null, cacheStrategy = utils_1.CacheStrategies.CACHE_FIRST, }) { const __eventId = liveStream ? liveStream.id : id; // CONTEXT const scUserContext = (0, SCUserProvider_1.useSCUser)(); const authUserId = scUserContext.user ? scUserContext.user.id : null; // CACHE const __liveStreamCacheKey = (0, Cache_1.getLiveStreamObjectCacheKey)(__eventId); const __liveStream = authUserId ? liveStream : (0, utils_1.objectWithoutProperties)(liveStream, ['subscription_status']); const [scLiveStream, setScLiveStream] = (0, react_1.useState)(cacheStrategy !== utils_1.CacheStrategies.NETWORK_ONLY ? utils_1.LRUCache.get(__liveStreamCacheKey, __liveStream) : null); const [error, setError] = (0, react_1.useState)(null); /** * Memoized setSCLiveStream (auto-subscription if need it) */ const setSCLiveStream = (0, react_1.useMemo)(() => (e) => { setScLiveStream(e); utils_1.LRUCache.set(__liveStreamCacheKey, e); }, [authUserId, setScLiveStream]); /** * Memoized fetchTag */ const fetchLiveStream = (0, react_1.useMemo)(() => (id) => { return api_services_1.http .request({ url: api_services_1.Endpoints.GetLiveStreamInfo.url({ id }), method: api_services_1.Endpoints.GetLiveStreamInfo.method, }) .then((res) => { if (res.status >= 300) { return Promise.reject(res); } return Promise.resolve(res.data); }); }, []); /** * If id attempt to get the liveStream by id */ (0, react_1.useEffect)(() => { if (id !== null && id !== undefined && !liveStream) { fetchLiveStream(id) .then((e) => { setSCLiveStream(e); }) .catch((err) => { utils_1.LRUCache.delete(__liveStreamCacheKey); setError(`LiveStream with id ${id} not found`); utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, `LiveStream with id ${id} not found`); utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, err.message); }); } }, [id, liveStream, authUserId]); (0, use_deep_compare_effect_1.useDeepCompareEffectNoCheck)(() => { if (liveStream) { setSCLiveStream(liveStream); } }, [liveStream, authUserId]); return { scLiveStream, setSCLiveStream, error }; } exports.default = useSCFetchLiveStream;