Newer
Older
import React, { useState, useContext, useEffect } from "react";
import { Spinner, Alert, Row } from "react-bootstrap";
import AuthContext from "./AuthContext";
function Fetcher({ url, refetch, oneShot, onFetch, children }) {
const [isLoading, setIsLoading] = useState(true);
const [error, setError] = useState(null);
const auth = useContext(AuthContext);
useEffect(() => {
const fetchUrl = () => {
fetch(cleanUrl(url), {
headers: { "x-authentication": auth.token },
})
.then((response) => {
if (!response.ok) {
throw new Error(
response.status.toString() + " " + response.statusText
);
}
return response.json();
})
.then((data) => {
setIsLoading(false);
onFetch(data);
setError(null);
})
.catch((e) => {
setError(e.message);
setIsLoading(false);
});
var clean = () => {};
fetchUrl();
if (!oneShot) {
const timerID = setInterval(
() => fetchUrl(),
return clean;
}, [url, refetch, oneShot, onFetch, auth.token]);
if (isLoading) {
return (
<Row className="justify-content-md-center">
<Spinner animation="border" />
</Row>
);
if (error != null) {
console.log(error);
return (
<Alert variant="danger">
Ha ocurrido un error cargando datos: {error}
</Alert>
);