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