use $fetch for useApi

This commit is contained in:
axolotle 2023-08-01 14:55:03 +02:00
parent b82638f247
commit 7a18f54de9

View file

@ -1,7 +1,13 @@
import type { AsyncData } from 'nuxt/app'
import type { FetchError } from 'ofetch' import type { FetchError } from 'ofetch'
export async function useApi<T>( const apiEndpoint =
'https://' +
(process.dev
? useRuntimeConfig().public.apiIp || window.location.hostname
: window.location.hostname) +
'/yunohost/portalapi'
export function useApi<T>(
path: string, path: string,
{ {
method = 'GET', method = 'GET',
@ -10,30 +16,34 @@ export async function useApi<T>(
method?: 'GET' | 'POST' | 'PUT' | 'DELETE' method?: 'GET' | 'POST' | 'PUT' | 'DELETE'
body?: Record<string, any> body?: Record<string, any>
} = {}, } = {},
): Promise<AsyncData<T, FetchError | null>> { ) {
const host = window.location.hostname type Resp = {
const apiEndpoint = data: Ref<T | null>
'https://' + error: Ref<FetchError | null>
(process.dev ? useRuntimeConfig().public.apiIp || host : host) + }
'/yunohost/portalapi' const result: Resp = {
data: ref(null),
const result = await useFetch(apiEndpoint + path, { error: ref(null),
headers: {
'Content-Type': 'application/json',
'X-Requested-With': '',
},
method,
credentials: 'include',
body,
})
const error = result.error.value
if (error && error.statusCode === 401) {
useIsLoggedIn().value = false
navigateTo('/login')
} }
return result as AsyncData<T, FetchError | null> const query = () => {
return $fetch(apiEndpoint + path, {
method,
credentials: 'include',
body,
})
.then((data) => {
result.data.value = data as T
})
.catch((e: FetchError) => {
result.error.value = e
if (e.statusCode === 401) {
useIsLoggedIn().value = false
navigateTo('/login')
}
})
}
return Promise.resolve(query()).then(() => result)
} }
export interface UserData { export interface UserData {