UNPKG

@selfcommunity/react-core

Version:

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

49 lines (46 loc) 1.72 kB
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;