UNPKG

@selfcommunity/react-core

Version:

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

82 lines (81 loc) 3.06 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 SCUserProvider_1 = require("../components/provider/SCUserProvider"); /** :::info This custom hook is used to fetch a user object. ::: * @param object * @param object.id * @param object.user */ function useSCFetchUser({ id = null, user = null }) { // CONTEXT const scUserContext = (0, SCUserProvider_1.useSCUser)(); const authUserId = scUserContext.user ? scUserContext.user.id : null; const __user = (0, react_1.useMemo)(() => (authUserId ? user : (0, utils_1.objectWithoutProperties)(user, ['connection_status'])), [user]); const [scUser, setSCUser] = (0, react_1.useState)(__user); const [error, setError] = (0, react_1.useState)(null); const [refreshing, setRefreshing] = (0, react_1.useState)(false); /** * Memoized fetchUser */ const fetchUser = (0, react_1.useMemo)(() => () => { return api_services_1.http .request({ url: api_services_1.Endpoints.User.url({ id: user ? user.id : id }), method: api_services_1.Endpoints.User.method, }) .then((res) => { if (res.status >= 300) { return Promise.reject(res); } return Promise.resolve(res.data); }); }, [id, user]); /** * Memoized refresh */ const refresh = (0, react_1.useMemo)(() => () => { if (!refreshing) { setRefreshing(true); return fetchUser() .then((obj) => { setRefreshing(false); setSCUser(authUserId ? obj : (0, utils_1.objectWithoutProperties)(obj, ['connection_status'])); }) .catch((err) => { setRefreshing(false); setError(`Unable to refresh user with id ${id}`); utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, `Unable to refresh user with id ${id}`); utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, err.message); }); } return Promise.reject(); }, [fetchUser, refreshing]); /** * If id resolve the obj */ (0, react_1.useEffect)(() => { if (id) { fetchUser() .then((obj) => { setSCUser(authUserId ? obj : (0, utils_1.objectWithoutProperties)(obj, ['connection_status'])); }) .catch((err) => { setError(`User with id ${id} not found`); utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, `User with id ${id} not found`); utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, err.message); }); } else { setSCUser(__user); } }, [id, __user]); return { scUser, setSCUser, refresh, refreshing, error }; } exports.default = useSCFetchUser;