@javelin/ecs
Version:
41 lines • 1.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useRequest = void 0;
const effect_1 = require("../../effect");
exports.useRequest = effect_1.createEffect(() => {
let state = { response: null, error: null, done: false };
let fetching = false;
let previousUrl;
let abortController = new (typeof window === "object" ? window : global).AbortController();
return function useRequest(url, options, invalidate = previousUrl !== undefined && url !== previousUrl) {
if (url === null || invalidate) {
abortController.abort();
abortController = new AbortController();
}
if (url === null) {
return state;
}
if (invalidate) {
state = { response: state.response, error: null, done: false };
}
if (state.done) {
return state;
}
if (!fetching) {
fetching = true;
previousUrl = url;
fetch(url, { ...options, signal: abortController.signal })
.then(response => {
state = { response, error: null, done: true };
})
.catch(error => {
state = { response: state.response, error, done: true };
})
.then(() => {
fetching = false;
});
}
return state;
};
});
//# sourceMappingURL=use_request.js.map