@selfcommunity/react-core
Version:
React Core Components useful for integrating UI Community components (react-ui).
49 lines (46 loc) • 1.72 kB
JavaScript
import { __awaiter } from "tslib";
import { useEffect, useState } from 'react';
import { SCOPE_SC_CORE } from '../constants/Errors';
import { Endpoints, http } from '@selfcommunity/api-services';
import { Logger } from '@selfcommunity/utils';
/**
:::info
This custom hook is used to fetch users.
:::tip Context can be consumed in this way:
```jsx
const {users, isLoading} = useSCFetchUsers();
```
:::
* @param props
*/
const useSCFetchUsers = (props) => {
const { search = '', exclude = '' } = props || {};
const [data, setData] = useState({ users: [], isLoading: false });
const fetchUsers = (next = Endpoints.UserAutocomplete.url(), searchParam, excludeParam) => __awaiter(void 0, void 0, void 0, function* () {
const response = yield http.request({
url: next,
method: Endpoints.UserAutocomplete.method,
params: Object.assign({ search: searchParam }, (excludeParam && { exclude: excludeParam })),
});
const result = response.data;
if (result.next) {
return result.results.concat(yield fetchUsers(result.next, searchParam, excludeParam));
}
return result.results;
});
useEffect(() => {
if (!search)
return;
fetchUsers(undefined, search, exclude)
.then((users) => {
setData({ users, isLoading: false });
})
.catch((error) => {
console.error(error);
Logger.error(SCOPE_SC_CORE, 'Unable to retrieve users');
setData((prev) => (Object.assign(Object.assign({}, prev), { isLoading: false })));
});
}, [search, exclude]);
return data;
};
export default useSCFetchUsers;