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