Files
payload/src/admin/hooks/usePayloadAPI.tsx
2020-11-20 13:39:18 -05:00

57 lines
1.3 KiB
TypeScript

import { useState, useEffect } from 'react';
import queryString from 'qs';
import { useLocale } from '../components/utilities/Locale';
import { requests } from '../api';
const usePayloadAPI = (url, options = {}) => {
const {
initialParams = {},
initialData = {},
onLoad,
} = options;
const [data, setData] = useState(initialData);
const [params, setParams] = useState(initialParams);
const [isLoading, setIsLoading] = useState(true);
const [isError, setIsError] = useState(false);
const locale = useLocale();
const search = queryString.stringify({
locale,
...params,
}, { depth: 10 });
useEffect(() => {
const fetchData = async () => {
setIsError(false);
setIsLoading(true);
try {
const response = await requests.get(`${url}?${search}`);
if (response.status > 201) {
setIsError(true);
}
const json = await response.json();
setData(json);
setIsLoading(false);
} catch (error) {
setIsError(true);
setIsLoading(false);
}
};
if (url) {
fetchData();
} else {
setIsError(false);
setIsLoading(false);
}
}, [url, locale, search, onLoad]);
return [{ data, isLoading, isError }, { setParams }];
};
export default usePayloadAPI;