@selfcommunity/react-core
Version:
React Core Components useful for integrating UI Community components (react-ui).
90 lines (89 loc) • 3.58 kB
JavaScript
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;
;