From 39c38c737114dc7f946b1895b2a4ba27a5546c60 Mon Sep 17 00:00:00 2001 From: HampusM Date: Tue, 6 Jul 2021 13:07:07 +0200 Subject: Migrated frontend to typescript --- packages/client/src/util/fetch.ts | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 packages/client/src/util/fetch.ts (limited to 'packages/client/src/util/fetch.ts') diff --git a/packages/client/src/util/fetch.ts b/packages/client/src/util/fetch.ts new file mode 100644 index 0000000..54f5afd --- /dev/null +++ b/packages/client/src/util/fetch.ts @@ -0,0 +1,37 @@ +import { Ref } from "vue"; + +export default async function(endpoint: string, fetch_failed: Ref, is_loading: Ref, data_name: string) { + const fetch_timeout = setTimeout(() => { + if(!fetch_failed.value) { + fetch_failed.value = `Failed to fetch ${data_name} data.`; + is_loading.value = false; + } + }, 5000); + + const data_req = await fetch(`${window.location.protocol}//${window.location.host}/api/v1/${endpoint}`).catch(() => { + if(!fetch_failed.value) { + fetch_failed.value = `Failed to fetch ${data_name} data.`; + is_loading.value = false; + clearTimeout(fetch_timeout); + } + return null; + }); + + if(data_req !== null) { + const data = await data_req.json().catch(() => { + fetch_failed.value = "Failed to parse server response."; + }); + + if(data_req.ok) { + clearTimeout(fetch_timeout); + is_loading.value = false; + return data.data; + } else { + fetch_failed.value = `Failed to fetch ${data_name} data.`; + } + } + + clearTimeout(fetch_timeout); + is_loading.value = false; + return null; +}; -- cgit v1.2.3-18-g5258