UNPKG

@selfcommunity/react-core

Version:

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

71 lines (70 loc) 3.19 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 a payment product. ::: * @param object * @param object.id * @param object.paymentProduct * @param object.cacheStrategy */ function useSCFetchPaymentProduct({ id = null, paymentProduct = null, cacheStrategy = utils_1.CacheStrategies.NETWORK_ONLY, }) { const __paymentProductId = (0, react_1.useMemo)(() => (paymentProduct === null || paymentProduct === void 0 ? void 0 : paymentProduct.id) || id, [paymentProduct, id]); // CONTEXT const scUserContext = (0, SCUserProvider_1.useSCUser)(); const authUserId = (0, react_1.useMemo)(() => { var _a; return ((_a = scUserContext.user) === null || _a === void 0 ? void 0 : _a.id) || null; }, [scUserContext.user]); // CACHE const __paymentProductCacheKey = (0, react_1.useMemo)(() => (0, Cache_1.getPaymentProductObjectCacheKey)(__paymentProductId), [__paymentProductId]); const [scPaymentProduct, setScPaymentProduct] = (0, react_1.useState)(cacheStrategy !== utils_1.CacheStrategies.NETWORK_ONLY ? utils_1.LRUCache.get(__paymentProductCacheKey, paymentProduct) : null); const [error, setError] = (0, react_1.useState)(null); const setSCPaymentProduct = (0, react_1.useCallback)((c) => { setScPaymentProduct(c); utils_1.LRUCache.set(__paymentProductCacheKey, c); }, [setScPaymentProduct, __paymentProductCacheKey]); /** * Memoized fetch product */ const fetchPaymentProduct = (0, react_1.useMemo)(() => (id) => { return api_services_1.http .request({ url: api_services_1.Endpoints.GetPaymentProduct.url({ id }), method: api_services_1.Endpoints.GetPaymentProduct.method, }) .then((res) => { if (res.status >= 300) { return Promise.reject(res); } return Promise.resolve(res.data); }); }, []); /** * If id attempt to get the course by id */ (0, react_1.useEffect)(() => { if (id !== null && id !== undefined && !paymentProduct) { fetchPaymentProduct(id) .then((e) => { setSCPaymentProduct(e); }) .catch((err) => { utils_1.LRUCache.delete(__paymentProductCacheKey); utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, err.message); }); } }, [id, paymentProduct, authUserId]); (0, use_deep_compare_effect_1.useDeepCompareEffectNoCheck)(() => { if (paymentProduct) { setSCPaymentProduct(paymentProduct); } }, [paymentProduct, authUserId]); return { scPaymentProduct, setSCPaymentProduct, error }; } exports.default = useSCFetchPaymentProduct;