UNPKG

@selfcommunity/react-core

Version:

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

73 lines (72 loc) 3.15 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 lesson object. ::: * @param object * @param object.id * @param object.lesson * @param object.cacheStrategy */ function useSCFetchLesson({ id = null, lesson = null, courseId = null, sectionId = null, cacheStrategy = utils_1.CacheStrategies.CACHE_FIRST, }) { const __lessonId = (0, react_1.useMemo)(() => (lesson === null || lesson === void 0 ? void 0 : lesson.id) || id, [lesson, 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 __lessonCacheKey = (0, react_1.useMemo)(() => (0, Cache_1.getLessonObjectCacheKey)(__lessonId), [__lessonId]); const [scLesson, setScLesson] = (0, react_1.useState)(cacheStrategy !== utils_1.CacheStrategies.NETWORK_ONLY ? utils_1.LRUCache.get(__lessonCacheKey, lesson) : null); const [error, setError] = (0, react_1.useState)(null); const setSCLesson = (lesson) => { setScLesson(lesson); utils_1.LRUCache.set(__lessonCacheKey, lesson); }; /** * Memoized fetchTag */ const fetchLesson = (0, react_1.useMemo)(() => (id) => { return api_services_1.http .request({ url: api_services_1.Endpoints.GetCourseLesson.url({ id: courseId, section_id: sectionId, lesson_id: id }), method: api_services_1.Endpoints.GetCourseLesson.method, }) .then((res) => { if (res.status >= 300) { return Promise.reject(res); } return Promise.resolve(res.data); }); }, [courseId, sectionId, id]); /** * If id attempt to get the lesson by id */ (0, react_1.useEffect)(() => { if (__lessonId && courseId && sectionId) { fetchLesson(__lessonId) .then((e) => { setSCLesson(e); }) .catch((err) => { utils_1.LRUCache.delete(__lessonCacheKey); setError(`Lesson with id ${__lessonId} not found`); utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, `Lesson with id ${__lessonId} not found`); utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, err.message); }); } }, [__lessonId, courseId, sectionId]); (0, use_deep_compare_effect_1.useDeepCompareEffectNoCheck)(() => { if (lesson) { setSCLesson(lesson); } }, [lesson, authUserId]); return { scLesson, setSCLesson, error }; } exports.default = useSCFetchLesson;