UNPKG

@selfcommunity/react-core

Version:

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

90 lines (89 loc) 3.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const react_1 = require("react"); const Errors_1 = require("../constants/Errors"); const api_services_1 = require("@selfcommunity/api-services"); const utils_1 = require("@selfcommunity/utils"); const Cache_1 = require("../constants/Cache"); const use_deep_compare_effect_1 = require("use-deep-compare-effect"); const SCUserProvider_1 = require("../components/provider/SCUserProvider"); /** :::info This custom hook is used to fetch a group object. ::: * @param object * @param object.id * @param object.group * @param object.cacheStrategy */ function useSCFetchGroup({ id = null, group = null, cacheStrategy = utils_1.CacheStrategies.CACHE_FIRST, }) { const __groupId = group ? group.id : id; // CONTEXT const scUserContext = (0, SCUserProvider_1.useSCUser)(); const authUserId = scUserContext.user ? scUserContext.user.id : null; // CACHE const __groupCacheKey = (0, Cache_1.getGroupObjectCacheKey)(__groupId); const __group = authUserId ? group : (0, utils_1.objectWithoutProperties)(group, ['subscription_status']); const [scGroup, setScGroup] = (0, react_1.useState)(cacheStrategy !== utils_1.CacheStrategies.NETWORK_ONLY ? utils_1.LRUCache.get(__groupCacheKey, __group) : null); const [error, setError] = (0, react_1.useState)(null); const setSCGroup = (group) => { const _c = authUserId ? group : (0, utils_1.objectWithoutProperties)(group, ['subscription_status']); setScGroup(_c); utils_1.LRUCache.set(__groupCacheKey, _c); }; /** * Memoized fetchTag */ const fetchGroup = (0, react_1.useMemo)(() => () => { return api_services_1.http .request({ url: api_services_1.Endpoints.GetGroupInfo.url({ id: __groupId }), method: api_services_1.Endpoints.GetGroupInfo.method, }) .then((res) => { if (res.status >= 300) { return Promise.reject(res); } return Promise.resolve(res.data); }); }, [__groupId]); /** * Refresh group */ const refreshGroup = (0, react_1.useMemo)(() => () => { fetchGroup() .then((obj) => { setSCGroup(obj); }) .catch((err) => { utils_1.LRUCache.delete(__groupCacheKey); setError(`Error on refresh group with id ${id}`); utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, `Error on refresh group with id ${id}`); utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, err.message); }); }, [__groupCacheKey, setSCGroup]); /** * If id attempt to get the group by id */ (0, react_1.useEffect)(() => { if (__groupId && (!scGroup || (scGroup && __groupId !== scGroup.id))) { fetchGroup() .then((obj) => { setSCGroup(obj); }) .catch((err) => { utils_1.LRUCache.delete(__groupCacheKey); setError(`Group with id ${id} not found`); utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, `Group with id ${id} not found`); utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, err.message); }); } }, [__groupId, authUserId]); (0, use_deep_compare_effect_1.useDeepCompareEffectNoCheck)(() => { if (group) { setSCGroup(group); } }, [group, authUserId]); return { scGroup, setSCGroup, error, refreshGroup }; } exports.default = useSCFetchGroup;